+
    ÖÇÜhzN ã                   ó  € R t ^ RIt^ RIt^ RIHtHtHtHtH	t	H
t
HtHtHtHt ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHtHtHt ^ RIHtHtHtHtH t H!t! ^ RI"H#t#H$t$ ^ R	I%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/ ^ R
I0H1t1 ^ RI2H3t3  ! R R]4      t4 ! R R4      t5 ! R R4      t6 ! R R4      t7 ! R R4      t8 ! R R4      t9 ! R R]9].4      t: ! R R]9]'4      t; ! R R]9]&4      t< ! R R]9]+4      t= ! R  R!4      t>R" t?]@R#8X  d   ]?! 4        R$.tAR# )%aÒ  
A graphical tool for exploring chart parsing.

Chart parsing is a flexible parsing algorithm that uses a data
structure called a "chart" to record hypotheses about syntactic
constituents.  Each hypothesis is represented by a single "edge" on
the chart.  A set of "chart rules" determine when new edges can be
added to the chart.  This set of rules controls the overall behavior
of the parser (e.g. whether it parses top-down or bottom-up).

The chart parsing tool demonstrates the process of parsing a single
sentence, with a given grammar and lexicon.  Its display is divided
into three sections: the bottom section displays the chart; the middle
section displays the sentence; and the top section displays the
partial syntax tree corresponding to the selected edge.  Buttons along
the bottom of the window are used to control the execution of the
algorithm.

The chart parsing tool allows for flexible control of the parsing
algorithm.  At each step of the algorithm, you can select which rule
or strategy you wish to apply.  This allows you to experiment with
mixing different strategies (e.g. top-down and bottom-up).  You can
exercise fine-grained control over the algorithm by selecting which
edge you wish to apply a rule to.
N)
ÚButtonÚCanvasÚCheckbuttonÚFrameÚIntVarÚLabelÚMenuÚ	ScrollbarÚTkÚToplevel)ÚaskopenfilenameÚasksaveasfilename)ÚFont)Ú	showerrorÚshowinfo)Ú	CFGEditorÚTreeSegmentWidgetÚtree_to_treesegment)ÚCanvasFrameÚColorizedListÚEntryDialogÚMutableOptionMenuÚShowTextÚSymbolWidget)ÚCFGÚNonterminal)
ÚBottomUpPredictCombineRuleÚBottomUpPredictRuleÚChartÚLeafEdgeÚLeafInitRuleÚSingleEdgeFundamentalRuleÚSteppingChartParserÚTopDownInitRuleÚTopDownPredictRuleÚTreeEdge)ÚTree)Úin_idlec                   óR   a € ] tR t^[t o ]P
                  R,          tR tR tRt	V t
R# )ÚEdgeListÚ
rightarrowc                ó¢   € VP                  R RR7       VP                  RRRR7       VP                  RRR7       VP                  R	R
RR7       R# )Úterminalz#006000)Ú
foregroundÚarrowÚsymbolÚ0)ÚfontÚ	underlineÚdotz#000000ÚnonterminalÚblue)r-   r1   N)Ú	helveticaéôÿÿÿÚbold)Ú
tag_config)ÚselfÚ
textwidgetÚoptionss   &&&Ú:/usr/lib/python3/dist-packages/nltk/app/chartparser_app.pyÚ_init_colortagsÚEdgeList._init_colortags^   sX   € Ø×Ñ˜j°YÐÔ?Ø×Ñ˜g¨HÀÐÔDØ×Ñ˜e°	ÐÔ:Ø×ÑØ fÐ3Mð 	ö 	
ó    c                ó$  € . pVP                  R VP                  4       ,          R34       VP                  V P                  R34       \        VP	                  4       4       F„  w  r4W1P                  4       8X  d   VP                  R4       \        V\        4      '       d+   VP                  RVP                  4       ,          R34       Kj  VP                  RV,          R34       K†  	  VP                  4       '       d   VP                  R4       V# )z%s	r4   r.   z %sz %rr,   )z *r3   )
ÚappendÚlhsÚARROWÚ	enumerateÚrhsr3   Ú
isinstancer   r/   Úis_complete)r:   ÚitemÚcontentsÚiÚelts   &&   r=   Ú
_item_reprÚEdgeList._item_reprf   sÆ   € ØˆØ�‰˜ $§(¡(£*Õ,¨mÐ<Ô=Ø�‰˜Ÿ™ WÐ-Ô.Ü §¡£
Ö+‰FˆAØ—H‘H“JŒØ—‘ Ô.Ü˜#œ{×+Ò+Ø—‘ ¨¯©«Õ!5°}Ð EÖFà—‘ ¨¥¨jÐ 9Ö:ñ ,ð ×Ñ×ÒØ�O‰O˜MÔ*Øˆr@   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚSYMBOLSrD   r>   rM   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r=   r)   r)   [   s$   ø‡ € Ø× Ñ  Õ.€Eò
÷ð r@   r)   c                   ó´   a € ] tR t^{t o RtRR ltR tR tR tR t	R t
R tR	 tR
 tR tR tRR ltR tR tR tR tR tR tRR ltR tR tR tRtV tR# )ÚChartMatrixViewzK
A view of a chart that displays the contents of the corresponding matrix.
c                óD  € W n         . V n        . V n        R V n        V'       dn   \	        V4      V n        V P
                  P                  V4       V P
                  P                  RV P                  4       V P                  V P
                  4       M\        V4      V n        V P                  V P
                  4       V P                  V P
                  4       V'       d   V P                  V P
                  4       MR V n        / V n        ^ V n        V P#                  4        R # )Nú<Control-q>)Ú_chartÚ_cellsÚ_marksÚ_selected_cellr   Ú_rootÚtitleÚbindÚdestroyÚ
_init_quitr   Ú_init_matrixÚ
_init_listÚ_init_numedgesÚ_numedges_labelÚ
_callbacksÚ
_num_edgesÚdraw)r:   ÚparentÚchartÚtoplevelrb   Úshow_numedgess   &&&&&&r=   Ú__init__ÚChartMatrixView.__init__€   sÇ   € ð ŒØˆŒØˆŒà"ˆÔçÜ! &Ó)ˆDŒJØ�J‰J×Ñ˜UÔ#Ø�J‰J�O‰O˜M¨4¯<©<Ô8Ø�O‰O˜DŸJ™JÕ'ä˜v›ˆDŒJà×Ñ˜$Ÿ*™*Ô%Ø�‰˜Ÿ
™
Ô#ßØ×Ñ §
¡
Õ+à#'ˆDÔ àˆŒàˆŒà�	‰	Žr@   c                ó^   € \        VR V P                  R7      pVP                  R^ RR7       R# )ÚQuit©ÚtextÚcommandÚbottomÚnone©ÚsideÚexpandÚfillN)r   rd   Úpack)r:   ÚrootÚquits   && r=   re   ÚChartMatrixView._init_quitž   s&   € Ü�d °·±Ô>ˆØ�	‰	�x¨°ˆ	Ö7r@   c                ó°   € \        V^RR7      pVP                  ^ R^^RR7       \        V^È^ÈRR7      V n        V P                  P                  ^ RR7       R	# )
é   Úsunken©ÚborderÚreliefry   Útop)r|   r}   ÚpadxÚpadyr{   Úwhite)ÚwidthÚheightÚ
background)r|   r}   N)r   r~   r   Ú_canvas)r:   r   Úcframes   && r=   rf   ÚChartMatrixView._init_matrix¢   sO   € Ü�t A¨hÔ7ˆØ�‰˜1 6°¸ÀˆÔFÜ˜f¨C¸ÈÔPˆŒØ�‰×Ñ ¨ÐÖ0r@   c                óf   € \        VR R7      V n        V P                  P                  ^ RRR7       R# )z0 edges©rv   ry   rˆ   )r|   r}   r{   N)r   ri   r~   ©r:   r   s   &&r=   rh   ÚChartMatrixView._init_numedges¨   s,   € Ü$ T°	Ô:ˆÔØ×Ñ×!Ñ!¨°¸eÐ!ÖDr@   c                óä   € \        V. ^^R7      V n        V P                  P                  R^R^R7       V 3R lpV P                  P                  RV4       V P                  P	                  4        R# )é   )rŒ   r�   rˆ   Úboth)r{   r|   r}   rŠ   c                 ó*   € VP                  R V 4       R# ©ÚselectN©Ú_fire_callbacks)Úedger:   s   &&r=   ÚcbÚ&ChartMatrixView._init_list.<locals>.cb°   ó   € Ø× Ñ  ¨4Ö0r@   r›   N)r)   Ú_listr~   Úadd_callbackÚfocus)r:   r   rŸ   s   && r=   rg   ÚChartMatrixView._init_list¬   sZ   € Ü˜d B¨b¸Ô;ˆŒ
Ø�
‰
�‰˜U¨1°6ÀˆÔBàô 	1ð 	�
‰
×Ñ ¨"Ô-Ø�
‰
×ÑÖr@   c                óx   € V P                   f   R #  V P                   P                  4        R T n         R #     L; i©N©ra   rd   ©r:   Úes   &*r=   rd   ÚChartMatrixView.destroy¶   ó7   € Ø�:‰:ÒÙð	Ø�J‰J×ÑÔ ð ˆŽ
øð	Ùúó   ’5 µ9c                ób   € WP                   Jd    Wn         ^ V n        V P                  4        R# R# ©é    N)r]   rk   rl   ©r:   rn   s   &&r=   Ú	set_chartÚChartMatrixView.set_chart¿   s&   € ØŸ™Ó#ØŒKØˆDŒOØ�I‰IŽKñ $r@   c                ó,  € V P                   f   R # \        V P                  4      p\        V4       UUu. uF  p\        V4       Uu. uF  p^ NK  	  upNK   	  pppV P                   F:  pWEP                  4       ,          VP                  4       ;;,          ^,          uu&   K<  	  \        V4       EF;  p\        W14       EF'  pWC,          V,          ^ 8X  d   RpMjRP                  \        ^ÿ^2^€WC,          V,          ,          ^
,          ,           4      \        ^ ^€^€WC,          V,          ,          ^
,          ,
          4      4      pV P                  V,          V,          pV P                  P                  WvR7       W23V P                  8X  d=   V P                  P                  VR^R7       V P                  P                  V4       EK	  V P                  P                  VR^R7       EK*  	  EK>  	  \        V P                  P                  V P                  R7      4      pV P                   P#                  V4       V P                  P%                  4       V n        V P(                  e#   RV P&                  ,          V P(                  R	&   R # R # u upi u uppi )
NÚgray20z#00{:02x}{:02x}©r}   z#00ffff)ÚoutlinerŒ   Úblack)Úspanz%d edgesrv   )ra   Úlenr^   Úranger]   ÚstartÚendÚformatÚminÚmaxr�   Ú
itemconfigr`   Ú	tag_raiseÚlistr›   r¢   ÚsetÚ	num_edgesrk   ri   )	r:   ÚNÚjrK   Ú
cell_edgesrž   ÚcolorÚcell_tagÚedgess	   &        r=   ÚupdateÚChartMatrixView.updateÅ   sò  € Ø�:‰:ÒÙô �—‘ÓˆÜ5:¸1´XÔ>±X°¤%¨¤(Ó+¡(˜Q“q¡(Ô+±Xˆ
Ñ>Ø—K”KˆDØ—z‘z“|Õ$ T§X¡X£Z×0°AÕ5Õ0ñ  ô �q—ˆAÜ˜1—[�Ø•= Õ# qÔ(Ø$‘Eà-×4Ñ4Ü˜C  c¨J­M¸!Õ,<Õ&<¸rÕ&AÕ!AÓBÜ˜A˜s S¨:­=¸Õ+;Õ%;¸bÕ%@Õ@ÓAó�Eð  Ÿ;™; q�>¨!Õ,�Ø—‘×'Ñ'¨Ð'Ô=Ø�6˜T×0Ñ0Ô0Ø—L‘L×+Ñ+¨H¸iÈqÐ+ÔQØ—L‘L×*Ñ*¨8×4à—L‘L×+Ñ+¨H¸gÈQÐ+×Oô !ñ ô$ �T—[‘[×'Ñ'¨T×-@Ñ-@Ð'ÓAÓBˆØ�
‰
�‰�uÔð Ÿ+™+×/Ñ/Ó1ˆŒØ×ÑÒ+Ø+5¸¿¹Õ+GˆD× Ñ  Ó(ñ ,ùò9 ,ùÓ>s   ´JÁJÁJÊJc                ó`   € V P                   P                  R RR7       V P                  4        R# )ÚinactiveboxÚhidden©ÚstateN©r�   rÁ   rÌ   ©r:   s   &r=   ÚactivateÚChartMatrixView.activateê   ó"   € Ø�‰×Ñ °XÐÔ>Ø�‰Žr@   c                ó`   € V P                   P                  R RR7       V P                  4        R# )rÏ   ÚnormalrÑ   NrÓ   rÔ   s   &r=   Ú
inactivateÚChartMatrixView.inactivateî   r×   r@   c                óD   € ^V P                   P                  V/ 4      V&   R# ©é   N©rj   Ú
setdefault©r:   ÚeventÚfuncs   &&&r=   r£   ÚChartMatrixView.add_callbackò   ó   € Ø67ˆ�‰×"Ñ" 5¨"Ó-¨dÓ3r@   Nc                óf   € Vf   V P                   V R #  V P                   V,          V R #     R # ; ir§   ©rj   rá   s   &&&r=   Úremove_callbackÚChartMatrixView.remove_callbackõ   ó3   € ØŠ<Ø—‘ Ò&ðØ—O‘O EÕ*¨4Ò0øðÚúó   •+ «0c                ó˜   € WP                   9  d   R # \        V P                   V,          P                  4       4       F	  pV! V!   K  	  R # r§   ©rj   rÃ   Úkeys©r:   râ   ÚargsÚcb_funcs   &&* r=   r�   ÚChartMatrixView._fire_callbacksþ   ó7   € ØŸ™Ô'ÙÜ˜DŸO™O¨EÕ2×7Ñ7Ó9Ö:ˆGÙ�TŒNó ;r@   c                óô   € V P                   f   R # W3V P                  8X  d,   V P                  P                  4       V P                  8X  d   R # W3V n        V P                  4        V P                  RW4       R # )NÚselect_cell)ra   r`   r]   rÅ   rk   rÌ   r�   ©r:   rK   rÇ   s   &&&r=   rõ   ÚChartMatrixView.select_cell  sa   € Ø�:‰:ÒÙð ˆ6�T×(Ñ(Ô(¨T¯[©[×-BÑ-BÓ-DÈÏÉÔ-WÙà ˜fˆÔØ�‰Œð 	×Ñ˜]¨AÖ1r@   c                óŠ   € V P                   f   R # R V n        V P                  P                  . 4       V P	                  4        R # r§   )ra   r`   r¢   rÄ   rÌ   rÔ   s   &r=   Údeselect_cellÚChartMatrixView.deselect_cell  s0   € Ø�:‰:ÒÙØ"ˆÔØ�
‰
�‰�rÔØ�‰Žr@   c                óp   € V P                   W38X  d   V P                  4        R # V P                  W4       R # r§   )r`   rù   rõ   rö   s   &&&r=   Ú_click_cellÚChartMatrixView._click_cell  s,   € Ø×Ñ 1 &Ô(Ø×ÑÖ à×Ñ˜QÖ"r@   c                óx   € V P                   ! VP                  4       !   V P                  P                  V4       R # r§   )rõ   r¹   r¢   Úview©r:   rž   s   &&r=   Ú	view_edgeÚChartMatrixView.view_edge   s&   € Ø×Ò˜$Ÿ)™)›+Ò&Ø�
‰
�‰˜Ör@   c                ó˜   € V P                   f   R # V P                  ! VP                  4       !   V P                  P	                  V4       R # r§   )ra   rõ   r¹   r¢   Úmarkr   s   &&r=   Ú	mark_edgeÚChartMatrixView.mark_edge$  s3   € Ø�:‰:ÒÙØ×Ò˜$Ÿ)™)›+Ò&Ø�
‰
�‰˜Ör@   c                ó\   € V P                   f   R # V P                  P                  V4       R # r§   )ra   r¢   Úunmarkr   s   &&r=   Úunmark_edgeÚChartMatrixView.unmark_edge*  s!   € Ø�:‰:ÒÙØ�
‰
×Ñ˜$Ör@   c                ó˜   € V P                   f   R # V P                  ! VP                  4       !   V P                  P	                  V4       R # r§   )ra   rõ   r¹   r¢   Úmarkonlyr   s   &&r=   Úmarkonly_edgeÚChartMatrixView.markonly_edge/  s5   € Ø�:‰:ÒÙØ×Ò˜$Ÿ)™)›+Ò&Ø�
‰
×Ñ˜DÖ!r@   c           
     óÆ  € V P                   f   R # ^;r^pV P                  pVP                  R4       V P                  P	                  4       ^,           p\        VR,          4      V,
          V,          p\        VR,          4      V,
          V,
          V,          pVP                  R4       \        V4       EF  pVP                  V^,
          W‡,          V^,          ,           V,           \        V4      RR7       VP                  W†,          V^,          ,           V,           WW,          V,           ^,           \        V4      RR7       VP                  VWx^,           ,          V,           We,          V,           Wx^,           ,          V,           RR7       VP                  Wh,          V,           VWh,          V,           Wu,          V,           RR7       EK  	  VP                  WWV,          ,           Wu,          V,           ^R	7       \        V4       U	Uu. uF  p	\        V4       Uu. uF  pR NK  	  upNK   	  upp	V n        \        V4       Fž  p\        W…4       FŒ  p	VP                  W–,          V,           W‡,          V,           V	^,           V,          V,           V^,           V,          V,           R
R7      p
W P                  V,          V	&   WV	3R lpVP                  V
RV4       KŽ  	  K   	  \        VR,          4      \        VR,          4      rÜVP                  RRV^d,           V^d,           RRRR7      p
VP                  V
4       V P                  4        R # u upi u upp	i )NÚallrŒ   r�   rª   )rv   ÚanchorÚnÚ.)Údash©rŒ   rµ   r¶   c                 ó(   € VP                  W#4       R # r§   )rü   )râ   r:   rK   rÇ   s   &&&&r=   rŸ   Ú ChartMatrixView.draw.<locals>.cbn  s   € Ø×$Ñ$ QÖ*r@   ú
<Button-1>Úgray50rÐ   rÏ   )r}   rÒ   Útagiœÿÿÿ)ra   r�   Údeleter]   Ú
num_leavesÚintr»   Úcreate_textÚreprÚcreate_lineÚcreate_rectangler^   Útag_bindÚ	tag_lowerrÌ   )r:   ÚLEFT_MARGINÚ
BOT_MARGINÚ
TOP_MARGINÚcrÆ   ÚdxÚdyrK   rÇ   ÚtrŸ   ÚxmaxÚymaxs   &             r=   rl   ÚChartMatrixView.draw5  sÚ  € Ø�:‰:ÒÙØ#%Ð%ˆØˆ
Ø�L‰LˆØ	�‰�ŒØ�K‰K×"Ñ"Ó$ qÕ(ˆÜ�!�G•*‹o Õ+¨qÕ0ˆÜ�!�H•+Ó Õ+¨jÕ8¸AÕ=ˆà	�‰�Œô �q—ˆAØ�M‰MØ˜a• ¥¨"¨q­&¥°:Õ!=ÄDÈÃGÐTWð ô ð �M‰MØ•˜˜a�• +Õ-Ø•˜Õ# aÕ'Ü˜!“WØð	 ô ð �M‰MØØ˜!•e•˜zÕ)Ø•˜Õ$Ø˜!•e•˜zÕ)Øð ô ð �M‰MØ•˜Õ$ØØ•˜Õ$Ø•˜Õ#Øð ÷ ñ# ð4 	
×ÑØ [¸µ6Õ%9¸2½6ÀJÕ;NÐVWð 	ô 	
ô
 :?¸q¼ÔB¹°A¤e¨A¤hÓ/¡h ›¡hÔ/¹ÒBˆŒÜ�q–ˆAÜ˜1–[�Ø×&Ñ&Ø•F˜[Õ(Ø•F˜ZÕ'Ø˜•U˜b•L ;Õ.Ø˜•U˜b•L :Õ-Ø!ð 'ó �ð %&—‘˜A•˜qÑ!à#'°ô +ð —
‘
˜1˜l¨BÖ/ó !ñ ô" ˜˜7�“_¤c¨!¨H­+Ó&6ˆdØ×ÑØØØ�3�JØ�3�JØØØð ó 
ˆð 	
�‰�AŒð 	�‰Žùò? 0ùÓBs   ÈMÈ$MÈ/MÍMc                ó>   € V P                   P                  ! V/ VB  R # r§   ©ra   r~   ©r:   rð   Úkwargss   &*,r=   r~   ÚChartMatrixView.packƒ  ó   € Ø�
‰
�Š˜Ð( Ô(r@   )
rj   r�   r^   r]   r¢   r_   rk   ri   ra   r`   )TúChart MatrixFr§   )rP   rQ   rR   rS   Ú__doc__rq   re   rf   rh   rg   rd   r²   rÌ   rÕ   rÚ   r£   rè   r�   rõ   rù   rü   r  r  r	  r  rl   r~   rU   rV   rW   s   @r=   rZ   rZ   {   s‚   ø‡ € ñôò<8ò1òEòòòò#HòJòò8ôòò2òò#òòô ò
"òL÷\)ð )r@   rZ   c                   óp   a € ] tR tRt o RR ltRR ltR tR tR tR t	R	 t
R
 tR tR tR tR tRtV tR# )ÚChartResultsViewiŒ  c                ó  € W n         W0n        . V n        ^
V n        . V n        RV n        RV n        V'       dS   \        V4      V n        V P                  P                  R4       V P                  P                  RV P                  4       M\        V4      V n        V'       d¢   \        V P                  4      pVP                  R^ RR7       \        VRV P                  R7      P                  R	R
7       \        VRV P                  R7      P                  RR
7       \        VRV P                   R7      P                  RR
7       \#        V P                  ^R7      V n        V P$                  P                  R^RR7       V P'                  4        R# )é
   Nz!Chart Parser Application: Resultsr\   rx   Úxrz   rt   ru   Úright©r{   z	Print AllÚleftzPrint Selection)Úcloseenoughrˆ   r˜   )r]   Ú_grammarÚ_treesÚ_yÚ_treewidgetsÚ
_selectionÚ
_selectboxr   ra   rb   rc   rd   r   r~   r   Ú	print_allÚprint_selectionr   Ú_cframerÌ   )r:   rm   rn   Úgrammarro   Úbuttonss   &&&&& r=   rq   ÚChartResultsView.__init__�  s4  € ØŒØŒØˆŒØˆŒØˆÔØˆŒØˆŒçÜ! &Ó)ˆDŒJØ�J‰J×ÑÐ@ÔAØ�J‰J�O‰O˜M¨4¯<©<Õ8ä˜v›ˆDŒJ÷ Ü˜DŸJ™JÓ'ˆGØ�L‰L˜h¨q°sˆLÔ;Ü�7 °·±Ô>×CÑCÈÐCÔQÜ�7 °d·n±nÔE×JÑJÐPVÐJÔWÜ�7Ð!2¸D×<PÑ<PÔQ×VÑVØð Wô ô
 # 4§:¡:¸2Ô>ˆŒØ�‰×Ñ˜u¨Q°VÐÔ<ð 	�‰Žr@   Nc                ó¨  € V P                   f   R # Vea   VP                  4       V P                  P                  4       8w  d   R # VP	                  4       ^ V P
                  P                  4       38w  d   R # V P
                  P                  V P                  P                  4       4       F&  pW P                  9  g   K  V P                  V4       K(  	  R # r§   )
ra   rC   r?  r¼   r¹   r]   r  Úparsesr@  Ú_add)r:   rž   Úparses   && r=   rÌ   ÚChartResultsView.update®  s’   € Ø�:‰:ÒÙàÒØ�x‰x‹z˜TŸ]™]×0Ñ0Ó2Ô2ÙØ�y‰y‹{˜q $§+¡+×"8Ñ"8Ó":Ð;Ô;Ùà—[‘[×'Ñ'¨¯©×(;Ñ(;Ó(=Ö>ˆEØŸK™KÖ'Ø—	‘	˜%Ö ó ?r@   c                ó†  € V P                   P                  V4       V P                  P                  4       p\	        W!4      pV P
                  P                  V4       V P                  P                  V^
V P                  4       VP                  V P                  4       VP                  4       ^,          ^
,           V n        R# )r9  N)r@  rB   rG  Úcanvasr   rB  Ú
add_widgetrA  Ú
bind_clickÚ_clickÚbbox)r:   rN  r'  Ú
treewidgets   &&  r=   rM  ÚChartResultsView._add¼  s�   € à�‰×Ñ˜5Ô!ð �L‰L×ÑÓ!ˆÜ(¨Ó2ˆ
ð 	×Ñ× Ñ  Ô,Ø�‰×Ñ 
¨B°·±Ô8ð 	×Ñ˜dŸk™kÔ*ð —/‘/Ó# AÕ&¨Õ+ˆŽr@   c           	     óò   € V P                   P                  4       pV P                  e   VP                  V P                  4       Wn        VP                  4       w  r4rVVP                  W4WV^RR7      V n        R # )Nz#088)rŒ   r·   )rG  rQ  rC  r  rD  rU  r!  )r:   Úwidgetr'  Úx1Úy1Úx2Úy2s   &&     r=   rT  ÚChartResultsView._clickÎ  s^   € Ø�L‰L×ÑÓ!ˆØ�?‰?Ò&Ø�H‰H�T—_‘_Ô%Ø ŒØ!Ÿ;™;›=Ñˆ�Ø×,Ñ,¨R°RÀ1ÈfÐ,ÓUˆŽr@   c                ó²   € W!P                  4       R &   VP                  4        F0  p\        V\        4      '       d   V P	                  W24       K,  W#R &   K2  	  R# )rÉ   N)ÚlabelÚsubtreesrG   r   Ú_color)r:   rV  rÉ   Úchilds   &&& r=   rb  ÚChartResultsView._colorÖ  sG   € Ø&+×ÑÓ˜7Ñ#Ø×(Ñ(Ö*ˆEÜ˜%Ô!2×3Ò3Ø—‘˜EÖ)à!&�g“ó	 +r@   c                óZ   € V P                   f   R # V P                  P                  4        R # r§   )ra   rG  Úprint_to_filer©   s   &*r=   rE  ÚChartResultsView.print_allÞ  s   € Ø�:‰:ÒÙØ�‰×"Ñ"Ö$r@   c                ó¶  € V P                   f   R # V P                  f   \        RR4       R # V P                  P	                  4       pV P
                   F/  pW0P                  Jg   K  V P                  P                  V4       K1  	  VP                  V P                  4       V P                  P                  4       w  rErgV P                  P                  ^
V,
          ^
V,
          4       RWd,
          ^,            RWu,
          ^,            2VR&   V P                  P                  4        V P                  .V n        V P                  4        V P                  4        R # )NzPrint ErrorzNo tree selectedz0 0 Ú Úscrollregion)ra   rC  r   rG  rQ  rB  Údestroy_widgetr  rD  rU  Úmoverf  ÚclearrÌ   )r:   rª   r'  rY  rZ  r[  r\  r]  s   &*      r=   rF  Ú ChartResultsView.print_selectionã  sý   € Ø�:‰:ÒÙØ�?‰?Ò"Ü�mÐ%7Ö8à—‘×#Ñ#Ó%ˆAØ×+Ô+�Ø§¡Õ0Ø—L‘L×/Ñ/°Ö7ñ ,ð �H‰H�T—_‘_Ô%Ø#Ÿ™×3Ñ3Ó5ÑˆR�RØ�O‰O× Ñ   b¥¨"¨r­'Ô2Ø"& r¥w°¥| n°A°bµgÀµl°^Ð DˆAˆnÑØ�L‰L×&Ñ&Ô(ð "&§¡Ð 1ˆDÔØ�J‰JŒLØ�K‰KŽMr@   c                ó<  € V P                   f   R # V P                   F  pV P                  P                  V4       K   	  . V n        . V n        V P
                  e4   V P                  P                  4       P                  V P                  4       R V n        ^
V n	        R # r§   )
ra   rB  rG  rk  r@  rC  rQ  r  rD  rA  )r:   rV  s   & r=   rm  ÚChartResultsView.clearø  sw   € Ø�:‰:ÒÙØ×+Ô+ˆJØ�L‰L×'Ñ'¨
Ö3ñ ,àˆŒØˆÔØ�?‰?Ò&Ø�L‰L×ÑÓ!×(Ñ(¨¯©Ô9ØˆŒØˆŽr@   c                óR   € V P                  4        Wn        V P                  4        R # r§   )rm  r]   rÌ   r±   s   &&r=   r²   ÚChartResultsView.set_chart  s   € Ø�
‰
ŒØŒØ�‰Žr@   c                óR   € V P                  4        Wn        V P                  4        R # r§   )rm  r?  rÌ   ©r:   rH  s   &&r=   Úset_grammarÚChartResultsView.set_grammar	  s   € Ø�
‰
ŒØŒØ�‰Žr@   c                óx   € V P                   f   R #  V P                   P                  4        R T n         R #     L; ir§   r¨   r©   s   &*r=   rd   ÚChartResultsView.destroy  r¬   r­   c                ó>   € V P                   P                  ! V/ VB  R # r§   r/  r0  s   &*,r=   r~   ÚChartResultsView.pack  r3  r@   )	rG  r]   r?  ra   rD  rC  r@  rB  rA  )Tr§   )rP   rQ   rR   rS   rq   rÌ   rM  rT  rb  rE  rF  rm  r²   ru  rd   r~   rU   rV   rW   s   @r=   r7  r7  Œ  sH   ø‡ € ôôB!ò,ò$Vò'ò%ò
ò*
òò
ò
÷)ð )r@   r7  c                   ó  a € ] tR tRt o RtRRR]P                  R,          R]P                  R,          /tR tR	 t	R
 t
R tR tR tR tR tR tR tR tR#R$.tR tR tR tR tR tR tR tR tR tR tR tR tR t R  t!R!t"V t#R"# )%ÚChartCompareri   aÊ  

:ivar _root: The root window

:ivar _charts: A dictionary mapping names to charts.  When
    charts are loaded, they are added to this dictionary.

:ivar _left_chart: The left ``Chart``.
:ivar _left_name: The name ``_left_chart`` (derived from filename)
:ivar _left_matrix: The ``ChartMatrixView`` for ``_left_chart``
:ivar _left_selector: The drop-down ``MutableOptionsMenu`` used
      to select ``_left_chart``.

:ivar _right_chart: The right ``Chart``.
:ivar _right_name: The name ``_right_chart`` (derived from filename)
:ivar _right_matrix: The ``ChartMatrixView`` for ``_right_chart``
:ivar _right_selector: The drop-down ``MutableOptionsMenu`` used
      to select ``_right_chart``.

:ivar _out_chart: The out ``Chart``.
:ivar _out_name: The name ``_out_chart`` (derived from filename)
:ivar _out_matrix: The ``ChartMatrixView`` for ``_out_chart``
:ivar _out_label: The label for ``_out_chart``.

:ivar _op_label: A Label containing the most recent operation.
Ú-ÚandÚintersectionÚorÚunionc                ó  € R .^,          p\        V4      V n        RV n        RV n        V P                  V n        V P                  V n        RV P                  /V n        V P                  V n        RV n        \        4       V n
        V P                  P                  R4       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  V P                  4       V P                  V P                  4       V P!                  V P                  4       V P#                  V P                  4       V P%                  V P                  4       V F  pV P'                  V4       K  	  R# )Ú ÚNoneNzChart Comparisonr\   ú<Control-x>)r   Ú_emptychartÚ
_left_nameÚ_right_nameÚ_left_chartÚ_right_chartÚ_chartsÚ
_out_chartÚ	_operatorr
   ra   rb   rc   rd   Ú_init_menubarÚ_init_chartviewsÚ_init_dividerÚ_init_buttonsÚ_init_bindingsÚ
load_chart)r:   Úchart_filenamesÚfaketokÚfilenames   &*  r=   rq   ÚChartComparer.__init__B  s2  € ð �$˜•(ˆÜ  ›>ˆÔð !ˆŒØ!ˆÔØ×+Ñ+ˆÔØ ×,Ñ,ˆÔð  × 0Ñ 0Ð1ˆŒð ×*Ñ*ˆŒð ˆŒô “TˆŒ
Ø�
‰
×ÑÐ+Ô,Ø�
‰
�‰˜ t§|¡|Ô4Ø�
‰
�‰˜ t§|¡|Ô4ð 	×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜dŸj™jÔ)Ø×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜DŸJ™JÔ'ó (ˆHØ�O‰O˜HÖ%ó (r@   c                óx   € V P                   f   R #  V P                   P                  4        R T n         R #     L; ir§   r¨   r©   s   &*r=   rd   ÚChartComparer.destroyh  r¬   r­   c                ó   € R # r§   )ra   Úmainloopr0  s   &*,r=   r›  ÚChartComparer.mainloopq  s   € Ùr@   c                óÀ  € \        V4      p\        V^ R7      pVP                  RR^ V P                  R7       VP                  RR^ V P                  R7       VP	                  4        VP                  R^V P
                  RR	7       VP                  R
^ VR7       \        V^ R7      pVP                  RV P                  RR7       VP                  RV P                  RR7       VP                  RV P                  RR7       VP	                  4        VP                  RV P                  R7       VP                  R^ VR7       V P                  P                  VR7       R# )r°   ©Útearoffú
Load ChartúCtrl-o)r`  Úacceleratorr2   rw   zSave OutputúCtrl-sÚExitúCtrl-x©r`  r2   rw   r¢  ÚFile©r`  r2   ÚmenuÚIntersectionÚ+)r`  rw   r¢  ÚUnionÚ*Ú
Differencer}  úSwap Charts©r`  rw   ÚCompare©r©  N)r   Úadd_commandÚload_chart_dialogÚsave_chart_dialogÚadd_separatorrd   Úadd_cascadeÚ_intersectionÚ_unionÚ_differenceÚ_swapchartsra   Úconfig)r:   r   ÚmenubarÚfilemenuÚopmenus   &&   r=   rŽ  ÚChartComparer._init_menubary  sf  € Ü�t“*ˆô ˜¨Ô+ˆØ×ÑØØ ØØ×*Ñ*ð	 	ô 	
ð 	×ÑØØ ØØ×*Ñ*ð	 	ô 	
ð 	×ÑÔ Ø×ÑØ A¨t¯|©|Èð 	ô 	
ð 	×Ñ &°A¸HÐÔEô �g qÔ)ˆØ×ÑØ ¨$×*<Ñ*<È#ð 	ô 	
ð 	×Ñ °$·+±+È3ÐÔOØ×ÑØ¨×(8Ñ(8Àcð 	ô 	
ð 	×ÑÔØ×Ñ ¸×8HÑ8HÐÔIØ×Ñ )°q¸vÐÔFð 	�
‰
×Ñ˜wÐÖ'r@   c                óJ   € \        V^RR7      pVP                  RR^R7       R# )rƒ   r„   r…   rˆ   r:  )r{   r}   ÚipadyN)r   r~   )r:   r   Údividers   && r=   r�  ÚChartComparer._init_divider   s"   € Ü˜ Q¨xÔ8ˆØ�‰˜% c°ˆÖ3r@   c                ór  € RpRp\        VRR7      pVP                  R^RR7       \        V^RR7      pVP                  R^^^RR	7       \        V\        V P                  P                  4       4      V P                  R
7      V n        V P                  P                  R^RR7       \        WPP                  RRR7      V n
        V P                  P                  R^^^RR	7       V P                  P                  RV P                  4       V P                  P                  RV P                  4       V P                  P                  4        \        VR^RVR7      V n        V P                   P                  R^^R7       \        V^RR7      pVP                  R^^^RR	7       \        V\        V P                  P                  4       4      V P"                  R
7      V n        V P$                  P                  R^RR7       \        W`P                  RRR7      V n        V P&                  P                  R^^^RR	7       V P&                  P                  RV P                  4       V P&                  P                  RV P                  4       V P&                  P                  4        \        VR^RVR7      P                  R^^R7       \        V^RR7      pVP                  R^^^RR	7       \        VRR7      V n        V P(                  P                  R^	R7       \        WpP                  RRR7      V n        V P*                  P                  R^^^RR	7       V P*                  P                  RV P                  4       V P*                  P                  RV P                  4       V P*                  P                  4        R# )r/   z#c0c0c0©rŽ   rˆ   r˜   rz   Úgroover…   r=  )r{   r‰   rŠ   r|   r}   )rw   r:  )r{   rŠ   r}   FT)ro   rp   rx   r›   rõ   ri  )rv   rŒ   rŽ   r1   )r{   r‰   rŠ   Ú=ÚOutputr“   )r{   rŠ   N)r/   éÜÿÿÿ)r6   rÊ  )r   r~   r   rÃ   r‹  rî   Ú_select_leftÚ_left_selectorrZ   r†  Ú_left_matrixr£   Úselect_edgerõ   rÚ   r   Ú	_op_labelÚ_select_rightÚ_right_selectorÚ_right_matrixÚ
_out_labelÚ_out_matrix)r:   r   ÚopfontÚeqfontÚframeÚ	cv1_frameÚ	cv2_frameÚ	out_frames   &&      r=   r�  ÚChartComparer._init_chartviews¤  s@  € Ø ˆØ#ˆä�d yÔ1ˆØ�
‰
˜ a¨fˆ
Ô5ô ˜%¨°(Ô;ˆ	Ø�‰˜F¨°¸1À6ˆÔJÜ/Ø”t˜DŸL™L×-Ñ-Ó/Ó0¸$×:KÑ:Kô
ˆÔð 	×Ñ× Ñ  e°!¸#Ð Ô>Ü+Ø×'Ñ'°%Àtô
ˆÔð 	×Ñ×Ñ H°1¸1ÀQÈVÐÔTØ×Ñ×&Ñ& x°×1AÑ1AÔBØ×Ñ×&Ñ& }°d×6FÑ6FÔGØ×Ñ×$Ñ$Ô&ô Ø˜ 1°Àô
ˆŒð 	�‰×Ñ ¨a°aÐÔ8ô ˜%¨°(Ô;ˆ	Ø�‰˜F¨°¸1À6ˆÔJÜ0Ø”t˜DŸL™L×-Ñ-Ó/Ó0¸$×:LÑ:Lô 
ˆÔð 	×Ñ×!Ñ! u°1¸3Ð!Ô?Ü,Ø×'Ñ'°%Àtô
ˆÔð 	×Ñ×Ñ X°A¸AÀaÈfÐÔUØ×Ñ×'Ñ'¨°$×2BÑ2BÔCØ×Ñ×'Ñ'¨°t×7GÑ7GÔHØ×Ñ×%Ñ%Ô'ô 	ˆe˜# Q°9À6ÔJ×OÑOØ˜a að 	Pô 	
ô
 ˜%¨°(Ô;ˆ	Ø�‰˜F¨°¸1À6ˆÔJÜ 	°Ô9ˆŒØ�‰×Ñ %¨aÐÔ0Ü*Ø×'Ñ'°%Àtô
ˆÔð 	×Ñ×Ñ 8°!¸!ÀAÈFÐÔSØ×Ñ×%Ñ% h°×0@Ñ0@ÔAØ×Ñ×%Ñ% m°T×5EÑ5EÔFØ×Ñ×#Ñ#Ö%r@   c                ó  € \        V4      pVP                  R ^R^ R7       \        VRV P                  R7      P                  RR7       \        VRV P                  R7      P                  RR7       \        VRV P
                  R7      P                  RR7       \        V^R	7      P                  RR7       \        VR
V P                  R7      P                  RR7       \        VRV P                  R7      P                  RR7       R# )rx   r:  )r{   rŠ   r}   r|   rª  ru   r=  r<  r¬  r®  r  r¯  zDetach Outputr;  N)r   r~   r   r¸  r¹  rº  r»  Ú_detach_out)r:   r   rI  s   && r=   r‘  ÚChartComparer._init_buttonsá  sä   € Ü˜“+ˆØ�‰˜(¨°¸QˆÔ?Üˆw˜^°T×5GÑ5GÔH×MÑMØð 	Nô 	
ô 	ˆw˜W¨d¯k©kÔ:×?Ñ?ÀVÐ?ÔLÜˆw˜\°4×3CÑ3CÔD×IÑIÈvÐIÔVÜˆg˜RÔ ×%Ñ%¨6Ð%Ô2Üˆw˜]°D×4DÑ4DÔE×JÑJÐPVÐJÔWäˆw˜_°d×6FÑ6FÔG×LÑLØð 	Mö 	
r@   c                ó>   € VP                  R V P                  4       R# )ú<Control-o>N)rc   r´  r”   s   &&r=   r’  ÚChartComparer._init_bindingsð  s   € à�	‰	�- ×!7Ñ!7Ö8r@   c                óî   € Wn         V P                  V,          V n        V P                  P	                  V P                  4       VR 8X  d   V P                  P                  4        V P                  4        R# ©r„  N)r‡  r‹  r‰  rÍ  r²   rÚ   Ú	_apply_op©r:   Únames   &&r=   rË  ÚChartComparer._select_leftù  sU   € ØŒØŸ<™<¨Õ-ˆÔØ×Ñ×#Ñ# D×$4Ñ$4Ô5Ø�6Œ>Ø×Ñ×(Ñ(Ô*Ø�‰Ör@   c                óî   € Wn         V P                  V,          V n        V P                  P	                  V P                  4       VR 8X  d   V P                  P                  4        V P                  4        R# rã  )rˆ  r‹  rŠ  rÒ  r²   rÚ   rä  rå  s   &&r=   rÐ  ÚChartComparer._select_right  sV   € ØÔØ ŸL™L¨Õ.ˆÔØ×Ñ×$Ñ$ T×%6Ñ%6Ô7Ø�6Œ>Ø×Ñ×)Ñ)Ô+Ø�‰Ör@   c                óØ   € V P                   R 8X  d   V P                  4        R# V P                   R8X  d   V P                  4        R# V P                   R8X  d   V P                  4        R# R# )r}  r€  r~  N)r�  rº  r¹  r¸  rÔ   s   &r=   rä  ÚChartComparer._apply_op	  sL   € Ø�>‰>˜SÔ Ø×ÑÖØ�^‰^˜tÔ#Ø�K‰KŽMØ�^‰^˜uÔ$Ø×ÑÖ ñ %r@   c                óF  € \        V P                  R R7      pV'       g   R#  \        VR4      ;_uu_ 4       p\        P                  ! V P
                  V4       RRR4       R#   + '       g   i     R# ; i  \         d   p\        RRT: RT 24        Rp?R# Rp?ii ; i)ú.pickle©Ú	filetypesÚdefaultextensionNÚwbzError Saving ChartúUnable to open file: Ú
)r   ÚCHART_FILE_TYPESÚopenÚpickleÚdumprŒ  Ú	Exceptionr   ©r:   rð   r–  Úoutfilerª   s   &*   r=   rµ  ÚChartComparer.save_chart_dialog  s„   € Ü$Ø×+Ñ+¸iô
ˆ÷ Ùð	WÜ�h ×%Ô%¨Ü—’˜DŸO™O¨WÔ5÷ &×%×%Ò%ûäô 	WÜÐ*Ð.CÀHÁ<ÈrÐRSÐQTÐ,U×VÒVûð	Wús4   £A7 ·"A#ÁA7 Á#A4	Á.A7 Á4A7 Á7B ÂBÂB c                óÄ   € \        V P                  R R7      pV'       g   R#  V P                  V4       R#   \         d   p\	        RRT: RT 24        Rp?R# Rp?ii ; i)rí  rî  NzError Loading Chartrò  ró  )r   rô  r“  rø  r   )r:   rð   r–  rª   s   &*  r=   r´  ÚChartComparer.load_chart_dialog"  sb   € Ü"Ø×+Ñ+¸iô
ˆ÷ Ùð	XØ�O‰O˜HÖ%øÜô 	XÜÐ+Ð/DÀXÁLÐPRÐSTÐRUÐ-V×WÒWûð	Xús   £6 ¶AÁAÁAc                ó¨  € \        VR 4      ;_uu_ 4       p\        P                  ! V4      pRRR4       \        P                  P                  V4      pVP                  R4      '       d   VRR pVP                  R4      '       d   VRR pXV P                  V&   V P                  P                  V4       V P                  P                  V4       V P                  V P                  J d   V P                  P                  V4       R# V P                  V P                  J d   V P                  P                  V4       R# R#   + '       g   i     EL; i)ÚrbNrí  z.chartiùÿÿÿiúÿÿÿ)rõ  rö  ÚloadÚosÚpathÚbasenameÚendswithr‹  rÌ  ÚaddrÑ  r‰  r†  rÄ   rŠ  )r:   r–  Úinfilern   ræ  s   &&   r=   r“  ÚChartComparer.load_chart-  s  € Ü�(˜D×!Ô! VÜ—K’K Ó'ˆE÷ "ä�w‰w×Ñ Ó)ˆØ�=‰=˜×#Ò#Ø˜˜�9ˆDØ�=‰=˜×"Ò"Ø˜˜�9ˆDØ"ˆ�‰�TÑØ×Ñ×Ñ Ô%Ø×Ñ× Ñ  Ô&ð ×Ñ˜t×/Ñ/Ó/Ø×Ñ×#Ñ# DÖ)Ø×Ñ $×"2Ñ"2Ó2Ø× Ñ ×$Ñ$ TÖ*ñ 3÷ "×!Ð!ús   •E Å E	c                ó¢   € V P                   P                  4        V P                  P                  4        V P                  P                  4        R # r§   )rÍ  rÌ   rÒ  rÔ  rÔ   s   &r=   Ú_update_chartviewsÚ ChartComparer._update_chartviews@  s8   € Ø×Ñ× Ñ Ô"Ø×Ñ×!Ñ!Ô#Ø×Ñ×ÑÖ!r@   c                ó¬  € WP                   9   d   V P                  P                  V4       MV P                  P                  4        WP                  9   d   V P
                  P                  V4       MV P
                  P                  4        WP                  9   d   V P                  P                  V4       R # V P                  P                  4        R # r§   )r‰  rÍ  r  r	  rŠ  rÒ  rŒ  rÔ  r   s   &&r=   rÎ  ÚChartComparer.select_edgeI  s–   € Ø×#Ñ#Ô#Ø×Ñ×+Ñ+¨DÕ1à×Ñ×)Ñ)Ô+Ø×$Ñ$Ô$Ø×Ñ×,Ñ,¨TÕ2à×Ñ×*Ñ*Ô,Ø—?‘?Ô"Ø×Ñ×*Ñ*¨4Ö0à×Ñ×(Ñ(Ö*r@   c                ó¨   € V P                   P                  W4       V P                  P                  W4       V P                  P                  W4       R # r§   )rÍ  rõ   rÒ  rÔ  rö   s   &&&r=   rõ   ÚChartComparer.select_cellW  s>   € Ø×Ñ×%Ñ% aÔ+Ø×Ñ×&Ñ& qÔ,Ø×Ñ×$Ñ$ QÖ*r@   c                ó  € V P                  4       '       g   R # \        V P                  P                  4       4      pV P                   F'  pW P                  9  g   K  VP                  V. 4       K)  	  V P                  RV4       R # )Nr}  ©Ú_checkcompatr   r‰  ÚtokensrŠ  ÚinsertÚ_update©r:   Ú	out_chartrž   s   &  r=   rº  ÚChartComparer._difference`  si   € Ø× Ñ ×"Ò"Ùä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ô$ˆDØ×,Ñ,Ö,Ø× Ñ   rÖ*ñ %ð 	�‰�S˜)Ö$r@   c                ó  € V P                  4       '       g   R # \        V P                  P                  4       4      pV P                   F'  pW P                  9   g   K  VP                  V. 4       K)  	  V P                  RV4       R # )Nr~  r  r  s   &  r=   r¸  ÚChartComparer._intersectionk  si   € Ø× Ñ ×"Ò"Ùä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ô$ˆDØ×(Ñ(Ö(Ø× Ñ   rÖ*ñ %ð 	�‰�U˜IÖ&r@   c                ó4  € V P                  4       '       g   R # \        V P                  P                  4       4      pV P                   F  pVP	                  V. 4       K  	  V P
                   F  pVP	                  V. 4       K  	  V P                  RV4       R # )Nr€  )r  r   r‰  r  r  rŠ  r  r  s   &  r=   r¹  ÚChartComparer._unionv  s}   € Ø× Ñ ×"Ò"Ùä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ô$ˆDØ×Ñ˜T 2Ö&ñ %à×%Ô%ˆDØ×Ñ˜T 2Ö&ñ &ð 	�‰�T˜9Ö%r@   c                ó    € V P                   V P                  r!V P                  P                  V4       V P                  P                  V4       R # r§   )r‡  rˆ  rÌ  rÄ   rÑ  )r:   r=  r;  s   &  r=   r»  ÚChartComparer._swapcharts‚  s;   € Ø—o‘o t×'7Ñ'7ˆeØ×Ñ×Ñ Ô&Ø×Ñ× Ñ  Ö&r@   c                ó  € V P                   P                  4       V P                  P                  4       8w  gn   V P                   P                  4       V P                  P                  4       8w  g7   V P                   V P                  8X  g   V P                  V P                  8X  db   V P                  V n        V P                  P                  V P
                  4       V P                  P                  4        R V P                  R&   R# R# )rÉ  rv   FT)
r‰  r  rŠ  Úproperty_namesr†  rŒ  rÔ  r²   rÚ   rÓ  rÔ   s   &r=   r  ÚChartComparer._checkcompat‡  sÃ   € à×Ñ×#Ñ#Ó%¨×):Ñ):×)AÑ)AÓ)CÔCØ×Ñ×.Ñ.Ó0°D×4EÑ4E×4TÑ4TÓ4VÔVØ×Ñ 4×#3Ñ#3Ô3Ø× Ñ  D×$4Ñ$4Ô4ð #×.Ñ.ˆDŒOØ×Ñ×&Ñ& t§¡Ô7Ø×Ñ×'Ñ'Ô)Ø&.ˆD�O‰O˜FÑ#áár@   c                ó  € Wn         V P                  V,          V P                  R &   W n        V P                  P                  V4       RP                  V P                  V P                   V P                  4      V P                  R &   R# )rv   z{} {} {}N)
r�  Ú	_OPSYMBOLrÏ  rŒ  rÔ  r²   r¾   r‡  rˆ  rÓ  )r:   Úoperatorr  s   &&&r=   r  ÚChartComparer._update˜  sg   € Ø!ŒØ!%§¡°Õ!9ˆ�‰�vÑØ#ŒØ×Ñ×"Ñ" 9Ô-Ø",×"3Ñ"3Ø�O‰OØ�N‰NØ×Ñó#
ˆ�‰˜Ór@   c                óÄ   € V P                   V n        V P                  P                  V P                  4       R V P                  R&   V P                  P                  4        R# )ri  rv   N)r†  rŒ  rÔ  r²   rÏ  rÚ   rÔ   s   &r=   Ú_clear_out_chartÚChartComparer._clear_out_chart£  sG   € Ø×*Ñ*ˆŒØ×Ñ×"Ñ" 4§?¡?Ô3Ø!$ˆ�‰�vÑØ×Ñ×#Ñ#Ö%r@   c                ól   € \        V P                  V P                  V P                  R ,          R7       R# )rv   )rb   N)rZ   ra   rŒ  rÓ  rÔ   s   &r=   rÝ  ÚChartComparer._detach_out©  s   € Ü˜Ÿ
™
 D§O¡O¸4¿?¹?È6Õ;R×Sr@   )r‹  r†  r‰  rÍ  r‡  rÌ  rÏ  r�  rŒ  rÓ  rÔ  rŠ  rÒ  rˆ  rÑ  ra   N©zPickle filerí  ©z	All filesr­  )$rP   rQ   rR   rS   r5  r   rT   r"  rq   rd   r›  rŽ  r�  r�  r‘  r’  rË  rÐ  rä  rô  rµ  r´  r“  r	  rÎ  rõ   rº  r¸  r¹  r»  r  r  r&  rÝ  rU   rV   rW   s   @r=   r|  r|     sÏ   ø‡ € ñð8 	ˆSØˆ|×#Ñ# NÕ3Øˆl×"Ñ" 7Õ+ð€Iò$&òLò-ò%(òN4ò;&òz
ò9òòò!ð 3Ð4FÐGÐò
Wò	Xò+ò&"ò+ò+ò	%ò	'ò
&ò'ò
ò"	
ò&÷Tð Tr@   r|  c                   ó,  a € ] tR tRt o Rt^
t^
t^t^(tR'R lt	R t
R(R ltR tR tR	 tR
 tR tR tR tR tR'R ltR tR tR)R ltR tR tR*R ltR+R ltR'R ltR+R ltR tR tR t R t!R t"R'R lt#R t$R  t%R)R! lt&R" t'R# t(R'R$ lt)R% t*R&t+V t,R# ),Ú	ChartViewi²  as  
A component for viewing charts.  This is used by ``ChartParserApp`` to
allow students to interactively experiment with various chart
parsing techniques.  It is also used by ``Chart.draw()``.

:ivar _chart: The chart that we are giving a view of.  This chart
   may be modified; after it is modified, you should call
   ``update``.
:ivar _sentence: The list of tokens that the chart spans.

:ivar _root: The root window.
:ivar _chart_canvas: The canvas we're using to display the chart
    itself.
:ivar _tree_canvas: The canvas we're using to display the tree
    that each edge spans.  May be None, if we're not displaying
    trees.
:ivar _sentence_canvas: The canvas we're using to display the sentence
    text.  May be None, if we're not displaying the sentence text.
:ivar _edgetags: A dictionary mapping from edges to the tags of
    the canvas elements (lines, etc) used to display that edge.
    The values of this dictionary have the form
    ``(linetag, rhstag1, dottag, rhstag2, lhstag)``.
:ivar _treetags: A list of all the tags that make up the tree;
    used to erase the tree (without erasing the loclines).
:ivar _chart_height: The height of the chart canvas.
:ivar _sentence_height: The height of the sentence canvas.
:ivar _tree_height: The height of the tree

:ivar _text_height: The height of a text string (in the normal
    font).

:ivar _edgelevels: A list of edges at each level of the chart (the
    top level is the 0th element).  This list is used to remember
    where edges should be drawn; and to make sure that no edges
    are overlapping on the chart view.

:ivar _unitsize: Pixel size of one unit (from the location).  This
   is determined by the span of the chart's location, and the
   width of the chart display canvas.

:ivar _fontsize: The current font size

:ivar _marks: A dictionary from edges to marks.  Marks are
    strings, specifying colors (e.g. 'green').
Nc                óÜ  € VP                  R^ 4      pVP                  R^4      pVP                  RR4      V n        Wn        / V n        . V n        / V n        / V n        . V n        RV n        ^ V n	        . V n
        ^ V n        Vfa   \        4       pVP                  R4       V3R lpV3R lpVP                  RV4       \        VR	VR
7      p	V	P!                  RR7       W`n        MW n        V P%                  V4       V P'                  V P"                  4      w  V n        V n        RV P*                  R&   ^V P*                  R&   V'       dj   \-        V P"                  R^R7      p
V
P!                  RRR7       \/        V
^2R7      V n        RV P0                  R&   V P0                  P!                  RR7       MRV n        V'       d>   V P'                  V P"                  RR4      w  r¼W¼uV n        V n        ^ÈV P4                  R&   MRV n        V P7                  4        V P9                  4        V P;                  4        V P=                  4        V P*                  P                  RV P>                  4       R# )z$
Construct a new ``Chart`` display.
Ú	draw_treeÚdraw_sentenceÚfontsizeNz
Chart Viewc                 ó&   € VP                  4        R # r§   ©rd   )rª   rˆ   s   &&r=   Údestroy1Ú$ChartView.__init__.<locals>.destroy1  ó   € Ø—‘–r@   c                 ó&   € V P                  4        R # r§   r3  )rˆ   s   &r=   Údestroy2Ú$ChartView.__init__.<locals>.destroy2  r6  r@   ÚqÚDoneru   rx   r<  i,  r�   r>  Úsunk©r‡   r†   r˜   )r}   r{   ©r�   ú#e0e0e0rŽ   r¶   r  r:  z<Configure>r7   ) ÚgetÚ	_fontsizer]   rj   Ú_edgelevelsÚ	_edgetagsr_   Ú	_treetoksÚ_treetoks_edgeÚ_treetoks_indexÚ
_tree_tagsÚ_compactr
   rb   rc   r   r~   ra   Ú_init_fontsÚ
_sb_canvasÚ	_chart_sbÚ_chart_canvasr   r   Ú_sentence_canvasÚ_tree_sbÚ_tree_canvasÚ_analyzerl   Ú_resizeÚ_growÚ
_configure)r:   rn   r   Úkwr/  r0  rˆ   r4  r8  Úbr�   ÚsbrQ  s   &&&,         r=   rq   ÚChartView.__init__æ  s(  € ð
 —F‘F˜;¨Ó*ˆ	ØŸ™˜°Ó2ˆØŸ™ 
¨CÓ0ˆŒð Œð ˆŒð ˆÔØˆŒð ˆŒð ˆŒØ"ˆÔØ ˆÔð ˆŒð ˆŒð Š<Ü“$ˆCØ�I‰I�lÔ#à #ô ð !ô ð �H‰H�S˜(Ô#Ü�s °Ô:ˆAØ�F‰F˜ˆFÔ!Ø�JàŒJð 	×Ñ˜Ôð 04¯©¸t¿z¹zÓ/JÑ,ˆŒ˜Ô+Ø'*ˆ×Ñ˜8Ñ$Ø,.ˆ×Ñ˜=Ñ)÷ Ü˜4Ÿ:™:¨f¸QÔ?ˆFØ�K‰K˜V¨(ˆKÔ3Ü$*¨6¸"Ô$=ˆDÔ!Ø2;ˆD×!Ñ! ,Ñ/Ø×!Ñ!×&Ñ&¨FÐ&Õ3ð %)ˆDÔ!÷ ØŸ?™?¨4¯:©:°s¸CÓ@‰LˆRØ24Ð.ˆTŒ]˜DÔ-Ø*-ˆD×Ñ˜hÒ'à $ˆDÔð 	�‰ŒØ�	‰	ŒØ�‰ŒØ�
‰
Œð 	×Ñ×Ñ ¨t¯©Ö?r@   c                óð   € \        R RV P                  R7      V n        \        R V P                  R7      V n        \        \	        4       R,          R7      V n        VP                  RV P
                  4       R# )r6   r8   ©ÚfamilyÚweightÚsize©rZ  r\  r1   ©r1   ú*FontN)r   rA  Ú	_boldfontÚ_fontr   Ú_sysfontÚ
option_addr”   s   &&r=   rI  ÚChartView._init_fonts?  sM   € Ü [¸ÀdÇnÁnÔUˆŒÜ °4·>±>ÔBˆŒ
ä¤&£(¨6Õ"2Ô3ˆŒØ�‰˜ §¡Ö/r@   c                ó  € \        VR^R7      pVP                  W2VR7       \        VRR7      p\        VRR7      pVP                  RR	R
7       VP                  RVRR7       VP                  VR&   VP
                  VR&   Wv3# )z;
Helper for __init__: construct a canvas with a scrollbar.
r<  r=  )r}   r|   r{   r?  rÆ  Úvertical)Úorientr;  Úy©r{   r}   r=  Úyes©r{   r}   r|   rw   Úyscrollcommand)r   r~   r   r	   ÚyviewrÄ   )r:   r   r|   r}   r{   r�   rQ  rV  s   &&&&&   r=   rJ  ÚChartView._sb_canvasF  s„   € ô �t F°1Ô5ˆØ�‰˜°4ˆÔ8Ü˜¨9Ô5ˆô �v jÔ1ˆØ
�‰�W 3ˆÔ'Ø�‰˜ d°5ˆÔ9ð Ÿ™ˆˆ9‰Ø#%§6¡6ˆÐÑ àˆ|Ðr@   c                ó@   € V P                   P                  R RR4       R# )ÚscrollÚunitsNéÿÿÿÿ©rL  rm  r©   s   &*r=   Ú	scroll_upÚChartView.scroll_upY  ó   € Ø×Ñ× Ñ  ¨2¨wÖ7r@   c                ó@   € V P                   P                  R ^R4       R# )rp  rq  Nrs  r©   s   &*r=   Úscroll_downÚChartView.scroll_down\  ó   € Ø×Ñ× Ñ  ¨1¨gÖ6r@   c                ó@   € V P                   P                  R RR4       R# )rp  ÚpagesNrr  rs  r©   s   &*r=   Úpage_upÚChartView.page_up_  rv  r@   c                ó@   € V P                   P                  R ^R4       R# )rp  r|  Nrs  r©   s   &*r=   Ú	page_downÚChartView.page_downb  rz  r@   c                ó  € V P                   P                  4       p\        \        V P                  R,          4      WP
                  ,          \        P                  ^,          ,           4      pV P                  P                  VR7       V P                  P                  V P                  R,          R7       V^\        P                  ,          ,
          V,          V n        V P                  e   V P                  V P                  R&   R# R# )z
Grow the window, if necessary
rŒ   r  r�   r>  N)r]   r  rÀ   r  rL  Ú	_unitsizer-  Ú_MARGINÚ	configurerM  Ú_sentence_height)r:   rÆ   rŒ   s   &  r=   rR  ÚChartView._growe  sÍ   € ð
 �K‰K×"Ñ"Ó$ˆÜÜ�×"Ñ" 7Õ+Ó,¨a·.±.Õ.@Ä9×CTÑCTÐWXÕCXÕ.Xó
ˆð 	×Ñ×$Ñ$¨5Ð$Ô1Ø×Ñ×$Ñ$¨D×,>Ñ,>¸xÕ,HÐ$ÔIà !¤i×&7Ñ&7Õ"7Õ7¸1Õ<ˆŒð × Ñ Ò,Ø.2×.CÑ.CˆD×!Ñ! (Ó+ñ -r@   c                óJ  € V P                   P                  \        V4      ) R 7       V P                  P                  \        V4      ) R 7       V P                  P                  \        V4      ) R 7       V P                  4        V P                  4        V P                  4        R# ©)r\  N)ra  r…  Úabsr`  rb  rP  rR  rl   ©r:   r\  s   &&r=   Úset_font_sizeÚChartView.set_font_sizez  sn   € Ø�
‰
×Ñ¤3 t£9 *ÐÔ-Ø�‰× Ñ ¤s¨4£y jÐ Ô1Ø�‰×Ñ¤c¨$£i ZÐÔ0Ø�‰ŒØ�
‰
ŒØ�	‰	Žr@   c                ó,   € \        V P                  4      # r§   )rŠ  rA  rÔ   s   &r=   Úget_font_sizeÚChartView.get_font_size‚  s   € Ü�4—>‘>Ó"Ð"r@   c                óÂ   € V P                   P                  4       pVP                  ^\        P                  ,          ,
          V,          V n        V P                  4        R# )zÄ
The configure callback.  This is called whenever the window is
resized.  It is also called when the window is first mapped.
It figures out the unit size, and redraws the contents of each
canvas.
N)r]   r  rŒ   r-  r„  rƒ  rl   )r:   rª   rÆ   s   && r=   rS  ÚChartView._configure…  s?   € ð �K‰K×"Ñ"Ó$ˆØŸ'™' A¬	×(9Ñ(9Õ$9Õ9¸QÕ>ˆŒØ�	‰	Žr@   c                óf  € Veg   Wn         . V n        / V n        V P                  4        V P	                  4        V P                  4        V P                  4        V P                  4        R# V P                    F&  pW P                  9  g   K  V P                  V4       K(  	  V P                  4        R# )a=  
Draw any edges that have not been drawn.  This is typically
called when a after modifies the canvas that a CanvasView is
displaying.  ``update`` will cause any edges that have been
added to the chart to be drawn.

If update is given a ``chart`` argument, then it will replace
the current chart with the given chart.
N)
r]   rB  r_   rP  rR  rl   Ú
erase_treerQ  rC  Ú	_add_edge)r:   rn   rž   s   && r=   rÌ   ÚChartView.update�  s{   € ð ÒØŒKØ!ˆDÔØˆDŒKØ�M‰MŒOØ�J‰JŒLØ�I‰IŒKØ�O‰OÔØ�L‰LŽNàŸœ�ØŸ~™~Ö-Ø—N‘N 4Ö(ñ $ð �L‰LŽNr@   c                ó  € VP                  4       w  r4V P                  V,           FU  pVP                  4       w  rgY6u;8:  d   V8  g2   M Ycu;8:  d   V8  g"   M Y6u;8X  d   Tu;8X  d   V8X  g   KM    R#  KT   R# 	  R# )z�
Return True if the given edge overlaps with any edge on the given
level.  This is used by _add_edge to figure out what level a
new edge should be added to.
TF)r¹   rB  )r:   rž   ÚlvlÚs1Úe1Ú	otheredgeÚs2Úe2s   &&&     r=   Ú_edge_conflictÚChartView._edge_conflict©  sh   € ð —9‘9“;‰ˆØ×)Ñ)¨#×.Ð.ˆIØ —~‘~Ó'‰HˆRØ–˜2– 2¦=¨b¦=°bÖ6JÀ"Ö6JÈ×6JÚò 7KÚñ /ñ r@   c           
     ó  € V P                   p\        V\        4      '       d–   VP                  4       p. pVP	                  4        F]  p\        V\
        4      '       d+   VP                  \        VP                  4       4      4       KC  VP                  \        V4      4       K_  	  RP                  V4      pMVP                  4       pRpW63 F¹  pVP                  ^ ^ WpP                  RRR7      pVP                  V4      p	VP                  V4       V	^,          p
\        VP!                  4       ^4      p\        V P"                  W«,          4      V n        \        V P$                  V	^,          V	^,          ,
          4      V n        K»  	  R# )z›
Given a new edge, recalculate:

    - _text_height
    - _unitsize (if the edge text is too big for the current
      _unitsize, then increase _unitsize)
ri  rƒ  Únwr=  ©rv   r1   r  ÚjustifyN)rL  rG   r%   rC   rF   r   rB   Ústrr/   r  Újoinr  r`  rU  r  rÀ   Úlengthrƒ  Ú_text_height)r:   rž   r'  rC   ÚrhseltsrL   rF   Úsr  rU  rŒ   Úedgelens   &&          r=   Ú_analyze_edgeÚChartView._analyze_edge¶  s)  € ð ×Ñˆä�dœH×%Ò%Ø—(‘(“*ˆCØˆGØ—x‘x–z�Ü˜c¤;×/Ò/Ø—N‘N¤3 s§z¡z£|Ó#4Ö5à—N‘N¤4¨£9Ö-ñ	 "ð
 —(‘(˜7Ó#‰Cà—(‘(“*ˆCØˆCà“ˆAØ—-‘-Ø�1˜1§>¡>¸$Èð  ó ˆCð —6‘6˜#“;ˆDØ�H‰H�SŒMØ˜•GˆEÜ˜$Ÿ+™+›-¨Ó+ˆGÜ  §¡°µÓAˆDŒNÜ # D×$5Ñ$5°t¸AµwÀÀaÅÕ7HÓ IˆDÖó r@   c                óÂ  € \        V\        4      '       d   R# WP                  9   d   R# V P                  V4       V P	                  4        V P
                  '       g\   V P                  P                  V.4       \        V P                  4      ^,
          pV P                  W4       V P                  4        R# ^ p V\        V P                  4      8¼  d.   V P                  P                  . 4       V P                  4        KG  W28¼  d;   V P                  W4      '       g$   V P                  V,          P                  V4       MV^,          pK“  V P                  W4       R# )z”
Add a single edge to the ChartView:

    - Call analyze_edge to recalculate display parameters
    - Find an available level
    - Call _draw_edge
N)rG   r   rC  r«  rR  rH  rB  rB   rº   Ú
_draw_edgerQ  rž  )r:   rž   Úminlvlr˜  s   &&& r=   r•  ÚChartView._add_edgeØ  s  € ô �dœH×%Ò%Ùà—>‘>Ô!ÙØ×Ñ˜4Ô Ø�
‰
Œà�}�}ˆ}Ø×Ñ×#Ñ# T FÔ+Ü�d×&Ñ&Ó'¨!Õ+ˆCØ�O‰O˜DÔ&Ø�L‰LŒNÙð ˆØàœ˜T×-Ñ-Ó.Ô.Ø× Ñ ×'Ñ'¨Ô+Ø—‘–ð Œ} T×%8Ñ%8¸×%CÒ%Cà× Ñ  Õ%×,Ñ,¨TÔ2Øð �1�HŠCà�‰˜Ö"r@   c                ó´  € R p\        \        V P                  4      4       F  pWP                  V,          9   g   K  Tp M	  Vf   R # V^,           V P                  ,          pV P                  ^
,           pV P
                  P                  RR4       V P                  ^ 8w  d6   V P
                  P                  RWE,
          V P                  ,          4       R # R # )NÚmovetog      ð?)r»   rº   rB  Ú_chart_level_sizer§  rL  rm  Ú_chart_height)r:   rž   ÚlevelrK   rh  r)  s   &&    r=   r  ÚChartView.view_edge  s´   € ØˆÜ”s˜4×+Ñ+Ó,Ö-ˆAØ×'Ñ'¨Õ*Ö*Ø�Ùñ .ð Š=Ùà�Q�Y˜$×0Ñ0Õ0ˆØ×Ñ Õ#ˆØ×Ñ× Ñ  ¨3Ô/Ø×Ñ Ô"Ø×Ñ×$Ñ$ X°µ¸$×:LÑ:LÕ/LÖMñ #r@   c           	     óz  € V P                   pVP                  4       V P                  ,          \        P                  ,           pVP                  4       V P                  ,          \        P                  ,           pWT8X  d%   V\        ^V P                  ^,          4      ,          pV^,           V P                  ,          pVP                  WFWVR^R7      p\        V\        4      '       d…   . pVP                  4        F]  p	\        V	\        4      '       d+   VP                  \        V	P                  4       4      4       KC  VP                  \!        V	4      4       K_  	  VP#                  4       p
M. p^ p
RP%                  VRV
 4      pRP%                  WŠR 4      pVP'                  V^,           WkV P(                  RR7      pVP+                  V4      ^,          ^,           pVP+                  V4      ^,          VP+                  V4      ^,          ,           ^,          pVP-                  V^,
          V^,
          V^,           V^,           4      pVP'                  V^,           WlV P(                  RR7      pVP'                  WE,           ^,          V\        VP/                  4       4      RV P0                  R7      pW}VVV3V P2                  V&   W3R	 lpVP5                  VR
V4       VP5                  VR
V4       VP5                  VR
V4       VP5                  VR
V4       VP5                  VR
V4       V P7                  V4       R# )z&
Draw a single edge on the ChartView.
Úlast)r.   rŒ   ri  Nr¡  )rv   r1   r  r©  ©rv   r  r1   c                 ó*   € VP                  R V4       R# rš   rœ   )râ   r:   rž   s   &&&r=   rŸ   Ú ChartView._draw_edge.<locals>.cb<  r¡   r@   r  )rL  r¼   rƒ  r-  r„  r½   rÀ   r³  r   rG   r%   rF   r   rB   r¤  r/   r  r3   r¥  r  ra  rU  Úcreate_ovalrC   r`  rC  r"  Ú_color_edge)r:   rž   r˜  r'  rZ  r\  rh  ÚlinetagrF   rL   ÚposÚrhs1Úrhs2Úrhstag1ÚdotxÚdotyÚdottagÚrhstag2ÚlhstagrŸ   s   &&&                 r=   r®  ÚChartView._draw_edge  sƒ  € ð ×Ñˆð �Z‰Z‹\˜DŸN™NÕ*¬Y×->Ñ->Õ>ˆØ�X‰X‹Z˜$Ÿ.™.Õ(¬9×+<Ñ+<Õ<ˆØŒ8Ø”#�a˜Ÿ™¨!Õ+Ó,Õ,ˆBØ�1�W˜×.Ñ.Õ.ˆØ—-‘-  r°FÀ!�-ÓDˆô �dœH×%Ò%ØˆCØ—x‘x–z�Ü˜c¤;×/Ò/Ø—J‘Jœs 3§:¡:£<Ó0Ö1à—J‘Jœt C›yÖ)ñ	 "ð
 —(‘(“*‰CàˆCØˆCà�x‰x˜˜D˜S˜	Ó"ˆØ�x‰x˜˜D˜	Ó"ˆØ—-‘-  Q¥¨¸4¿:¹:Èd�-ÓSˆØ�v‰v�g‹˜qÕ! AÕ%ˆØ—‘�w“ Õ" Q§V¡V¨G£_°QÕ%7Õ7¸1Õ<ˆØ—‘˜t a�x¨°­°4¸!µ8¸TÀA½XÓFˆØ—-‘-  q¥¨!¸T¿Z¹ZÐPT�-ÓUˆØ—‘Ø�W˜�M˜1¤3 t§x¡x£z£?¸3ÀTÇ^Á^ð ó 
ˆð
 !(°&¸'À6ÐJˆ�‰�tÑð  ô 	1ð 	
�
‰
�7˜L¨"Ô-Ø	�
‰
�7˜L¨"Ô-Ø	�
‰
�7˜L¨"Ô-Ø	�
‰
�6˜<¨Ô,Ø	�
‰
�6˜<¨Ô,à×Ñ˜Ör@   c                ó^  € WP                   9  d   R# V P                  pVe¿   Ve»   WP                  9   d   V P                  V,          pV P                   V,          pVP                  V^ ,          VR7       VP                  V^,          VR7       VP                  V^,          W3R7       VP                  V^,          VR7       VP                  V^,          VR7       R# V P                  P                  4       pWP                  9   d#   V P                  V P                  V,          4       VP                  4       '       d-   VP                  4       ^ V38X  d   V P                  VRR4       R# \        V\        4      '       d   V P                  VRR4       R# V P                  VRR	4       R# )
z}
Color in an edge with the given colors.
If no colors are specified, use intelligent defaults
(dependent on selection, etc.)
Nr¶   ©r}   r·   ú#084ú#042z#48cz#246z#00fz#008)rC  rL  r_   rÁ   r]   r  r½  rH   r¹   rG   r   )r:   rž   Ú	linecolorÚ	textcolorr'  ÚtagsrÆ   s   &&&&   r=   r½  ÚChartView._color_edgeG  sJ  € ð —~‘~Ô%ÙØ×ÑˆàÒ  YÒ%:Ø—{‘{Ô"Ø ŸK™K¨Õ-�	Ø—>‘> $Õ'ˆDØ�L‰L˜˜a� yˆLÔ1Ø�L‰L˜˜a� yˆLÔ1Ø�L‰L˜˜a� yˆLÔDØ�L‰L˜˜a� yˆLÔ1Ø�L‰L˜˜a� yˆLÔ1Ùà—‘×&Ñ&Ó(ˆAØ—{‘{Ô"Ø× Ñ  §¡¨TÕ!2Ô3Ø×Ñ×!Ò! d§i¡i£k°a¸°VÔ&;Ø× Ñ   v¨vÖ6Ü˜D¤(×+Ò+Ø× Ñ   v¨vÖ6à× Ñ   v¨vÖ6r@   c                óD   € W P                   V&   V P                  V4       R# )z
Mark an edge
N)r_   r½  ©r:   rž   r  s   &&&r=   r  ÚChartView.mark_edgef  s   € ð !�‰�DÑØ×Ñ˜Ör@   c                óÖ   € VfG   \        V P                  P                  4       4      p/ V n        V F  pV P                  V4       K  	  R# V P                  V V P                  V4       R# )z
Unmark an edge (or all edges)
N)rÃ   r_   rî   r½  )r:   rž   Úold_marked_edgess   && r=   r	  ÚChartView.unmark_edgem  s\   € ð Š<Ü# D§K¡K×$4Ñ$4Ó$6Ó7ÐØˆDŒKÛ(�Ø× Ñ  Ö&ó )ð —‘˜DÐ!Ø×Ñ˜TÖ"r@   c                óH   € V P                  4        V P                  W4       R # r§   )r	  r  rÒ  s   &&&r=   r  ÚChartView.markonly_edgez  s   € Ø×ÑÔØ�‰�tÖ"r@   c           
     ó  € ^Fp^ pV P                   pV P                  P                  4        F˜  pVP                  ^ ^ \	        V4      V P
                  RRR7      pVP                  V4      pVP                  V4       V^,          \        P                  ,           p\        Wq4      p\        W&^,          V^,          ,
          4      pKš  	  Wn        W n        V P                  ^\        P                  ,          ,           V n        V P                  P                  4        F  pV P!                  V4       K  	  V P                  ^,          V n        ^\        P$                  V P                  ,           ,          V n        V P)                  4        R# )zi
Analyze the sentence string, to figure out how big a unit needs
to be, How big the tree should be, etc.
r¡  r=  r¢  N)rL  r]   Úleavesr  r  ra  rU  r  r-  Ú_LEAF_SPACINGrÀ   rƒ  r§  r„  r†  rË   r«  r³  Ú_TREE_LEVEL_SIZEÚ_tree_heightrQ  )	r:   ÚunitsizeÚtext_heightr'  Úleafr  rU  rŒ   rž   s	   &        r=   rP  ÚChartView._analyze~  s;  € ð ˆØˆØ×Ñˆð —K‘K×&Ñ&Ö(ˆDØ—-‘-Ø�1œ4 ›:¨D¯J©J¸tÈVð  ó ˆCð —6‘6˜#“;ˆDØ�H‰H�SŒMØ˜•Gœi×5Ñ5Õ5ˆEÜ˜5Ó+ˆHÜ˜k°­7°T¸!µWÕ+<Ó=ŠKñ )ð "ŒØ'ÔØ $× 1Ñ 1°A¼	×8IÑ8IÕ4IÕ IˆÔð —K‘K×%Ñ%Ö'ˆDØ×Ñ˜tÖ$ñ (ð "&×!2Ñ!2°QÕ!6ˆÔð ¤×!;Ñ!;¸d×>OÑ>OÕ!OÕPˆÔð 	�‰Žr@   c                ó˜  € V P                   pV P                  P                  4       V P                  ,          \        P
                  ^,          ,           p\        V P                  4      pV^,           V P                  ,          V n	        ^ ^ W P                  3VR&   V P                  '       d   ^ ^ W P                  3V P                  R&   R# R# )zÈ
Update the scroll-regions for each canvas.  This ensures that
everything is within a scroll-region, so the user can use the
scrollbars to view the entire display.  This does *not*
resize the window.
rj  N)rL  r]   r  rƒ  r-  r„  rº   rB  r³  r´  rO  rÝ  )r:   r'  rŒ   Úlevelss   &   r=   rQ  ÚChartView._resize¤  s«   € ð ×Ñˆð —‘×&Ñ&Ó(¨4¯>©>Õ9¼I×<MÑ<MÐPQÕ<QÕQˆä�T×%Ñ%Ó&ˆØ$ q�j¨D×,BÑ,BÕBˆÔØ  5×*<Ñ*<Ð=ˆˆ.Ñð ××ÐØ12°A°u×>OÑ>OÐ0PˆD×Ñ˜nÓ-ñ r@   c           	     óî  € RpV P                   pV P                  pV P                  p\        P                  p. V n        \        ^ V P                  P                  4       ^,           4       EF‡  pW`P                  ,          V,           pV'       d%   VP                  V^ Wq4      pVP                  V4       V'       d/   VP                  V^ WpP                  4      p	VP                  V	4       VP                  V^ Wq4      p
VP                  V
4       VP                  V^,           ^ \        V4      RV P                  R7      pVP                  V4       V^,          ^ 8X  dM   V'       d   VP!                  XRR7       V'       d   VP!                  X	RR7       VP!                  V
RR7       EK>  V'       d   VP!                  XRR7       V'       d   VP!                  X	RR7       VP!                  V
RR7       EKŠ  	  R# )z^
Draw location lines.  These are vertical gridlines used to
show where each location unit is.
iPÃ  r¡  r¹  Úgray60r¶   Úgray80N)rO  rM  rL  r-  r„  Ú	_loclinesr»   r]   r  rƒ  r   r#  r†  r  r  ra  rÁ   )r:   ÚBOTTOMÚc1Úc2Úc3ÚmarginrK   r:  Út1Út2Út3Út4s   &           r=   Ú_draw_loclinesÚChartView._draw_loclines¸  s  € ð
 ˆØ×ÑˆØ×"Ñ"ˆØ×ÑˆÜ×"Ñ"ˆØˆŒÜ�q˜$Ÿ+™+×0Ñ0Ó2°QÕ6×7ˆAØ—N‘NÕ" VÕ+ˆAçØ—^‘^ A q¨!Ó4�Ø—‘˜RÔ ßØ—^‘^ A q¨!×-BÑ-BÓC�Ø—‘˜RÔ Ø—‘  1 aÓ0ˆBØ�L‰L˜ÔØ—‘  A¥ q¬t°A«w¸tÈ$Ï*É*�ÓUˆBØ�L‰L˜Ôð
 �1�u˜ŒzßØ—M‘M "¨8�MÔ4ßØ—M‘M "¨8�MÔ4Ø—‘˜b x�×0çØ—M‘M "¨8�MÔ4ßØ—M‘M "¨8�MÔ4Ø—‘˜b x�×0ó9 8r@   c           
     óØ  € V P                   P                  4       ^ 8X  d   R# V P                  p\        P                  p\        P                  p\        V P                   P                  4       4       Fõ  w  rEW@P                  ,          V,           pW`P                  ,           pWg,           ^,          pVP                  Wƒ\        V4      V P                  RRR7      p	VP                  V	4      p
VP                  V^,           V
^,          \        P                  ^,          ,
          V^,
          V
^,          \        P                  ^,          ,           RRR7      pVP                  V4       K÷  	  R# )zDraw the sentence string.Nr  r=  r¢  z#f0f0f0rÊ  )r]   r  rM  r-  r„  rE   rÚ  rƒ  r  r  ra  rU  r!  rÛ  r#  )r:   r'  rí  rh  rK   rà  rZ  r\  r:  r  rU  Úrts   &           r=   Ú_draw_sentenceÚChartView._draw_sentenceá  s  € à�;‰;×!Ñ!Ó# qÔ(ÙØ×!Ñ!ˆÜ×"Ñ"ˆÜ×Ñˆä  §¡×!3Ñ!3Ó!5Ö6‰GˆAØ—^‘^Õ# fÕ,ˆBØ—n‘nÕ$ˆBØ•˜A•ˆAØ—-‘-Øœ4 ›:¨D¯J©J¸sÈFð  ó ˆCð —6‘6˜#“;ˆDØ×#Ñ#Ø�Q•Ø�Q•œ9×2Ñ2°QÕ6Õ7Ø�Q•Ø�Q•œ9×2Ñ2°QÕ6Õ7ØØ!ð $ó ˆBð �K‰K˜ŽOó! 7r@   c                óŒ   € V P                    F  pV P                  P                  V4       K   	  . V n        R V n        ^ V n        R # r§   )rG  rO  r  rD  rE  rF  )r:   r  s   & r=   r”  ÚChartView.erase_treeû  s;   € Ø—?”?ˆCØ×Ñ×$Ñ$ SÖ)ñ #àˆŒØ"ˆÔØ ˆÖr@   c                ón  € Vf   V P                   f   R # Vf   V P                   pV P                   V8w  dV   V P                  P                  V4       Uu. uF  p\        V\        4      '       g   K  VNK  	  upV n        Wn         ^ V n        \        V P
                  4      ^ 8X  d   R # V P                   F  pV P                  P                  V4       K   	  V P
                  V P                  ,          pV P                  WAP                  4       4       V P                  4        V P                  P                  4       V P                  ,          ^\         P"                  ,          ,           pVP%                  4       \         P&                  V P(                  ,           ,          p^ ^ WV3V P                  R&   R # u upi )Nrj  )rE  r]   ÚtreesrG   r&   rD  rF  rº   rG  rO  r  Ú_draw_treetokr¼   Ú_draw_treecycler  rƒ  r-  r„  r�   rÜ  r§  )r:   rž   r*  r  ÚtreeÚwÚhs   &&     r=   r/  ÚChartView.draw_tree  sR  € ØŠ<˜D×/Ñ/Ò7ÙØŠ<Ø×&Ñ&ˆDð ×Ñ $Ô&Ø)-¯©×):Ñ):¸4Ô)@ÓXÑ)@ AÄJÈqÔRV×DWŸa˜aÑ)@ÑXˆDŒNØ"&ÔØ#$ˆDÔ ô ˆt�~‰~Ó !Ô#Ùð —?”?ˆCØ×Ñ×$Ñ$ SÖ)ñ #ð �~‰~˜d×2Ñ2Õ3ˆØ×Ñ˜4§¡£Ô.ð 	×ÑÔð �K‰K×"Ñ"Ó$ t§~¡~Õ5¸¼I×<MÑ<MÕ8MÕMˆØ�K‰K‹MœY×7Ñ7¸$×:KÑ:KÕKÕLˆØ-.°°1¨Lˆ×Ñ˜.Ó)ùò- Ys   ÁF2Á0F2c                ó    € V P                   ^,           \        V P                  4      ,          V n         V P                  V P                  4       R# rÝ   )rF  rº   rD  r/  rE  rÔ   s   &r=   Ú
cycle_treeÚChartView.cycle_tree"  s5   € Ø $× 4Ñ 4°qÕ 8¼CÀÇÁÓ<OÕOˆÔØ�‰�t×*Ñ*Ö+r@   c                ób  € \        V P                  4      ^8:  d   R# R\        V P                  4      ,          pV P                  p\        P                  pV P
                  P                  4       V P                  ,          V,           ^,
          pVP                  V^RWP                  R7      pV P                  P                  V4       VP                  V4      w    rg\        \        V P                  4      4       F°  pV^\        V P                  4      V,
          ^,
          ,          ,
          p	W€P                  8X  d   Rp
MRp
VP                  W—^
,           V	^,
          Wy^
,
          V^
,           V
RR7      pV P                  P                  V4       W3R	 lpVP!                  VR
V4       K²  	  R# )rÞ   Nz%d TreesÚne)r  rv   r1   rË  z#fffr¸   rÊ  c                 ó2   € W!n         VP                  4        R # r§   )rF  r/  )râ   r:   rK   s   &&&r=   rŸ   Ú%ChartView._draw_treecycle.<locals>.cbA  s   € Ø'(Ô$Ø—‘Ö r@   r  )rº   rD  rO  r-  r„  r]   r  rƒ  r  r`  rG  rB   rU  r»   rF  Úcreate_polygonr"  )r:   r`  r'  rí  r;  r  Ú_rh  rK   r:  r}   rŸ   s   &           r=   rý  ÚChartView._draw_treecycle&  sY  € Üˆt�~‰~Ó !Ô#Ùð œS §¡Ó0Õ0ˆØ×ÑˆÜ×"Ñ"ˆØ—‘×&Ñ&Ó(¨4¯>©>Õ9¸FÕBÀQÕFˆØ�m‰m˜E 1¨T¸ÇNÁNˆmÓSˆØ�‰×Ñ˜sÔ#Ø—V‘V˜C“[‰
ˆˆ1ˆaô ”s˜4Ÿ>™>Ó*Ö+ˆAØ˜œc $§.¡.Ó1°AÕ5¸Õ9Õ:Õ:ˆAØ×(Ñ(Ô(Ø‘à�Ø×"Ñ"Ø�r•6˜1˜q�5 !¨¥V¨Q°­V¸$Èð #ó ˆCð �O‰O×"Ñ" 3Ô'ð  $ô !ð �J‰J�s˜L¨"Ö-ó# ,r@   c                óÎ  € V P                   p\        P                  p. pV FŽ  p\        V\        4      '       d/   V P                  WrV^,           4      w  r‚VP                  V4       KG  VP                  ^V,          ^,           V P                  ,          ^,          V,           4       V^,          pK�  	  V'       d   \        V4      \        V4      ,          p	M8^V,          ^,           V P                  ,          ^,          V,           p	V^,          pV\        P                  V P                  ,           ,          p
VP                  V	V
RR\        VP                  4       4      RV P                  R7      pV P                   P                  V4       V
\        P                  ,           V P                  ,           p\#        Wa4       EF!  w  r×\        V\        4      '       dK   V'       dC   VP%                  V	W P                  ,           VV^RR7      pV P                   P                  V4       \        V\        4      '       dL   V'       gD   VP%                  V	W P                  ,           VV^RRR	7      pV P                   P                  V4       \        V\        4      '       d   Kß  VP%                  V	W P                  ,           VR
^RR7      pV P                   P                  V4       EK$  	  W’3# )zm
:param index: The index of the first leaf in the tree.
:return: The index of the first leaf after the tree.
r  ÚcenterrÌ  )r  r£  rv   r}   r1   rË  )rŒ   r}   z#048z2 3)rŒ   r}   r  i'  )rO  r-  r„  rG   r&   rü  rB   rƒ  Úsumrº   rÜ  r§  r  r¤  r`  r`  rG  Úzipr   )r:   ÚtreetokÚindexÚdepthr'  rí  Úchild_xsrc  Úchild_xÚnodexÚnodeyr  ÚchildyÚchildxs   &&&&          r=   rü  ÚChartView._draw_treetokG  sd  € ð
 ×ÑˆÜ×"Ñ"ˆð ˆÛˆEÜ˜%¤×&Ò&Ø!%×!3Ñ!3°EÀ%È!Å)Ó!L‘�Ø—‘ Ö(à—‘  U¥¨Q¥°$·.±.Õ @À1Õ DÀvÕ MÔNØ˜•
’ñ ÷ Ü˜“M¤C¨£MÕ1‰Eð ˜•Y •] d§n¡nÕ4°qÕ8¸6ÕAˆEØ�Q�JˆEð œ×3Ñ3°d×6GÑ6GÕGÕHˆØ�m‰mØØØØÜ�W—]‘]“_Ó%ØØ—‘ð ó 
ˆð 	�‰×Ñ˜sÔ#ð œ×3Ñ3Õ3°d×6GÑ6GÕGˆÜ  ×3‰MˆFÜ˜%¤×&Ò&¯5à—m‘mØØ×-Ñ-Õ-ØØØØð $ó �ð —‘×&Ñ& sÔ+Ü˜%¤×&Ò&¯uà—m‘mØØ×-Ñ-Õ-ØØØØØð $ó �ð —‘×&Ñ& sÔ+Ü˜e¤T×*Ô*à—m‘mØØ×-Ñ-Õ-ØØØØð $ó �ð —‘×&Ñ& s×+ñE 4ðH ˆ|Ðr@   c                óF  € V P                   '       d,   V P                   P                  R4       V P                  4        V P                  '       d,   V P                  P                  R4       V P	                  4        V P
                  P                  R4       / V n        \        \        V P                  4      4       F.  pV P                  V,           F  pV P                  W!4       K  	  K0  	  V P                   F  pV P                  V4       K  	  V P                  4        R# )z!
Draw everything (from scratch).
r  N)rO  r  r/  rM  rö  rL  rC  r»   rº   rB  r®  r]   r•  rò  )r:   r˜  rž   s   &  r=   rl   ÚChartView.draw—  sß   € ð ××ÐØ×Ñ×$Ñ$ UÔ+Ø�N‰NÔà× × Ð Ø×!Ñ!×(Ñ(¨Ô/Ø×ÑÔ!à×Ñ×!Ñ! %Ô(ØˆŒô œ˜T×-Ñ-Ó.Ö/ˆCØ×(Ñ(¨×-Ð-�Ø—‘ Ö*ó .ñ 0ð —K”KˆDØ�N‰N˜4Ö ñ  ð 	×ÑÖr@   c                óD   € ^V P                   P                  V/ 4      V&   R# rÝ   rß   rá   s   &&&r=   r£   ÚChartView.add_callback°  rå   r@   c                óf   € Vf   V P                   V R #  V P                   V,          V R #     R # ; ir§   rç   rá   s   &&&r=   rè   ÚChartView.remove_callback³  rê   rë   c                ó˜   € WP                   9  d   R # \        V P                   V,          P                  4       4       F	  pV! V!   K  	  R # r§   rí   rï   s   &&* r=   r�   ÚChartView._fire_callbacks¼  ró   r@   )r`  rj   r]   rL  r´  r³  rK  rH  rB  rC  ra  rA  rè  r_   ra   rM  r†  rb  r§  rO  rÝ  rN  rG  rD  rE  rF  rƒ  r§   )rh  r˜   rx   )r°   )NN)ú#0df)-rP   rQ   rR   rS   r5  rÛ  r„  rÜ  Ú_CHART_LEVEL_SIZErq   rI  rJ  rt  rx  r}  r€  rR  rŒ  r�  rS  rÌ   rž  r«  r•  r  r®  r½  r  r	  r  rP  rQ  rò  rö  r”  r/  r  rý  rü  rl   r£   rè   r�   rU   rV   rW   s   @r=   r-  r-  ²  sâ   ø‡ € ñ,ð\ €MØ€GØÐØÐôW@òr0ôò&8ò7ò8ò7òDò*ò#ò	ôò2ò JôD)#òVNò3ôj7ô>ô#ô#ò$òLQò('1òRò4!ô9ò@,ò.ôBNò`ò28ô÷ð r@   r-  c                   óN   a a€ ] tR tRt oRtV 3R ltV 3R ltV 3R ltRtVt	V ;t
# )ÚEdgeRuleiÊ  z�
To create an edge rule, make an empty base class that uses
EdgeRule as the first base class, and the basic rule as the
second base class.  (Order matters!)
c                ó~   <€ V P                   P                  ^,          pWn        VP                  ^,
          V n        R# rÝ   )Ú	__class__Ú	__bases__Ú_edgeÚ	NUM_EDGES)r:   rž   Úsuperr'  s   && €r=   rq   ÚEdgeRule.__init__Ñ  s,   ø€ Ø—‘×(Ñ(¨Õ+ˆØŒ
ØŸ™¨1Õ,ˆŽr@   c              '  ó®   <"  € V P                   P                  ^,          pW0P                  3,          pVP                  ! WV.VO5!   Rj  x€L
  R#  L5irÝ   )r'  r(  r)  Úapply)r:   rn   rH  rË   r+  r'  s   &&&* €r=   r.  ÚEdgeRule.applyÖ  sA   øé € Ø—‘×(Ñ(¨Õ+ˆØ—*‘*�ÕˆØ—;’;˜t¨GÐ<°eÓ<×<Ô<ùs   ƒA	AÁAÁAc                ó`   <€ V P                   P                  ^,          pVP                  V 4      # ©rÞ   )r'  r(  Ú__str__)r:   r+  r'  s   & €r=   r2  ÚEdgeRule.__str__Û  s&   ø€ Ø—‘×(Ñ(¨Õ+ˆØ�}‰}˜TÓ"Ð"r@   )r*  r)  )rP   rQ   rR   rS   r5  rq   r.  r2  rU   rV   Ú__classcell__)r'  rX   s   @@r=   r%  r%  Ê  s   ù‡ € ñõ-õ
=÷
#õ #r@   r%  c                   ó   € ] tR tRtRtR# )ÚTopDownPredictEdgeRuleià  rO   N©rP   rQ   rR   rS   rU   rO   r@   r=   r6  r6  à  ó   † Ûr@   r6  c                   ó   € ] tR tRtRtR# )ÚBottomUpEdgeRuleiä  rO   Nr7  rO   r@   r=   r:  r:  ä  r8  r@   r:  c                   ó   € ] tR tRtRtR# )ÚBottomUpLeftCornerEdgeRuleiè  rO   Nr7  rO   r@   r=   r<  r<  è  r8  r@   r<  c                   ó   € ] tR tRtRtR# )ÚFundamentalEdgeRuleiì  rO   Nr7  rO   r@   r=   r>  r>  ì  r8  r@   r>  c                   óä  a € ] tR tRt o R2R ltR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR3R4.t. R5OtR tR tR tR tR tR tR tR t R t!R t"R t#R  t$R! t%R" t&R6R$ lt'R% t(R7R& lt)R' t*R( t+],! 4       .t-].! 4       .t/]0! 4       .t1]2! 4       .t3]4! 4       .t5]-]/,           ]5,           t6]1]5,           t7]3]5,           t8R) t9R* t:R+ t;R, t<R- t=R. t>R/ t?R0 t@R1tAV tBR## )8ÚChartParserAppiõ  c                ó$  € V P                  W4       R V n         \        4       V n        V P                  P                  V4       V P                  P	                  RV P
                  4       \        V P                  4      p\        V P                  4      p\        V P                  4      pVP                  RRR7       VP                  RRR7       VP                  RR^R7       V P                  V P                  4       V P                  4        V P                  V4       V P                  V4       V P                  V4       V P                  4        R V n        R V n        V P!                  4        R #    \#        R4       T P                  4        h ; i)	Nr\   rx   ry   ri  r:  r˜   rk  zError creating Tree View)Ú_init_parserra   r
   rb   rc   rd   r   r~   rI  Ú_init_animationÚ_init_chartviewÚ_init_rulelabelr‘  rŽ  Ú_matrixÚ_resultsr’  Úprint)r:   rH  r  rb   Úframe3Úframe2Úframe1s   &&&&   r=   rq   ÚChartParserApp.__init__ö  s7  € à×Ñ˜'Ô*àˆŒ
ð	ä›ˆDŒJØ�J‰J×Ñ˜UÔ#Ø�J‰J�O‰O˜M¨4¯<©<Ô8ô ˜4Ÿ:™:Ó&ˆFÜ˜4Ÿ:™:Ó&ˆFÜ˜4Ÿ:™:Ó&ˆFØ�K‰K˜X¨FˆKÔ3Ø�K‰K˜X¨CˆKÔ0Ø�K‰K˜X¨F¸1ˆKÔ=à×Ñ˜TŸZ™ZÔ(Ø× Ñ Ô"Ø× Ñ  Ô(Ø× Ñ  Ô(Ø×Ñ˜vÔ&Ø×ÑÔ àˆDŒLØ ˆDŒMð ×ÑÖ!øð	ÜÐ,Ô-Ø�L‰LŒNØús   šEE1 Å1Fc                óh   € V P                   f   R # V P                   P                  4        R V n         R # r§   r¨   ©r:   rð   s   &*r=   rd   ÚChartParserApp.destroy  s&   € Ø�:‰:ÒÙØ�
‰
×ÑÔØˆŽ
r@   c                ób   € \        4       '       d   R# V P                  P                  ! V/ VB  R# )zÉ
Enter the Tkinter mainloop.  This function must be called if
this demo is created from a non-interactive program (e.g.
from a secript); otherwise, the demo will close as soon as
the script completes.
N)r'   ra   r›  r0  s   &*,r=   r›  ÚChartParserApp.mainloop!  s%   € ô �9Š9ÙØ�
‰
×Ò˜TÐ, VÔ,r@   c                ó>   € Wn         W n        V P                  4        R # r§   )r?  Ú_tokensÚ_reset_parser)r:   rH  r  s   &&&r=   rB  ÚChartParserApp._init_parser0  s   € ØŒØŒØ×ÑÖr@   c                óx  € \        V P                  4      V n        V P                  P                  V P                  4       V P                  P                  4       V n        \        4       P                  V P                  V P                  4       F  pK  	  V P                  P                  4       V n
        R V n        R # r§   )r"   r?  Ú_cpÚ
initializerS  rn   r]   r    r.  ÚstepÚ_cpsteprC  )r:   Ú	_new_edges   & r=   rT  ÚChartParserApp._reset_parser5  s}   € Ü& t§}¡}Ó5ˆŒØ�‰×Ñ˜DŸL™LÔ)Ø—h‘h—n‘nÓ&ˆŒô &›×-Ñ-¨d¯k©k¸4¿=¹=ÖIˆIÙñ Jð —x‘x—}‘}“ˆŒð ˆŽr@   c                ó°  € \        \        4       R ,          R7      V n        VP                  RV P                  4       \	        V4      V n        V P
                  P                  V P                  P                  R4      4       \        RRV P
                  P                  4       R7      V n	        \        RV P
                  P                  4       R7      V n
        R# )	r1   r^  r_  r\  r6   r8   rY  r]  N)r   r   rb  rc  r   Ú_sizerÄ   Úcgetr@  r`  ra  r”   s   &&r=   rI  ÚChartParserApp._init_fontsD  s‡   € ä¤&£(¨6Õ"2Ô3ˆŒØ�‰˜ §¡Ô/ô ˜D“\ˆŒ
Ø�
‰
�‰�t—}‘}×)Ñ)¨&Ó1Ô2ä [¸ÀdÇjÁjÇnÁnÓFVÔWˆŒÜ °4·:±:·>±>Ó3CÔDˆŽ
r@   c                óè   € \        V P                  4      V n        V P                  P                  ^4       \        V P                  4      V n        V P                  P                  ^4       ^ V n        R# rÝ   )r   ra   Ú_steprÄ   Ú_animateÚ
_animatingrÔ   s   &r=   rC  ÚChartParserApp._init_animationP  sO   € ä˜DŸJ™JÓ'ˆŒ
Ø�
‰
�‰�qÔô ˜tŸz™zÓ*ˆŒØ�‰×Ñ˜!Ôð ˆŽr@   c                óŽ   € \        V P                  V^^R7      V n        V P                  P                  RV P                  4       R# )rÞ   )r/  r0  r›   N)r-  r]   Ú_cvr£   Ú_click_cv_edge)r:   rm   s   &&r=   rD  ÚChartParserApp._init_chartview\  s2   € Ü˜TŸ[™[¨&¸AÈQÔOˆŒØ�‰×Ñ˜h¨×(;Ñ(;Ö<r@   c                óB  € R p\        WV P                  R7      V n        \        V^(RRV P                  R7      V n        V P                  P	                  RR7       V P                  P	                  RR7       \        WP                  RR7      pVP	                  R	R7       R
# )zLast edge generated by:)rv   r1   rÇ  rÿ  )rŒ   r‡   r  r1   r=  r<  ÚStep)Úvariablerv   r;  N)r   r`  Ú_rulelabel1Ú_rulelabel2r~   r   rb  )r:   rm   ÚruletxtrY  s   &&  r=   rE  ÚChartParserApp._init_rulelabel`  s„   € Ø+ˆä  ¸D¿N¹NÔKˆÔÜ Ø˜" X°cÀÇÁô
ˆÔð 	×Ñ×Ñ 6ÐÔ*Ø×Ñ×Ñ 6ÐÔ*Ü˜6¯J©J¸VÔDˆØ�	‰	�wˆ	Ör@   c                ó   € \        V4      p\        V4      pVP                  R RR7       VP                  RRR7       \        VRRRV P                  R7      P                  R	R
7       \        VRRRV P                  R7      P                  RR
7       \        VRRRV P
                  R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       \        V^R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       \        V^R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       \        V^R7      P                  RR
7       \        VRRRV P                  R7      P                  RR
7       R# )rx   r:  ri  rˆ   ry   zReset
Parserz#90c0d0r¸   )rv   rŽ   r-   rw   r;  r<  zTop Down
Strategyr=  zBottom Up
StrategyzBottom Up
Left-Corner StrategyzTop Down Init
Rulez#90f090zTop Down Predict
Ruler  zBottom Up Predict
Rulez"Bottom Up Left-Corner
Predict RulezFundamental
RuleN)r   r~   r   ÚresetÚtop_down_strategyÚbottom_up_strategyÚbottom_up_leftcorner_strategyÚtop_down_initÚtop_down_predictÚ	bottom_upÚbottom_up_leftcornerÚfundamental)r:   rm   rK  rJ  s   &&  r=   r‘  ÚChartParserApp._init_buttonsl  sý  € Ü�v“ˆÜ�v“ˆØ�‰˜¨ˆÔ,Ø�‰˜ VˆÔ,äØØ Ø ØØ—J‘Jô	
÷ ‰$�Gˆ$Ô
ô
 	ØØ%Ø ØØ×*Ñ*ô	
÷ ‰$�Fˆ$Ô
ÜØØ&Ø ØØ×+Ñ+ô	
÷ ‰$�Fˆ$Ô
ÜØØ2Ø ØØ×6Ñ6ô	
÷ ‰$�Fˆ$Ô
äØØ&Ø ØØ×&Ñ&ô	
÷ ‰$�Fˆ$Ô
ÜØØ)Ø ØØ×)Ñ)ô	
÷ ‰$�Fˆ$Ô
Üˆf˜BÔ×$Ñ$¨&Ð$Ô1äØØ*Ø ØØ—N‘Nô	
÷ ‰$�Fˆ$Ô
Üˆf˜BÔ×$Ñ$¨&Ð$Ô1äØØ6Ø ØØ×-Ñ-ô	
÷ ‰$�Fˆ$Ô
Üˆf˜BÔ×$Ñ$¨&Ð$Ô1äØØ$Ø ØØ×$Ñ$ô	
÷ ‰$�Fˆ$Ö
r@   c                óf  € V P                   P                  R V P                  P                  4       V P                   P                  RV P                  P                  4       V P                   P                  RV P                  P
                  4       V P                   P                  RV P                  P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  R	V P                  4       V P                   P                  R
V P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                  4       V P                   P                  RV P                   4       V P                   P                  RV P"                  4       V P                   P                  RV P$                  3R l4       V P                   P                  RV P$                  3R l4       V P                   P                  RV P$                  3R l4       V P                   P                  RV P&                  3R l4       R# )z<Up>z<Down>z<Prior>z<Next>r\   r…  z<F1>z<Control-s>rà  z<Control-r>r*  rU  r'  z<space>z<Control-g>z<Control-t>r}  c                 ó$   € VP                  ^4      # r1  ©rÄ   ©rª   Úas   &&r=   Ú<lambda>Ú/ChartParserApp._init_bindings.<locals>.<lambda>Ó  ó   € ¸¿¹¸a¼r@   rÈ  c                 ó$   € VP                  ^4      # )rƒ   r~  r  s   &&r=   r�  r‚  Ô  rƒ  r@   r«  c                 ó$   € VP                  ^4      # )é   r~  r  s   &&r=   r�  r‚  Õ  rƒ  r@   r©  c                 óJ   € VP                  VP                  4       '       * 4      # r§   )rÄ   r@  )rª   r©  s   &&r=   r�  r‚  Ø  s   € °Q·U±U¸q¿u¹u»w¼;Ô5Gr@   N)ra   rc   rg  rt  rx  r}  r€  rd   ÚhelpÚ
save_chartr“  rr  rs  rt  ru  Ú_stop_animationÚedit_grammarÚedit_sentencerc  rb  rÔ   s   &r=   r’  ÚChartParserApp._init_bindings½  sî  € Ø�
‰
�‰˜ §¡× 2Ñ 2Ô3Ø�
‰
�‰˜ $§(¡(×"6Ñ"6Ô7Ø�
‰
�‰˜	 4§8¡8×#3Ñ#3Ô4Ø�
‰
�‰˜ $§(¡(×"4Ñ"4Ô5Ø�
‰
�‰˜ t§|¡|Ô4Ø�
‰
�‰˜ t§|¡|Ô4Ø�
‰
�‰˜ §	¡	Ô*à�
‰
�‰˜ t§¡Ô7Ø�
‰
�‰˜ t§¡Ô7Ø�
‰
�‰˜ t§z¡zÔ2à�
‰
�‰˜˜T×3Ñ3Ô4Ø�
‰
�‰˜˜T×4Ñ4Ô5Ø�
‰
�‰˜˜T×?Ñ?Ô@Ø�
‰
�‰˜	 4×#7Ñ#7Ô8à�
‰
�‰˜ t×'8Ñ'8Ô9Ø�
‰
�‰˜ t×'9Ñ'9Ô:ð 	�
‰
�‰˜¨¯©Ó@ÔAØ�
‰
�‰˜¨¯©Ó@ÔAØ�
‰
�‰˜¨¯©Ó@ÔAð 	�
‰
�‰˜¨¯©ÓGÖHr@   c                óL
  € \        V P                  4      p\        V^ R7      pVP                  R^ V P                  RR7       VP                  R^ V P                  RR7       VP                  R^ V P
                  RR7       VP                  4        VP                  R	V P                  R
7       VP                  RV P                  R
7       VP                  4        VP                  R^V P                  RR7       VP                  R^ VR7       \        V^ R7      pVP                  R^V P                  RR7       VP                  R^V P                  RR7       VP                  R^ VR7       \        V^ R7      pVP                  R^V P                  R7       VP                  R^ V P                  R7       VP                  R^ VR7       \        V^ R7      pVP                  R^ V P                  RR7       VP                  R^ V P                   RR7       VP                  R^ V P"                  RR7       VP                  4        VP                  RV P$                  R
7       VP                  R V P&                  R
7       VP                  R!V P(                  R
7       VP                  R"V P*                  R
7       VP                  R#V P,                  R
7       VP                  R$^ VR7       \        V^ R7      pVP/                  R%^ V P0                  R&R'7       VP                  4        VP3                  R(^ V P4                  ^ R)7       VP3                  R*^ V P4                  ^R+R,7       VP3                  R-^ V P4                  ^R.R,7       VP3                  R/^ V P4                  ^R0R,7       VP                  R1^VR7       \        V^ R7      pVP3                  R2V P6                  ^ ^
V P8                  R37       VP3                  R4V P6                  ^ ^V P8                  R37       VP3                  R5V P6                  ^ ^V P8                  R37       VP3                  R6V P6                  ^ ^V P8                  R37       VP3                  R7V P6                  ^ ^V P8                  R37       VP                  R8^ VR7       \        V^ R7      pVP                  R9^ V P:                  R7       VP                  R:^ V P<                  R;R7       VP                  R<^ VR7       V P                  P?                  VR=7       R># )?r°   rž  z
Save Chartr£  r¦  r   r¡  zReset ChartzCtrl-rzSave Grammarr°  zLoad Grammarr¤  r¥  r§  r¨  zEdit GrammarzCtrl-gú	Edit TextzCtrl-tÚEditr4  )r`  r2   rw   ÚResultsÚViewzTop Down Strategyr*  zBottom Up StrategyrU  zBottom Up Left-Corner Strategyr'  zBottom Up RulezBottom Up Left-Corner RulezTop Down Init RulezTop Down Predict RulezFundamental RuleÚApplyrk  r©  )r`  r2   rl  r¢  zNo Animation)r`  r2   rl  ÚvaluezSlow Animationr}  )r`  r2   rl  r”  r¢  zNormal AnimationrÈ  zFast Animationr«  ÚAnimateÚTiny)r`  rl  r2   r”  rw   ÚSmallÚMediumÚLargeÚHugeÚZoomÚAboutÚInstructionsÚF1ÚHelpr²  N) r   ra   r³  r‰  r“  rr  r¶  Úsave_grammarÚload_grammarrd   r·  r‹  rŒ  Úview_matrixÚview_resultsrs  rt  ru  rx  ry  rv  rw  rz  Úadd_checkbuttonrb  Úadd_radiobuttonrc  r^  ÚresizeÚaboutrˆ  r¼  )	r:   r½  r¾  ÚeditmenuÚviewmenuÚrulemenuÚanimatemenuÚzoommenuÚhelpmenus	   &        r=   rŽ  ÚChartParserApp._init_menubarÚ  s[  € Ü�t—z‘zÓ"ˆä˜¨Ô+ˆØ×ÑØØØ—O‘OØ ð	 	ô 	
ð 	×ÑØØØ—O‘OØ ð	 	ô 	
ð 	×ÑØ¨1°d·j±jÈhð 	ô 	
ð 	×ÑÔ Ø×Ñ >¸4×;LÑ;LÐÔMØ×Ñ >¸4×;LÑ;LÐÔMØ×ÑÔ Ø×ÑØ A¨t¯|©|Èð 	ô 	
ð 	×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×ÑØ ØØ×%Ñ%Ø ð	 	ô 	
ð 	×ÑØØØ×&Ñ&Ø ð	 	ô 	
ð 	×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×ÑØ ¨A°t×7GÑ7Gð 	ô 	
ð 	×Ñ 9¸À4×CTÑCTÐÔUØ×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×ÑØ%ØØ×*Ñ*Øð	 	ô 	
ð 	×ÑØ&ØØ×+Ñ+Øð	 	ô 	
ð 	×ÑØ2ØØ×6Ñ6Øð	 	ô 	
ð 	×ÑÔ Ø×ÑÐ#3¸T¿^¹^ÐÔLØ×ÑØ.¸×8QÑ8Qð 	ô 	
ð 	×ÑÐ#7À×ASÑASÐÔTØ×ÑØ)°4×3HÑ3Hð 	ô 	
ð 	×ÑÐ#5¸t×?OÑ?OÐÔPØ×Ñ '°Q¸XÐÔFä˜7¨AÔ.ˆØ×#Ñ#Ø A°·
±
Èð 	$ô 	
ð 	×!Ñ!Ô#Ø×#Ñ#Ø ¨A¸¿¹ÈQð 	$ô 	
ð 	×#Ñ#Ø"ØØ—]‘]ØØð 	$ô 	
ð 	×#Ñ#Ø$ØØ—]‘]ØØð 	$ô 	
ð 	×#Ñ#Ø"ØØ—]‘]ØØð 	$ô 	
ð 	×Ñ )°q¸{ÐÔKä˜¨Ô+ˆØ× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×Ñ 7°aÀÇÁÐÔLØ×ÑØ ¨A°t·y±yÈdð 	ô 	
ð 	×Ñ &°A¸HÐÔEà�
‰
×Ñ˜wÐÖ'r@   c                ó€   € WP                   8w  d   V P                  V4       R # V P                  P                  4        R # r§   )rC  Ú_select_edgerg  r  r   s   &&r=   rh  ÚChartParserApp._click_cv_edge}  s,   € Ø—?‘?Ô"à×Ñ˜dÖ#ð �H‰H×ÑÖ!r@   c                ó^   € V P                  V4       V P                  P                  V4       R # r§   )r°  rg  r  r   s   &&r=   Ú_select_matrix_edgeÚ"ChartParserApp._select_matrix_edge‡  s"   € Ø×Ñ˜$ÔØ�‰×Ñ˜4Ö r@   c                ó8  € Wn         V P                  P                  VR 4       V P                  P                  V4       V P                  '       d   V P                  P                  V4       V P                  '       d   V P                  P                  V4       R# R# )z#f00N)rC  rg  r  r/  rF  r  r   s   &&r=   r°  ÚChartParserApp._select_edge‹  sh   € ØŒà�‰×Ñ˜t VÔ,Ø�‰×Ñ˜4Ô à�<�<ˆ<Ø�L‰L×&Ñ& tÔ,Ø�<�<ˆ<Ø�L‰L×"Ñ" 4Ö(ñ r@   c                óØ   € R V n         V P                  P                  4        V P                  P                  4        V P                  '       d   V P                  P                  4        R # R # r§   )rC  rg  r	  r”  rF  rÔ   s   &r=   Ú_deselect_edgeÚChartParserApp._deselect_edge–  sG   € ØˆŒà�‰×ÑÔØ�‰×ÑÔà�<�<ˆ<Ø�L‰L×$Ñ$Ö&ñ r@   c                óš  € V P                  V P                  P                  4       4       V P                  P	                  4        V P                  P                  V4       V P                  P                  VR 4       V P                  P                  V4       V P                  '       d   V P                  P	                  4        V P                  '       d   V P                  P                  V4       V P                  '       d   V P                  P                  V4       V P                  '       d   V P                  P	                  V4       R# R# )r"  N)
Ú_display_rulerW  Úcurrent_chartrulerg  rÌ   r/  r  r  rF  rG  r   s   &&r=   Ú_show_new_edgeÚChartParserApp._show_new_edgeŸ  sÒ   € Ø×Ñ˜4Ÿ8™8×5Ñ5Ó7Ô8à�‰�‰ÔØ�‰×Ñ˜4Ô Ø�‰×Ñ˜t VÔ,Ø�‰×Ñ˜4Ô à�<�<ˆ<Ø�L‰L×ÑÔ!Ø�<�<ˆ<Ø�L‰L×&Ñ& tÔ,Ø�<�<ˆ<Ø�L‰L×"Ñ" 4Ô(à�=�=ˆ=Ø�M‰M× Ñ  Ö&ñ r@   c                óü   € ^ V n          \        V P                  R\        ;'       g    RP	                  4       ^KRR7       R#    \        T P                  R\        ;'       g    RP	                  4       ^KR7        R# ; i)r°   zHelp: Chart Parser Applicationrƒ  Úfixed)rŒ   r1   r  N)rd  r   ra   r5  Ústripr©   s   &*r=   rˆ  ÚChartParserApp.helpµ  sk   € ØˆŒð	ÜØ—
‘
Ø0Ü—�˜B×%Ñ%Ó'ØØ÷øð	ÜØ—
‘
Ø0Ü—�˜B×%Ñ%Ó'Ø÷	ð ús   ‰A §A Á7A;c                ó"   € Rp\        RV4       R# )zNLTK Chart Parser Application
zAbout: Chart Parser ApplicationNz5NLTK Chart Parser Application
Written by Edward Loper)r   )r:   rª   ÚABOUTs   &* r=   r§  ÚChartParserApp.aboutÈ  s   € ØMˆÜÐ2°EÖ:r@   c                ó„  € \        V P                  RR7      pV'       g   R#  \        VR4      ;_uu_ 4       p\        P                  ! V4      pRRR4       XV n        V P                  P                  V4       V P                  '       d   V P                  P                  V4       V P                  '       d   V P                  P                  4        V P                  '       d   V P                  P                  V4       V P                  P                  V4       R#   + '       g   i     LÕ; i  \         d   ph Rp?ii ; i)zLoad a chart from a pickle filerí  rî  Nrÿ  )r   rô  rõ  rö  r   r]   rg  rÌ   rF  r²   rù   rG  rW  rø  r   )r:   rð   r–  r  rn   rª   s   &*    r=   r“  ÚChartParserApp.load_chart×  sÞ   € ä"Ø×+Ñ+¸iô
ˆ÷ Ùð	SÜ�h ×%Ô%¨ÜŸš FÓ+�÷ &àˆDŒKØ�H‰H�O‰O˜EÔ"Ø�|�|ˆ|Ø—‘×&Ñ& uÔ-Ø�|�|ˆ|Ø—‘×*Ñ*Ô,Ø�}�}ˆ}Ø—‘×'Ñ'¨Ô.Ø�H‰H×Ñ˜uÖ%÷ &×%ûô ô 	SØûð	Sús@   £D. ·DÁ;D. Â
,D. Â7+D. Ã#6D. ÄD+	Ä&D. Ä.D?Ä9D:Ä:D?c                ó  € \        V P                  RR7      pV'       g   R#  \        VR4      ;_uu_ 4       p\        P                  ! V P
                  V4       RRR4       R#   + '       g   i     R# ; i  \         d   ph Rp?ii ; i)zSave a chart to a pickle filerí  rî  Nrñ  )r   rô  rõ  rö  r÷  r]   rø  r   rù  s   &*   r=   r‰  ÚChartParserApp.save_chartî  si   € ä$Ø×+Ñ+¸iô
ˆ÷ Ùð	RÜ�h ×%Ô%¨Ü—’˜DŸK™K¨Ô1÷ &×%×%Ò%ûäô 	RØûð	Rús4   £A7 ·"A#ÁA7 Á#A4	Á.A7 Á4A7 Á7BÂBÂBc                ó&  € \        V P                  RR7      pV'       g   R#  VP                  R4      '       d5   \        VR4      ;_uu_ 4       p\        P
                  ! V4      pRRR4       M@\        V4      ;_uu_ 4       p\        P                  ! VP                  4       4      pRRR4       V P                  X4       R#   + '       g   i     L#; i  + '       g   i     L6; i  \         d   p\        RRT,          4        Rp?R# Rp?ii ; i)z!Load a grammar from a pickle fileú.cfgrî  Nrí  rÿ  zError Loading GrammarúUnable to open file: %r)r   ÚGRAMMAR_FILE_TYPESr  rõ  rö  r   r   Ú
fromstringÚreadru  rø  r   )r:   rð   r–  r  rH  rª   s   &*    r=   r¡  ÚChartParserApp.load_grammarü  sÇ   € ä"Ø×-Ñ-Àô
ˆ÷ Ùð		UØ× Ñ  ×+Ò+Ü˜( D×)Ô)¨VÜ$Ÿkšk¨&Ó1�G÷ *Ð)ô ˜(—^”^ vÜ!Ÿnšn¨V¯[©[«]Ó;�G÷ $à×Ñ˜WÖ%÷ *×)ú÷ $—^ûô ô 	UÜÐ-Ð/HÈ8Õ/S×TÒTûð	UúsL   £C' ºC' ÁCÁ%C' Â%CÂ&C' ÃC	ÃC' ÃC$	ÃC' Ã'DÃ2DÄDc                óº  € \        V P                  R R7      pV'       g   R#  VP                  R4      '       dM   \        VR4      ;_uu_ 4       p\        P
                  ! V P                  V P                  3V4       RRR4       R# \        VR4      ;_uu_ 4       pV P                  P                  4       pV Uu. uF3  qUP                  4       V P                  P                  4       8X  g   K1  VNK5  	  ppV Uu. uF3  qUP                  4       V P                  P                  4       8w  g   K1  VNK5  	  ppV F  pVP                  RV,          4       K  	  V F  pVP                  RV,          4       K  	  RRR4       R#   + '       g   i     R# ; iu upi u upi   + '       g   i     R# ; i  \         d   p	\        RRT,          4        Rp	?	R# Rp	?	ii ; i)	rË  rî  Nrí  rñ  rÿ  z%s
zError Saving GrammarrÌ  )r   rÍ  r  rõ  rö  r÷  r]   rS  r?  ÚproductionsrC   r¼   Úwriterø  r   )
r:   rð   r–  rú  ÚprodsÚpr¼   ÚrestÚprodrª   s
   &*        r=   r   ÚChartParserApp.save_grammar	  sj  € Ü$Ø×-Ñ-Àô
ˆ÷ Ùð	TØ× Ñ  ×+Ò+Ü˜( D×)Ô)¨WÜ—K’K §¡¨d¯l©lÐ ;¸WÔE÷ *Ñ)ô ˜( C×(Ô(¨GØ ŸM™M×5Ñ5Ó7�EÙ(-ÓR© 1·±³¸D¿M¹M×<OÑ<OÓ<QÑ1QŸQ˜Q©�EÐRÙ',ÓQ¡u !·±³¸4¿=¹=×;NÑ;NÓ;PÑ0PŸA˜A¡u�DÐQÛ %˜ØŸ™ f¨t¥mÖ4ñ !&ã $˜ØŸ™ f¨t¥mÖ4ñ !%÷ )Ñ(÷ *×)Ð)üò
 SùÚQ÷ )×(Ð(ûô ô 	TÜÐ,Ð.GÈ(Õ.R×SÒSûð	Tús‰   £F1 ºF1 Á.E?Á<F1 ÂF1 ÂFÂ9.FÃ,FÃ2FÃ8.FÄ+FÄ1AFÅ5F1 Å?F	Æ
F1 ÆF1 Æ
FÆF.	Æ(F1 Æ.F1 Æ1GÆ<GÇGc                ó¶  € ^ V n         V P                  4        V P                  P                  V P                  4       V P
                  '       d&   V P
                  P                  V P                  4       V P
                  '       d   V P
                  P                  4        V P                  '       d(   V P                  P                  V P                  4       R# R# r¯   )	rd  rT  rg  rÌ   r]   rF  r²   rù   rG  rN  s   &*r=   rr  ÚChartParserApp.reset$	  s…   € ØˆŒØ×ÑÔØ�‰�‰˜Ÿ™Ô$Ø�<�<ˆ<Ø�L‰L×"Ñ" 4§;¡;Ô/Ø�<�<ˆ<Ø�L‰L×&Ñ&Ô(Ø�=�=ˆ=Ø�M‰M×#Ñ# D§K¡KÖ0ñ r@   c                ó\   € \        V P                  V P                  V P                  4       R # r§   )r   ra   r?  ru  r©   s   &*r=   r‹  ÚChartParserApp.edit_grammar3	  s   € Ü�$—*‘*˜dŸm™m¨T×-=Ñ-=Ö>r@   c                ó¦   € Wn         V P                  P                  V4       V P                  '       d   V P                  P                  V4       R # R # r§   )r?  rW  ru  rG  rt  s   &&r=   ru  ÚChartParserApp.set_grammar6	  s9   € ØŒØ�‰×Ñ˜WÔ%Ø�=�=ˆ=Ø�M‰M×%Ñ% gÖ.ñ r@   c                óˆ   € R P                  V P                  4      pRpRp\        V P                  W$V P                  V4       R# )ri  r�  zEnter a new sentence to parse.N)r¥  rS  r   ra   Úset_sentence)r:   rª   Úsentencerb   Úinstrs   &*   r=   rŒ  ÚChartParserApp.edit_sentence<	  s6   € Ø—8‘8˜DŸL™LÓ)ˆØˆØ0ˆÜ�D—J‘J °×1BÑ1BÀEÖJr@   c                ób   € \        VP                  4       4      V n        V P                  4        R # r§   )rÃ   ÚsplitrS  rr  )r:   rá  s   &&r=   rà  ÚChartParserApp.set_sentenceB	  s   € Ü˜HŸN™NÓ,Ó-ˆŒØ�
‰
Žr@   c                óì   € V P                   e   V P                   P                  4        \        V P                  V P                  4      V n         V P                   P                  RV P                  4       R # )Nr›   )rF  rd   rZ   ra   r]   r£   r³  r©   s   &*r=   r¢  ÚChartParserApp.view_matrixJ	  sL   € Ø�<‰<Ò#Ø�L‰L× Ñ Ô"Ü& t§z¡z°4·;±;Ó?ˆŒØ�‰×!Ñ! (¨D×,DÑ,DÖEr@   c                ó¶   € V P                   e   V P                   P                  4        \        V P                  V P                  V P
                  4      V n         R # r§   )rG  rd   r7  ra   r]   r?  r©   s   &*r=   r£  ÚChartParserApp.view_resultsP	  s8   € Ø�=‰=Ò$Ø�M‰M×!Ñ!Ô#Ü(¨¯©°T·[±[À$Ç-Á-ÓPˆŽr@   c                óf   € ^ V n         V P                  V P                  P                  4       4       R# r¯   )rd  rŒ  r^  r@  rÔ   s   &r=   r¦  ÚChartParserApp.resizeY	  s"   € ØˆŒØ×Ñ˜4Ÿ:™:Ÿ>™>Ó+Ö,r@   c                ó   € V P                   P                  V4       V P                  P                  \	        V4      ) R 7       V P
                  P                  \	        V4      ) R 7       V P                  P                  \	        V4      ) R 7       R# r‰  )rg  rŒ  ra  r…  rŠ  r`  rb  r‹  s   &&r=   rŒ  ÚChartParserApp.set_font_size]	  se   € Ø�‰×Ñ˜tÔ$Ø�
‰
×Ñ¤3 t£9 *ÐÔ-Ø�‰× Ñ ¤s¨4£y jÐ Ô1Ø�‰×Ñ¤c¨$£i ZÐÖ0r@   c                óH   € \        V P                  P                  4       4      # r§   )rŠ  r^  r@  rÔ   s   &r=   r�  ÚChartParserApp.get_font_sizec	  s   € Ü�4—:‘:—>‘>Ó#Ó$Ð$r@   Nc                ó˜  € V P                   '       d
   ^ V n         R# V P                  R4       V P                  P                  4       '       d�   V P                  pVe`   Ve\   V P
                  P                  V! V4      .4       V P                  4       pVf$   V P                  P                  4        RV n        R# R# V P
                  P                  V4       V P                  4        R# V P
                  P                  V4       V P                  P                  4       '       d   ^V n         V P                  4        R# V P                   F	  pVe   K	   M	  V P                  P                  4        V P                  '       d   V P                  P                  4        V P                  '       d   V P                  P                  4        R# R# r¯   )rd  r»  rb  r@  rC  rW  Úset_strategyÚ_apply_strategyrg  r	  rc  Ú_animate_strategyrZ  rÌ   rF  rG  )r:   ÚstrategyÚedge_strategyÚ	selectionÚnewedgerž   s   &&&   r=   Úapply_strategyÚChartParserApp.apply_strategyj	  sN  € à�?�?ˆ?ØˆDŒOÙð 	×Ñ˜4Ô ð �:‰:�>‰>×ÒØŸ™ˆIØÒ%¨MÒ,Eà—‘×%Ñ%¡}°YÓ'?Ð&@ÔAØ×.Ñ.Ó0�ð ’?Ø—H‘H×(Ñ(Ô*Ø&*�D–Oñ #ð —‘×%Ñ% hÔ/Ø×$Ñ$Ö&ð �H‰H×!Ñ! (Ô+Ø�}‰}× Ñ ×"Ò"Ø"#�”Ø×&Ñ&Ö(à ŸLœL�DØ”|Ùñ )ð —‘—‘Ô!Ø—<—<�<Ø—L‘L×'Ñ'Ô)Ø—=—=�=Ø—M‘M×(Ñ(Ö*ñ !r@   c                ó   € ^ V n         R# r¯   )rd  r©   s   &*r=   rŠ  ÚChartParserApp._stop_animation’	  s	   € ØˆŽr@   c                ó<  € V P                   ^ 8X  d   R# V P                  4       e÷   V P                  P                  4       ^ 8X  g    V P                  P                  4       ^8X  d   R# V P                  P                  4       ^8X  d)   V P
                  P                  RV P                  4       R# V P                  P                  4       ^8X  d)   V P
                  P                  RV P                  4       R# V P
                  P                  ^V P                  4       R# R# )r°   Ni¸  iè  )rd  ró  rc  r@  rb  ra   Úafterrô  )r:   Úspeeds   &&r=   rô  Ú ChartParserApp._animate_strategy•	  sÇ   € Ø�?‰?˜aÔÙØ×ÑÓ!Ò-Ø�}‰}× Ñ Ó" aÔ'¨4¯:©:¯>©>Ó+;¸qÔ+@ÙØ�}‰}× Ñ Ó" aÔ'Ø—
‘
× Ñ   t×'=Ñ'=Ö>Ø—‘×"Ñ"Ó$¨Ô)Ø—
‘
× Ñ   t×'=Ñ'=Ö>à—
‘
× Ñ   T×%;Ñ%;Ö<ñ .r@   c                óZ   € \        V P                  4      pVe   V P                  V4       V# r§   )ÚnextrZ  r½  )r:   Únew_edges   & r=   ró  ÚChartParserApp._apply_strategy¢	  s)   € Ü˜Ÿ™Ó%ˆàÒØ×Ñ Ô)Øˆr@   c                ó–   € Vf   RV P                   R&   R # \        V4      pW P                   R&   V P                  P                  4       pR # )Nrƒ  rv   )rn  r¤  rg  r�  )r:   Úruleræ  r\  s   &&  r=   r»  ÚChartParserApp._display_rule©	  s@   € ØŠ<Ø')ˆD×Ñ˜VÓ$ä�t“9ˆDØ'+×Ñ˜VÑ$Ø—8‘8×)Ñ)Ó+ŠDr@   c                ó>   € V P                  V P                  R 4       R # r§   )rù  Ú_TD_INITr©   s   &*r=   rv  ÚChartParserApp.top_down_initÂ	  s   € Ø×Ñ˜DŸM™M¨4Ö0r@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_TD_PREDICTr6  r©   s   &*r=   rw  ÚChartParserApp.top_down_predictÅ	  s   € Ø×Ñ˜D×,Ñ,Ô.DÖEr@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_BU_RULEr:  r©   s   &*r=   rx  ÚChartParserApp.bottom_upÈ	  s   € Ø×Ñ˜DŸM™MÔ+;Ö<r@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_BU_LC_RULEr<  r©   s   &*r=   ry  Ú#ChartParserApp.bottom_up_leftcornerË	  s   € Ø×Ñ˜D×,Ñ,Ô.HÖIr@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_FUNDAMENTALr>  r©   s   &*r=   rz  ÚChartParserApp.fundamentalÎ	  s   € Ø×Ñ˜D×-Ñ-Ô/BÖCr@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_BU_STRATEGYr:  r©   s   &*r=   rt  Ú!ChartParserApp.bottom_up_strategyÑ	  s   € Ø×Ñ˜D×-Ñ-Ô/?Ö@r@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_BU_LC_STRATEGYr<  r©   s   &*r=   ru  Ú,ChartParserApp.bottom_up_leftcorner_strategyÔ	  s   € Ø×Ñ˜D×0Ñ0Ô2LÖMr@   c                óF   € V P                  V P                  \        4       R # r§   )rù  Ú_TD_STRATEGYr6  r©   s   &*r=   rs  Ú ChartParserApp.top_down_strategy×	  s   € Ø×Ñ˜D×-Ñ-Ô/EÖFr@   )rc  rd  r`  r]   rW  rZ  rg  ra  r?  rF  rG  ra   rm  rn  rC  r^  rb  rb  rS  )zChart Parser Applicationr*  r+  ))zPlaintext grammar filerË  r*  r+  r§   r1  )CrP   rQ   rR   rS   rq   rd   r›  rB  rT  rI  rC  rD  rE  r‘  r’  rŽ  rh  r³  r°  r¸  r½  rˆ  r§  rô  rÍ  r“  r‰  r¡  r   rr  r‹  ru  rŒ  rà  r¢  r£  r¦  rŒ  r�  rù  rŠ  rô  ró  r»  r#   r	  r$   r  r   r  r   r  r!   r  r  r  r  rv  rw  rx  ry  rz  rt  ru  rs  rU   rV   rW   s   @r=   r@  r@  õ  sz  ø‡ € ô#òJò	-òò
ò
Eò
ò=ò
 òOòbIò:](òF"ò!ò	)ò'ò'ò,ò&;ð 3Ð4FÐGÐòÐòSò.RòUò$Tò,	1ò?ò/òKòòFòQò-ò1ò%ô&+òPô=òò,ñ  Ó!Ð"€HÙ%Ó'Ð(€KÙ#Ó%Ð&€HÙ-Ó/Ð0€KÙ-Ó/Ð0€Lð ˜kÕ)¨LÕ8€LØ˜lÕ*€LØ! LÕ0€Oò1òFò=òJòDòAòN÷Gð Gr@   r@  c                  ól  € \         P                  ! R 4      p RpRp\        VP                  4       4      p\	        R4       V P                  4        F   p\	        R\        V4      R,           34       K"  	  \	        R4       \	        RV,          4       \	        R4       \        W4      P                  4        R	# )
aW  
    # Grammatical productions.
        S -> NP VP
        VP -> VP PP | V NP | V
        NP -> Det N | NP PP
        PP -> P NP
    # Lexical productions.
        NP -> 'John' | 'I'
        Det -> 'the' | 'my' | 'a'
        N -> 'dog' | 'cookie' | 'table' | 'cake' | 'fork'
        V -> 'ate' | 'saw'
        P -> 'on' | 'under' | 'with'
    z*John ate the cake on the table with a forkzJohn ate the cake on the tablez
grammar= (z    Ú,Ú)ztokens = %rz,Calling "ChartParserApp(grammar, tokens)"...N)	r   rÎ  rÃ   rå  rH  rÒ  r  r@  r›  )rH  Úsentr  r  s       r=   Úappr$  Û	  s�   € Ü�nŠnð	ó€Gð  8€DØ+€DÜ�$—*‘*“,Ó€Fä	ˆ,ÔØ×#Ñ#Ö%ˆÜˆv”t˜D“z CÕ'Ð(Ö)ñ &ä	ˆ#„JÜ	ˆ-˜&Õ
 Ô!Ü	Ð
8Ô9Ü�7Ó#×,Ñ,Ö.r@   Ú__main__r$  )Br5  Úos.pathr  rö  Útkinterr   r   r   r   r   r   r   r	   r
   r   Útkinter.filedialogr   r   Útkinter.fontr   Útkinter.messageboxr   r   Ú	nltk.drawr   r   r   Únltk.draw.utilr   r   r   r   r   r   Únltk.grammarr   r   Únltk.parse.chartr   r   r   r   r    r!   r"   r#   r$   r%   Ú	nltk.treer&   Ú	nltk.utilr'   r)   rZ   r7  r|  r-  r%  r6  r:  r<  r>  r@  r$  rP   Ú__all__rO   r@   r=   Ú<module>r2     s  ðñó< Û ÷÷ ÷ ÷ BÝ ß 2ç GÑ G÷÷ ÷ *÷÷ ÷ õ Ý ôˆ}ô ÷@I)ñ I)÷bL)ñ L)÷hJTñ JT÷dNñ N÷p#ñ #ô,	˜XÐ'9ô 	ô	�xÐ!4ô 	ô	 Ð+Eô 	ô	˜(Ð$=ô 	÷cGñ cGòL/ð< ˆzÔÙ„Eð ˆ'‚r@   