Ë
    çÍ:jåN ã                   ó  — d Z ddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZmZmZ ddlmZmZmZmZm Z m!Z! dd	l"m#Z#m$Z$ dd
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5  G d„ de«      Z6 G d„ d«      Z7 G d„ d«      Z8 G d„ d«      Z9 G d„ d«      Z: G d„ d«      Z; G d„ de;e.«      Z< G d„ de;e'«      Z= G d„ de;e&«      Z> G d „ d!e;e+«      Z? G d"„ d#«      Z@d$„ ZAeBd%k(  r eA«        d&gZCy)'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)Úpickle_load)ÚTree)Úin_idlec                   ó6   — e Zd Zej                  d   Zd„ Zd„ Zy)ÚEdgeListÚ
rightarrowc                 ó    — |j                  dd¬«       |j                  ddd¬«       |j                  dd	¬«       |j                  d
dd¬«       y )NÚterminalz#006000)Ú
foregroundÚarrowÚsymbolÚ0)ÚfontÚ	underlineÚdotz#000000ÚnonterminalÚblue)Ú	helveticaéôÿÿÿÚbold)r/   r3   )Ú
tag_config)ÚselfÚ
textwidgetÚoptionss      úm/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/app/chartparser_app.pyÚ_init_colortagszEdgeList._init_colortags_   sX   € Ø×Ñ˜j°YÐÔ?Ø×Ñ˜g¨HÀÐÔDØ×Ñ˜e°	ÐÔ:Ø×ÑØ fÐ3Mð 	õ 	
ó    c                 óî  — g }|j                  d|j                  «       z  df«       |j                  | j                  df«       t        |j	                  «       «      D ]t  \  }}||j                  «       k(  r|j                  d«       t        |t        «      r%|j                  d|j                  «       z  df«       Œ_|j                  d|z  df«       Œv |j                  «       r|j                  d«       |S )Nz%s	r6   r0   )z *r5   z %sz %rr.   )
ÚappendÚlhsÚARROWÚ	enumerateÚrhsr5   Ú
isinstancer   r1   Úis_complete)r<   ÚitemÚcontentsÚiÚelts        r?   Ú
_item_reprzEdgeList._item_reprg   sÉ   € ØˆØ�‰˜ $§(¡(£*Ñ,¨mÐ<Ô=Ø�‰˜Ÿ™ WÐ-Ô.Ü §¡£
Ó+ò 	;‰FˆAˆsØ�D—H‘H“JŠØ—‘ Ô.Ü˜#œ{Ô+Ø—‘ ¨¯©«Ñ!5°}Ð EÕFà—‘ ¨¡¨jÐ 9Õ:ð	;ð ×ÑÔØ�O‰O˜MÔ*ØˆrA   N)Ú__name__Ú
__module__Ú__qualname__r   ÚSYMBOLSrE   r@   rN   © rA   r?   r+   r+   \   s   „ Ø× Ñ  Ñ.€Eò
órA   r+   c                   óœ   — e Zd ZdZ	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zy)ÚChartMatrixViewzS
    A view of a chart that displays the contents of the corresponding matrix.
    c                 ó,  — || _         g | _        g | _        d | _        |rmt	        |«      | _        | j
                  j                  |«       | j
                  j                  d| j                  «       | j                  | j
                  «       nt        |«      | _        | j                  | j
                  «       | j                  | j
                  «       |r| j                  | j
                  «       nd | _        i | _        d| _        | j#                  «        y )Nú<Control-q>r   )Ú_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Útoplevelr]   Úshow_numedgess         r?   Ú__init__zChartMatrixView.__init__�   sÉ   € ð ˆŒØˆŒØˆŒà"ˆÔáÜ! &Ó)ˆDŒJØ�J‰J×Ñ˜UÔ#Ø�J‰J�O‰O˜M¨4¯<©<Ô8Ø�O‰O˜DŸJ™JÕ'ä˜v›ˆDŒJà×Ñ˜$Ÿ*™*Ô%Ø�‰˜Ÿ
™
Ô#ÙØ×Ñ §
¡
Õ+à#'ˆDÔ àˆŒàˆŒà�	‰	�rA   c                 ó\   — t        |d| j                  ¬«      }|j                  ddd¬«       y )NÚQuit©ÚtextÚcommandÚbottomr   Únone©ÚsideÚexpandÚfill)r   r_   Úpack)r<   ÚrootÚquits      r?   r`   zChartMatrixView._init_quitŸ   s&   € Ü�d °·±Ô>ˆØ�	‰	�x¨°ˆ	Õ7rA   c                 ó®   — t        |dd¬«      }|j                  ddddd¬	«       t        |d
d
d¬«      | _        | j                  j                  dd¬«       y )Né   Úsunken©ÚborderÚreliefr   rs   é   é   Útop)rv   rw   ÚpadxÚpadyru   éÈ   Úwhite)ÚwidthÚheightÚ
background)rv   rw   )r   rx   r   Ú_canvas)r<   ry   Úcframes      r?   ra   zChartMatrixView._init_matrix£   sO   € Ü�t A¨hÔ7ˆØ�‰˜1 6°¸ÀˆÔFÜ˜f¨C¸ÈÔPˆŒØ�‰×Ñ ¨ÐÕ0rA   c                 ód   — t        |d¬«      | _        | j                  j                  ddd¬«       y )Nz0 edges©rp   r   rs   rƒ   )rv   rw   ru   )r   rd   rx   ©r<   ry   s     r?   rc   zChartMatrixView._init_numedges©   s,   € Ü$ T°	Ô:ˆÔØ×Ñ×!Ñ!¨°¸eÐ!ÕDrA   c                 óà   — t        |g dd¬«      | _        | j                  j                  dddd¬«       | fd	„}| j                  j                  d
|«       | j                  j	                  «        y )Né   é   )rˆ   r‰   rƒ   r�   Úbothr‚   )ru   rv   rw   r…   c                 ó(   — |j                  d| «       y ©NÚselect©Ú_fire_callbacks)Úedger<   s     r?   Úcbz&ChartMatrixView._init_list.<locals>.cb±   ó   € Ø× Ñ  ¨4Õ0rA   r–   )r+   Ú_listrx   Úadd_callbackÚfocus)r<   ry   rš   s      r?   rb   zChartMatrixView._init_list­   sZ   € Ü˜d B¨b¸Ô;ˆŒ
Ø�
‰
�‰˜U¨1°6ÀˆÔBàó 	1ð 	�
‰
×Ñ ¨"Ô-Ø�
‰
×ÑÕrA   c                 óŽ   — | j                   €y 	 | j                   j                  «        d | _         y # t        $ r
 Y d | _         y w xY w©N©r\   r_   Ú	Exception©r<   Úes     r?   r_   zChartMatrixView.destroy·   óH   € Ø�:‰:ÐØð	Ø�J‰J×ÑÔ ð ˆ�
øô ò 	ØØˆ�
ð	úó   �1 ±	AÁAc                 ó^   — || j                   ur|| _         d| _        | j                  «        y y ©Nr   )rX   rf   rg   ©r<   ri   s     r?   Ú	set_chartzChartMatrixView.set_chartÀ   s*   € Ø˜Ÿ™Ñ#ØˆDŒKØˆDŒOØ�I‰I�Kð $rA   c                 ót  — | j                   €y t        | j                  «      }t        |«      D ��cg c]  }t        |«      D �cg c]  }d‘Œ c}‘Œ }}}| j                  D ].  }||j                  «          |j                  «       xx   dz  cc<   Œ0 t        |«      D ]ý  }t        ||«      D ]ì  }||   |   dk(  rd}nDdj                  t        ddd||   |   z  dz  z   «      t        ddd||   |   z  dz  z
  «      «      }| j                  |   |   }| j                  j                  ||¬	«       ||f| j                  k(  r:| j                  j                  |d
d¬«       | j                  j                  |«       ŒÏ| j                  j                  |dd¬«       Œî Œÿ t        | j                  j                  | j                  ¬«      «      }| j                   j#                  |«       | j                  j%                  «       | _        | j(                  �d| j&                  z  | j(                  d<   y y c c}w c c}}w )Nr   r�   Úgray20z#00{:02x}{:02x}éÿ   é2   é€   é
   ©rw   z#00ffffr‚   )Úoutlinerˆ   Úblack)Úspanz%d edgesrp   )r\   ÚlenrY   ÚrangerX   ÚstartÚendÚformatÚminÚmaxr‹   Ú
itemconfigr[   Ú	tag_raiseÚlistr–   rœ   ÚsetÚ	num_edgesrf   rd   )	r<   ÚNÚjrL   Ú
cell_edgesr™   ÚcolorÚcell_tagÚedgess	            r?   ÚupdatezChartMatrixView.updateÆ   s  € Ø�:‰:ÐØô �—‘ÓˆÜ5:¸1³X×>°¤%¨£(Ö+˜Q’qÔ+Ð>ˆ
Ñ>Ø—K‘Kò 	6ˆDØ�t—z‘z“|Ñ$ T§X¡X£ZÓ0°AÑ5Ô0ð	6ô �q“ò 	PˆAÜ˜1˜a“[ò P�Ø˜a‘= Ñ# qÒ(Ø$‘Eà-×4Ñ4Ü˜C  c¨J°q©M¸!Ñ,<Ñ&<¸rÑ&AÑ!AÓBÜ˜A˜s S¨:°a©=¸Ñ+;Ñ%;¸bÑ%@Ñ@ÓAó�Eð  Ÿ;™; q™>¨!Ñ,�Ø—‘×'Ñ'¨°uÐ'Ô=Ø�q�6˜T×0Ñ0Ò0Ø—L‘L×+Ñ+¨H¸iÈqÐ+ÔQØ—L‘L×*Ñ*¨8Õ4à—L‘L×+Ñ+¨H¸gÈQÐ+ÕOñPð	Pô$ �T—[‘[×'Ñ'¨T×-@Ñ-@Ð'ÓAÓBˆØ�
‰
�‰�uÔð Ÿ+™+×/Ñ/Ó1ˆŒØ×ÑÐ+Ø+5¸¿¹Ñ+GˆD× Ñ  Ò(ð ,ùò9 ,ùÓ>s   ±H4Á	H/ÁH4È/H4c                 ó^   — | j                   j                  dd¬«       | j                  «        y )NÚinactiveboxÚhidden©Ústate©r‹   r¼   rÇ   ©r<   s    r?   ÚactivatezChartMatrixView.activateë   ó"   € Ø�‰×Ñ °XÐÔ>Ø�‰�rA   c                 ó^   — | j                   j                  dd¬«       | j                  «        y )NrÉ   ÚnormalrË   rÍ   rÎ   s    r?   Ú
inactivatezChartMatrixView.inactivateï   rÐ   rA   c                 óB   — d| j                   j                  |i «      |<   y ©Nr�   ©re   Ú
setdefault©r<   ÚeventÚfuncs      r?   r�   zChartMatrixView.add_callbackó   ó   € Ø67ˆ�‰×"Ñ" 5¨"Ó-¨dÒ3rA   Nc                 ód   — |€| j                   |= y 	 | j                   |   |= y # t        $ r Y y w xY wr    ©re   ÚKeyErrorrØ   s      r?   Úremove_callbackzChartMatrixView.remove_callbackö   ó;   € Øˆ<Ø—‘ Ñ&ðØ—O‘O EÑ*¨4Ñ0øÜò Ùðúó   ’# £	/®/c                 ó‚   — || j                   vry t        | j                   |   j                  «       «      D ]  } ||Ž  Œ	 y r    ©re   r¾   Úkeys©r<   rÙ   ÚargsÚcb_funcs       r?   r˜   zChartMatrixView._fire_callbacksÿ   ó>   € Ø˜Ÿ™Ñ'ØÜ˜DŸO™O¨EÑ2×7Ñ7Ó9Ó:ò 	ˆGÙ�TŠNñ	rA   c                 óè   — | j                   €y ||f| j                  k(  r(| j                  j                  «       | j                  k(  ry ||f| _        | j                  «        | j                  d||«       y )NÚselect_cell)r\   r[   rX   rÀ   rf   rÇ   r˜   ©r<   rL   rÂ   s      r?   rê   zChartMatrixView.select_cell  sg   € Ø�:‰:ÐØð ˆqˆ6�T×(Ñ(Ò(¨T¯[©[×-BÑ-BÓ-DÈÏÉÒ-WØà  !˜fˆÔØ�‰Œð 	×Ñ˜]¨A¨qÕ1rA   c                 ó‚   — | j                   €y d | _        | j                  j                  g «       | j	                  «        y r    )r\   r[   rœ   r¿   rÇ   rÎ   s    r?   Údeselect_cellzChartMatrixView.deselect_cell  s0   € Ø�:‰:ÐØØ"ˆÔØ�
‰
�‰�rÔØ�‰�rA   c                 ól   — | j                   ||fk(  r| j                  «        y | j                  ||«       y r    )r[   rí   rê   rë   s      r?   Ú_click_cellzChartMatrixView._click_cell  s0   € Ø×Ñ 1 a &Ò(Ø×ÑÕ à×Ñ˜Q Õ"rA   c                 ót   —  | j                   |j                  «       Ž  | j                  j                  |«       y r    )rê   r´   rœ   Úview©r<   r™   s     r?   Ú	view_edgezChartMatrixView.view_edge!  s(   € Øˆ×Ñ˜$Ÿ)™)›+Ñ&Ø�
‰
�‰˜ÕrA   c                 óŽ   — | j                   €y  | j                  |j                  «       Ž  | j                  j	                  |«       y r    )r\   rê   r´   rœ   Úmarkrò   s     r?   Ú	mark_edgezChartMatrixView.mark_edge%  s5   € Ø�:‰:ÐØØˆ×Ñ˜$Ÿ)™)›+Ñ&Ø�
‰
�‰˜ÕrA   c                 óT   — | j                   €y | j                  j                  |«       y r    )r\   rœ   Úunmarkrò   s     r?   Úunmark_edgezChartMatrixView.unmark_edge+  s!   € Ø�:‰:ÐØØ�
‰
×Ñ˜$ÕrA   c                 óŽ   — | j                   €y  | j                  |j                  «       Ž  | j                  j	                  |«       y r    )r\   rê   r´   rœ   Úmarkonlyrò   s     r?   Úmarkonly_edgezChartMatrixView.markonly_edge0  s7   € Ø�:‰:ÐØØˆ×Ñ˜$Ÿ)™)›+Ñ&Ø�
‰
×Ñ˜DÕ!rA   c           	      ó"  — | j                   €y dx}}d}| j                  }|j                  d«       | j                  j	                  «       dz   }t        |d   «      |z
  |z  }t        |d   «      |z
  |z
  |z  }|j                  d«       t        |«      D ]¸  }|j                  |dz
  ||z  |dz  z   |z   t        |«      d¬	«       |j                  ||z  |dz  z   |z   ||z  |z   dz   t        |«      d
¬	«       |j                  |||dz   z  |z   ||z  |z   ||dz   z  |z   d¬«       |j                  ||z  |z   |||z  |z   ||z  |z   d¬«       Œº |j                  |||||z  z   ||z  |z   d¬«       t        |«      D �	�cg c]  }	t        |«      D �cg c]  }d ‘Œ c}‘Œ c}}	| _        t        |«      D ]s  }t        ||«      D ]b  }	|j                  |	|z  |z   ||z  |z   |	dz   |z  |z   |dz   |z  |z   d¬«      }
|
| j                  |   |	<   | ||	fd„}|j                  |
d|«       Œd Œu t        |d   «      t        |d   «      }}|j                  dd|dz   |dz   ddd¬«      }
|j                  |
«       | j                  «        y c c}w c c}}	w )Né   r’   Úallr�   rˆ   r‰   r|   r¤   )rp   ÚanchorÚnú.)Údash©rˆ   r¬   r±   c                 ó(   — |j                  ||«       y r    )rï   )rÙ   r<   rL   rÂ   s       r?   rš   z ChartMatrixView.draw.<locals>.cbo  s   € Ø×$Ñ$ Q¨Õ*rA   ú
<Button-1>iœÿÿÿéd   Úgray50rÊ   rÉ   )rw   rÌ   Útag)r\   r‹   ÚdeleterX   Ú
num_leavesÚintr¶   Úcreate_textÚreprÚcreate_lineÚcreate_rectanglerY   Útag_bindÚ	tag_lowerrÇ   )r<   ÚLEFT_MARGINÚ
BOT_MARGINÚ
TOP_MARGINÚcrÁ   ÚdxÚdyrL   rÂ   Útrš   ÚxmaxÚymaxs                 r?   rg   zChartMatrixView.draw6  s  € Ø�:‰:ÐØØ#%Ð%ˆ�jØˆ
Ø�L‰LˆØ	�‰�ŒØ�K‰K×"Ñ"Ó$ qÑ(ˆÜ�!�G‘*‹o Ñ+¨qÑ0ˆÜ�!�H‘+Ó Ñ+¨jÑ8¸AÑ=ˆà	�‰�Œô �q“ò 	ˆAØ�M‰MØ˜a‘  R¡¨"¨q©&¡°:Ñ!=ÄDÈÃGÐTWð ô ð �M‰MØ�B‘˜˜a™‘ +Ñ-Ø�B‘˜Ñ# aÑ'Ü˜!“WØð	 ô ð �M‰MØØ�a˜!‘e‘˜zÑ)Ø�Q‘˜Ñ$Ø�a˜!‘e‘˜zÑ)Øð ô ð �M‰MØ�Q‘˜Ñ$ØØ�Q‘˜Ñ$Ø�Q‘˜Ñ#Øð õ ð#	ð4 	
×ÑØ˜ [°2¸±6Ñ%9¸2À¹6ÀJÑ;NÐVWð 	ô 	
ô
 :?¸q»×B°A¤e¨A£hÖ/ šÔ/ÓBˆŒÜ�q“ò 	0ˆAÜ˜1˜a“[ò 0�Ø×&Ñ&Ø˜‘F˜[Ñ(Ø˜‘F˜ZÑ'Ø˜‘U˜b‘L ;Ñ.Ø˜‘U˜b‘L :Ñ-Ø!ð 'ó �ð %&�—‘˜A‘˜qÑ!à#'¨1°ó +ð —
‘
˜1˜l¨BÕ/ñ0ð	0ô" ˜˜7™“_¤c¨!¨H©+Ó&6ˆdˆØ×ÑØØØ�3‰JØ�3‰JØØØð ó 
ˆð 	
�‰�AŒð 	�‰�ùò? 0ùÓBs   Æ JÆ	JÆJÊJc                 ó<   —  | j                   j                  |i |¤Ž y r    ©r\   rx   ©r<   ræ   Úkwargss      r?   rx   zChartMatrixView.pack„  ó   € Øˆ�
‰
�‰˜Ð( Ó(rA   )TúChart MatrixFr    )rO   rP   rQ   Ú__doc__rl   r`   ra   rc   rb   r_   rª   rÇ   rÏ   rÓ   r�   rß   r˜   rê   rí   rï   ró   rö   rù   rü   rg   rx   rS   rA   r?   rU   rU   |   s�   „ ñð
 QVóò<8ò1òEòòòò#HòJòò8óòò2òò#òòó ò
"òLó\)rA   rU   c                   óX   — e Zd Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zy)ÚChartResultsViewc                 ó  — || _         || _        g | _        d| _        g | _        d | _        d | _        |rRt        |«      | _        | j                  j                  d«       | j                  j                  d| j                  «       nt        |«      | _        |r¡t        | j                  «      }|j                  ddd¬«       t        |d| j                  ¬	«      j                  d
¬«       t        |d| j                  ¬	«      j                  d¬«       t        |d| j                   ¬	«      j                  d¬«       t#        | j                  d¬«      | _        | j$                  j                  ddd¬«       | j'                  «        y )Nr°   z!Chart Parser Application: ResultsrW   rr   r   Úxrt   rn   ro   Úright©ru   z	Print AllÚleftzPrint Selectionr‘   )Úcloseenoughrƒ   r�   r“   )rX   Ú_grammarÚ_treesÚ_yÚ_treewidgetsÚ
_selectionÚ
_selectboxr   r\   r]   r^   r_   r   rx   r   Ú	print_allÚprint_selectionr   Ú_cframerÇ   )r<   rh   ri   Úgrammarrj   Úbuttonss         r?   rl   zChartResultsView.__init__Ž  s8  € ØˆŒØˆŒØˆŒØˆŒØˆÔØˆŒØˆŒáÜ! &Ó)ˆ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ÐÔ<ð 	�‰�rA   Nc                 ó†  — | j                   €y |�Z|j                  «       | j                  j                  «       k7  ry |j	                  «       d| j
                  j                  «       fk7  ry | j
                  j                  | j                  j                  «       «      D ]"  }|| j                  vsŒ| j                  |«       Œ$ y r¨   )
r\   rD   r+  r·   r´   rX   r  Úparsesr,  Ú_add)r<   r™   Úparses      r?   rÇ   zChartResultsView.update¯  s™   € Ø�:‰:ÐØàÐØ�x‰x‹z˜TŸ]™]×0Ñ0Ó2Ò2ØØ�y‰y‹{˜q $§+¡+×"8Ñ"8Ó":Ð;Ò;Øà—[‘[×'Ñ'¨¯©×(;Ñ(;Ó(=Ó>ò 	!ˆEØ˜DŸK™KÒ'Ø—	‘	˜%Õ ñ	!rA   c                 óv  — | j                   j                  |«       | j                  j                  «       }t	        ||«      }| j
                  j                  |«       | j                  j                  |d| j                  «       |j                  | j                  «       |j                  «       d   dz   | _        y )Nr°   r‚   )r,  rC   r3  Úcanvasr   r.  Ú
add_widgetr-  Ú
bind_clickÚ_clickÚbbox)r<   r9  r  Ú
treewidgets       r?   r8  zChartResultsView._add½  s’   € à�‰×Ñ˜5Ô!ð �L‰L×ÑÓ!ˆÜ(¨¨EÓ2ˆ
ð 	×Ñ× Ñ  Ô,Ø�‰×Ñ 
¨B°·±Ô8ð 	×Ñ˜dŸk™kÔ*ð —/‘/Ó# AÑ&¨Ñ+ˆ�rA   c                 óö   — | j                   j                  «       }| j                  �|j                  | j                  «       || _        |j                  «       \  }}}}|j                  ||||dd¬«      | _        y )Nr|   z#088)rˆ   r²   )r3  r;  r/  r
  r0  r?  r  )r<   Úwidgetr  Úx1Úy1Úx2Úy2s          r?   r>  zChartResultsView._clickÏ  sh   € Ø�L‰L×ÑÓ!ˆØ�?‰?Ð&Ø�H‰H�T—_‘_Ô%Ø ˆŒØ!Ÿ;™;›=ÑˆˆR��RØ×,Ñ,¨R°°R¸À1ÈfÐ,ÓUˆ�rA   c                 ó¤   — ||j                  «       d<   |j                  «       D ]*  }t        |t        «      r| j	                  ||«       Œ&||d<   Œ, y )NrÄ   )ÚlabelÚsubtreesrH   r   Ú_color)r<   r@  rÄ   Úchilds       r?   rJ  zChartResultsView._color×  sO   € Ø&+ˆ
×ÑÓ˜7Ñ#Ø×(Ñ(Ó*ò 	'ˆEÜ˜%Ô!2Ô3Ø—‘˜E 5Õ)à!&��g’ñ		'rA   c                 óR   — | j                   €y | j                  j                  «        y r    )r\   r3  Úprint_to_filer£   s     r?   r1  zChartResultsView.print_allß  s   € Ø�:‰:ÐØØ�‰×"Ñ"Õ$rA   c                 óx  — | j                   €y | j                  €t        dd«       y | j                  j	                  «       }| j
                  D ],  }|| j                  usŒ| j                  j                  |«       Œ. |j                  | j                  «       | j                  j                  «       \  }}}}| j                  j                  d|z
  d|z
  «       d||z
  dz   › d||z
  dz   › �|d<   | j                  j                  «        | j                  g| _        | j                  «        | j                  «        y )NzPrint ErrorzNo tree selectedr°   z0 0 r‘   ú Úscrollregion)r\   r/  r   r3  r;  r.  Údestroy_widgetr
  r0  r?  ÚmoverM  ÚclearrÇ   )r<   r¤   r  rB  rC  rD  rE  rF  s           r?   r2  z ChartResultsView.print_selectionä  s  € Ø�:‰:ÐØØ�?‰?Ð"Ü�mÐ%7Õ8à—‘×#Ñ#Ó%ˆAØ×+Ñ+ò 8�Ø §¡Ò0Ø—L‘L×/Ñ/°Õ7ð8ð �H‰H�T—_‘_Ô%Ø#Ÿ™×3Ñ3Ó5ÑˆR��R˜Ø�O‰O× Ñ   b¡¨"¨r©'Ô2Ø"& r¨B¡w°¡| n°A°b¸2±gÀ±l°^Ð DˆAˆnÑØ�L‰L×&Ñ&Ô(ð "&§¡Ð 1ˆDÔØ�J‰JŒLØ�K‰K�MrA   c                 ó,  — | j                   €y | j                  D ]  }| j                  j                  |«       Œ g | _        g | _        | j
                  �3| j                  j                  «       j                  | j                  «       d | _        d| _	        y )Nr°   )
r\   r.  r3  rQ  r,  r/  r;  r
  r0  r-  )r<   r@  s     r?   rS  zChartResultsView.clearù  s|   € Ø�:‰:ÐØØ×+Ñ+ò 	4ˆJØ�L‰L×'Ñ'¨
Õ3ð	4àˆŒØˆÔØ�?‰?Ð&Ø�L‰L×ÑÓ!×(Ñ(¨¯©Ô9ØˆŒØˆ�rA   c                 óR   — | j                  «        || _        | j                  «        y r    )rS  rX   rÇ   r©   s     r?   rª   zChartResultsView.set_chart  s   € Ø�
‰
ŒØˆŒØ�‰�rA   c                 óR   — | j                  «        || _        | j                  «        y r    )rS  r+  rÇ   ©r<   r4  s     r?   Úset_grammarzChartResultsView.set_grammar
  s   € Ø�
‰
ŒØˆŒØ�‰�rA   c                 óŽ   — | j                   €y 	 | j                   j                  «        d | _         y # t        $ r
 Y d | _         y w xY wr    r¡   r£   s     r?   r_   zChartResultsView.destroy  r¥   r¦   c                 ó<   —  | j                   j                  |i |¤Ž y r    r  r  s      r?   rx   zChartResultsView.pack  r   rA   )Tr    )rO   rP   rQ   rl   rÇ   r8  r>  rJ  r1  r2  rS  rª   rX  r_   rx   rS   rA   r?   r$  r$  �  s@   „ óóB!ò,ò$Vò'ò%ò
ò*
òò
ò
ó)rA   r$  c                   óî   — e Zd ZdZdej
                  d   ej
                  d   dœZd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZddgZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Z y!)"ÚChartComparera  

    :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.
    ú-ÚintersectionÚunion)r]  ÚandÚorc                 ó  — dgdz  }t        |«      | _        d| _        d| _        | j                  | _        | j                  | _        d| j                  i| _        | j                  | _        d | _        t        «       | _
        | j                  j                  d«       | j                  j                  d| j                  «       | j                  j                  d| j                  «       | j                  | j                  «       | j                  | j                  «       | j!                  | j                  «       | j#                  | j                  «       | j%                  | j                  «       |D ]  }| j'                  |«       Œ y )NÚ é   ÚNonezChart ComparisonrW   ú<Control-x>)r   Ú_emptychartÚ
_left_nameÚ_right_nameÚ_left_chartÚ_right_chartÚ_chartsÚ
_out_chartÚ	_operatorr   r\   r]   r^   r_   Ú_init_menubarÚ_init_chartviewsÚ_init_dividerÚ_init_buttonsÚ_init_bindingsÚ
load_chart)r<   Úchart_filenamesÚfaketokÚfilenames       r?   rl   zChartComparer.__init__C  s7  € ð �$˜‘(ˆÜ  ›>ˆÔð !ˆŒØ!ˆÔØ×+Ñ+ˆÔØ ×,Ñ,ˆÔð  × 0Ñ 0Ð1ˆŒð ×*Ñ*ˆŒð ˆŒô “TˆŒ
Ø�
‰
×ÑÐ+Ô,Ø�
‰
�‰˜ t§|¡|Ô4Ø�
‰
�‰˜ t§|¡|Ô4ð 	×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜dŸj™jÔ)Ø×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜4Ÿ:™:Ô&Ø×Ñ˜DŸJ™JÔ'ð (ò 	&ˆHØ�O‰O˜HÕ%ñ	&rA   c                 óŽ   — | j                   €y 	 | j                   j                  «        d | _         y # t        $ r
 Y d | _         y w xY wr    r¡   r£   s     r?   r_   zChartComparer.destroyi  r¥   r¦   c                  ó   — y r    )r\   Úmainloopr  s      r?   rz  zChartComparer.mainloopr  s   € ØrA   c                 ó¾  — t        |«      }t        |d¬«      }|j                  ddd| j                  ¬«       |j                  ddd| j                  ¬«       |j	                  «        |j                  dd	| j
                  d
¬«       |j                  dd|¬«       t        |d¬«      }|j                  d| j                  d¬«       |j                  d| j                  d¬«       |j                  d| j                  d¬«       |j	                  «        |j                  d| j                  ¬«       |j                  dd|¬«       | j                  j                  |¬«       y )Nr   ©Útearoffú
Load ChartúCtrl-o)rH  Úacceleratorr4   rq   zSave OutputúCtrl-sÚExitr�   úCtrl-x©rH  r4   rq   r€  ÚFile©rH  r4   ÚmenuÚIntersectionú+)rH  rq   r€  ÚUnionÚ*Ú
Differencer]  úSwap Charts©rH  rq   ÚCompare©r‡  )r	   Úadd_commandÚload_chart_dialogÚsave_chart_dialogÚadd_separatorr_   Úadd_cascadeÚ_intersectionÚ_unionÚ_differenceÚ_swapchartsr\   Úconfig)r<   ry   ÚmenubarÚfilemenuÚopmenus        r?   ro  zChartComparer._init_menubarz  sf  € Ü�t“*ˆô ˜¨Ô+ˆØ×ÑØØ ØØ×*Ñ*ð	 	ô 	
ð 	×ÑØØ ØØ×*Ñ*ð	 	ô 	
ð 	×ÑÔ Ø×ÑØ A¨t¯|©|Èð 	ô 	
ð 	×Ñ &°A¸HÐÔEô �g qÔ)ˆØ×ÑØ ¨$×*<Ñ*<È#ð 	ô 	
ð 	×Ñ °$·+±+È3ÐÔOØ×ÑØ¨×(8Ñ(8Àcð 	ô 	
ð 	×ÑÔØ×Ñ ¸×8HÑ8HÐÔIØ×Ñ )°q¸vÐÔFð 	�
‰
×Ñ˜wÐÕ'rA   c                 óH   — t        |dd¬«      }|j                  ddd¬«       y )Nr|   r}   r~   rƒ   r&  )ru   rw   Úipady)r   rx   )r<   ry   Údividers      r?   rq  zChartComparer._init_divider¡  s"   € Ü˜ Q¨xÔ8ˆØ�‰˜% c°ˆÕ3rA   c                 óv  — d}d}t        |d¬«      }|j                  ddd¬«       t        |d	d
¬«      }|j                  ddddd¬«       t        |t        | j                  j                  «       «      | j                  ¬«      | _        | j                  j                  ddd¬«       t        || j                  dd¬«      | _
        | j                  j                  ddddd¬«       | j                  j                  d| j                  «       | j                  j                  d| j                  «       | j                  j                  «        t        |dd	d|¬«      | _        | j                   j                  ddd¬«       t        |d	d
¬«      }|j                  ddddd¬«       t        |t        | j                  j                  «       «      | j"                  ¬«      | _        | j$                  j                  ddd¬«       t        || j                  dd¬«      | _        | j&                  j                  ddddd¬«       | j&                  j                  d| j                  «       | j&                  j                  d| j                  «       | j&                  j                  «        t        |dd	d|¬«      j                  ddd¬«       t        |d	d
¬«      }|j                  ddddd¬«       t        |d¬«      | _        | j(                  j                  dd ¬!«       t        || j                  dd¬«      | _        | j*                  j                  ddddd¬«       | j*                  j                  d| j                  «       | j*                  j                  d| j                  «       | j*                  j                  «        y )"N)r1   éÜÿÿÿ)r8   r¢  z#c0c0c0©rŠ   rƒ   r�   r“   rt   r‚   Úgroover~   r)  rd  é   )ru   r„   r…   rv   rw   )rq   r’   r&  )ru   r…   rw   FT)rj   rk   rr   r–   rê   rO  )rp   rˆ   rŠ   r3   )ru   r„   r…   ú=ÚOutputrŽ   é	   )ru   r…   )r   rx   r   r¾   rl  rä   Ú_select_leftÚ_left_selectorrU   rg  Ú_left_matrixr�   Úselect_edgerê   rÓ   r   Ú	_op_labelÚ_select_rightÚ_right_selectorÚ_right_matrixÚ
_out_labelÚ_out_matrix)r<   ry   ÚopfontÚeqfontÚframeÚ	cv1_frameÚ	cv2_frameÚ	out_frames           r?   rp  zChartComparer._init_chartviews¥  sF  € Ø ˆØ#ˆä�d yÔ1ˆØ�
‰
˜ a¨fˆ
Ô5ô ˜%¨°(Ô;ˆ	Ø�‰˜F¨°¸1À6ˆÔJÜ/Ø”t˜DŸL™L×-Ñ-Ó/Ó0¸$×:KÑ:Kô
ˆÔð 	×Ñ× Ñ  e°!¸#Ð Ô>Ü+Ø�t×'Ñ'°%À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×'Ñ'°%À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×'Ñ'°%Àtô
ˆÔð 	×Ñ×Ñ 8°!¸!ÀAÈFÐÔSØ×Ñ×%Ñ% h°×0@Ñ0@ÔAØ×Ñ×%Ñ% m°T×5EÑ5EÔFØ×Ñ×#Ñ#Õ%rA   c                 ó  — t        |«      }|j                  dddd¬«       t        |d| j                  ¬«      j                  d¬	«       t        |d
| j                  ¬«      j                  d¬	«       t        |d| j
                  ¬«      j                  d¬	«       t        |d¬«      j                  d¬	«       t        |d| j                  ¬«      j                  d¬	«       t        |d| j                  ¬«      j                  d¬	«       y )Nrr   r’   r&  r   )ru   r…   rw   rv   rˆ  ro   r)  r(  rŠ  rŒ  r‘   r  r�  zDetach Outputr'  )r   rx   r   r–  r—  r˜  r™  Ú_detach_out)r<   ry   r5  s      r?   rr  z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õ 	
rA   c                 ó<   — |j                  d| j                  «       y )Nú<Control-o>)r^   r’  r�   s     r?   rs  zChartComparer._init_bindingsñ  s   € à�	‰	�- ×!7Ñ!7Õ8rA   c                 óâ   — || _         | j                  |   | _        | j                  j	                  | j                  «       |dk(  r| j                  j                  «        | j                  «        y ©Nre  )rh  rl  rj  r«  rª   rÓ   Ú	_apply_op©r<   Únames     r?   r©  zChartComparer._select_leftú  sW   € ØˆŒØŸ<™<¨Ñ-ˆÔØ×Ñ×#Ñ# D×$4Ñ$4Ô5Ø�6Š>Ø×Ñ×(Ñ(Ô*Ø�‰ÕrA   c                 óâ   — || _         | j                  |   | _        | j                  j	                  | j                  «       |dk(  r| j                  j                  «        | j                  «        y r¾  )ri  rl  rk  r°  rª   rÓ   r¿  rÀ  s     r?   r®  zChartComparer._select_right  sX   € ØˆÔØ ŸL™L¨Ñ.ˆÔØ×Ñ×$Ñ$ T×%6Ñ%6Ô7Ø�6Š>Ø×Ñ×)Ñ)Ô+Ø�‰ÕrA   c                 óÄ   — | j                   dk(  r| j                  «        y | j                   dk(  r| j                  «        y | j                   dk(  r| j                  «        y y )Nr]  ra  r`  )rn  r˜  r—  r–  rÎ   s    r?   r¿  zChartComparer._apply_op
  sL   € Ø�>‰>˜SÒ Ø×ÑÕØ�^‰^˜tÒ#Ø�K‰K�MØ�^‰^˜uÒ$Ø×ÑÕ ð %rA   ©zPickle fileú.pickle©z	All filesr‹  c                 ó  — t        | j                  d¬«      }|sy 	 t        |d«      5 }t        j                  | j
                  |«       d d d «       y # 1 sw Y   y xY w# t        $ r}t        dd|›d|› �«       Y d }~y d }~ww xY w)NrÅ  ©Ú	filetypesÚdefaultextensionÚwbzError Saving ChartúUnable to open file: ú
)r   ÚCHART_FILE_TYPESÚopenÚpickleÚdumprm  r¢   r   ©r<   ræ   rw  Úoutfiler¤   s        r?   r“  zChartComparer.save_chart_dialog  s‡   € Ü$Ø×+Ñ+¸iô
ˆñ Øð	WÜ�h Ó%ð 6¨Ü—‘˜DŸO™O¨WÔ5÷6÷ 6ñ 6ûäò 	WÜÐ*Ð.CÀHÀ<ÈrÐRSÐQTÐ,U×VÑVûð	Wús4   œA ¨!AÁ	A ÁAÁA ÁA Á	BÁ'A>Á>Bc                 ó¬   — t        | j                  d¬«      }|sy 	 | j                  |«       y # t        $ r}t	        dd|›d|› �«       Y d }~y d }~ww xY w)NrÅ  rÈ  zError Loading ChartrÌ  rÍ  )r   rÎ  rt  r¢   r   )r<   ræ   rw  r¤   s       r?   r’  zChartComparer.load_chart_dialog#  sb   € Ü"Ø×+Ñ+¸iô
ˆñ Øð	XØ�O‰O˜HÕ%øÜò 	XÜÐ+Ð/DÀXÀLÐPRÐSTÐRUÐ-V×WÑWûð	Xús   œ. ®	A·AÁAc                 óN  — t        |d«      5 }t        |«      }d d d «       t        j                  j	                  |«      }|j                  d«      r|d d }|j                  d«      r|d d }| j                  |<   | j                  j                  |«       | j                  j                  |«       | j                  | j                  u r| j                  j                  |«       y | j                  | j                  u r| j                  j                  |«       y y # 1 sw Y   �ŒxY w)NÚrbrÅ  iùÿÿÿz.chartiúÿÿÿ)rÏ  r'   ÚosÚpathÚbasenameÚendswithrl  rª  Úaddr¯  rj  rg  r¿   rk  )r<   rw  Úinfileri   rÁ  s        r?   rt  zChartComparer.load_chart.  sü   € Ü�(˜DÓ!ð 	( VÜ Ó'ˆE÷	(ä�w‰w×Ñ Ó)ˆØ�=‰=˜Ô#Ø˜˜�9ˆDØ�=‰=˜Ô"Ø˜˜�9ˆDØ"ˆ�‰�TÑØ×Ñ×Ñ Ô%Ø×Ñ× Ñ  Ô&ð ×Ñ˜t×/Ñ/Ñ/Ø×Ñ×#Ñ# DÕ)Ø×Ñ $×"2Ñ"2Ñ2Ø× Ñ ×$Ñ$ TÕ*ð 3÷	(ñ 	(ús   �DÄD$c                 ó    — | j                   j                  «        | j                  j                  «        | j                  j                  «        y r    )r«  rÇ   r°  r²  rÎ   s    r?   Ú_update_chartviewsz ChartComparer._update_chartviewsA  s8   € Ø×Ñ× Ñ Ô"Ø×Ñ×!Ñ!Ô#Ø×Ñ×ÑÕ!rA   c                 óœ  — || j                   v r| j                  j                  |«       n| j                  j                  «        || j                  v r| j
                  j                  |«       n| j
                  j                  «        || j                  v r| j                  j                  |«       y | j                  j                  «        y r    )rj  r«  rü   rù   rk  r°  rm  r²  rò   s     r?   r¬  zChartComparer.select_edgeJ  sœ   € Ø�4×#Ñ#Ñ#Ø×Ñ×+Ñ+¨DÕ1à×Ñ×)Ñ)Ô+Ø�4×$Ñ$Ñ$Ø×Ñ×,Ñ,¨TÕ2à×Ñ×*Ñ*Ô,Ø�4—?‘?Ñ"Ø×Ñ×*Ñ*¨4Õ0à×Ñ×(Ñ(Õ*rA   c                 ó¬   — | j                   j                  ||«       | j                  j                  ||«       | j                  j                  ||«       y r    )r«  rê   r°  r²  rë   s      r?   rê   zChartComparer.select_cellX  sD   € Ø×Ñ×%Ñ% a¨Ô+Ø×Ñ×&Ñ& q¨!Ô,Ø×Ñ×$Ñ$ Q¨Õ*rA   c                 óô   — | j                  «       sy t        | j                  j                  «       «      }| j                  D ]#  }|| j                  vsŒ|j                  |g «       Œ% | j                  d|«       y )Nr]  ©Ú_checkcompatr   rj  Útokensrk  ÚinsertÚ_update©r<   Ú	out_chartr™   s      r?   r˜  zChartComparer._differencea  sm   € Ø× Ñ Ô"Øä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ñ$ò 	+ˆDØ˜4×,Ñ,Ò,Ø× Ñ   rÕ*ð	+ð 	�‰�S˜)Õ$rA   c                 óô   — | j                  «       sy t        | j                  j                  «       «      }| j                  D ]#  }|| j                  v sŒ|j                  |g «       Œ% | j                  d|«       y )Nr`  râ  rç  s      r?   r–  zChartComparer._intersectionl  sm   € Ø× Ñ Ô"Øä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ñ$ò 	+ˆDØ�t×(Ñ(Ò(Ø× Ñ   rÕ*ð	+ð 	�‰�U˜IÕ&rA   c                 ó  — | j                  «       sy t        | j                  j                  «       «      }| j                  D ]  }|j	                  |g «       Œ | j
                  D ]  }|j	                  |g «       Œ | j                  d|«       y )Nra  )rã  r   rj  rä  rå  rk  ræ  rç  s      r?   r—  zChartComparer._unionw  s„   € Ø× Ñ Ô"Øä˜$×*Ñ*×1Ñ1Ó3Ó4ˆ	Ø×$Ñ$ò 	'ˆDØ×Ñ˜T 2Õ&ð	'à×%Ñ%ò 	'ˆDØ×Ñ˜T 2Õ&ð	'ð 	�‰�T˜9Õ%rA   c                 ó    — | j                   | j                  }}| j                  j                  |«       | j                  j                  |«       y r    )rh  ri  rª  r¿   r¯  )r<   r)  r'  s      r?   r™  zChartComparer._swapchartsƒ  s=   € Ø—o‘o t×'7Ñ'7ˆeˆØ×Ñ×Ñ Ô&Ø×Ñ× Ñ  Õ&rA   c                 óü  — | j                   j                  «       | j                  j                  «       k7  sg| j                   j                  «       | j                  j                  «       k7  s2| j                   | j                  k(  s| j                  | j                  k(  r`| j                  | _        | j                  j                  | j
                  «       | j                  j                  «        d| j                  d<   yy)Nr§  rp   FT)
rj  rä  rk  Úproperty_namesrg  rm  r²  rª   rÓ   r±  rÎ   s    r?   rã  z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Ñ#ààrA   c                 ó
  — || _         | j                  |   | j                  d<   || _        | j                  j                  |«       dj                  | j                  | j                   | j                  «      | j                  d<   y )Nrp   z{} {} {})
rn  Ú	_OPSYMBOLr­  rm  r²  rª   r¹   rh  ri  r±  )r<   Úoperatorrè  s      r?   ræ  zChartComparer._update™  sk   € Ø!ˆŒØ!%§¡°Ñ!9ˆ�‰�vÑØ#ˆŒØ×Ñ×"Ñ" 9Ô-Ø",×"3Ñ"3Ø�O‰OØ�N‰NØ×Ñó#
ˆ�‰˜ÒrA   c                 óÂ   — | j                   | _        | j                  j                  | j                  «       d| j                  d<   | j                  j                  «        y )NrO  rp   )rg  rm  r²  rª   r­  rÓ   rÎ   s    r?   Ú_clear_out_chartzChartComparer._clear_out_chart¤  sG   € Ø×*Ñ*ˆŒØ×Ñ×"Ñ" 4§?¡?Ô3Ø!$ˆ�‰�vÑØ×Ñ×#Ñ#Õ%rA   c                 ób   — t        | j                  | j                  | j                  d   ¬«       y )Nrp   )r]   )rU   r\   rm  r±  rÎ   s    r?   rº  zChartComparer._detach_outª  s   € Ü˜Ÿ
™
 D§O¡O¸4¿?¹?È6Ñ;RÖSrA   N)!rO   rP   rQ   r"  r   rR   rï  rl   r_   rz  ro  rq  rp  rr  rs  r©  r®  r¿  rÎ  r“  r’  rt  rÞ  r¬  rê   r˜  r–  r—  r™  rã  ræ  rò  rº  rS   rA   r?   r\  r\  !  sÀ   „ ñð8 Ø×#Ñ# NÑ3Ø×"Ñ" 7Ñ+ñ€Iò$&òLò-ò%(òN4ò;&òz
ò9òòò!ð 3Ð4FÐGÐò
Wò	Xò+ò&"ò+ò+ò	%ò	'ò
&ò'ò
ò"	
ò&óTrA   r\  c                   ó  — e Zd ZdZdZdZdZdZd(d„Zd„ Z	d)d„Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd(d„Zd„ Zd„ Zd*d„Zd„ Zd„ Zd+d„Zd,d„Zd(d„Zd,d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d(d „Z"d!„ Z#d"„ Z$d*d#„Z%d$„ Z&d%„ Z'd(d&„Z(d'„ Z)y)-Ú	ChartViewa  
    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').
    r°   é   é(   Nc                 óÄ  — |j                  dd«      }|j                  dd«      }|j                  dd«      | _        || _        i | _        g | _        i | _        i | _        g | _        d| _        d| _	        g | _
        d| _        |€_t        «       }|j                  d«       |fd	„}|fd
„}|j                  d|«       t        |d|¬«      }	|	j!                  d¬«       || _        n|| _        | j%                  |«       | j'                  | j"                  «      \  | _        | _        d| j*                  d<   d| j*                  d<   |rit-        | j"                  dd¬«      }
|
j!                  dd¬«       t/        |
d¬«      | _        d| j0                  d<   | j0                  j!                  d¬«       nd| _        |r?| j'                  | j"                  dd«      \  }}||c| _        | _        d | j4                  d<   nd| _        | j7                  «        | j9                  «        | j;                  «        | j=                  «        | j*                  j                  d!| j>                  «       y)"z4
        Construct a new ``Chart`` display.
        Ú	draw_treer   Údraw_sentencer�   Úfontsizer9   Nz
Chart Viewc                 ó$   — |j                  «        y r    ©r_   )r¤   rƒ   s     r?   Údestroy1z$ChartView.__init__.<locals>.destroy1  ó   € Ø—‘•rA   c                 ó$   — | j                  «        y r    rý  )rƒ   s    r?   Údestroy2z$ChartView.__init__.<locals>.destroy2  rÿ  rA   ÚqÚDonero   rr   r(  i,  r‰   rþ   r*  Úsunkr|   ©r€   r   r“   )rw   ru   r®   ©r‰   ú#e0e0e0rŠ   r±   r  r&  r†   z<Configure>) ÚgetÚ	_fontsizerX   re   Ú_edgelevelsÚ	_edgetagsrZ   Ú	_treetoksÚ_treetoks_edgeÚ_treetoks_indexÚ
_tree_tagsÚ_compactr   r]   r^   r   rx   r\   Ú_init_fontsÚ
_sb_canvasÚ	_chart_sbÚ_chart_canvasr   r   Ú_sentence_canvasÚ_tree_sbÚ_tree_canvasÚ_analyzerg   Ú_resizeÚ_growÚ
_configure)r<   ri   ry   Úkwrù  rú  rƒ   rþ  r  ÚbrŒ   Úsbr;  s                r?   rl   zChartView.__init__ç  s2  € ð
 —F‘F˜;¨Ó*ˆ	ØŸ™˜°Ó2ˆØŸ™ 
¨CÓ0ˆŒð ˆŒð ˆŒð ˆÔØˆŒð ˆŒð ˆŒØ"ˆÔØ ˆÔð ˆŒð ˆŒð ˆ<Ü“$ˆCØ�I‰I�lÔ#à #ó ð !ó ð �H‰H�S˜(Ô#Ü�s °Ô:ˆAØ�F‰F˜ˆFÔ!ØˆD�JàˆDŒ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°fÐ.ˆTŒ]˜DÔ-Ø*-ˆD×Ñ˜hÒ'à $ˆDÔð 	�‰ŒØ�	‰	ŒØ�‰ŒØ�
‰
Œð 	×Ñ×Ñ ¨t¯©Õ?rA   c                 óæ   — t        dd| j                  ¬«      | _        t        d| j                  ¬«      | _        t        t	        «       d   ¬«      | _        |j                  d| j
                  «       y )Nr8   r:   ©ÚfamilyÚweightÚsize©r!  r#  r3   ©r3   ú*Font)r   r	  Ú	_boldfontÚ_fontr   Ú_sysfontÚ
option_addr�   s     r?   r  zChartView._init_fonts@  sM   € Ü [¸ÀdÇnÁnÔUˆŒÜ °4·>±>ÔBˆŒ
ä¤&£(¨6Ñ"2Ô3ˆŒØ�‰˜ §¡Õ/rA   c                 ó  — t        |dd¬«      }|j                  |||¬«       t        |d¬«      }t        |d¬«      }|j                  d	d
¬«       |j                  d|d¬«       |j                  |d<   |j
                  |d<   ||fS )zK
        Helper for __init__: construct a canvas with a scrollbar.
        r  r|   r  )rw   rv   ru   r  r£  Úvertical)Úorientr'  Úy©ru   rw   r)  Úyes©ru   rw   rv   rq   Úyscrollcommand)r   rx   r   r
   Úyviewr¿   )r<   ry   rv   rw   ru   rŒ   r;  r  s           r?   r  zChartView._sb_canvasG  sˆ   € ô �t F°1Ô5ˆØ�‰˜ f°4ˆÔ8Ü˜¨9Ô5ˆô �v jÔ1ˆØ
�‰�W 3ˆÔ'Ø�‰˜ d°5ˆÔ9ð Ÿ™ˆˆ9‰Ø#%§6¡6ˆÐÑ à�Fˆ|ÐrA   c                 ó>   — | j                   j                  ddd«       y )NÚscrolléÿÿÿÿÚunits©r  r3  r£   s     r?   Ú	scroll_upzChartView.scroll_upZ  ó   € Ø×Ñ× Ñ  ¨2¨wÕ7rA   c                 ó>   — | j                   j                  ddd«       y )Nr5  r�   r7  r8  r£   s     r?   Úscroll_downzChartView.scroll_down]  ó   € Ø×Ñ× Ñ  ¨1¨gÕ6rA   c                 ó>   — | j                   j                  ddd«       y )Nr5  r6  Úpagesr8  r£   s     r?   Úpage_upzChartView.page_up`  r:  rA   c                 ó>   — | j                   j                  ddd«       y )Nr5  r�   r?  r8  r£   s     r?   Ú	page_downzChartView.page_downc  r=  rA   c                 óÐ  — | j                   j                  «       }t        t        | j                  d   «      || j
                  z  t        j                  dz  z   «      }| j                  j                  |¬«       | j                  j                  | j                  d   ¬«       |dt        j                  z  z
  |z  | _        | j                  �| j                  | j                  d<   yy)z/
        Grow the window, if necessary
        rˆ   r|   r  r‰   r  N)rX   r  r»   r  r  Ú	_unitsizerõ  Ú_MARGINÚ	configurer  Ú_sentence_height)r<   rÁ   rˆ   s      r?   r  zChartView._growf  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×!Ñ! (Ò+ð -rA   c                 óH  — | j                   j                  t        |«       ¬«       | j                  j                  t        |«       ¬«       | j                  j                  t        |«       ¬«       | j                  «        | j                  «        | j                  «        y ©N)r#  )r(  rF  Úabsr'  r)  r  r  rg   ©r<   r#  s     r?   Úset_font_sizezChartView.set_font_size{  sn   € Ø�
‰
×Ñ¤3 t£9 *ÐÔ-Ø�‰× Ñ ¤s¨4£y jÐ Ô1Ø�‰×Ñ¤c¨$£i ZÐÔ0Ø�‰ŒØ�
‰
ŒØ�	‰	�rA   c                 ó,   — t        | j                  «      S r    )rJ  r	  rÎ   s    r?   Úget_font_sizezChartView.get_font_sizeƒ  s   € Ü�4—>‘>Ó"Ð"rA   c                 ó¨   — | j                   j                  «       }|j                  dt        j                  z  z
  |z  | _        | j                  «        y)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.
        r|   N)rX   r  rˆ   rõ  rE  rD  rg   )r<   r¤   rÁ   s      r?   r  zChartView._configure†  s?   € ð �K‰K×"Ñ"Ó$ˆØŸ'™' A¬	×(9Ñ(9Ñ$9Ñ9¸QÑ>ˆŒØ�	‰	�rA   c                 óV  — |�f|| _         g | _        i | _        | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        y| j                   D ]"  }|| j                  vsŒ| j                  |«       Œ$ | j                  «        y)au  
        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)
rX   r
  rZ   r  r  rg   Ú
erase_treer  r  Ú	_add_edge)r<   ri   r™   s      r?   rÇ   zChartView.update‘  s„   € ð ÐØˆDŒKØ!ˆDÔØˆDŒKØ�M‰MŒOØ�J‰JŒLØ�I‰IŒKØ�O‰OÔØ�L‰L�NàŸ™ò )�Ø˜tŸ~™~Ò-Ø—N‘N 4Õ(ð)ð �L‰L�NrA   c                 óÚ   — |j                  «       \  }}| j                  |   D ]F  }|j                  «       \  }}||cxk  r|k  s%n ||cxk  r|k  sn ||cxk(  r|cxk(  r|k(  sŒB y ŒF y y)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´   r
  )r<   r™   ÚlvlÚs1Úe1Ú	otheredgeÚs2Úe2s           r?   Ú_edge_conflictzChartView._edge_conflictª  st   € ð —9‘9“;‰ˆˆRØ×)Ñ)¨#Ñ.ò 	ˆIØ —~‘~Ó'‰HˆR�Ø�b”˜2” 2¨¤=¨b¤=°b¸BÔ6JÀ"Ô6JÈÓ6JÙñ 7KÙð	ð rA   c           	      óÒ  — | j                   }t        |t        «      rŒ|j                  «       }g }|j	                  «       D ]U  }t        |t
        «      r)|j                  t        |j                  «       «      «       Œ<|j                  t        |«      «       ŒW dj                  |«      }n|j                  «       }d}||fD ]¦  }|j                  dd|| j                  dd¬«      }|j                  |«      }	|j                  |«       |	d   }
t        |j!                  «       d«      }t        | j"                  |
|z  «      | _        t        | j$                  |	d	   |	d   z
  «      | _        Œ¨ y
)zÃ
        Given a new edge, recalculate:

            - _text_height
            - _unitsize (if the edge text is too big for the current
              _unitsize, then increase _unitsize)
        rO  rc  r   Únwr)  ©rp   r3   r   Újustifyr|   r�   r‚   N)r  rH   r&   rD   rG   r   rC   Ústrr1   r  Újoinr  r'  r?  r
  r»   ÚlengthrD  Ú_text_height)r<   r™   r  rD   ÚrhseltsrM   rG   Úsr	  r?  rˆ   Úedgelens               r?   Ú_analyze_edgezChartView._analyze_edge·  s5  € ð ×Ñˆä�dœHÔ%Ø—(‘(“*ˆCØˆGØ—x‘x“zò .�Ü˜c¤;Ô/Ø—N‘N¤3 s§z¡z£|Ó#4Õ5à—N‘N¤4¨£9Õ-ð	.ð
 —(‘(˜7Ó#‰Cà—(‘(“*ˆCØˆCà�s�ò 		JˆAØ—-‘-Ø�1˜1 4§>¡>¸$Èð  ó ˆCð —6‘6˜#“;ˆDØ�H‰H�SŒMØ˜‘GˆEÜ˜$Ÿ+™+›-¨Ó+ˆGÜ  §¡°¸±ÓAˆDŒNÜ # D×$5Ñ$5°t¸A±wÀÀaÁÑ7HÓ IˆDÕñ		JrA   c                 ó¦  — t        |t        «      ry|| j                  v ry| j                  |«       | j	                  «        | j
                  sW| j                  j                  |g«       t        | j                  «      dz
  }| j                  ||«       | j                  «        yd}	 |t        | j                  «      k\  rD| j                  j                  g «       | j                  «        |t        | j                  «      k\  rŒD||k\  r1| j                  ||«      s| j                  |   j                  |«       n|dz  }Œ˜| j                  ||«       y)z¼
        Add a single edge to the ChartView:

            - Call analyze_edge to recalculate display parameters
            - Find an available level
            - Call _draw_edge
        Nr�   r   )rH   r    r  rf  r  r  r
  rC   rµ   Ú
_draw_edger  rZ  )r<   r™   ÚminlvlrT  s       r?   rR  zChartView._add_edgeÙ  s&  € ô �dœHÔ%Øà�4—>‘>Ñ!ØØ×Ñ˜4Ô Ø�
‰
Œà�}Š}Ø×Ñ×#Ñ# T FÔ+Ü�d×&Ñ&Ó'¨!Ñ+ˆCØ�O‰O˜D #Ô&Ø�L‰LŒNØð ˆØàœ˜T×-Ñ-Ó.Ò.Ø× Ñ ×'Ñ'¨Ô+Ø—‘”ð œ˜T×-Ñ-Ó.Ó.ð
 �fŠ} T×%8Ñ%8¸¸sÔ%Cà× Ñ  Ñ%×,Ñ,¨TÔ2Øð �1‰HˆCð ð 	�‰˜˜cÕ"rA   c                 óp  — d }t        t        | j                  «      «      D ]  }|| j                  |   v sŒ|} n |€y |dz   | j                  z  }| j                  dz   }| j
                  j                  dd«       | j                  dk7  r-| j
                  j                  d||z
  | j                  z  «       y y )Nr�   r°   Úmovetog      ð?r   )r¶   rµ   r
  Ú_chart_level_sizerb  r  r3  Ú_chart_height)r<   r™   ÚlevelrL   r.  r  s         r?   ró   zChartView.view_edge  s½   € ØˆÜ”s˜4×+Ñ+Ó,Ó-ò 	ˆAØ�t×'Ñ'¨Ñ*Ò*Ø�Ùð	ð ˆ=Øà�Q‰Y˜$×0Ñ0Ñ0ˆØ×Ñ Ñ#ˆØ×Ñ× Ñ  ¨3Ô/Ø×Ñ Ò"Ø×Ñ×$Ñ$ X°°B±¸$×:LÑ:LÑ/LÕMð #rA   c                 ó¶  — | j                   }|j                  «       | j                  z  t        j                  z   }|j                  «       | j                  z  t        j                  z   }||k(  r|t        d| j                  dz  «      z  }|dz   | j                  z  }|j                  ||||dd¬«      }t        |t        «      r{g }|j                  «       D ]U  }	t        |	t        «      r)|j                  t        |	j                  «       «      «       Œ<|j                  t!        |	«      «       ŒW |j#                  «       }
ng }d}
dj%                  |d	|
 «      }dj%                  ||
d	 «      }|j'                  |dz   ||| j(                  d
¬«      }|j+                  |«      d   dz   }|j+                  |«      d   |j+                  |«      d   z   dz  }|j-                  |dz
  |dz
  |dz   |dz   «      }|j'                  |dz   ||| j(                  d
¬«      }|j'                  ||z   dz  |t        |j/                  «       «      d| j0                  ¬«      }|||||f| j2                  |<   | |fd„}|j5                  |d|«       |j5                  |d|«       |j5                  |d|«       |j5                  |d|«       |j5                  |d|«       | j7                  |«       y	)z6
        Draw a single edge on the ChartView.
        é   r’   r�   Úlastr‚   )r0   rˆ   r   rO  Nr\  )rp   r3   r   r|   é   rd  ©rp   r   r3   c                 ó(   — |j                  d|«       y r•   r—   )rÙ   r<   r™   s      r?   rš   z ChartView._draw_edge.<locals>.cb=  r›   rA   r  )r  r·   rD  rõ  rE  r¸   r»   rl  r  rH   r&   rG   r   rC   r_  r1   r  r5   r`  r  r(  r?  Úcreate_ovalrD   r'  r  r  Ú_color_edge)r<   r™   rT  r  rC  rE  r.  ÚlinetagrG   rM   ÚposÚrhs1Úrhs2Úrhstag1ÚdotxÚdotyÚdottagÚrhstag2Úlhstagrš   s                       r?   rh  zChartView._draw_edge  s”  € ð ×Ñˆð �Z‰Z‹\˜DŸN™NÑ*¬Y×->Ñ->Ñ>ˆØ�X‰X‹Z˜$Ÿ.™.Ñ(¬9×+<Ñ+<Ñ<ˆØ�Š8Ø”#�a˜Ÿ™¨!Ñ+Ó,Ñ,ˆBØ�1‰W˜×.Ñ.Ñ.ˆØ—-‘-  A r¨1°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˜˜C˜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Ñð   dó 	1ð 	
�
‰
�7˜L¨"Ô-Ø	�
‰
�7˜L¨"Ô-Ø	�
‰
�7˜L¨"Ô-Ø	�
‰
�6˜<¨Ô,Ø	�
‰
�6˜<¨Ô,à×Ñ˜ÕrA   c                 óæ  — || j                   vry| j                  }|�ž|�œ|| j                  v r| j                  |   }| j                   |   }|j                  |d   |¬«       |j                  |d   |¬«       |j                  |d   ||¬«       |j                  |d   |¬«       |j                  |d   |¬«       y| j                  j                  «       }|| j                  v r| j                  | j                  |   «       |j                  «       r)|j                  «       d|fk(  r| j                  |d	d
«       yt        |t        «      r| j                  |dd«       y| j                  |dd«       y)z�
        Color in an edge with the given colors.
        If no colors are specified, use intelligent defaults
        (dependent on selection, etc.)
        Nr   r±   r�   r|   ©rw   r²   r‚   rp  ú#084ú#042z#48cz#246z#00fz#008)r  r  rZ   r¼   rX   r  rv  rI   r´   rH   r    )r<   r™   Ú	linecolorÚ	textcolorr  ÚtagsrÁ   s          r?   rv  zChartView._color_edgeH  sL  € ð �t—~‘~Ñ%ØØ×ÑˆàÐ  YÐ%:Ø�t—{‘{Ñ"Ø Ÿ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—{‘{Ñ"Ø× Ñ  §¡¨TÑ!2Ô3Ø×ÑÔ! d§i¡i£k°a¸°VÒ&;Ø× Ñ   v¨vÕ6Ü˜D¤(Ô+Ø× Ñ   v¨vÕ6à× Ñ   v¨vÕ6rA   c                 óD   — || j                   |<   | j                  |«       y)z
        Mark an edge
        N)rZ   rv  ©r<   r™   rõ   s      r?   rö   zChartView.mark_edgeg  s    € ð !ˆ�‰�DÑØ×Ñ˜ÕrA   c                 óÊ   — |€Ct        | j                  j                  «       «      }i | _        |D ]  }| j                  |«       Œ y| j                  |= | j                  |«       y)z/
        Unmark an edge (or all edges)
        N)r¾   rZ   rä   rv  )r<   r™   Úold_marked_edgess      r?   rù   zChartView.unmark_edgen  sa   € ð ˆ<Ü# D§K¡K×$4Ñ$4Ó$6Ó7ÐØˆDŒKØ(ò '�Ø× Ñ  Õ&ñ'ð —‘˜DÐ!Ø×Ñ˜TÕ"rA   c                 óH   — | j                  «        | j                  ||«       y r    )rù   rö   r‰  s      r?   rü   zChartView.markonly_edge{  s   € Ø×ÑÔØ�‰�t˜TÕ"rA   c           	      óÀ  — d}d}| j                   }| j                  j                  «       D ]…  }|j                  ddt	        |«      | j
                  dd¬«      }|j                  |«      }|j                  |«       |d   t        j                  z   }t        ||«      }t        ||d   |d   z
  «      }Œ‡ || _        || _        | j                  dt        j                  z  z   | _        | j                  j                  «       D ]  }| j!                  |«       Œ | j                  dz  | _        dt        j$                  | j                  z   z  | _        | j)                  «        y	)
z�
        Analyze the sentence string, to figure out how big a unit needs
        to be, How big the tree should be, etc.
        éF   r   r\  r)  r]  r|   r‚   r�   N)r  rX   Úleavesr  r  r(  r?  r
  rõ  Ú_LEAF_SPACINGr»   rD  rb  rE  rG  rÆ   rf  rl  Ú_TREE_LEVEL_SIZEÚ_tree_heightr  )	r<   ÚunitsizeÚtext_heightr  Úleafr	  r?  rˆ   r™   s	            r?   r  zChartView._analyze  sM  € ð ˆØˆØ×Ñˆð —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¨4°©7°T¸!±WÑ+<Ó=‰Kð	>ð "ˆŒØ'ˆÔØ $× 1Ñ 1°A¼	×8IÑ8IÑ4IÑ IˆÔð —K‘K×%Ñ%Ó'ò 	%ˆDØ×Ñ˜tÕ$ð	%ð "&×!2Ñ!2°QÑ!6ˆÔð ¤×!;Ñ!;¸d×>OÑ>OÑ!OÑPˆÔð 	�‰�rA   c                 ód  — | j                   }| j                  j                  «       | j                  z  t        j
                  dz  z   }t        | j                  «      }|dz   | j                  z  | _	        dd|| j                  f|d<   | j                  rdd|| j                  f| j                  d<   yy)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.
        r|   r   rP  N)r  rX   r  rD  rõ  rE  rµ   r
  rl  rm  r  r’  )r<   r  rˆ   Úlevelss       r?   r  zChartView._resize¥  s¬   € ð ×Ñˆð —‘×&Ñ&Ó(¨4¯>©>Ñ9¼I×<MÑ<MÐPQÑ<QÑQˆä�T×%Ñ%Ó&ˆØ$ q™j¨D×,BÑ,BÑBˆÔØ  5¨$×*<Ñ*<Ð=ˆˆ.Ñð ×ÒØ12°A°u¸d×>OÑ>OÐ0PˆD×Ñ˜nÒ-ð rA   c                 óz  — d}| j                   }| j                  }| j                  }t        j                  }g | _        t        d| j                  j                  «       dz   «      D �]S  }|| j                  z  |z   }|r%|j                  |d||«      }|j                  |«       |r/|j                  |d|| j                  «      }	|j                  |	«       |j                  |d||«      }
|j                  |
«       |j                  |dz   dt        |«      d| j                  ¬«      }|j                  |«       |dz  dk(  r?|r|j!                  d¬«       |r|j!                  	d¬«       |j!                  |
d¬«       �Œ|r|j!                  d	¬«       |r|j!                  	d	¬«       |j!                  |
d	¬«       �ŒV y
)zv
        Draw location lines.  These are vertical gridlines used to
        show where each location unit is.
        iPÃ  r   r�   r|   r\  rs  Úgray60r±   Úgray80N)r  r  r  rõ  rE  Ú	_loclinesr¶   rX   r  rD  r  r  rG  r  r  r(  r¼   )r<   ÚBOTTOMÚc1Úc2Úc3ÚmarginrL   r&  Út1Út2Út3Út4s               r?   Ú_draw_loclineszChartView._draw_loclines¹  sŒ  € ð
 ˆØ×ÑˆØ×"Ñ"ˆØ×ÑˆÜ×"Ñ"ˆØˆŒÜ�q˜$Ÿ+™+×0Ñ0Ó2°QÑ6Ó7ó 	1ˆAØ�D—N‘NÑ" VÑ+ˆAáØ—^‘^ A q¨!¨VÓ4�Ø—‘˜RÔ ÙØ—^‘^ A q¨!¨T×-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	1rA   c           	      ón  — | j                   j                  «       dk(  ry| j                  }t        j                  }t        j                  }t        | j                   j                  «       «      D ]Å  \  }}|| j                  z  |z   }|| j                  z   }||z   dz  }|j                  ||t        |«      | j                  dd¬«      }	|j                  |	«      }
|j                  |dz   |
d   t        j                  dz  z
  |dz
  |
d   t        j                  dz  z   d	d	¬
«      }|j                  |«       ŒÇ y)zDraw the sentence string.r   Nr|   r  r)  r]  r�   r‚   z#f0f0f0r‚  )rX   r  r  rõ  rE  rF   r�  rD  r  r  r(  r?  r  r�  r  )r<   r  r   r.  rL   r•  rC  rE  r&  r	  r?  Úrts               r?   Ú_draw_sentencezChartView._draw_sentenceâ  s)  € à�;‰;×!Ñ!Ó# qÒ(ØØ×!Ñ!ˆÜ×"Ñ"ˆÜ×Ñˆä  §¡×!3Ñ!3Ó!5Ó6ò 	‰GˆAˆtØ�T—^‘^Ñ# fÑ,ˆBØ�d—n‘nÑ$ˆBØ�b‘˜A‘ˆAØ—-‘-Ø�1œ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ñ!	rA   c                 ó†   — | j                   D ]  }| j                  j                  |«       Œ g | _        d | _        d| _        y r¨   )r  r  r
  r  r  r  )r<   r	  s     r?   rQ  zChartView.erase_treeü  s@   € Ø—?‘?ò 	*ˆCØ×Ñ×$Ñ$ SÕ)ð	*àˆŒØ"ˆÔØ ˆÕrA   c                 ó  — |€| j                   €y |€| j                   }| j                   |k7  rM| j                  j                  |«      D �cg c]  }t        |t        «      sŒ|‘Œ c}| _        || _         d| _        t        | j
                  «      dk(  ry | j                  D ]  }| j                  j                  |«       Œ | j
                  | j                     }| j                  ||j                  «       «       | j                  «        | j                  j                  «       | j                  z  dt         j"                  z  z   }|j%                  «       t         j&                  | j(                  z   z  }dd||f| j                  d<   y c c}w )Nr   r|   rP  )r  rX   ÚtreesrH   r(   r  r  rµ   r  r  r
  Ú_draw_treetokr·   Ú_draw_treecycler  rD  rõ  rE  r‰   r‘  rb  )r<   r™   r  r	  ÚtreeÚwÚhs          r?   rù  zChartView.draw_tree  sU  € Øˆ<˜D×/Ñ/Ð7ØØˆ<Ø×&Ñ&ˆDð ×Ñ $Ò&Ø)-¯©×):Ñ):¸4Ó)@ÖX AÄJÈqÔRVÕDWšaÒXˆDŒNØ"&ˆDÔØ#$ˆ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°a¨Lˆ×Ñ˜.Ò)ùò- Ys   Á
FÁ Fc                 óŽ   — | j                   dz   t        | j                  «      z  | _         | j                  | j                  «       y rÕ   )r  rµ   r  rù  r  rÎ   s    r?   Ú
cycle_treezChartView.cycle_tree#  s5   € Ø $× 4Ñ 4°qÑ 8¼CÀÇÁÓ<OÑOˆÔØ�‰�t×*Ñ*Õ+rA   c                 óü  — t        | j                  «      dk  ry dt        | j                  «      z  }| j                  }t        j                  }| j
                  j                  «       | j                  z  |z   dz
  }|j                  |dd|| j                  ¬«      }| j                  j                  |«       |j                  |«      \  }}}}t        t        | j                  «      «      D ]�  }|dt        | j                  «      |z
  dz
  z  z
  }	|| j                  k(  rd}
nd}
|j                  |	|d	z   |	d
z
  ||	d	z
  |d	z   |
d¬«      }| j                  j                  |«       | |fd„}|j!                  |d|«       Œ’ y )Nr�   z%d Treesr|   Úne)r   rp   r3   r‘   rƒ  z#fffr°   r’   r³   r‚  c                 ó2   — ||_         |j                  «        y r    )r  rù  )rÙ   r<   rL   s      r?   rš   z%ChartView._draw_treecycle.<locals>.cbB  s   € Ø'(�Ô$Ø—‘Õ rA   r  )rµ   r  r  rõ  rE  rX   r  rD  r  r'  r  rC   r?  r¶   r  Úcreate_polygonr  )r<   rH  r  r   r'  r	  Ú_r.  rL   r&  rw   rš   s               r?   r­  zChartView._draw_treecycle'  sj  € Üˆt�~‰~Ó !Ò#Øð œS §¡Ó0Ñ0ˆØ×ÑˆÜ×"Ñ"ˆØ—‘×&Ñ&Ó(¨4¯>©>Ñ9¸FÑBÀQÑFˆØ�m‰m˜E 1¨T¸ÀDÇNÁNˆmÓSˆØ�‰×Ñ˜sÔ#Ø—V‘V˜C“[‰
ˆˆ1ˆa�ô ”s˜4Ÿ>™>Ó*Ó+ò 	.ˆAØ˜œc $§.¡.Ó1°AÑ5¸Ñ9Ñ:Ñ:ˆAØ�D×(Ñ(Ò(Ø‘à�Ø×"Ñ"Ø�1�r‘6˜1˜q™5 ! Q¨¡V¨Q°©V¸$Èð #ó ˆCð �O‰O×"Ñ" 3Ô'ð  $ qó !ð �J‰J�s˜L¨"Õ-ñ#	.rA   c           
      óÒ  — | j                   }t        j                  }g }|D ]l  }t        |t        «      r+| j                  |||dz   «      \  }}|j                  |«       Œ>|j                  d|z  dz   | j                  z  dz  |z   «       |dz  }Œn |rt        |«      t        |«      z  }	n d|z  dz   | j                  z  dz  |z   }	|dz  }|t        j                  | j                  z   z  }
|j                  |	|
ddt        |j                  «       «      d| j                  ¬«      }| j                   j                  |«       |
t        j                  z   | j                  z   }t#        ||«      D ]ø  \  }}t        |t        «      rA|r?|j%                  |	|
| j                  z   ||dd¬«      }| j                   j                  |«       t        |t        «      rB|s@|j%                  |	|
| j                  z   ||dd	d
¬«      }| j                   j                  |«       t        |t        «      rŒº|j%                  |	|
| j                  z   |ddd¬«      }| j                   j                  |«       Œú |	|fS )z…
        :param index: The index of the first leaf in the tree.
        :return: The index of the first leaf after the tree.
        r�   r|   r  Úcenterr„  )r   r^  rp   rw   r3   rƒ  )rˆ   rw   z#048z2 3)rˆ   rw   r  i'  )r  rõ  rE  rH   r(   r¬  rC   rD  Úsumrµ   r‘  rb  r  r_  rH  r'  r  Úzipr  )r<   ÚtreetokÚindexÚdepthr  r   Úchild_xsrK  Úchild_xÚnodexÚnodeyr	  ÚchildyÚchildxs                 r?   r¬  zChartView._draw_treetokH  sr  € ð
 ×ÑˆÜ×"Ñ"ˆð ˆØò 	ˆEÜ˜%¤Ô&Ø!%×!3Ñ!3°E¸5À%È!Á)Ó!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ˆÜ  ¨7Ó3ò "	,‰MˆF�EÜ˜%¤Ô&©5à—m‘mØØ˜D×-Ñ-Ñ-ØØØØð $ó �ð —‘×&Ñ& sÔ+Ü˜%¤Ô&©uà—m‘mØØ˜D×-Ñ-Ñ-ØØØØØð $ó �ð —‘×&Ñ& sÔ+Ü˜e¤TÕ*à—m‘mØØ˜D×-Ñ-Ñ-ØØØØð $ó �ð —‘×&Ñ& sÕ+ðE"	,ðH �eˆ|ÐrA   c                 ó  — | j                   r+| j                   j                  d«       | j                  «        | j                  r+| j                  j                  d«       | j	                  «        | j
                  j                  d«       i | _        t        t        | j                  «      «      D ](  }| j                  |   D ]  }| j                  ||«       Œ Œ* | j                  D ]  }| j                  |«       Œ | j                  «        y)z1
        Draw everything (from scratch).
        rÿ   N)r  r
  rù  r  r¨  r  r  r¶   rµ   r
  rh  rX   rR  r¥  )r<   rT  r™   s      r?   rg   zChartView.draw˜  sç   € ð ×ÒØ×Ñ×$Ñ$ UÔ+Ø�N‰NÔà× Ò Ø×!Ñ!×(Ñ(¨Ô/Ø×ÑÔ!à×Ñ×!Ñ! %Ô(ØˆŒô œ˜T×-Ñ-Ó.Ó/ò 	+ˆCØ×(Ñ(¨Ñ-ò +�Ø—‘  cÕ*ñ+ð	+ð —K‘Kò 	!ˆDØ�N‰N˜4Õ ð	!ð 	×ÑÕrA   c                 óB   — d| j                   j                  |i «      |<   y rÕ   rÖ   rØ   s      r?   r�   zChartView.add_callback±  rÛ   rA   c                 ód   — |€| j                   |= y 	 | j                   |   |= y # t        $ r Y y w xY wr    rÝ   rØ   s      r?   rß   zChartView.remove_callback´  rà   rá   c                 ó‚   — || j                   vry t        | j                   |   j                  «       «      D ]  } ||Ž  Œ	 y r    rã   rå   s       r?   r˜   zChartView._fire_callbacks½  rè   rA   r    )r.  r“   rr   )r   )NN)ú#0df)*rO   rP   rQ   r"  r�  rE  r‘  Ú_CHART_LEVEL_SIZErl   r  r  r9  r<  r@  rB  r  rL  rN  r  rÇ   rZ  rf  rR  ró   rh  rv  rö   rù   rü   r  r  r¥  r¨  rQ  rù  r²  r­  r¬  rg   r�   rß   r˜   rS   rA   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óórA   rõ  c                   ó6   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚEdgeRulez­
    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                 ón   •— | j                   j                  d   }|| _        |j                  dz
  | _        y rÕ   )Ú	__class__Ú	__bases__Ú_edgeÚ	NUM_EDGES)r<   r™   ÚsuperrÎ  s      €r?   rl   zEdgeRule.__init__Ò  s.   ø€ Ø—‘×(Ñ(¨Ñ+ˆØˆŒ
ØŸ™¨1Ñ,ˆ�rA   c              '   óž   •K  — | j                   j                  d   }|| j                  fz  } |j                  | ||g|¢­Ž E d {  –—†  y 7 Œ­wrÕ   )rÎ  rÏ  rÐ  Úapply)r<   ri   r4  rÆ   rÒ  rÎ  s        €r?   rÔ  zEdgeRule.apply×  sH   øè ø€ Ø—‘×(Ñ(¨Ñ+ˆØ�$—*‘*�ÑˆØ�5—;‘;˜t U¨GÐ<°eÒ<×<Ò<ús   ƒAAÁAÁAc                 óX   •— | j                   j                  d   }|j                  | «      S rÕ   )rÎ  rÏ  Ú__str__)r<   rÒ  rÎ  s     €r?   rÖ  zEdgeRule.__str__Ü  s&   ø€ Ø—‘×(Ñ(¨Ñ+ˆØ�}‰}˜TÓ"Ð"rA   )rO   rP   rQ   r"  rl   rÔ  rÖ  Ú__classcell__)rÎ  s   @r?   rÌ  rÌ  Ë  s   ø„ ñô-ô
=÷
#ð #rA   rÌ  c                   ó   — e Zd Zy)ÚTopDownPredictEdgeRuleN©rO   rP   rQ   rS   rA   r?   rÙ  rÙ  á  ó   „ ØrA   rÙ  c                   ó   — e Zd Zy)ÚBottomUpEdgeRuleNrÚ  rS   rA   r?   rÝ  rÝ  å  rÛ  rA   rÝ  c                   ó   — e Zd Zy)ÚBottomUpLeftCornerEdgeRuleNrÚ  rS   rA   r?   rß  rß  é  rÛ  rA   rß  c                   ó   — e Zd Zy)ÚFundamentalEdgeRuleNrÚ  rS   rA   r?   rá  rá  í  rÛ  rA   rá  c                   óª  — e Zd Zd3d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZddgZg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d4d&„Z&d'„ Z'd5d(„Z(d)„ Z)d*„ Z* e+«       gZ, e-«       gZ. e/«       gZ0 e1«       gZ2 e3«       gZ4e,e.z   e4z   Z5e0e4z   Z6e2e4z   Z7d+„ Z8d,„ Z9d-„ Z:d.„ Z;d/„ Z<d0„ Z=d1„ Z>d2„ Z?y%)6ÚChartParserAppc                 ó4  — | j                  ||«       d | _        	 t        «       | _        | j                  j                  |«       | j                  j	                  d| j
                  «       t        | j                  «      }t        | j                  «      }t        | j                  «      }|j                  dd¬«       |j                  dd¬«       |j                  ddd¬«       | j                  | j                  «       | j                  «        | j                  |«       | j                  |«       | j                  |«       | j                  «        d | _        d | _        | j!                  «        y # t"        $ r t%        d	«       | j                  «        ‚ w xY w)
NrW   rr   rs   r/  r&  r“   r�   r1  zError creating Tree View)Ú_init_parserr\   r   r]   r^   r_   r   rx   r  Ú_init_animationÚ_init_chartviewÚ_init_rulelabelrr  ro  Ú_matrixÚ_resultsrs  r¢   Úprint)r<   r4  rä  r]   Úframe3Úframe2Úframe1s          r?   rl   zChartParserApp.__init__÷  sA  € à×Ñ˜' 6Ô*àˆŒ
ð	ä›ˆ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                 ó`   — | j                   €y | j                   j                  «        d | _         y r    )r\   r_   ©r<   ræ   s     r?   r_   zChartParserApp.destroy  s&   € Ø�:‰:ÐØØ�
‰
×ÑÔØˆ�
rA   c                 óR   — t        «       ry | j                  j                  |i |¤Ž y)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)   r\   rz  r  s      r?   rz  zChartParserApp.mainloop"  s%   € ô Œ9ØØˆ�
‰
×Ñ˜TÐ, VÓ,rA   c                 ó@   — || _         || _        | j                  «        y r    )r+  Ú_tokensÚ_reset_parser)r<   r4  rä  s      r?   rå  zChartParserApp._init_parser1  s   € ØˆŒØˆŒØ×ÑÕrA   c                 ór  — t        | j                  «      | _        | j                  j                  | j                  «       | j                  j                  «       | _        t        «       j                  | j                  | j                  «      D ]  }Œ | j                  j                  «       | _
        d | _        y r    )r#   r+  Ú_cpÚ
initializeró  ri   rX   r!   rÔ  ÚstepÚ_cpstepr/  )r<   Ú	_new_edges     r?   rô  zChartParserApp._reset_parser6  s�   € Ü& t§}¡}Ó5ˆŒØ�‰×Ñ˜DŸL™LÔ)Ø—h‘h—n‘nÓ&ˆŒô &›×-Ñ-¨d¯k©k¸4¿=¹=ÓIò 	ˆIØð	ð —x‘x—}‘}“ˆŒð ˆ�rA   c                 ó¦  — t        t        «       d   ¬«      | _        |j                  d| j                  «       t	        |«      | _        | j
                  j                  | j                  j                  d«      «       t        dd| j
                  j                  «       ¬«      | _	        t        d| j
                  j                  «       ¬«      | _
        y )	Nr3   r%  r&  r#  r8   r:   r   r$  )r   r   r)  r*  r   Ú_sizer¿   Úcgetr  r'  r(  r�   s     r?   r  zChartParserApp._init_fontsE  s‡   € ä¤&£(¨6Ñ"2Ô3ˆŒØ�‰˜ §¡Ô/ô ˜D“\ˆŒ
Ø�
‰
�‰�t—}‘}×)Ñ)¨&Ó1Ô2ä [¸ÀdÇjÁjÇnÁnÓFVÔWˆŒÜ °4·:±:·>±>Ó3CÔDˆ�
rA   c                 óæ   — t        | j                  «      | _        | j                  j                  d«       t        | j                  «      | _        | j                  j                  d«       d| _        y )Nr�   r‚   r   )r   r\   Ú_stepr¿   Ú_animateÚ
_animatingrÎ   s    r?   ræ  zChartParserApp._init_animationQ  sO   € ä˜DŸJ™JÓ'ˆŒ
Ø�
‰
�‰�qÔô ˜tŸz™zÓ*ˆŒØ�‰×Ñ˜!Ôð ˆ�rA   c                 óŒ   — t        | j                  |dd¬«      | _        | j                  j                  d| j                  «       y )Nr�   )rù  rú  r–   )rõ  rX   Ú_cvr�   Ú_click_cv_edge)r<   rh   s     r?   rç  zChartParserApp._init_chartview]  s2   € Ü˜TŸ[™[¨&¸AÈQÔOˆŒØ�‰×Ñ˜h¨×(;Ñ(;Õ<rA   c                 óD  — d}t        ||| j                  ¬«      | _        t        |ddd| j                  ¬«      | _        | j                  j	                  d¬«       | j                  j	                  d¬«       t        || j                  d	¬
«      }|j	                  d¬«       y )NzLast edge generated by:)rp   r3   r÷  r¤  r¯  )rˆ   r€   r   r3   r)  r(  ÚStep)Úvariablerp   r'  )r   r'  Ú_rulelabel1Ú_rulelabel2rx   r   rÿ  )r<   rh   Úruletxtrø  s       r?   rè  zChartParserApp._init_rulelabela  sˆ   € Ø+ˆä  ¨g¸D¿N¹NÔKˆÔÜ Ø˜" X°cÀÇÁô
ˆÔð 	×Ñ×Ñ 6ÐÔ*Ø×Ñ×Ñ 6ÐÔ*Ü˜6¨D¯J©J¸VÔDˆØ�	‰	�wˆ	ÕrA   c                 ó  — t        |«      }t        |«      }|j                  dd¬«       |j                  dd¬«       t        |ddd| j                  ¬	«      j                  d
¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |ddd| j
                  ¬	«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |d¬«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |d¬«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       t        |d¬«      j                  d¬«       t        |ddd| j                  ¬	«      j                  d¬«       y )Nrr   r&  r/  rƒ   rs   zReset
Parserz#90c0d0r³   )rp   rŠ   r/   rq   r'  r(  zTop Down
Strategyr)  zBottom Up
StrategyzBottom Up
Left-Corner StrategyzTop Down Init
Rulez#90f090zTop Down Predict
Ruler‘   r  zBottom Up Predict
Rulez"Bottom Up Left-Corner
Predict RulezFundamental
Rule)r   rx   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<   rh   rî  rí  s       r?   rr  zChartParserApp._init_buttonsm  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ˆ$Õ
rA   c                 ó\  — | j                   j                  d| j                  j                  «       | j                   j                  d| j                  j                  «       | j                   j                  d| j                  j
                  «       | j                   j                  d| j                  j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d	| j                  «       | j                   j                  d
| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                   «       | j                   j                  d| j"                  «       | j                   j                  d| j$                  fd„«       | j                   j                  d| j$                  fd„«       | j                   j                  d| j$                  fd„«       | j                   j                  d| j&                  fd„«       y )Nz<Up>z<Down>z<Prior>z<Next>rW   rf  z<F1>z<Control-s>r¼  z<Control-r>r  r  r  z<space>z<Control-g>z<Control-t>r]  c                 ó$   — |j                  d«      S rÕ   ©r¿   ©r¤   Úas     r?   ú<lambda>z/ChartParserApp._init_bindings.<locals>.<lambda>Ô  ó   € ¸¿¹¸a»€ rA   r¦  c                 ó$   — |j                  d«      S )Nr|   r  r  s     r?   r  z/ChartParserApp._init_bindings.<locals>.<lambda>Õ  r  rA   r‰  c                 ó$   — |j                  d«      S )Nr‚   r  r  s     r?   r  z/ChartParserApp._init_bindings.<locals>.<lambda>Ö  r  rA   rd  c                 óB   — |j                  |j                  «        «      S r    )r¿   r  )r¤   rd  s     r?   r  z/ChartParserApp._init_bindings.<locals>.<lambda>Ù  s   € °Q·U±U¸q¿u¹u»w¸;Ó5G€ rA   )r\   r^   r  r9  r<  r@  rB  r_   ÚhelpÚ
save_chartrt  r  r  r  r  Ú_stop_animationÚedit_grammarÚedit_sentencer   rÿ  rÎ   s    r?   rs  z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ÕHrA   c                 óJ
  — t        | j                  «      }t        |d¬«      }|j                  dd| j                  d¬«       |j                  dd| j                  d¬«       |j                  dd| j
                  d	¬«       |j                  «        |j                  d
| j                  ¬«       |j                  d| j                  ¬«       |j                  «        |j                  dd| j                  d¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd| j                  d¬«       |j                  dd| j                  d¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd| j                  ¬«       |j                  dd| j                  ¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd| j                  d¬«       |j                  dd| j                   d ¬«       |j                  d!d| j"                  d"¬«       |j                  «        |j                  d#| j$                  ¬«       |j                  d$| j&                  ¬«       |j                  d%| j(                  ¬«       |j                  d&| j*                  ¬«       |j                  d'| j,                  ¬«       |j                  d(d|¬«       t        |d¬«      }|j/                  d)d| j0                  d*¬+«       |j                  «        |j3                  d,d| j4                  d¬-«       |j3                  d.d| j4                  dd/¬0«       |j3                  d1d| j4                  d2d3¬0«       |j3                  d4d| j4                  d5d6¬0«       |j                  d7d|¬«       t        |d¬«      }|j3                  d8| j6                  dd9| j8                  ¬:«       |j3                  d;| j6                  dd<| j8                  ¬:«       |j3                  d=| j6                  dd>| j8                  ¬:«       |j3                  d?| j6                  dd@| j8                  ¬:«       |j3                  dA| j6                  ddB| j8                  ¬:«       |j                  dCd|¬«       t        |d¬«      }|j                  dDd| j:                  ¬«       |j                  dEd| j<                  dF¬«       |j                  dGd|¬«       | j                  j?                  |¬H«       y )INr   r|  z
Save Chartr�  r„  r~  r  zReset ChartzCtrl-rzSave GrammarrŽ  zLoad Grammarr‚  r�   rƒ  r…  r†  zEdit Grammarr’   zCtrl-gú	Edit TextzCtrl-tÚEditr!  rr  )rH  r4   rq   ÚResultsÚViewzTop Down Strategyr  zBottom Up Strategyr  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ÚApplyr  rd  )rH  r4   r  r€  zNo Animation)rH  r4   r  ÚvaluezSlow Animationr]  )rH  r4   r  r*  r€  zNormal Animationr|   r¦  zFast Animationr‚   r‰  ÚAnimateÚTinyr°   )rH  r  r4   r*  rq   ÚSmallrö  ÚMediumé   ÚLargeé   ÚHugeé   ÚZoomÚAboutÚInstructionsÚF1ÚHelpr�  ) r	   r\   r‘  r   rt  r  r”  Úsave_grammarÚload_grammarr_   r•  r"  r#  Úview_matrixÚview_resultsr  r  r  r  r  r  r  r  Úadd_checkbuttonrÿ  Úadd_radiobuttonr   rü  ÚresizeÚaboutr  rš  )	r<   r›  rœ  ÚeditmenuÚviewmenuÚrulemenuÚanimatemenuÚzoommenuÚhelpmenus	            r?   ro  z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ÐÕ'rA   c                 óz   — || j                   k7  r| j                  |«       y | j                  j                  «        y r    )r/  Ú_select_edger  r²  rò   s     r?   r  zChartParserApp._click_cv_edge~  s.   € Ø�4—?‘?Ò"à×Ñ˜dÕ#ð �H‰H×ÑÕ!rA   c                 ó\   — | j                  |«       | j                  j                  |«       y r    )rH  r  ró   rò   s     r?   Ú_select_matrix_edgez"ChartParserApp._select_matrix_edgeˆ  s"   € Ø×Ñ˜$ÔØ�‰×Ñ˜4Õ rA   c                 ó  — || _         | j                  j                  |d«       | j                  j                  |«       | j                  r| j                  j                  |«       | j                  r| j                  j                  |«       y y )Nz#f00)r/  r  rü   rù  ré  ró   rò   s     r?   rH  zChartParserApp._select_edgeŒ  sf   € ØˆŒà�‰×Ñ˜t VÔ,Ø�‰×Ñ˜4Ô à�<Š<Ø�L‰L×&Ñ& tÔ,Ø�<Š<Ø�L‰L×"Ñ" 4Õ(ð rA   c                 óÈ   — d | _         | j                  j                  «        | j                  j                  «        | j                  r| j                  j                  «        y y r    )r/  r  rù   rQ  ré  rÎ   s    r?   Ú_deselect_edgezChartParserApp._deselect_edge—  sE   € ØˆŒà�‰×ÑÔØ�‰×ÑÔà�<Š<Ø�L‰L×$Ñ$Õ&ð rA   c                 óf  — | j                  | j                  j                  «       «       | j                  j	                  «        | j                  j                  |«       | j                  j                  |d«       | j                  j                  |«       | j                  r| j                  j	                  «        | j                  r| j                  j                  |«       | j                  r| j                  j                  |«       | j                  r| j                  j	                  |«       y y )NrÉ  )
Ú_display_rulerö  Úcurrent_chartruler  rÇ   rù  rü   ró   ré  rê  rò   s     r?   Ú_show_new_edgez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× Ñ  Õ&ð rA   c                 óð   — d| _         	 t        | j                  dt        xs dj	                  «       dd¬«       y # t
        $ r2 t        | j                  dt        xs dj	                  «       d¬«       Y y w xY w)Nr   zHelp: Chart Parser Applicationrc  éK   Úfixed)rˆ   r3   r  )r  r   r\   r"  Ústripr¢   r£   s     r?   r  zChartParserApp.help¶  sl   € ØˆŒð	ÜØ—
‘
Ø0Ü’˜B×%Ñ%Ó'ØØöøô ò 	ÜØ—
‘
Ø0Ü’˜B×%Ñ%Ó'Ø÷	ð	ús   ‰0: º8A5Á4A5c                 ó    — d}t        d|«       y )Nz5NLTK Chart Parser Application
Written by Edward LoperzAbout: Chart Parser Application)r   )r<   r¤   ÚABOUTs      r?   r@  zChartParserApp.aboutÉ  s   € ØMˆÜÐ2°EÕ:rA   rÄ  rÆ  ))zPlaintext grammar fileú.cfgrÄ  rÆ  c                 ó  — t        | j                  d¬«      }|sy	 t        |d«      5 }t        |«      }ddd«       | _        | j
                  j                  |«       | j                  r| j                  j                  |«       | j                  r| j                  j                  «        | j                  r| j                  j                  |«       | j                  j                  |«       y# 1 sw Y   Œ»xY w# t        $ r}‚ d}~ww xY w)zLoad a chart from a pickle filerÅ  rÈ  NrÖ  )r   rÎ  rÏ  r'   rX   r  rÇ   ré  rª   rí   rê  rö  r¢   r   )r<   ræ   rw  rÜ  ri   r¤   s         r?   rt  zChartParserApp.load_chartØ  sØ   € ä"Ø×+Ñ+¸iô
ˆñ Øð	SÜ�h Ó%ð ,¨Ü# FÓ+�÷,àˆDŒKØ�H‰H�O‰O˜EÔ"Ø�|Š|Ø—‘×&Ñ& uÔ-Ø�|Š|Ø—‘×*Ñ*Ô,Ø�}Š}Ø—‘×'Ñ'¨Ô.Ø�H‰H×Ñ˜uÕ%÷,ð ,ûô ò 	SØûð	Sús.   œC: ¨C.´B9C: Ã.C7Ã3C: Ã:	D	ÄDÄD	c                 óà   — t        | j                  d¬«      }|sy	 t        |d«      5 }t        j                  | j
                  |«       ddd«       y# 1 sw Y   yxY w# t        $ r}‚ d}~ww xY w)zSave a chart to a pickle filerÅ  rÈ  NrË  )r   rÎ  rÏ  rÐ  rÑ  rX   r¢   r   rÒ  s        r?   r   zChartParserApp.save_chartï  sl   € ä$Ø×+Ñ+¸iô
ˆñ Øð	RÜ�h Ó%ð 2¨Ü—‘˜DŸK™K¨Ô1÷2÷ 2ñ 2ûäò 	RØûð	Rús4   œA ¨!AÁ	A ÁAÁA ÁA Á	A-Á'A(Á(A-c                 ó¨  — t        | j                  d¬«      }|sy	 |j                  d«      r!t        |d«      5 }t	        |«      }ddd«       n7t        |«      5 }t        j                  |j                  «       «      }ddd«       | j                  «       y# 1 sw Y   ŒxY w# 1 sw Y   Œ'xY w# t        $ r}t        dd|z  «       Y d}~yd}~ww xY w)z!Load a grammar from a pickle filerX  rÈ  NrÅ  rÖ  zError Loading GrammarúUnable to open file: %r)r   ÚGRAMMAR_FILE_TYPESrÚ  rÏ  r'   r   Ú
fromstringÚreadrX  r¢   r   )r<   ræ   rw  rÜ  r4  r¤   s         r?   r:  zChartParserApp.load_grammarý  sÌ   € ä"Ø×-Ñ-Àô
ˆñ Øð		UØ× Ñ  Ô+Ü˜( DÓ)ð 2¨VÜ)¨&Ó1�G÷2ð 2ô ˜(“^ð < vÜ!Ÿn™n¨V¯[©[«]Ó;�G÷<à×Ñ˜WÕ%÷2ð 2ú÷<ð <ûô ò 	UÜÐ-Ð/HÈ8Ñ/S×TÑTûð	UúsF   œB/ ¹BÁB/ Á$B#Á=B/ ÂB ÂB/ Â#B,Â(B/ Â/	CÂ8CÃCc                 ó&  — t        | j                  d¬«      }|sy 	 |j                  d«      rBt        |d«      5 }t	        j
                  | j                  | j                  f|«       d d d «       y t        |d«      5 }| j                  j                  «       }|D �cg c]0  }|j                  «       | j                  j                  «       k(  sŒ/|‘Œ2 }}|D �cg c]0  }|j                  «       | j                  j                  «       k7  sŒ/|‘Œ2 }}|D ]  }|j                  d|z  «       Œ |D ]  }|j                  d|z  «       Œ 	 d d d «       y # 1 sw Y   y xY wc c}w c c}w # 1 sw Y   y xY w# t        $ r}	t        dd|z  «       Y d }	~	y d }	~	ww xY w)	NrX  rÈ  rÅ  rË  r¯  z%s
zError Saving Grammarr\  )r   r]  rÚ  rÏ  rÐ  rÑ  rX   ró  r+  ÚproductionsrD   r·   Úwriter¢   r   )
r<   ræ   rw  rÓ  ÚprodsÚpr·   ÚrestÚprodr¤   s
             r?   r9  zChartParserApp.save_grammar	  sz  € Ü$Ø×-Ñ-Àô
ˆñ Øð	TØ× Ñ  Ô+Ü˜( DÓ)ð F¨WÜ—K‘K §¡¨d¯l©lÐ ;¸WÔE÷Fð Fô ˜( CÓ(ð 5¨GØ ŸM™M×5Ñ5Ó7�EØ(-ÖR 1°·±³¸D¿M¹M×<OÑ<OÓ<QÓ1QšQÐR�EÐRØ',ÖQ !°·±³¸4¿=¹=×;NÑ;NÓ;PÓ0PšAÐQ�DÐQØ %ò 5˜ØŸ™ f¨t¡mÕ4ð5à $ò 5˜ØŸ™ f¨t¡mÕ4ñ5÷5ð 5÷Fð Füò
 SùÚQ÷5ð 5ûô ò 	TÜÐ,Ð.GÈ(Ñ.R×SÑSûð	Tús‚   œE. ¹-EÁ&E. Á/E. Á;E"Â0EÃEÃE"Ã0EÄEÄ
8E"ÅE. ÅEÅE. ÅE. Å
E"Å"E+Å'E. Å+E. Å.	FÅ7FÆFc                 óŽ  — d| _         | j                  «        | j                  j                  | j                  «       | j
                  r%| j
                  j                  | j                  «       | j
                  r| j
                  j                  «        | j                  r&| j                  j                  | j                  «       y y r¨   )	r  rô  r  rÇ   rX   ré  rª   rí   rê  rð  s     r?   r  zChartParserApp.reset%	  s   € ØˆŒØ×ÑÔØ�‰�‰˜Ÿ™Ô$Ø�<Š<Ø�L‰L×"Ñ" 4§;¡;Ô/Ø�<Š<Ø�L‰L×&Ñ&Ô(Ø�=Š=Ø�M‰M×#Ñ# D§K¡KÕ0ð rA   c                 óZ   — t        | j                  | j                  | j                  «       y r    )r   r\   r+  rX  r£   s     r?   r"  zChartParserApp.edit_grammar4	  s   € Ü�$—*‘*˜dŸm™m¨T×-=Ñ-=Õ>rA   c                 ó˜   — || _         | j                  j                  |«       | j                  r| j                  j                  |«       y y r    )r+  rö  rX  rê  rW  s     r?   rX  zChartParserApp.set_grammar7	  s9   € ØˆŒØ�‰×Ñ˜WÔ%Ø�=Š=Ø�M‰M×%Ñ% gÕ.ð rA   c                 óˆ   — dj                  | j                  «      }d}d}t        | j                  ||| j                  |«       y )NrO  r%  zEnter a new sentence to parse.)r`  ró  r   r\   Úset_sentence)r<   r¤   Úsentencer]   Úinstrs        r?   r#  zChartParserApp.edit_sentence=	  s8   € Ø—8‘8˜DŸL™LÓ)ˆØˆØ0ˆÜ�D—J‘J ¨%°×1BÑ1BÀEÕJrA   c                 ó`   — t        |j                  «       «      | _        | j                  «        y r    )r¾   Úsplitró  r  )r<   rl  s     r?   rk  zChartParserApp.set_sentenceC	  s   € Ü˜HŸN™NÓ,Ó-ˆŒØ�
‰
�rA   c                 óæ   — | j                   �| j                   j                  «        t        | j                  | j                  «      | _         | j                   j                  d| j                  «       y r•   )ré  r_   rU   r\   rX   r�   rJ  r£   s     r?   r;  zChartParserApp.view_matrixK	  sL   € Ø�<‰<Ð#Ø�L‰L× Ñ Ô"Ü& t§z¡z°4·;±;Ó?ˆŒØ�‰×!Ñ! (¨D×,DÑ,DÕErA   c                 ó°   — | j                   �| j                   j                  «        t        | j                  | j                  | j
                  «      | _         y r    )rê  r_   r$  r\   rX   r+  r£   s     r?   r<  zChartParserApp.view_resultsQ	  s8   € Ø�=‰=Ð$Ø�M‰M×!Ñ!Ô#Ü(¨¯©°T·[±[À$Ç-Á-ÓPˆ�rA   c                 ód   — d| _         | j                  | j                  j                  «       «       y r¨   )r  rL  rü  r  rÎ   s    r?   r?  zChartParserApp.resizeZ	  s"   € ØˆŒØ×Ñ˜4Ÿ:™:Ÿ>™>Ó+Õ,rA   c                 ó  — | j                   j                  |«       | j                  j                  t	        |«       ¬«       | j
                  j                  t	        |«       ¬«       | j                  j                  t	        |«       ¬«       y rI  )r  rL  r(  rF  rJ  r'  r)  rK  s     r?   rL  zChartParserApp.set_font_size^	  se   € Ø�‰×Ñ˜tÔ$Ø�
‰
×Ñ¤3 t£9 *ÐÔ-Ø�‰× Ñ ¤s¨4£y jÐ Ô1Ø�‰×Ñ¤c¨$£i ZÐÕ0rA   c                 óH   — t        | j                  j                  «       «      S r    )rJ  rü  r  rÎ   s    r?   rN  zChartParserApp.get_font_sized	  s   € Ü�4—:‘:—>‘>Ó#Ó$Ð$rA   Nc                 ó:  — | j                   rd| _         y | j                  d «       | j                  j                  «       r“| j                  }|�X|�V| j
                  j                   ||«      g«       | j                  «       }|€N| j                  j                  «        d | _        y | j
                  j                  |«       | j                  «        y y | j
                  j                  |«       | j                  j                  «       rd| _         | j                  «        y | j                  D ]  }|�Œ n | j                  j                  «        | j                  r| j                  j                  «        | j                  r| j                  j                  «        y y )Nr   r�   )r  rO  rÿ  r  r/  rö  Úset_strategyÚ_apply_strategyr  rù   r   Ú_animate_strategyrù  rÇ   ré  rê  )r<   ÚstrategyÚedge_strategyÚ	selectionÚnewedger™   s         r?   Úapply_strategyzChartParserApp.apply_strategyk	  sE  € à�?Š?ØˆDŒOØð 	×Ñ˜4Ô ð �:‰:�>‰>ÔØŸ™ˆIØÐ%¨MÐ,Eà—‘×%Ñ%¡}°YÓ'?Ð&@ÔAØ×.Ñ.Ó0�ð �?Ø—H‘H×(Ñ(Ô*Ø&*�D•Oà—‘×%Ñ% hÔ/Ø×$Ñ$Õ&ð #ð �H‰H×!Ñ! (Ô+Ø�}‰}× Ñ Ô"Ø"#�”Ø×&Ñ&Õ(à ŸL™Lò �DØ‘|Ùðð —‘—‘Ô!Ø—<’<Ø—L‘L×'Ñ'Ô)Ø—=’=Ø—M‘M×(Ñ(Õ*ð !rA   c                 ó   — d| _         y r¨   )r  r£   s     r?   r!  zChartParserApp._stop_animation“	  s	   € Øˆ�rA   c                 ó  — | j                   dk(  ry | j                  «       �ê| j                  j                  «       dk(  s| j                  j                  «       dk(  ry | j                  j                  «       dk(  r'| j
                  j                  d| j                  «       y | j                  j                  «       dk(  r'| j
                  j                  d| j                  «       y | j
                  j                  d| j                  «       y y )Nr   r�   i¸  r|   iè  r‘   )r  rw  r   r  rÿ  r\   Úafterrx  )r<   Úspeeds     r?   rx  z ChartParserApp._animate_strategy–	  sÇ   € Ø�?‰?˜aÒØØ×ÑÓ!Ð-Ø�}‰}× Ñ Ó" aÒ'¨4¯:©:¯>©>Ó+;¸qÒ+@ØØ�}‰}× Ñ Ó" aÒ'Ø—
‘
× Ñ   t×'=Ñ'=Õ>Ø—‘×"Ñ"Ó$¨Ò)Ø—
‘
× Ñ   t×'=Ñ'=Õ>à—
‘
× Ñ   T×%;Ñ%;Õ<ð .rA   c                 óV   — t        | j                  «      }|�| j                  |«       |S r    )Únextrù  rQ  )r<   Únew_edges     r?   rw  zChartParserApp._apply_strategy£	  s)   € Ü˜Ÿ™Ó%ˆàÐØ×Ñ Ô)ØˆrA   c                 ó�   — |€d| j                   d<   y t        |«      }|| j                   d<   | j                  j                  «       }y )Nrc  rp   )r	  r_  r  rN  )r<   ÚrulerÁ  r#  s       r?   rO  zChartParserApp._display_ruleª	  sB   € Øˆ<Ø')ˆD×Ñ˜VÒ$ä�t“9ˆDØ'+ˆD×Ñ˜VÑ$Ø—8‘8×)Ñ)Ó+‰DrA   c                 ó<   — | j                  | j                  d «       y r    )r}  Ú_TD_INITr£   s     r?   r  zChartParserApp.top_down_initÃ	  s   € Ø×Ñ˜DŸM™M¨4Õ0rA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_TD_PREDICTrÙ  r£   s     r?   r  zChartParserApp.top_down_predictÆ	  s   € Ø×Ñ˜D×,Ñ,Ô.DÕErA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_BU_RULErÝ  r£   s     r?   r  zChartParserApp.bottom_upÉ	  s   € Ø×Ñ˜DŸM™MÔ+;Õ<rA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_BU_LC_RULErß  r£   s     r?   r  z#ChartParserApp.bottom_up_leftcornerÌ	  s   € Ø×Ñ˜D×,Ñ,Ô.HÕIrA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_FUNDAMENTALrá  r£   s     r?   r  zChartParserApp.fundamentalÏ	  s   € Ø×Ñ˜D×-Ñ-Ô/BÕCrA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_BU_STRATEGYrÝ  r£   s     r?   r  z!ChartParserApp.bottom_up_strategyÒ	  s   € Ø×Ñ˜D×-Ñ-Ô/?Õ@rA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_BU_LC_STRATEGYrß  r£   s     r?   r  z,ChartParserApp.bottom_up_leftcorner_strategyÕ	  s   € Ø×Ñ˜D×0Ñ0Ô2LÕMrA   c                 óD   — | j                  | j                  t        «       y r    )r}  Ú_TD_STRATEGYrÙ  r£   s     r?   r  z ChartParserApp.top_down_strategyØ	  s   € Ø×Ñ˜D×-Ñ-Ô/EÕFrA   )zChart Parser Applicationr    )r�   )@rO   rP   rQ   rl   r_   rz  rå  rô  r  ræ  rç  rè  rr  rs  ro  r  rJ  rH  rM  rQ  r  r@  rÎ  r]  rt  r   r:  r9  r  r"  rX  r#  rk  r;  r<  r?  rL  rN  r}  r!  rx  rw  rO  r$   rˆ  r%   rŠ  r   rŒ  r   rŽ  r"   r�  r–  r’  r”  r  r  r  r  r  r  r  r  rS   rA   r?   rã  rã  ö  sq  „ ó#ò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rA   rã  c                  óV  — t        j                  d«      } d}d}t        |j                  «       «      }t	        d«       | j                  «       D ]  }t	        dt        |«      dz   f«       Œ t	        d«       t	        d|z  «       t	        d	«       t        | |«      j                  «        y )
NaW  
    # 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)"...)	r   r^  r¾   ro  rë  ra  r  rã  rz  )r4  Úsenträ  r†  s       r?   Úappr›  Ü	  s—   € Ü�n‰nð	ó€Gð  8€DØ+€DÜ�$—*‘*“,Ó€Fä	ˆ,ÔØ×#Ñ#Ó%ò *ˆÜˆv”t˜D“z CÑ'Ð(Õ)ð*ä	ˆ#„JÜ	ˆ-˜&Ñ
 Ô!Ü	Ð
8Ô9Ü�7˜FÓ#×,Ñ,Õ.rA   Ú__main__r›  )Dr"  Ú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.picklesecr'   Ú	nltk.treer(   Ú	nltk.utilr)   r+   rU   r$  r\  rõ  rÌ  rÙ  rÝ  rß  rá  rã  r›  rO   Ú__all__rS   rA   r?   ú<module>rª     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ð ˆ'�rA   