§
    €zIfƒX ã                   ó^  — 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  G d„ de¦  «        Z4 G d„ d¦  «        Z5 G d„ d¦  «        Z6 G d„ d¦  «        Z7 G d„ d¦  «        Z8 G d„ d¦  «        Z9 G d„ de9e.¦  «        Z: G d„ de9e'¦  «        Z; G d„ de9e&¦  «        Z< G d„ d e9e+¦  «        Z= G d!„ d"¦  «        Z>d#„ Z?e@d$k    r
 e?¦   «          d%gZAdS )&aÒ  
A graphical tool for exploring chart parsing.

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

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

The chart parsing tool allows for flexible control of the parsing
algorithm.  At each step of the algorithm, you can select which rule
or strategy you wish to apply.  This allows you to experiment with
mixing different strategies (e.g. top-down and bottom-up).  You can
exercise fine-grained control over the algorithm by selecting which
edge you wish to apply a rule to.
é    N)
ÚButtonÚCanvasÚCheckbuttonÚFrameÚIntVarÚLabelÚMenuÚ	ScrollbarÚTkÚToplevel)ÚaskopenfilenameÚasksaveasfilename)ÚFont)Ú	showerrorÚshowinfo)Ú	CFGEditorÚTreeSegmentWidgetÚtree_to_treesegment)ÚCanvasFrameÚColorizedListÚEntryDialogÚMutableOptionMenuÚShowTextÚSymbolWidget)ÚCFGÚNonterminal)
ÚBottomUpPredictCombineRuleÚBottomUpPredictRuleÚChartÚLeafEdgeÚLeafInitRuleÚSingleEdgeFundamentalRuleÚSteppingChartParserÚTopDownInitRuleÚTopDownPredictRuleÚTreeEdge)ÚTree)Úin_idlec                   ó4   — e Zd Zej        d         Zd„ Zd„ ZdS )ÚEdgeListÚ
rightarrowc                 óÂ   — |                      dd¬¦  «         |                      ddd¬¦  «         |                      dd	¬¦  «         |                      d
dd¬¦  «         d S )NÚterminalz#006000)Ú
foregroundÚarrowÚsymbolÚ0)ÚfontÚ	underlineÚdotz#000000ÚnonterminalÚblue)Ú	helveticaéôÿÿÿÚbold)r.   r2   )Ú
tag_config)ÚselfÚ
textwidgetÚoptionss      úL/var/www/piapp/venv/lib/python3.11/site-packages/nltk/app/chartparser_app.pyÚ_init_colortagszEdgeList._init_colortags^   s~   € Ø×Ò˜j°YÐÑ?Ô?Ð?Ø×Ò˜g¨HÀÐÑDÔDÐDØ×Ò˜e°	ÐÑ:Ô:Ð:Ø×ÒØ fÐ3Mð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    c                 óL  — g }|                      d|                     ¦   «         z  df¦  «         |                      | j        df¦  «         t          |                     ¦   «         ¦  «        D ]Ž\  }}||                     ¦   «         k    r|                      d¦  «         t          |t          ¦  «        r-|                      d|                     ¦   «         z  df¦  «         Œt|                      d|z  df¦  «         Œ�| 	                    ¦   «         r|                      d¦  «         |S )Nz%s	r5   r/   )z *r4   z %sz %rr-   )
ÚappendÚlhsÚARROWÚ	enumerateÚrhsr4   Ú
isinstancer   r0   Úis_complete)r;   ÚitemÚcontentsÚiÚelts        r>   Ú
_item_reprzEdgeList._item_reprf   s  € ØˆØ�Š˜ $§(¢(¡*¤*Ñ,¨mÐ<Ñ=Ô=Ð=Ø�Š˜œ WÐ-Ñ.Ô.Ð.Ý §¢¡
¤
Ñ+Ô+ð 	;ð 	;‰FˆAˆsØ�D—H’H‘J”JŠˆØ—’ Ñ.Ô.Ð.Ý˜#�{Ñ+Ô+ð ;Ø—’ ¨¯ª©¬Ñ!5°}Ð EÑFÔFÐFÐFà—’ ¨¡¨jÐ 9Ñ:Ô:Ð:Ð:Ø×ÒÑÔð 	+Ø�OŠO˜MÑ*Ô*Ð*Øˆr@   N)Ú__name__Ú
__module__Ú__qualname__r   ÚSYMBOLSrD   r?   rM   © r@   r>   r*   r*   [   s?   € € € € € ØÔ  Ô.€Eð
ð 
ð 
ðð ð ð ð r@   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dS )ÚChartMatrixViewzS
    A view of a chart that displays the contents of the corresponding matrix.
    TúChart MatrixFc                 ó0  — || _         g | _        g | _        d | _        |rit	          |¦  «        | _        | j                             |¦  «         | j                             d| j        ¦  «         |  	                    | j        ¦  «         nt          |¦  «        | _        |                      | j        ¦  «         |                      | j        ¦  «         |r|                      | j        ¦  «         nd | _        i | _        d| _        |                      ¦   «          d S )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×Ò˜UÑ#Ô#Ð#ØŒJ�OŠO˜M¨4¬<Ñ8Ô8Ð8Ø�OŠO˜DœJÑ'Ô'Ð'Ð'å˜v™œˆDŒJà×Ò˜$œ*Ñ%Ô%Ð%Ø�Š˜œ
Ñ#Ô#Ð#Øð 	(Ø×Ò ¤
Ñ+Ô+Ð+Ð+à#'ˆDÔ àˆŒàˆŒà�	Š	‰Œˆˆˆr@   c                 ód   — t          |d| j        ¬¦  «        }|                     ddd¬¦  «         d S )NÚQuit©ÚtextÚcommandÚbottomr   Únone©ÚsideÚexpandÚfill)r   r_   Úpack)r;   ÚrootÚquits      r>   r`   zChartMatrixView._init_quitž   s6   € Ý�d °´Ð>Ñ>Ô>ˆØ�	Š	�x¨°ˆ	Ñ7Ô7Ð7Ð7Ð7r@   c                 óÆ   — t          |dd¬¦  «        }|                     ddddd¬	¦  «         t          |d
d
d¬¦  «        | _        | j                             dd¬¦  «         d S )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¢   sk   € Ý�t A¨hÐ7Ñ7Ô7ˆØ�Š˜1 6°¸ÀˆÑFÔFÐFÝ˜f¨C¸ÈÐPÑPÔPˆŒØŒ×Ò ¨ÐÑ0Ô0Ð0Ð0Ð0r@   c                 ól   — t          |d¬¦  «        | _        | j                             ddd¬¦  «         d S )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Ð!ÑDÔDÐDÐDÐDr@   c                 óä   — t          |g dd¬¦  «        | _        | j                             dddd¬¦  «         | fd	„}| j                             d
|¦  «         | j                             ¦   «          d S )Né   é   )rˆ   r‰   rƒ   r�   Úbothr‚   )ru   rv   rw   r…   c                 ó2   — |                      d| ¦  «         d S ©NÚselect©Ú_fire_callbacks)Úedger;   s     r>   Úcbz&ChartMatrixView._init_list.<locals>.cb°   ó   € Ø× Ò  ¨4Ñ0Ô0Ð0Ð0Ð0r@   r–   )r*   Ú_listrx   Úadd_callbackÚfocus)r;   ry   rš   s      r>   rb   zChartMatrixView._init_list¬   s�   € Ý˜d B¨b¸Ð;Ñ;Ô;ˆŒ
ØŒ
�Š˜U¨1°6ÀˆÑBÔBÐBàð 	1ð 	1ð 	1ð 	1ð 	Œ
×Ò ¨"Ñ-Ô-Ð-ØŒ
×ÒÑÔÐÐÐr@   c                 ój   — | j         €d S 	 | j                              ¦   «          n#  Y nxY wd | _         d S ©N©r\   r_   ©r;   Úes     r>   r_   zChartMatrixView.destroy¶   óD   € ØŒ:ÐØˆFð	ØŒJ×ÒÑ Ô Ð Ð øð	ØˆDøøøØˆŒ
ˆ
ˆ
ó   ‹% ¥)c                 ó`   — || j         ur$|| _         d| _        |                      ¦   «          d S d S ©Nr   )rX   rf   rg   ©r;   ri   s     r>   Ú	set_chartzChartMatrixView.set_chart¿   s6   € Ø˜œÐ#Ð#ØˆDŒKØˆDŒOØ�IŠI‰KŒKˆKˆKˆKð $Ð#r@   c                 óV  ‡— | j         €d S t          | j        ¦  «        Šˆfd„t          ‰¦  «        D ¦   «         }| j        D ]<}||                     ¦   «                  |                     ¦   «         xx         dz  cc<   Œ=t          ‰¦  «        D �]}t          |‰¦  «        D �]}||         |         dk    rd}n\d                     t          ddd||         |         z  d	z  z   ¦  «        t          ddd||         |         z  d	z  z
  ¦  «        ¦  «        }| j        |         |         }| j
                             ||¬
¦  «         ||f| j        k    r8| j
                             |dd¬¦  «         | j
                             |¦  «         Œè| j
                             |dd¬¦  «         �Œ�Œt          | j                             | j        ¬¦  «        ¦  «        }| j                             |¦  «         | j                             ¦   «         | _        | j        �d| j        z  | j        d<   d S d S )Nc                 óB   •— g | ]}d „ t          ‰¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS ©r   rR   ©Ú.0rK   s     r>   ú
<listcomp>z5ChartMatrixView.update.<locals>.<listcomp>.<listcomp>Ë   s   € Ð+Ð+Ð+˜Q�qÐ+Ð+Ð+r@   ©Úrange©r¯   ÚjÚNs     €r>   r°   z*ChartMatrixView.update.<locals>.<listcomp>Ë   s.   ø€ Ð>Ð>Ð>°Ð+Ð+¥%¨¡(¤(Ð+Ñ+Ô+Ð>Ð>Ð>r@   r�   r   Úgray20z#00{:02x}{:02x}éÿ   é2   é€   é
   ©rw   z#00ffffr‚   )Úoutlinerˆ   Úblack)Úspanz%d edgesrp   )r\   ÚlenrY   r²   rX   ÚstartÚendÚformatÚminÚmaxr‹   Ú
itemconfigr[   Ú	tag_raiseÚlistr–   rœ   ÚsetÚ	num_edgesrf   rd   )	r;   Ú
cell_edgesr™   rK   r´   ÚcolorÚcell_tagÚedgesrµ   s	           @r>   ÚupdatezChartMatrixView.updateÅ   sG  ø€ ØŒ:ÐØˆFõ �”ÑÔˆØ>Ð>Ð>Ð>µU¸1±X´XÐ>Ñ>Ô>ˆ
Ø”Kð 	6ð 	6ˆDØ�t—z’z‘|”|Ô$ T§X¢X¡Z¤ZÐ0Ð0Ô0°AÑ5Ð0Ð0Ñ0Ð0õ �q‘”ð 	Pñ 	PˆAÝ˜1˜a‘[”[ð Pñ P�Ø˜a”= Ô# qÒ(Ð(Ø$�E�Eà-×4Ò4Ý˜C  c¨J°q¬M¸!Ô,<Ñ&<¸rÑ&AÑ!AÑBÔBÝ˜A˜s S¨:°a¬=¸Ô+;Ñ%;¸bÑ%@Ñ@ÑAÔAñô �Eð  œ; qœ>¨!Ô,�Ø”×'Ò'¨°uÐ'Ñ=Ô=Ð=Ø�q�6˜TÔ0Ò0Ð0Ø”L×+Ò+¨H¸iÈqÐ+ÑQÔQÐQØ”L×*Ò*¨8Ñ4Ô4Ð4Ð4à”L×+Ò+¨H¸gÈQÐ+ÑOÔOÐOÑOñPõ" �T”[×'Ò'¨TÔ-@Ð'ÑAÔAÑBÔBˆØŒ
�Š�uÑÔÐð œ+×/Ò/Ñ1Ô1ˆŒØÔÐ+Ø+5¸¼Ñ+GˆDÔ  Ñ(Ð(Ð(ð ,Ð+r@   c                 óf   — | j                              dd¬¦  «         |                      ¦   «          d S )NÚinactiveboxÚhidden©Ústate©r‹   rÅ   rÎ   ©r;   s    r>   ÚactivatezChartMatrixView.activateê   ó.   € ØŒ×Ò °XÐÑ>Ô>Ð>Ø�Š‰Œˆˆˆr@   c                 óf   — | j                              dd¬¦  «         |                      ¦   «          d S )NrÐ   ÚnormalrÒ   rÔ   rÕ   s    r>   Ú
inactivatezChartMatrixView.inactivateî   r×   r@   c                 óB   — d| j                              |i ¦  «        |<   d S ©Nr�   ©re   Ú
setdefault©r;   ÚeventÚfuncs      r>   r�   zChartMatrixView.add_callbackò   ó$   € Ø67ˆŒ×"Ò" 5¨"Ñ-Ô-¨dÑ3Ð3Ð3r@   Nc                 óL   — |€
| j         |= d S 	 | j         |         |= d S #  Y d S xY wr    ©re   rß   s      r>   Úremove_callbackzChartMatrixView.remove_callbackõ   óA   € Øˆ<Ø” Ð&Ð&Ð&ðØ”O EÔ*¨4Ð0Ð0Ð0øðØ��øøøó   Ž ž#c                 ó„   — || j         vrd S t          | j         |                              ¦   «         ¦  «        D ]} ||Ž  Œd S r    ©re   rÇ   Úkeys©r;   rà   ÚargsÚcb_funcs       r>   r˜   zChartMatrixView._fire_callbacksþ   óU   € Ø˜œÐ'Ð'ØˆFÝ˜DœO¨EÔ2×7Ò7Ñ9Ô9Ñ:Ô:ð 	ð 	ˆGØˆG�TˆNˆNˆNð	ð 	r@   c                 óâ   — | j         €d S ||f| j        k    r$| j                             ¦   «         | j        k    rd S ||f| _        |                      ¦   «          |                      d||¦  «         d S )NÚselect_cell)r\   r[   rX   rÉ   rf   rÎ   r˜   ©r;   rK   r´   s      r>   rð   zChartMatrixView.select_cell  s{   € ØŒ:ÐØˆFð ˆqˆ6�TÔ(Ò(Ð(¨T¬[×-BÒ-BÑ-DÔ-DÈÌÒ-WÐ-WØˆFà  !˜fˆÔØ�Š‰Œˆð 	×Ò˜]¨A¨qÑ1Ô1Ð1Ð1Ð1r@   c                 ó‚   — | j         €d S d | _        | j                             g ¦  «         |                      ¦   «          d S r    )r\   r[   rœ   rÈ   rÎ   rÕ   s    r>   Údeselect_cellzChartMatrixView.deselect_cell  s<   € ØŒ:ÐØˆFØ"ˆÔØŒ
�Š�rÑÔÐØ�Š‰Œˆˆˆr@   c                 óx   — | j         ||fk    r|                      ¦   «          d S |                      ||¦  «         d S r    )r[   ró   rð   rñ   s      r>   Ú_click_cellzChartMatrixView._click_cell  sH   € ØÔ 1 a &Ò(Ð(Ø×ÒÑ Ô Ð Ð Ð à×Ò˜Q Ñ"Ô"Ð"Ð"Ð"r@   c                 ór   —  | j         |                     ¦   «         Ž  | j                             |¦  «         d S r    )rð   r¾   rœ   Úview©r;   r™   s     r>   Ú	view_edgezChartMatrixView.view_edge   s4   € ØˆÔ˜$Ÿ)š)™+œ+Ð&Ð&ØŒ
�Š˜ÑÔÐÐÐr@   c                 ó„   — | j         €d S  | j        |                     ¦   «         Ž  | j                             |¦  «         d S r    )r\   rð   r¾   rœ   Úmarkrø   s     r>   Ú	mark_edgezChartMatrixView.mark_edge$  sA   € ØŒ:ÐØˆFØˆÔ˜$Ÿ)š)™+œ+Ð&Ð&ØŒ
�Š˜ÑÔÐÐÐr@   c                 óL   — | j         €d S | j                             |¦  «         d S r    )r\   rœ   Úunmarkrø   s     r>   Úunmark_edgezChartMatrixView.unmark_edge*  s+   € ØŒ:ÐØˆFØŒ
×Ò˜$ÑÔÐÐÐr@   c                 ó„   — | j         €d S  | j        |                     ¦   «         Ž  | j                             |¦  «         d S r    )r\   rð   r¾   rœ   Úmarkonlyrø   s     r>   Úmarkonly_edgezChartMatrixView.markonly_edge/  sC   € ØŒ:ÐØˆFØˆÔ˜$Ÿ)š)™+œ+Ð&Ð&ØŒ
×Ò˜DÑ!Ô!Ð!Ð!Ð!r@   c           	      ó~  ‡— | j         €d S dx}}d}| j        }|                     d¦  «         | j                             ¦   «         dz   Št          |d         ¦  «        |z
  ‰z  }t          |d         ¦  «        |z
  |z
  ‰z  }|                     d¦  «         t          ‰¦  «        D ]Ð}|                     |dz
  ||z  |dz  z   |z   t          |¦  «        d¬	¦  «         |                     ||z  |dz  z   |z   ‰|z  |z   dz   t          |¦  «        d
¬	¦  «         | 	                    |||dz   z  |z   |‰z  |z   ||dz   z  |z   d¬¦  «         | 	                    ||z  |z   |||z  |z   |‰z  |z   d¬¦  «         ŒÑ| 
                    ||||‰z  z   |‰z  |z   d¬¦  «         ˆfd„t          ‰¦  «        D ¦   «         | _        t          ‰¦  «        D ]{}t          |‰¦  «        D ]h}| 
                    ||z  |z   ||z  |z   |dz   |z  |z   |dz   |z  |z   d¬¦  «        }	|	| j        |         |<   | ||fd„}
|                     |	d|
¦  «         ŒiŒ|t          |d         ¦  «        t          |d         ¦  «        }}| 
                    dd|dz   |dz   ddd¬¦  «        }	|                     |	¦  «         |                      ¦   «          d S )Né   r’   Úallr�   rˆ   r‰   r|   r£   )rp   ÚanchorÚnú.)Údash©rˆ   c                 óB   •— g | ]}d „ t          ‰¦  «        D ¦   «         ‘ŒS )c                 ó   — g | ]}d ‘ŒS r    rR   r®   s     r>   r°   z3ChartMatrixView.draw.<locals>.<listcomp>.<listcomp>b  s   € Ð/Ð/Ð/ ˜Ð/Ð/Ð/r@   r±   r³   s     €r>   r°   z(ChartMatrixView.draw.<locals>.<listcomp>b  s.   ø€ ÐBÐBÐB°AÐ/Ð/¥e¨A¡h¤hÐ/Ñ/Ô/ÐBÐBÐBr@   r¶   r»   c                 ó2   — |                      ||¦  «         d S r    )rõ   )rà   r;   rK   r´   s       r>   rš   z ChartMatrixView.draw.<locals>.cbn  s   € Ø×$Ò$ Q¨Ñ*Ô*Ð*Ð*Ð*r@   ú
<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ÚcÚdxÚdyrK   r´   Útrš   ÚxmaxÚymaxrµ   s                @r>   rg   zChartMatrixView.draw5  s€  ø€ ØŒ:ÐØˆFØ#%Ð%ˆ�jØˆ
ØŒLˆØ	�Š�‰ŒˆØŒK×"Ò"Ñ$Ô$ qÑ(ˆÝ�!�G”*‰oŒo Ñ+¨qÑ0ˆÝ�!�H”+ÑÔ Ñ+¨jÑ8¸AÑ=ˆà	�Š�‰Œˆõ �q‘”ð 	ð 	ˆAØ�MŠMØ˜a‘  R¡¨"¨q©&¡°:Ñ!=ÅDÈÁGÄGÐTWð ñ ô ð ð �MŠMØ�B‘˜˜a™‘ +Ñ-Ø�B‘˜Ñ# aÑ'Ý˜!‘W”WØð	 ñ ô ð ð �MŠMØØ�a˜!‘e‘˜zÑ)Ø�Q‘˜Ñ$Ø�a˜!‘e‘˜zÑ)Øð ñ ô ð ð �MŠMØ�Q‘˜Ñ$ØØ�Q‘˜Ñ$Ø�Q‘˜Ñ#Øð ñ ô ð ð ð 	
×ÒØ˜ [°2¸±6Ñ%9¸2À¹6ÀJÑ;NÐVWð 	ñ 	
ô 	
ð 	
ð
 CÐBÐBÐB½¸q¹¼ÐBÑBÔBˆŒÝ�q‘”ð 	0ð 	0ˆAÝ˜1˜a‘[”[ð 0ð 0�Ø×&Ò&Ø˜‘F˜[Ñ(Ø˜‘F˜ZÑ'Ø˜‘U˜b‘L ;Ñ.Ø˜‘U˜b‘L :Ñ-Ø!ð 'ñ ô �ð %&�”˜A”˜qÑ!à#'¨1°ð +ð +ð +ð +ð —
’
˜1˜l¨BÑ/Ô/Ð/Ð/ð0õ  ˜˜7œ‘_”_¥c¨!¨H¬+Ñ&6Ô&6ˆdˆØ×ÒØØØ�3‰JØ�3‰JØØØð ñ 
ô 
ˆð 	
�Š�A‰Œˆð 	�Š‰Œˆˆˆr@   c                 ó*   —  | j         j        |i |¤Ž d S r    ©r\   rx   ©r;   rì   Úkwargss      r>   rx   zChartMatrixView.packƒ  ó!   € ØˆŒ
Œ˜Ð( Ð(Ð(Ð(Ð(Ð(r@   )TrU   Fr    )rN   rO   rP   Ú__doc__rl   r`   ra   rc   rb   r_   r©   rÎ   rÖ   rÚ   r�   rå   r˜   rð   ró   rõ   rù   rü   rÿ   r  rg   rx   rR   r@   r>   rT   rT   {   s‰  € € € € € ðð ð
 QVðð ð ð ð<8ð 8ð 8ð1ð 1ð 1ðEð Eð Eðð ð ðð ð ðð ð ð#Hð #Hð #HðJð ð ðð ð ð8ð 8ð 8ðð ð ð ðð ð ð2ð 2ð 2ðð ð ð#ð #ð #ðð ð ðð ð ð ð  ð  ð  ð
"ð "ð "ðLð Lð Lð\)ð )ð )ð )ð )r@   rT   c                   óZ   — 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dS )ÚChartResultsViewTc                 ó(  — || _         || _        g | _        d| _        g | _        d | _        d | _        |rOt          |¦  «        | _        | j         	                    d¦  «         | j         
                    d| j        ¦  «         nt          |¦  «        | _        |r­t          | j        ¦  «        }|                     ddd¬¦  «         t          |d| j        ¬	¦  «                             d
¬¦  «         t          |d| j        ¬	¦  «                             d¬¦  «         t          |d| j        ¬	¦  «                             d¬¦  «         t#          | j        d¬¦  «        | _        | j                             ddd¬¦  «         |                      ¦   «          d S )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__�  sˆ  € ØˆŒØˆŒØˆŒØˆŒØˆÔØˆŒØˆŒàð 	'Ý! &Ñ)Ô)ˆDŒJØŒJ×ÒÐ@ÑAÔAÐAØŒJ�OŠO˜M¨4¬<Ñ8Ô8Ð8Ð8å˜v™œˆDŒJð ð 	Ý˜DœJÑ'Ô'ˆGØ�LŠL˜h¨q°sˆLÑ;Ô;Ð;Ý�7 °´Ð>Ñ>Ô>×CÒCÈÐCÑQÔQÐQÝ�7 °d´nÐEÑEÔE×JÒJÐPVÐJÑWÔWÐWÝ�7Ð!2¸DÔ<PÐQÑQÔQ×VÒVØð Wñ ô ð õ
 # 4¤:¸2Ð>Ñ>Ô>ˆŒØŒ×Ò˜u¨Q°VÐÑ<Ô<Ð<ð 	�Š‰Œˆˆˆr@   Nc                 óˆ  — | j         €d S |�d|                     ¦   «         | j                             ¦   «         k    rd S |                     ¦   «         d| j                             ¦   «         fk    rd S | j                             | j                             ¦   «         ¦  «        D ] }|| j        vr|  	                    |¦  «         Œ!d S r§   )
r\   rC   r2  rÀ   r¾   rX   r  Úparsesr3  Ú_add)r;   r™   Úparses      r>   rÎ   zChartResultsView.update®  s½   € ØŒ:ÐØˆFàÐØ�xŠx‰zŒz˜Tœ]×0Ò0Ñ2Ô2Ò2Ð2Ø�Ø�yŠy‰{Œ{˜q $¤+×"8Ò"8Ñ":Ô":Ð;Ò;Ð;Ø�à”[×'Ò'¨¬×(;Ò(;Ñ(=Ô(=Ñ>Ô>ð 	!ð 	!ˆEØ˜DœKÐ'Ð'Ø—	’	˜%Ñ Ô Ð øð	!ð 	!r@   c                 óz  — | j                              |¦  «         | j                             ¦   «         }t	          ||¦  «        }| j                             |¦  «         | j                             |d| j        ¦  «         |                     | j	        ¦  «         | 
                    ¦   «         d         dz   | _        d S )Nrº   r‚   )r3  rB   r:  Úcanvasr   r5  Ú
add_widgetr4  Ú
bind_clickÚ_clickÚbbox)r;   r@  r  Ú
treewidgets       r>   r?  zChartResultsView._add¼  sª   € àŒ×Ò˜5Ñ!Ô!Ð!ð ŒL×ÒÑ!Ô!ˆÝ(¨¨EÑ2Ô2ˆ
ð 	Ô× Ò  Ñ,Ô,Ð,ØŒ×Ò 
¨B°´Ñ8Ô8Ð8ð 	×Ò˜dœkÑ*Ô*Ð*ð —/’/Ñ#Ô# AÔ&¨Ñ+ˆŒˆˆr@   c                 óú   — | j                              ¦   «         }| j        �|                     | j        ¦  «         || _        |                     ¦   «         \  }}}}|                     ||||dd¬¦  «        | _        d S )Nr|   z#088)rˆ   r¼   )r:  rB  r6  r  r7  rF  r  )r;   Úwidgetr  Úx1Úy1Úx2Úy2s          r>   rE  zChartResultsView._clickÎ  st   € ØŒL×ÒÑ!Ô!ˆØŒ?Ð&Ø�HŠH�T”_Ñ%Ô%Ð%Ø ˆŒØ!Ÿ;š;™=œ=ÑˆˆR��RØ×,Ò,¨R°°R¸À1ÈfÐ,ÑUÔUˆŒˆˆr@   c                 óÄ   — ||                      ¦   «         d<   |                     ¦   «         D ]3}t          |t          ¦  «        r|                      ||¦  «         Œ.||d<   Œ4d S )NrË   )ÚlabelÚsubtreesrG   r   Ú_color)r;   rG  rË   Úchilds       r>   rQ  zChartResultsView._colorÖ  sr   € Ø&+ˆ
×ÒÑÔ˜7Ñ#Ø×(Ò(Ñ*Ô*ð 	'ð 	'ˆEÝ˜%Õ!2Ñ3Ô3ð 'Ø—’˜E 5Ñ)Ô)Ð)Ð)à!&��g‘�ð		'ð 	'r@   c                 óJ   — | j         €d S | j                             ¦   «          d S r    )r\   r:  Úprint_to_filer¢   s     r>   r8  zChartResultsView.print_allÞ  s)   € ØŒ:ÐØˆFØŒ×"Ò"Ñ$Ô$Ð$Ð$Ð$r@   c                 óR  — | j         €d S | j        €t          dd¦  «         d S | j                             ¦   «         }| j        D ]%}|| j        ur| j                             |¦  «         Œ&|                     | j        ¦  «         | j         	                    ¦   «         \  }}}}| j         
                    d|z
  d|z
  ¦  «         d||z
  dz   › d||z
  dz   › �|d<   | j                             ¦   «          | j        g| _        |                      ¦   «          |                      ¦   «          d S )NzPrint ErrorzNo tree selectedrº   z0 0 r‘   ú Úscrollregion)r\   r6  r   r:  rB  r5  Údestroy_widgetr  r7  rF  ÚmoverT  ÚclearrÎ   )r;   r£   r  rI  rJ  rK  rL  rM  s           r>   r9  z ChartResultsView.print_selectionã  s2  € ØŒ:ÐØˆFØŒ?Ð"Ý�mÐ%7Ñ8Ô8Ð8Ð8Ð8à”×#Ò#Ñ%Ô%ˆAØÔ+ð 8ð 8�Ø ¤Ð0Ð0Ø”L×/Ò/°Ñ7Ô7Ð7øØ�HŠH�T”_Ñ%Ô%Ð%Ø#œ×3Ò3Ñ5Ô5ÑˆR��R˜ØŒO× Ò   b¡¨"¨r©'Ñ2Ô2Ð2Ø D r¨B¡w°¡|Ð DÐ D°b¸2±gÀ±lÐ DÐ DˆAˆnÑØŒL×&Ò&Ñ(Ô(Ð(ð "&¤Ð 1ˆDÔØ�JŠJ‰LŒLˆLØ�KŠK‰MŒMˆMˆMˆMr@   c                 ó  — | j         €d S | j        D ]}| j                             |¦  «         Œg | _        g | _        | j        �1| j                             ¦   «                              | j        ¦  «         d | _        d| _	        d S )Nrº   )
r\   r5  r:  rX  r3  r6  rB  r  r7  r4  )r;   rG  s     r>   rZ  zChartResultsView.clearø  s‡   € ØŒ:ÐØˆFØÔ+ð 	4ð 	4ˆJØŒL×'Ò'¨
Ñ3Ô3Ð3Ð3ØˆŒØˆÔØŒ?Ð&ØŒL×ÒÑ!Ô!×(Ò(¨¬Ñ9Ô9Ð9ØˆŒØˆŒˆˆr@   c                 ód   — |                       ¦   «          || _        |                      ¦   «          d S r    )rZ  rX   rÎ   r¨   s     r>   r©   zChartResultsView.set_chart  s'   € Ø�
Š
‰ŒˆØˆŒØ�Š‰Œˆˆˆr@   c                 ód   — |                       ¦   «          || _        |                      ¦   «          d S r    )rZ  r2  rÎ   ©r;   r;  s     r>   Úset_grammarzChartResultsView.set_grammar	  s'   € Ø�
Š
‰ŒˆØˆŒØ�Š‰Œˆˆˆr@   c                 ój   — | j         €d S 	 | j                              ¦   «          n#  Y nxY wd | _         d S r    r¡   r¢   s     r>   r_   zChartResultsView.destroy  r¤   r¥   c                 ó*   —  | j         j        |i |¤Ž d S r    r%  r&  s      r>   rx   zChartResultsView.pack  r(  r@   )Tr    )rN   rO   rP   rl   rÎ   r?  rE  rQ  r8  r9  rZ  r©   r_  r_   rx   rR   r@   r>   r+  r+  Œ  sÖ   € € € € € ðð ð ð ðB!ð !ð !ð !ð,ð ,ð ,ð$Vð Vð Vð'ð 'ð 'ð%ð %ð %ð
ð ð ð*
ð 
ð 
ðð ð ð
ð ð ð
ð ð ð)ð )ð )ð )ð )r@   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 d!S )"Ú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)rd  ÚandÚorc                 óÚ  — dgdz  }t          |¦  «        | _        d| _        d| _        | j        | _        | j        | _        d| j        i| _        | j        | _        d | _        t          ¦   «         | _
        | j
                             d¦  «         | j
                             d| j        ¦  «         | j
                             d| j        ¦  «         |                      | j
        ¦  «         |                      | j
        ¦  «         |                      | j
        ¦  «         |                      | j
        ¦  «         |                      | j
        ¦  «         |D ]}|                      |¦  «         Œd S )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__B  s^  € ð �$˜‘(ˆÝ  ™>œ>ˆÔð !ˆŒØ!ˆÔØÔ+ˆÔØ Ô,ˆÔð  Ô 0Ð1ˆŒð Ô*ˆŒð ˆŒõ ‘T”TˆŒ
ØŒ
×ÒÐ+Ñ,Ô,Ð,ØŒ
�Š˜ t¤|Ñ4Ô4Ð4ØŒ
�Š˜ t¤|Ñ4Ô4Ð4ð 	×Ò˜4œ:Ñ&Ô&Ð&Ø×Ò˜dœjÑ)Ô)Ð)Ø×Ò˜4œ:Ñ&Ô&Ð&Ø×Ò˜4œ:Ñ&Ô&Ð&Ø×Ò˜DœJÑ'Ô'Ð'ð (ð 	&ð 	&ˆHØ�OŠO˜HÑ%Ô%Ð%Ð%ð	&ð 	&r@   c                 ój   — | j         €d S 	 | j                              ¦   «          n#  Y nxY wd | _         d S r    r¡   r¢   s     r>   r_   zChartComparer.destroyh  r¤   r¥   c                 ó   — d S r    )r\   Úmainloopr&  s      r>   r�  zChartComparer.mainloopq  s   € Øˆr@   c                 óè  — t          |¦  «        }t          |d¬¦  «        }|                     ddd| j        ¬¦  «         |                     ddd| j        ¬¦  «         |                     ¦   «          |                     dd	| j        d
¬¦  «         |                     dd|¬¦  «         t          |d¬¦  «        }|                     d| j        d¬¦  «         |                     d| j        d¬¦  «         |                     d| j	        d¬¦  «         |                     ¦   «          |                     d| j
        ¬¦  «         |                     dd|¬¦  «         | j                             |¬¦  «         d S )Nr   ©Útearoffú
Load ChartúCtrl-o)rO  Úacceleratorr3   rq   zSave OutputúCtrl-sÚExitr�   úCtrl-x©rO  r3   rq   r‡  ÚFile©rO  r3   ÚmenuÚIntersectionú+)rO  rq   r‡  ÚUnionÚ*Ú
Differencerd  úSwap Charts©rO  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>   rv  zChartComparer._init_menubary  sÁ  € Ý�t‘*”*ˆõ ˜¨Ð+Ñ+Ô+ˆØ×ÒØØ ØØÔ*ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØØ ØØÔ*ð	 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×ÒØ A¨t¬|Èð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEõ �g qÐ)Ñ)Ô)ˆØ×ÒØ ¨$Ô*<È#ð 	ñ 	
ô 	
ð 	
ð 	×Ò °$´+È3ÐÑOÔOÐOØ×ÒØ¨Ô(8Àcð 	ñ 	
ô 	
ð 	
ð 	×ÒÑÔÐØ×Ò ¸Ô8HÐÑIÔIÐIØ×Ò )°q¸vÐÑFÔFÐFð 	Œ
×Ò˜wÐÑ'Ô'Ð'Ð'Ð'r@   c                 óZ   — t          |dd¬¦  «        }|                     ddd¬¦  «         d S )Nr|   r}   r~   rƒ   r-  )ru   rw   Úipady)r   rx   )r;   ry   Údividers      r>   rx  zChartComparer._init_divider   s4   € Ý˜ Q¨xÐ8Ñ8Ô8ˆØ�Š˜% c°ˆÑ3Ô3Ð3Ð3Ð3r@   c                 ó~  — d}d}t          |d¬¦  «        }|                     ddd¬¦  «         t          |d	d
¬¦  «        }|                     ddddd¬¦  «         t          |t          | j                             ¦   «         ¦  «        | j        ¬¦  «        | _        | j                             ddd¬¦  «         t          || j	        dd¬¦  «        | _
        | j
                             ddddd¬¦  «         | j
                             d| j        ¦  «         | j
                             d| j        ¦  «         | j
                             ¦   «          t          |dd	d|¬¦  «        | _        | j                             ddd¬¦  «         t          |d	d
¬¦  «        }|                     ddddd¬¦  «         t          |t          | j                             ¦   «         ¦  «        | j        ¬¦  «        | _        | j                             ddd¬¦  «         t          || j	        dd¬¦  «        | _        | j                             ddddd¬¦  «         | j                             d| j        ¦  «         | j                             d| j        ¦  «         | j                             ¦   «          t          |dd	d|¬¦  «                             ddd¬¦  «         t          |d	d
¬¦  «        }|                     ddddd¬¦  «         t          |d¬¦  «        | _        | j                             dd ¬!¦  «         t          || j	        dd¬¦  «        | _        | j                             ddddd¬¦  «         | j                             d| j        ¦  «         | j                             d| j        ¦  «         | j                             ¦   «          d S )"N)r0   éÜÿÿÿ)r7   r©  z#c0c0c0©rŠ   rƒ   r�   r“   rt   r‚   Úgroover~   r0  rk  é   )ru   r„   r…   rv   rw   )rq   r’   r-  )ru   r…   rw   FT)rj   rk   rr   r–   rð   rV  )rp   rˆ   rŠ   r2   )ru   r„   r…   ú=ÚOutputrŽ   é	   )ru   r…   )r   rx   r   rÇ   rs  rê   Ú_select_leftÚ_left_selectorrT   rn  Ú_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>   rw  zChartComparer._init_chartviews¤  sç  € Ø ˆØ#ˆå�d yÐ1Ñ1Ô1ˆØ�
Š
˜ a¨fˆ
Ñ5Ô5Ð5õ ˜%¨°(Ð;Ñ;Ô;ˆ	Ø�Š˜F¨°¸1À6ˆÑJÔJÐJÝ/Ø•t˜DœL×-Ò-Ñ/Ô/Ñ0Ô0¸$Ô:Kð
ñ 
ô 
ˆÔð 	Ô× Ò  e°!¸#Ð Ñ>Ô>Ð>Ý+Ø�tÔ'°%Àtð
ñ 
ô 
ˆÔð 	Ô×Ò H°1¸1ÀQÈVÐÑTÔTÐTØÔ×&Ò& x°Ô1AÑBÔBÐBØÔ×&Ò& }°dÔ6FÑGÔGÐGØÔ×$Ò$Ñ&Ô&Ð&õ Ø˜ 1°Àð
ñ 
ô 
ˆŒð 	Œ×Ò ¨a°aÐÑ8Ô8Ð8õ ˜%¨°(Ð;Ñ;Ô;ˆ	Ø�Š˜F¨°¸1À6ˆÑJÔJÐJÝ0Ø•t˜DœL×-Ò-Ñ/Ô/Ñ0Ô0¸$Ô:Lð 
ñ  
ô  
ˆÔð 	Ô×!Ò! u°1¸3Ð!Ñ?Ô?Ð?Ý,Ø�tÔ'°%Àtð
ñ 
ô 
ˆÔð 	Ô×Ò X°A¸AÀaÈfÐÑUÔUÐUØÔ×'Ò'¨°$Ô2BÑCÔCÐCØÔ×'Ò'¨°tÔ7GÑHÔHÐHØÔ×%Ò%Ñ'Ô'Ð'õ 	ˆe˜# Q°9À6ÐJÑJÔJ×OÒOØ˜a að 	Pñ 	
ô 	
ð 	
õ
 ˜%¨°(Ð;Ñ;Ô;ˆ	Ø�Š˜F¨°¸1À6ˆÑJÔJÐJÝ 	°Ð9Ñ9Ô9ˆŒØŒ×Ò %¨aÐÑ0Ô0Ð0Ý*Ø�tÔ'°%Àtð
ñ 
ô 
ˆÔð 	Ô×Ò 8°!¸!ÀAÈFÐÑSÔSÐSØÔ×%Ò% h°Ô0@ÑAÔAÐAØÔ×%Ò% m°TÔ5EÑFÔFÐFØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%r@   c                 óN  — t          |¦  «        }|                     dddd¬¦  «         t          |d| j        ¬¦  «                             d¬	¦  «         t          |d
| j        ¬¦  «                             d¬	¦  «         t          |d| j        ¬¦  «                             d¬	¦  «         t          |d¬¦  «                             d¬	¦  «         t          |d| j        ¬¦  «                             d¬	¦  «         t          |d| j        ¬¦  «                             d¬	¦  «         d S )Nrr   r’   r-  r   )ru   r…   rw   rv   r�  ro   r0  r/  r‘  r“  r‘   r
  r”  zDetach Outputr.  )r   rx   r   r�  rž  rŸ  r   Ú_detach_out)r;   ry   r<  s      r>   ry  zChartComparer._init_buttonsá  s8  € Ý˜‘+”+ˆØ�Š˜(¨°¸QˆÑ?Ô?Ð?Ýˆw˜^°TÔ5GÐHÑHÔH×MÒMØð 	Nñ 	
ô 	
ð 	
õ 	ˆw˜W¨d¬kÐ:Ñ:Ô:×?Ò?ÀVÐ?ÑLÔLÐLÝˆw˜\°4Ô3CÐDÑDÔD×IÒIÈvÐIÑVÔVÐVÝˆg˜RÐ Ñ Ô ×%Ò%¨6Ð%Ñ2Ô2Ð2Ýˆw˜]°DÔ4DÐEÑEÔE×JÒJÐPVÐJÑWÔWÐWåˆw˜_°dÔ6FÐGÑGÔG×LÒLØð 	Mñ 	
ô 	
ð 	
ð 	
ð 	
r@   c                 ó<   — |                      d| j        ¦  «         d S )Nú<Control-o>)r^   r™  r�   s     r>   rz  zChartComparer._init_bindingsð  s   € à�	Š	�- Ô!7Ñ8Ô8Ð8Ð8Ð8r@   c                 óÜ   — || _         | j        |         | _        | j                             | j        ¦  «         |dk    r| j                             ¦   «          |                      ¦   «          d S ©Nrl  )ro  rs  rq  r²  r©   rÚ   Ú	_apply_op©r;   Únames     r>   r°  zChartComparer._select_leftù  sf   € ØˆŒØœ<¨Ô-ˆÔØÔ×#Ò# DÔ$4Ñ5Ô5Ð5Ø�6Š>ˆ>ØÔ×(Ò(Ñ*Ô*Ð*Ø�ŠÑÔÐÐÐr@   c                 óÜ   — || _         | j        |         | _        | j                             | j        ¦  «         |dk    r| j                             ¦   «          |                      ¦   «          d S rÅ  )rp  rs  rr  r·  r©   rÚ   rÆ  rÇ  s     r>   rµ  zChartComparer._select_right  sg   € ØˆÔØ œL¨Ô.ˆÔØÔ×$Ò$ TÔ%6Ñ7Ô7Ð7Ø�6Š>ˆ>ØÔ×)Ò)Ñ+Ô+Ð+Ø�ŠÑÔÐÐÐr@   c                 óÌ   — | j         dk    r|                      ¦   «          d S | j         dk    r|                      ¦   «          d S | j         dk    r|                      ¦   «          d S d S )Nrd  rh  rg  )ru  rŸ  rž  r�  rÕ   s    r>   rÆ  zChartComparer._apply_op	  sr   € ØŒ>˜SÒ Ð Ø×ÒÑÔÐÐÐØŒ^˜tÒ#Ð#Ø�KŠK‰MŒMˆMˆMˆMØŒ^˜uÒ$Ð$Ø×ÒÑ Ô Ð Ð Ð ð %Ð$r@   ©zPickle fileú.pickle©z	All filesr’  c                 ó  — t          | j        d¬¦  «        }|sd S 	 t          |d¦  «        5 }t          j        | j        |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r!}t          dd|›d|› �¦  «         Y d }~d S d }~ww xY w)NrÌ  ©Ú	filetypesÚdefaultextensionÚwbzError Saving ChartúUnable to open file: ú
)r   ÚCHART_FILE_TYPESÚopenÚpickleÚdumprt  Ú	Exceptionr   ©r;   rì   r~  Úoutfiler£   s        r>   rš  zChartComparer.save_chart_dialog  s  € Ý$ØÔ+¸ið
ñ 
ô 
ˆð ð 	ØˆFð	WÝ�h Ñ%Ô%ð 6¨Ý”˜DœO¨WÑ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6øåð 	Wð 	Wð 	WÝÐ*Ð,UÀHÐ,UÐ,UÐRSÐ,UÐ,UÑVÔVÐVÐVÐVÐVÐVÐVÐVøøøøð	Wøøøs:   œA! ¬AÁA! ÁAÁA! ÁAÁA! Á!
BÁ+BÂBc                 óÂ   — t          | j        d¬¦  «        }|sd S 	 |                      |¦  «         d S # t          $ r!}t	          dd|›d|› �¦  «         Y d }~d S d }~ww xY w)NrÌ  rÏ  zError Loading ChartrÓ  rÔ  )r   rÕ  r{  rÙ  r   )r;   rì   r~  r£   s       r>   r™  zChartComparer.load_chart_dialog"  s£   € Ý"ØÔ+¸ið
ñ 
ô 
ˆð ð 	ØˆFð	XØ�OŠO˜HÑ%Ô%Ð%Ð%Ð%øÝð 	Xð 	Xð 	XÝÐ+Ð-VÀXÐ-VÐ-VÐSTÐ-VÐ-VÑWÔWÐWÐWÐWÐWÐWÐWÐWøøøøð	Xøøøs   œ3 ³
A½AÁAc                 ó\  — t          |d¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j                             |¦  «        }|                     d¦  «        r
|d d…         }|                     d¦  «        r
|d d…         }|| j        |<   | j         	                    |¦  «         | j
         	                    |¦  «         | j        | j        u r| j                             |¦  «         d S | j        | j        u r| j
                             |¦  «         d S d S )NÚrbrÌ  iùÿÿÿz.chartiúÿÿÿ)rÖ  r×  ÚloadÚosÚpathÚbasenameÚendswithrs  r±  Úaddr¶  rq  rn  rÈ   rr  )r;   r~  Úinfileri   rÈ  s        r>   r{  zChartComparer.load_chart-  sj  € Ý�(˜DÑ!Ô!ð 	( VÝ”K Ñ'Ô'ˆEð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(åŒw×Ò Ñ)Ô)ˆØ�=Š=˜Ñ#Ô#ð 	Ø˜˜˜”9ˆDØ�=Š=˜Ñ"Ô"ð 	Ø˜˜˜”9ˆDØ"ˆŒ�TÑØÔ×Ò Ñ%Ô%Ð%ØÔ× Ò  Ñ&Ô&Ð&ð Ô˜tÔ/Ð/Ð/ØÔ×#Ò# DÑ)Ô)Ð)Ð)Ð)ØÔ $Ô"2Ð2Ð2ØÔ ×$Ò$ TÑ*Ô*Ð*Ð*Ð*ð 3Ð2s   ‘2²6¹6c                 óœ   — | j                              ¦   «          | j                             ¦   «          | j                             ¦   «          d S r    )r²  rÎ   r·  r¹  rÕ   s    r>   Ú_update_chartviewsz ChartComparer._update_chartviews@  sG   € ØÔ× Ò Ñ"Ô"Ð"ØÔ×!Ò!Ñ#Ô#Ð#ØÔ×ÒÑ!Ô!Ð!Ð!Ð!r@   c                 óv  — || j         v r| j                             |¦  «         n| j                             ¦   «          || j        v r| j                             |¦  «         n| j                             ¦   «          || j        v r| j                             |¦  «         d S | j                             ¦   «          d S r    )rq  r²  r  rÿ   rr  r·  rt  r¹  rø   s     r>   r³  zChartComparer.select_edgeI  sÁ   € Ø�4Ô#Ð#Ð#ØÔ×+Ò+¨DÑ1Ô1Ð1Ð1àÔ×)Ò)Ñ+Ô+Ð+Ø�4Ô$Ð$Ð$ØÔ×,Ò,¨TÑ2Ô2Ð2Ð2àÔ×*Ò*Ñ,Ô,Ð,Ø�4”?Ð"Ð"ØÔ×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0àÔ×(Ò(Ñ*Ô*Ð*Ð*Ð*r@   c                 ó¨   — | j                              ||¦  «         | j                             ||¦  «         | j                             ||¦  «         d S r    )r²  rð   r·  r¹  rñ   s      r>   rð   zChartComparer.select_cellW  sS   € ØÔ×%Ò% a¨Ñ+Ô+Ð+ØÔ×&Ò& q¨!Ñ,Ô,Ð,ØÔ×$Ò$ Q¨Ñ*Ô*Ð*Ð*Ð*r@   c                 óü   — |                       ¦   «         sd S t          | j                             ¦   «         ¦  «        }| j        D ]!}|| j        vr|                     |g ¦  «         Œ"|                      d|¦  «         d S )Nrd  ©Ú_checkcompatr   rq  Útokensrr  ÚinsertÚ_update©r;   Ú	out_chartr™   s      r>   rŸ  zChartComparer._difference`  sˆ   € Ø× Ò Ñ"Ô"ð 	ØˆFå˜$Ô*×1Ò1Ñ3Ô3Ñ4Ô4ˆ	ØÔ$ð 	+ð 	+ˆDØ˜4Ô,Ð,Ð,Ø× Ò   rÑ*Ô*Ð*øà�Š�S˜)Ñ$Ô$Ð$Ð$Ð$r@   c                 óü   — |                       ¦   «         sd S t          | j                             ¦   «         ¦  «        }| j        D ]!}|| j        v r|                     |g ¦  «         Œ"|                      d|¦  «         d S )Nrg  rë  rð  s      r>   r�  zChartComparer._intersectionk  sˆ   € Ø× Ò Ñ"Ô"ð 	ØˆFå˜$Ô*×1Ò1Ñ3Ô3Ñ4Ô4ˆ	ØÔ$ð 	+ð 	+ˆDØ�tÔ(Ð(Ð(Ø× Ò   rÑ*Ô*Ð*øà�Š�U˜IÑ&Ô&Ð&Ð&Ð&r@   c                 ó*  — |                       ¦   «         sd S t          | j                             ¦   «         ¦  «        }| j        D ]}|                     |g ¦  «         Œ| j        D ]}|                     |g ¦  «         Œ|                      d|¦  «         d S )Nrh  )rì  r   rq  rí  rî  rr  rï  rð  s      r>   rž  zChartComparer._unionv  s§   € Ø× Ò Ñ"Ô"ð 	ØˆFå˜$Ô*×1Ò1Ñ3Ô3Ñ4Ô4ˆ	ØÔ$ð 	'ð 	'ˆDØ×Ò˜T 2Ñ&Ô&Ð&Ð&ØÔ%ð 	'ð 	'ˆDØ×Ò˜T 2Ñ&Ô&Ð&Ð&à�Š�T˜9Ñ%Ô%Ð%Ð%Ð%r@   c                 óŠ   — | j         | j        }}| j                             |¦  «         | j                             |¦  «         d S r    )ro  rp  r±  rÈ   r¶  )r;   r0  r.  s      r>   r   zChartComparer._swapcharts‚  sD   € Ø”o tÔ'7ˆeˆØÔ×Ò Ñ&Ô&Ð&ØÔ× Ò  Ñ&Ô&Ð&Ð&Ð&r@   c                 ó¶  — | j                              ¦   «         | j                             ¦   «         k    sT| j                              ¦   «         | j                             ¦   «         k    s | j         | j        k    s| j        | j        k    rP| j        | _        | j                             | j        ¦  «         | j                             ¦   «          d| j	        d<   dS dS )Nr®  rp   FT)
rq  rí  rr  Úproperty_namesrn  rt  r¹  r©   rÚ   r¸  rÕ   s    r>   rì  zChartComparer._checkcompat‡  sÆ   € àÔ×#Ò#Ñ%Ô%¨Ô):×)AÒ)AÑ)CÔ)CÒCÐCØÔ×.Ò.Ñ0Ô0°DÔ4E×4TÒ4TÑ4VÔ4VÒVÐVØÔ 4Ô#3Ò3Ð3ØÔ  DÔ$4Ò4Ð4ð #Ô.ˆDŒOØÔ×&Ò& t¤Ñ7Ô7Ð7ØÔ×'Ò'Ñ)Ô)Ð)Ø&.ˆDŒO˜FÑ#à�5à�4r@   c                 óÜ   — || _         | j        |         | j        d<   || _        | j                             |¦  «         d                     | j        | j         | j        ¦  «        | j	        d<   d S )Nrp   z{} {} {})
ru  Ú	_OPSYMBOLr´  rt  r¹  r©   rÂ   ro  rp  r¸  )r;   Úoperatorrñ  s      r>   rï  zChartComparer._update˜  sl   € Ø!ˆŒØ!%¤°Ô!9ˆŒ�vÑØ#ˆŒØÔ×"Ò" 9Ñ-Ô-Ð-Ø",×"3Ò"3ØŒOØŒNØÔñ#
ô #
ˆŒ˜ÑÐÐr@   c                 ó¢   — | j         | _        | j                             | j        ¦  «         d| j        d<   | j                             ¦   «          d S )NrV  rp   )rn  rt  r¹  r©   r´  rÚ   rÕ   s    r>   Ú_clear_out_chartzChartComparer._clear_out_chart£  sL   € ØÔ*ˆŒØÔ×"Ò" 4¤?Ñ3Ô3Ð3Ø!$ˆŒ�vÑØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%r@   c                 óT   — t          | j        | j        | j        d         ¬¦  «         d S )Nrp   )r]   )rT   r\   rt  r¸  rÕ   s    r>   rÁ  zChartComparer._detach_out©  s(   € Ý˜œ
 D¤O¸4¼?È6Ô;RÐSÑSÔSÐSÐSÐSr@   N)!rN   rO   rP   r)  r   rQ   rø  rl   r_   r�  rv  rx  rw  ry  rz  r°  rµ  rÆ  rÕ  rš  r™  r{  rç  r³  rð   rŸ  r�  rž  r   rì  rï  rû  rÁ  rR   r@   r>   rc  rc     sØ  € € € € € ðð ð8 ØÔ# NÔ3ØÔ" 7Ô+ðð €Ið$&ð $&ð $&ðLð ð ð-ð -ð -ð%(ð %(ð %(ðN4ð 4ð 4ð;&ð ;&ð ;&ðz
ð 
ð 
ð9ð 9ð 9ðð ð ðð ð ð!ð !ð !ð 3Ð4FÐGÐð
Wð 
Wð 
Wð	Xð 	Xð 	Xð+ð +ð +ð&"ð "ð "ð+ð +ð +ð+ð +ð +ð	%ð 	%ð 	%ð	'ð 	'ð 	'ð
&ð 
&ð 
&ð'ð 'ð 'ð
ð ð ð"	
ð 	
ð 	
ð&ð &ð &ðTð Tð Tð Tð Tr@   rc  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d0d„Zd1d„Zd-d„Zd1d„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)dS )2Ú	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                 ó  — |                      dd¦  «        }|                      dd¦  «        }|                      dd¦  «        | _        || _        i | _        g | _        i | _        i | _        g | _        d| _        d| _	        g | _
        d| _        |€st          ¦   «         }|                     d¦  «         |fd	„}|fd
„}|                     d|¦  «         t          |d|¬¦  «        }	|	                     d¬¦  «         || _        n|| _        |                      |¦  «         |                      | j        ¦  «        \  | _        | _        d| j        d<   d| j        d<   |rjt-          | j        dd¬¦  «        }
|
                     dd¬¦  «         t/          |
d¬¦  «        | _        d| j        d<   | j                             d¬¦  «         nd| _        |r9|                      | j        dd¦  «        \  }}||c| _        | _        d | j        d<   nd| _        |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          | j                             d!| j        ¦  «         dS )"z4
        Construct a new ``Chart`` display.
        Ú	draw_treer   Údraw_sentencer�   Úfontsizer8   Nz
Chart Viewc                 ó.   — |                      ¦   «          d S r    ©r_   )r£   rƒ   s     r>   Údestroy1z$ChartView.__init__.<locals>.destroy1  ó   € Ø—’‘”���r@   c                 ó.   — |                       ¦   «          d S r    r  )rƒ   s    r>   Údestroy2z$ChartView.__init__.<locals>.destroy2  r  r@   ÚqÚDonero   rr   r/  i,  r‰   r  r1  Ú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Œ   ÚsbrB  s                r>   rl   zChartView.__init__æ  s«  € ð
 —F’F˜;¨Ñ*Ô*ˆ	ØŸš˜°Ñ2Ô2ˆØŸš 
¨CÑ0Ô0ˆŒð ˆŒð ˆŒð ˆÔØˆŒð ˆŒð ˆŒØ"ˆÔØ ˆÔð ˆŒð ˆŒð ˆ<Ý‘$”$ˆCØ�IŠI�lÑ#Ô#Ð#à #ð ð ð ð ð !ð ð ð ð ð �HŠH�S˜(Ñ#Ô#Ð#Ý�s °Ð:Ñ:Ô:ˆAØ�FŠF˜ˆFÑ!Ô!Ð!ØˆDŒJˆJàˆDŒJð 	×Ò˜ÑÔÐð 04¯ª¸t¼zÑ/JÔ/JÑ,ˆŒ˜Ô+Ø'*ˆÔ˜8Ñ$Ø,.ˆÔ˜=Ñ)ð ð 	)Ý˜4œ:¨f¸QÐ?Ñ?Ô?ˆFØ�KŠK˜V¨(ˆKÑ3Ô3Ð3Ý$*¨6¸"Ð$=Ñ$=Ô$=ˆDÔ!Ø2;ˆDÔ! ,Ñ/ØÔ!×&Ò&¨FÐ&Ñ3Ô3Ð3Ð3ð %)ˆDÔ!ð ð 	%ØŸ?š?¨4¬:°s¸CÑ@Ô@‰LˆR�Ø24°fÐ.ˆTŒ]˜DÔ-Ø*-ˆDÔ˜hÑ'Ð'à $ˆDÔð 	�Š‰ŒˆØ�	Š	‰ŒˆØ�Š‰ŒˆØ�
Š
‰Œˆð 	Ô×Ò ¨t¬Ñ?Ô?Ð?Ð?Ð?r@   c                 óø   — t          dd| j        ¬¦  «        | _        t          d| j        ¬¦  «        | _        t          t	          ¦   «         d         ¬¦  «        | _        |                     d| j        ¦  «         d S )Nr7   r9   ©ÚfamilyÚweightÚsize©r*  r,  r2   ©r2   ú*Font)r   r  Ú	_boldfontÚ_fontr   Ú_sysfontÚ
option_addr�   s     r>   r  zChartView._init_fonts?  sg   € Ý [¸ÀdÄnÐUÑUÔUˆŒÝ °4´>ÐBÑBÔBˆŒ
å¥&¡(¤(¨6Ô"2Ð3Ñ3Ô3ˆŒØ�Š˜ ¤Ñ/Ô/Ð/Ð/Ð/r@   Úyr“   rr   c                 ó(  — t          |dd¬¦  «        }|                     |||¬¦  «         t          |d¬¦  «        }t          |d¬¦  «        }|                     d	d
¬¦  «         |                     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.  r4  ©ru   rw   r0  Úyes©ru   rw   rv   rq   Úyscrollcommand)r   rx   r   r
   ÚyviewrÈ   )r;   ry   rv   rw   ru   rŒ   rB  r'  s           r>   r  zChartView._sb_canvasF  s¨   € õ �t F°1Ð5Ñ5Ô5ˆØ�Š˜ f°4ˆÑ8Ô8Ð8Ý˜¨9Ð5Ñ5Ô5ˆõ �v jÐ1Ñ1Ô1ˆØ
�Š�W 3ˆÑ'Ô'Ð'Ø�Š˜ d°5ˆÑ9Ô9Ð9ð œˆˆ9‰Ø#%¤6ˆÐÑ à�Fˆ|Ðr@   c                 ó>   — | j                              ddd¦  «         d S )NÚscrolléÿÿÿÿÚunits©r  r<  r¢   s     r>   Ú	scroll_upzChartView.scroll_upY  ó#   € ØÔ× Ò  ¨2¨wÑ7Ô7Ð7Ð7Ð7r@   c                 ó>   — | j                              ddd¦  «         d S )Nr>  r�   r@  rA  r¢   s     r>   Úscroll_downzChartView.scroll_down\  ó#   € ØÔ× Ò  ¨1¨gÑ6Ô6Ð6Ð6Ð6r@   c                 ó>   — | j                              ddd¦  «         d S )Nr>  r?  ÚpagesrA  r¢   s     r>   Úpage_upzChartView.page_up_  rC  r@   c                 ó>   — | j                              ddd¦  «         d S )Nr>  r�   rH  rA  r¢   s     r>   Ú	page_downzChartView.page_downb  rF  r@   c                 óž  — | j                              ¦   «         }t          t          | j        d         ¦  «        || j        z  t          j        dz  z   ¦  «        }| j                             |¬¦  «         | j                             | j        d         ¬¦  «         |dt          j        z  z
  |z  | _        | j	        �| j
        | j	        d<   dS dS )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._growe  sÐ   € ð
 ŒK×"Ò"Ñ$Ô$ˆÝÝ�Ô" 7Ô+Ñ,Ô,¨a°$´.Ñ.@Å9ÔCTÐWXÑCXÑ.Xñ
ô 
ˆð 	Ô×$Ò$¨5Ð$Ñ1Ô1Ð1ØÔ×$Ò$¨DÔ,>¸xÔ,HÐ$ÑIÔIÐIà !¥iÔ&7Ñ"7Ñ7¸1Ñ<ˆŒð Ô Ð,Ø.2Ô.CˆDÔ! (Ñ+Ð+Ð+ð -Ð,r@   c                 ót  — | j                              t          |¦  «         ¬¦  «         | j                             t          |¦  «         ¬¦  «         | j                             t          |¦  «         ¬¦  «         |                      ¦   «          |                      ¦   «          |                      ¦   «          d S ©N)r,  )r1  rO  Úabsr0  r2  r!  r#  rg   ©r;   r,  s     r>   Úset_font_sizezChartView.set_font_sizez  s�   € ØŒ
×Ò¥3 t¡9¤9 *ÐÑ-Ô-Ð-ØŒ× Ò ¥s¨4¡y¤y jÐ Ñ1Ô1Ð1ØŒ×Ò¥c¨$¡i¤i ZÐÑ0Ô0Ð0Ø�Š‰ŒˆØ�
Š
‰ŒˆØ�	Š	‰Œˆˆˆr@   c                 ó*   — t          | j        ¦  «        S r    )rS  r  rÕ   s    r>   Úget_font_sizezChartView.get_font_size‚  s   € Ý�4”>Ñ"Ô"Ð"r@   c                 óž   — | j                              ¦   «         }|j        dt          j        z  z
  |z  | _        |                      ¦   «          dS )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þ  rN  rM  rg   )r;   r£   rµ   s      r>   r$  zChartView._configure…  sC   € ð ŒK×"Ò"Ñ$Ô$ˆØœ' A­	Ô(9Ñ$9Ñ9¸QÑ>ˆŒØ�	Š	‰Œˆˆˆr@   c                 óx  — |�{|| _         g | _        i | _        |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          dS | j         D ] }|| j        vr|  	                    |¦  «         Œ!|                      ¦   «          dS )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ŒOˆOØ�JŠJ‰LŒLˆLØ�IŠI‰KŒKˆKØ�OŠOÑÔÐØ�LŠL‰NŒNˆNˆNˆNàœð )ð )�Ø˜tœ~Ð-Ð-Ø—N’N 4Ñ(Ô(Ð(øØ�LŠL‰NŒNˆNˆNˆNr@   c                 óò   — |                      ¦   «         \  }}| j        |         D ]Q}|                      ¦   «         \  }}||cxk    r|k     s(n ||cxk    r|k     sn ||cxk    r|cxk    r|k    rn ŒN dS ŒRdS )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©  s­   € ð —9’9‘;”;‰ˆˆRØÔ)¨#Ô.ð 	ð 	ˆIØ —~’~Ñ'Ô'‰HˆR�Ø�b��’�˜2’��� 2¨ = =¢= =¨b¢= = = =°b¸BÐ6JÐ6JÒ6JÐ6JÀ"Ð6JÐ6JÒ6JÐ6JÈÒ6JÐ6JÐ6JÐ6JÐ6JØ�t�tð 7Kàˆur@   c           	      óJ  — | j         }t          |t          ¦  «        r¯|                     ¦   «         }g }|                     ¦   «         D ]n}t          |t
          ¦  «        r5|                     t          |                     ¦   «         ¦  «        ¦  «         ŒL|                     t          |¦  «        ¦  «         Œod 
                    |¦  «        }n|                     ¦   «         }d}||fD ]¼}|                     dd|| j        dd¬¦  «        }|                     |¦  «        }	|                     |¦  «         |	d         }
t          |                     ¦   «         d¦  «        }t          | j        |
|z  ¦  «        | _        t          | j        |	d	         |	d         z
  ¦  «        | _        Œ½d
S )zÃ
        Given a new edge, recalculate:

            - _text_height
            - _unitsize (if the edge text is too big for the current
              _unitsize, then increase _unitsize)
        rV  rj  r   Únwr0  ©rp   r2   r  Újustifyr|   r�   r‚   N)r  rG   r&   rC   rF   r   rB   Ústrr0   r  Újoinr  r0  rF  r  rÄ   ÚlengthrM  Ú_text_height)r;   r™   r  rC   ÚrhseltsrL   rF   Úsr  rF  rˆ   Úedgelens               r>   Ú_analyze_edgezChartView._analyze_edge¶  s‚  € ð Ôˆå�d�HÑ%Ô%ð 	Ø—(’(‘*”*ˆCØˆGØ—x’x‘z”zð .ð .�Ý˜c¥;Ñ/Ô/ð .Ø—N’N¥3 s§z¢z¡|¤|Ñ#4Ô#4Ñ5Ô5Ð5Ð5à—N’N¥4¨¡9¤9Ñ-Ô-Ð-Ð-Ø—(’(˜7Ñ#Ô#ˆCˆCà—(’(‘*”*ˆCØˆCà�s�ð 		Jð 		JˆAØ—-’-Ø�1˜1 4¤>¸$Èð  ñ ô ˆCð —6’6˜#‘;”;ˆDØ�HŠH�S‰MŒMˆMØ˜”GˆEÝ˜$Ÿ+š+™-œ-¨Ñ+Ô+ˆGÝ  ¤°¸±ÑAÔAˆDŒNÝ # DÔ$5°t¸A´wÀÀaÄÑ7HÑ IÔ IˆDÔÐð		Jð 		Jr@   r   c                 óÚ  — t          |t          ¦  «        rdS || j        v rdS |                      |¦  «         |                      ¦   «          | j        s^| j                             |g¦  «         t          | j        ¦  «        dz
  }|  	                    ||¦  «         |  
                    ¦   «          dS d}	 |t          | j        ¦  «        k    rF| j                             g ¦  «         |  
                    ¦   «          |t          | j        ¦  «        k    °F||k    r7|                      ||¦  «        s!| j        |                              |¦  «         n|dz  }Œ¡|  	                    ||¦  «         dS )z¼
        Add a single edge to the ChartView:

            - Call analyze_edge to recalculate display parameters
            - Find an available level
            - Call _draw_edge
        Nr�   r   )rG   r    r  ro  r#  r  r  rB   r¿   Ú
_draw_edger"  rc  )r;   r™   Úminlvlr]  s       r>   r[  zChartView._add_edgeØ  st  € õ �d�HÑ%Ô%ð 	ØˆFà�4”>Ð!Ð!ØˆFØ×Ò˜4Ñ Ô Ð Ø�
Š
‰ŒˆàŒ}ð 	ØÔ×#Ò# T FÑ+Ô+Ð+Ý�dÔ&Ñ'Ô'¨!Ñ+ˆCØ�OŠO˜D #Ñ&Ô&Ð&Ø�LŠL‰NŒNˆNØˆFð ˆð	à�˜TÔ-Ñ.Ô.Ò.Ð.ØÔ ×'Ò'¨Ñ+Ô+Ð+Ø—’‘”�ð �˜TÔ-Ñ.Ô.Ò.Ð.ð
 �fŠ}ˆ} T×%8Ò%8¸¸sÑ%CÔ%Cˆ}àÔ  Ô%×,Ò,¨TÑ2Ô2Ð2Øð �1‰HˆCð	ð 	�Š˜˜cÑ"Ô"Ð"Ð"Ð"r@   c                 óJ  — d }t          t          | j        ¦  «        ¦  «        D ]}|| j        |         v r|} nŒ|€d S |dz   | j        z  }| j        dz   }| j                             dd¦  «         | j        dk    r(| j                             d||z
  | j        z  ¦  «         d S d S )Nr�   rº   Úmovetog      ð?r   )r²   r¿   r  Ú_chart_level_sizerk  r  r<  Ú_chart_height)r;   r™   ÚlevelrK   r4  r   s         r>   rù   zChartView.view_edge  sÏ   € ØˆÝ•s˜4Ô+Ñ,Ô,Ñ-Ô-ð 	ð 	ˆAØ�tÔ'¨Ô*Ð*Ð*Ø�Ø�ð +ð ˆ=ØˆFà�Q‰Y˜$Ô0Ñ0ˆØÔ Ñ#ˆØÔ× Ò  ¨3Ñ/Ô/Ð/ØÔ Ò"Ð"ØÔ×$Ò$ X°°B±¸$Ô:LÑ/LÑMÔMÐMÐMÐMð #Ð"r@   c                 óf  — | j         }|                     ¦   «         | j        z  t          j        z   }|                     ¦   «         | j        z  t          j        z   }||k    r|t          d| j        dz  ¦  «        z  }|dz   | j        z  }|                     ||||dd¬¦  «        }t          |t          ¦  «        ršg }|                     ¦   «         D ]n}	t          |	t          ¦  «        r5|                     t          |	                     ¦   «         ¦  «        ¦  «         ŒL|                     t!          |	¦  «        ¦  «         Œo|                     ¦   «         }
ng }d}
d                     |d	|
…         ¦  «        }d                     ||
d	…         ¦  «        }|                     |dz   ||| j        d
¬¦  «        }|                     |¦  «        d         dz   }|                     |¦  «        d         |                     |¦  «        d         z   dz  }|                     |dz
  |dz
  |dz   |dz   ¦  «        }|                     |dz   ||| j        d
¬¦  «        }|                     ||z   dz  |t          |                     ¦   «         ¦  «        d| j        ¬¦  «        }|||||f| j        |<   | |fd„}|                     |d|¦  «         |                     |d|¦  «         |                     |d|¦  «         |                     |d|¦  «         |                     |d|¦  «         |                      |¦  «         d	S )z6
        Draw a single edge on the ChartView.
        é   r’   r�   Úlastr‚   )r/   rˆ   r   rV  Nre  )rp   r2   r  r|   é   rm  ©rp   r  r2   c                 ó2   — |                      d|¦  «         d S r•   r—   )rà   r;   r™   s      r>   rš   z ChartView._draw_edge.<locals>.cb<  r›   r@   r  )r  rÀ   rM  rþ  rN  rÁ   rÄ   ru  r  rG   r&   rF   r   rB   rh  r0   r  r4   ri  r  r1  rF  Úcreate_ovalrC   r0  r  r  Ú_color_edge)r;   r™   r]  r  rJ  rL  r4  ÚlinetagrF   rL   ÚposÚrhs1Úrhs2Úrhstag1ÚdotxÚdotyÚdottagÚrhstag2Úlhstagrš   s                       r>   rq  zChartView._draw_edge  s  € ð Ôˆð �ZŠZ‰\Œ\˜DœNÑ*­YÔ->Ñ>ˆØ�XŠX‰ZŒZ˜$œ.Ñ(­9Ô+<Ñ<ˆØ�Š8ˆ8Ø•#�a˜œ¨!Ñ+Ñ,Ô,Ñ,ˆBØ�1‰W˜Ô.Ñ.ˆØ—-’-  A r¨1°FÀ!�-ÑDÔDˆõ �d�HÑ%Ô%ð 
	ØˆCØ—x’x‘z”zð *ð *�Ý˜c¥;Ñ/Ô/ð *Ø—J’J�s 3§:¢:¡<¤<Ñ0Ô0Ñ1Ô1Ð1Ð1à—J’J�t C™yœyÑ)Ô)Ð)Ð)Ø—(’(‘*”*ˆCˆCàˆCØˆCà�xŠx˜˜D˜S˜Dœ	Ñ"Ô"ˆØ�xŠx˜˜C˜D˜Dœ	Ñ"Ô"ˆØ—-’-  Q¡¨°¸4¼:Èd�-ÑSÔSˆØ�vŠv�g‰Œ˜qÔ! AÑ%ˆØ—’�w‘” Ô" Q§V¢V¨G¡_¤_°QÔ%7Ñ7¸1Ñ<ˆØ—’˜t a™x¨°©°4¸!±8¸TÀA¹XÑFÔFˆØ—-’-  q¡¨!°$¸T¼ZÐPT�-ÑUÔUˆØ—’Ø�"‰W˜‰M˜1¥3 t§x¢x¡z¤z¡?¤?¸3ÀTÄ^ð ñ 
ô 
ˆð
 !(¨°&¸'À6ÐJˆŒ�tÑð   dð 	1ð 	1ð 	1ð 	1ð 	
�
Š
�7˜L¨"Ñ-Ô-Ð-Ø	�
Š
�7˜L¨"Ñ-Ô-Ð-Ø	�
Š
�7˜L¨"Ñ-Ô-Ð-Ø	�
Š
�6˜<¨Ñ,Ô,Ð,Ø	�
Š
�6˜<¨Ñ,Ô,Ð,à×Ò˜ÑÔÐÐÐr@   c                 ó<  — || j         vrdS | j        }|�¹|�·|| j        v r| j        |         }| j         |         }|                     |d         |¬¦  «         |                     |d         |¬¦  «         |                     |d         ||¬¦  «         |                     |d         |¬¦  «         |                     |d         |¬¦  «         dS | j                             ¦   «         }|| j        v r |                      | j        |         ¦  «         |                     ¦   «         r3|                     ¦   «         d|fk    r|                      |d	d
¦  «         dS t          |t          ¦  «        r|                      |dd¦  «         dS |                      |dd¦  «         dS )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‚   ry  ú#084ú#042z#48cz#246z#00fz#008)r  r  rZ   rÅ   rX   r  r  rH   r¾   rG   r    )r;   r™   Ú	linecolorÚ	textcolorr  Útagsrµ   s          r>   r  zChartView._color_edgeG  s¨  € ð �t”~Ð%Ð%ØˆFØÔˆàÐ  YÐ%:Ø�t”{Ð"Ð"Ø œK¨Ô-�	Ø”> $Ô'ˆDØ�LŠL˜˜aœ yˆLÑ1Ô1Ð1Ø�LŠL˜˜aœ yˆLÑ1Ô1Ð1Ø�LŠL˜˜aœ y¸)ˆLÑDÔDÐDØ�LŠL˜˜aœ yˆLÑ1Ô1Ð1Ø�LŠL˜˜aœ yˆLÑ1Ô1Ð1ØˆFà”×&Ò&Ñ(Ô(ˆAØ�t”{Ð"Ð"Ø× Ò  ¤¨TÔ!2Ñ3Ô3Ð3Ø×ÒÑ!Ô!ð 7 d§i¢i¡k¤k°a¸°VÒ&;Ð&;Ø× Ò   v¨vÑ6Ô6Ð6Ð6Ð6Ý˜D¥(Ñ+Ô+ð 7Ø× Ò   v¨vÑ6Ô6Ð6Ð6Ð6à× Ò   v¨vÑ6Ô6Ð6Ð6Ð6r@   ú#0dfc                 óD   — || j         |<   |                      |¦  «         dS )z
        Mark an edge
        N)rZ   r  ©r;   r™   rû   s      r>   rü   zChartView.mark_edgef  s*   € ð !ˆŒ�DÑØ×Ò˜ÑÔÐÐÐr@   c                 óÖ   — |€It          | j                             ¦   «         ¦  «        }i | _        |D ]}|                      |¦  «         ŒdS | j        |= |                      |¦  «         dS )z/
        Unmark an edge (or all edges)
        N)rÇ   rZ   rê   r  )r;   r™   Úold_marked_edgess      r>   rÿ   zChartView.unmark_edgem  s‚   € ð ˆ<Ý# D¤K×$4Ò$4Ñ$6Ô$6Ñ7Ô7ÐØˆDŒKØ(ð 'ð '�Ø× Ò  Ñ&Ô&Ð&Ð&ð'ð 'ð ”˜DÐ!Ø×Ò˜TÑ"Ô"Ð"Ð"Ð"r@   c                 óZ   — |                       ¦   «          |                      ||¦  «         d S r    )rÿ   rü   r“  s      r>   r  zChartView.markonly_edgez  s.   € Ø×ÒÑÔÐØ�Š�t˜TÑ"Ô"Ð"Ð"Ð"r@   c           	      ó¾  — d}d}| j         }| j                             ¦   «         D ]�}|                     ddt	          |¦  «        | j        dd¬¦  «        }|                     |¦  «        }|                     |¦  «         |d         t          j	        z   }t          ||¦  «        }t          ||d         |d         z
  ¦  «        }Œž|| _        || _        | j        dt          j        z  z   | _        | j                             ¦   «         D ]}|                      |¦  «         Œ| j        dz  | _        dt          j        | j        z   z  | _        |                      ¦   «          d	S )
z�
        Analyze the sentence string, to figure out how big a unit needs
        to be, How big the tree should be, etc.
        éF   r   re  r0  rf  r|   r‚   r�   N)r  rX   Úleavesr  r  r1  rF  r  rþ  Ú_LEAF_SPACINGrÄ   rM  rk  rN  rP  rÍ   ro  ru  Ú_TREE_LEVEL_SIZEÚ_tree_heightr"  )	r;   ÚunitsizeÚtext_heightr  Úleafr  rF  rˆ   r™   s	            r>   r!  zChartView._analyze~  s\  € ð ˆØˆØÔˆð ”K×&Ò&Ñ(Ô(ð 	>ð 	>ˆDØ—-’-Ø�1�4 ™:œ:¨D¬J¸tÈVð  ñ ô ˆCð —6’6˜#‘;”;ˆDØ�HŠH�S‰MŒMˆMØ˜”G�iÔ5Ñ5ˆEÝ˜5 (Ñ+Ô+ˆHÝ˜k¨4°¬7°T¸!´WÑ+<Ñ=Ô=ˆKˆKà!ˆŒØ'ˆÔØ $Ô 1°A½	Ô8IÑ4IÑ IˆÔð ”K×%Ò%Ñ'Ô'ð 	%ð 	%ˆDØ×Ò˜tÑ$Ô$Ð$Ð$ð "&Ô!2°QÑ!6ˆÔð ¥Ô!;¸dÔ>OÑ!OÑPˆÔð 	�Š‰Œˆˆˆr@   c                 ó  — | 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<   dS dS )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   rW  N)r  rX   r  rM  rþ  rN  r¿   r  ru  rv  r   rœ  )r;   r  rˆ   Úlevelss       r>   r"  zChartView._resize¤  s©   € ð Ôˆð ”×&Ò&Ñ(Ô(¨4¬>Ñ9½IÔ<MÐPQÑ<QÑQˆå�TÔ%Ñ&Ô&ˆØ$ q™j¨DÔ,BÑBˆÔØ  5¨$Ô*<Ð=ˆˆ.Ñð Ôð 	QØ12°A°u¸dÔ>OÐ0PˆDÔ˜nÑ-Ð-Ð-ð	Qð 	Qr@   c                 ó´  — d}| j         }| j        }| j        }t          j        }g | _        t          d| j                             ¦   «         dz   ¦  «        D �]�}|| j	        z  |z   }|r-| 
                    |d||¦  «        }|                     |¦  «         |r2| 
                    |d|| j        ¦  «        }	|                     |	¦  «         | 
                    |d||¦  «        }
|                     |
¦  «         |                     |dz   dt          |¦  «        d| j        ¬¦  «        }|                     |¦  «         |dz  dk    rK|r|                     |d¬¦  «         |r|                     |	d¬¦  «         |                     |
d¬¦  «         �Œ8|r|                     |d	¬¦  «         |r|                     |	d	¬¦  «         |                     |
d	¬¦  «         �Œƒd
S )zv
        Draw location lines.  These are vertical gridlines used to
        show where each location unit is.
        iPÃ  r   r�   r|   re  r|  Úgray60r»   Úgray80N)r   r  r  rþ  rN  Ú	_loclinesr²   rX   r  rM  r  r  rP  r  r  r1  rÅ   )r;   ÚBOTTOMÚc1Úc2Úc3ÚmarginrK   r-  Út1Út2Út3Út4s               r>   Ú_draw_loclineszChartView._draw_loclines¸  s÷  € ð
 ˆØÔˆØÔ"ˆØÔˆÝÔ"ˆØˆŒÝ�q˜$œ+×0Ò0Ñ2Ô2°QÑ6Ñ7Ô7ð 	1ñ 	1ˆAØ�D”NÑ" VÑ+ˆAàð !Ø—^’^ A q¨!¨VÑ4Ô4�Ø—’˜RÑ Ô Ð Øð !Ø—^’^ A q¨!¨TÔ-BÑCÔC�Ø—’˜RÑ Ô Ð Ø—’  1 a¨Ñ0Ô0ˆBØ�LŠL˜ÑÔÐØ—’  A¡ q­t°A©w¬w¸tÈ$Ì*�ÑUÔUˆBØ�LŠL˜ÑÔÐð
 �1‰u˜ŠzˆzØð 5Ø—M’M "¨8�MÑ4Ô4Ð4Øð 5Ø—M’M "¨8�MÑ4Ô4Ð4Ø—’˜b x�Ñ0Ô0Ð0Ñ0àð 5Ø—M’M "¨8�MÑ4Ô4Ð4Øð 5Ø—M’M "¨8�MÑ4Ô4Ð4Ø—’˜b x�Ñ0Ô0Ð0Ñ0ð9	1ð 	1r@   c           	      ó`  — | j                              ¦   «         dk    rdS | j        }t          j        }t          j        }t          | j                              ¦   «         ¦  «        D ]È\  }}|| j        z  |z   }|| j        z   }||z   dz  }|                     ||t          |¦  «        | j
        dd¬¦  «        }	|                     |	¦  «        }
|                     |dz   |
d         t          j        dz  z
  |dz
  |
d         t          j        dz  z   d	d	¬
¦  «        }|                     |¦  «         ŒÉdS )zDraw the sentence string.r   Nr|   r  r0  rf  r�   r‚   z#f0f0f0r‹  )rX   r  r  rþ  rN  rE   r™  rM  r  r  r1  rF  r  rš  r  )r;   r  rª  r4  rK   rŸ  rJ  rL  r-  r  rF  Úrts               r>   Ú_draw_sentencezChartView._draw_sentenceá  s<  € àŒ;×!Ò!Ñ#Ô# qÒ(Ð(ØˆFØÔ!ˆÝÔ"ˆÝÔˆå  ¤×!3Ò!3Ñ!5Ô!5Ñ6Ô6ð 	ð 	‰GˆAˆtØ�T”^Ñ# fÑ,ˆBØ�d”nÑ$ˆBØ�b‘˜A‘ˆAØ—-’-Ø�1�4 ™:œ:¨D¬J¸sÈFð  ñ ô ˆCð —6’6˜#‘;”;ˆDØ×#Ò#Ø�Q‘Ø�Q”�9Ô2°QÑ6Ñ7Ø�Q‘Ø�Q”�9Ô2°QÑ6Ñ7ØØ!ð $ñ ô ˆBð �KŠK˜‰OŒOˆOˆOð!	ð 	r@   c                 óx   — | j         D ]}| j                             |¦  «         Œg | _        d | _        d| _        d S r§   )r  r   r  r  r  r  )r;   r  s     r>   rZ  zChartView.erase_treeû  sJ   € Ø”?ð 	*ð 	*ˆCØÔ×$Ò$ SÑ)Ô)Ð)Ð)ØˆŒØ"ˆÔØ ˆÔÐÐr@   c                 óš  — |€	| j         €d S |€| j         }| j         |k    r7d„ | j                             |¦  «        D ¦   «         | _        || _         d| _        t          | j        ¦  «        dk    rd S | j        D ]}| j                             |¦  «         Œ| j        | j                 }|  	                    || 
                    ¦   «         ¦  «         |                      ¦   «          | j                             ¦   «         | j        z  dt          j        z  z   }|                     ¦   «         t          j        | j        z   z  }dd||f| j        d<   d S )Nc                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS rR   )rG   r'   )r¯   r!  s     r>   r°   z'ChartView.draw_tree.<locals>.<listcomp>
  s(   € ÐXÐXÐX AÅJÈqÕRVÑDWÔDWÐX˜aÐXÐXÐXr@   r   r|   rW  )r  rX   Útreesr  r  r¿   r  r   r  Ú_draw_treetokrÀ   Ú_draw_treecycler  rM  rþ  rN  r‰   r›  rk  )r;   r™   r  ÚtreeÚwÚhs         r>   r  zChartView.draw_tree  sS  € Øˆ<˜DÔ/Ð7ØˆFØˆ<ØÔ&ˆDð Ô $Ò&Ð&ØXÐX¨¬×):Ò):¸4Ñ)@Ô)@ÐXÑXÔXˆDŒNØ"&ˆDÔØ#$ˆDÔ õ ˆtŒ~ÑÔ !Ò#Ð#ØˆFð ”?ð 	*ð 	*ˆCØÔ×$Ò$ SÑ)Ô)Ð)Ð)ð Œ~˜dÔ2Ô3ˆØ×Ò˜4 §¢¡¤Ñ.Ô.Ð.ð 	×ÒÑÔÐð ŒK×"Ò"Ñ$Ô$ t¤~Ñ5¸½IÔ<MÑ8MÑMˆØ�KŠK‰MŒM�YÔ7¸$Ô:KÑKÑLˆØ-.°°1°a¨LˆÔ˜.Ñ)Ð)Ð)r@   c                 ó‚   — | j         dz   t          | j        ¦  «        z  | _         |                      | j        ¦  «         d S rÜ   )r  r¿   r  r  r  rÕ   s    r>   Ú
cycle_treezChartView.cycle_tree"  s<   € Ø $Ô 4°qÑ 8½CÀÄÑ<OÔ<OÑOˆÔØ�Š�tÔ*Ñ+Ô+Ð+Ð+Ð+r@   c                 óê  — t          | j        ¦  «        dk    rd S dt          | j        ¦  «        z  }| j        }t          j        }| j                             ¦   «         | j        z  |z   dz
  }|                     |dd|| j	        ¬¦  «        }| j
                             |¦  «         |                     |¦  «        \  }}}}t          t          | j        ¦  «        ¦  «        D ]’}|dt          | j        ¦  «        |z
  dz
  z  z
  }	|| j        k    rd}
nd}
|                     |	|d	z   |	d
z
  ||	d	z
  |d	z   |
d¬¦  «        }| j
                             |¦  «         | |fd„}|                     |d|¦  «         Œ“d S )Nr�   z%d Treesr|   Úne)r  rp   r2   r‘   rŒ  z#fffrº   r’   r½   r‹  c                 ó<   — ||_         |                     ¦   «          d S r    )r  r  )rà   r;   rK   s      r>   rš   z%ChartView._draw_treecycle.<locals>.cbA  s    € Ø'(�Ô$Ø—’Ñ Ô Ð Ð Ð r@   r  )r¿   r  r   rþ  rN  rX   r  rM  r  r0  r  rB   rF  r²   r  Úcreate_polygonr  )r;   rO  r  rª  r.  r  Ú_r4  rK   r-  rw   rš   s               r>   r¸  zChartView._draw_treecycle&  s£  € ÝˆtŒ~ÑÔ !Ò#Ð#ØˆFð �S ¤Ñ0Ô0Ñ0ˆØÔˆÝÔ"ˆØ”×&Ò&Ñ(Ô(¨4¬>Ñ9¸FÑBÀQÑFˆØ�mŠm˜E 1¨T¸ÀDÄNˆmÑSÔSˆØŒ×Ò˜sÑ#Ô#Ð#Ø—V’V˜C‘[”[‰
ˆˆ1ˆa�õ •s˜4œ>Ñ*Ô*Ñ+Ô+ð 	.ð 	.ˆAØ˜�c $¤.Ñ1Ô1°AÑ5¸Ñ9Ñ:Ñ:ˆAØ�DÔ(Ò(Ð(Ø��à�Ø×"Ò"Ø�1�r‘6˜1˜q™5 ! Q¨¡V¨Q°©V¸$Èð #ñ ô ˆCð ŒO×"Ò" 3Ñ'Ô'Ð'ð  $ qð !ð !ð !ð !ð �JŠJ�s˜L¨"Ñ-Ô-Ð-Ð-ð#	.ð 	.r@   c           
      óÚ  — | j         }t          j        }g }|D ]x}t          |t          ¦  «        r3|                      |||dz   ¦  «        \  }}|                     |¦  «         ŒJ|                     d|z  dz   | j        z  dz  |z   ¦  «         |dz  }Œy|r t          |¦  «        t          |¦  «        z  }	nd|z  dz   | j        z  dz  |z   }	|dz  }|t          j
        | j        z   z  }
|                     |	|
ddt          |                     ¦   «         ¦  «        d| j        ¬¦  «        }| j                             |¦  «         |
t          j
        z   | j        z   }t#          ||¦  «        D �]\  }}t          |t          ¦  «        r?|r=|                     |	|
| j        z   ||dd¬¦  «        }| j                             |¦  «         t          |t          ¦  «        r@|s>|                     |	|
| j        z   ||dd	d
¬¦  «        }| j                             |¦  «         t          |t          ¦  «        s=|                     |	|
| j        z   |ddd¬¦  «        }| 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  rg  rp   rw   r2   rŒ  )rˆ   rw   z#048z2 3)rˆ   rw   r	  i'  )r   rþ  rN  rG   r'   r·  rB   rM  Úsumr¿   r›  rk  r  rh  rO  r0  r  Úzipr  )r;   ÚtreetokÚindexÚdepthr  rª  Úchild_xsrR  Úchild_xÚnodexÚnodeyr  ÚchildyÚchildxs                 r>   r·  zChartView._draw_treetokG  sÃ  € ð
 ÔˆÝÔ"ˆð ˆØð 	ð 	ˆEÝ˜%¥Ñ&Ô&ð Ø!%×!3Ò!3°E¸5À%È!Á)Ñ!LÔ!L‘�˜Ø—’ Ñ(Ô(Ð(Ð(à—’  U¡¨Q¡°$´.Ñ @À1Ñ DÀvÑ MÑNÔNÐNØ˜‘
��ð ð 	Ý˜‘M”M¥C¨¡M¤MÑ1ˆEˆEð ˜‘Y ‘] d¤nÑ4°qÑ8¸6ÑAˆEØ�Q‰JˆEð �Ô3°dÔ6GÑGÑHˆØ�mŠmØØØØÝ�W—]’]‘_”_Ñ%Ô%ØØ”ð ñ 
ô 
ˆð 	Œ×Ò˜sÑ#Ô#Ð#ð �Ô3Ñ3°dÔ6GÑGˆÝ  ¨7Ñ3Ô3ð "	,ñ "	,‰MˆF�EÝ˜%¥Ñ&Ô&ð 
,¨5ð 
,à—m’mØØ˜DÔ-Ñ-ØØØØð $ñ ô �ð ”×&Ò& sÑ+Ô+Ð+Ý˜%¥Ñ&Ô&ð ,¨uð ,à—m’mØØ˜DÔ-Ñ-ØØØØØð $ñ ô �ð ”×&Ò& sÑ+Ô+Ð+Ý˜e¥TÑ*Ô*ð 
,à—m’mØØ˜DÔ-Ñ-ØØØØð $ñ ô �ð ”×&Ò& sÑ+Ô+Ð+ùà�eˆ|Ðr@   c                 ó  — | j         r.| j                              d¦  «         |                      ¦   «          | j        r.| j                             d¦  «         |                      ¦   «          | j                             d¦  «         i | _        t          t          | j	        ¦  «        ¦  «        D ](}| j	        |         D ]}|  
                    ||¦  «         ŒŒ)| j        D ]}|                      |¦  «         Œ|                      ¦   «          dS )z1
        Draw everything (from scratch).
        r  N)r   r  r  r  r²  r  r  r²   r¿   r  rq  rX   r[  r¯  )r;   r]  r™   s      r>   rg   zChartView.draw—  s  € ð Ôð 	ØÔ×$Ò$ UÑ+Ô+Ð+Ø�NŠNÑÔÐàÔ ð 	"ØÔ!×(Ò(¨Ñ/Ô/Ð/Ø×ÒÑ!Ô!Ð!àÔ×!Ò! %Ñ(Ô(Ð(ØˆŒõ �˜TÔ-Ñ.Ô.Ñ/Ô/ð 	+ð 	+ˆCØÔ(¨Ô-ð +ð +�Ø—’  cÑ*Ô*Ð*Ð*ð+ð ”Kð 	!ð 	!ˆDØ�NŠN˜4Ñ Ô Ð Ð à×ÒÑÔÐÐÐr@   c                 óB   — d| j                              |i ¦  «        |<   d S rÜ   rÝ   rß   s      r>   r�   zChartView.add_callback°  râ   r@   c                 óL   — |€
| j         |= d S 	 | j         |         |= d S #  Y d S xY wr    rä   rß   s      r>   rå   zChartView.remove_callback³  ræ   rç   c                 ó„   — || j         vrd S t          | j         |                              ¦   «         ¦  «        D ]} ||Ž  Œd S r    ré   rë   s       r>   r˜   zChartView._fire_callbacks¼  rî   r@   r    )r4  r“   rr   r­   )NN)r‘  )*rN   rO   rP   r)  rš  rN  r›  Ú_CHART_LEVEL_SIZErl   r  r  rB  rE  rI  rK  r#  rU  rW  r$  rÎ   rc  ro  r[  rù   rq  r  rü   rÿ   r  r!  r"  r¯  r²  rZ  r  r½  r¸  r·  rg   r�   rå   r˜   rR   r@   r>   rþ  rþ  ²  s�  € € € € € ð,ð ,ð\ €MØ€GØÐØÐðW@ð W@ð W@ð W@ðr0ð 0ð 0ðð ð ð ð&8ð 8ð 8ð7ð 7ð 7ð8ð 8ð 8ð7ð 7ð 7ðDð Dð Dð*ð ð ð#ð #ð #ð	ð 	ð 	ðð ð ð ð2ð ð ð Jð  Jð  JðD)#ð )#ð )#ð )#ðVNð Nð Nð3ð 3ð 3ðj7ð 7ð 7ð 7ð>ð ð ð ð#ð #ð #ð #ð#ð #ð #ð #ð$ð $ð $ðLQð Qð Qð('1ð '1ð '1ðRð ð ð4!ð !ð !ð9ð 9ð 9ð 9ð@,ð ,ð ,ð.ð .ð .ðBNð Nð Nð Nð`ð ð ð28ð 8ð 8ðð ð ð ðð ð ð ð r@   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                 óX   •— | j         j        d         }|| _        |j        dz
  | _        d S rÜ   )Ú	__class__Ú	__bases__Ú_edgeÚ	NUM_EDGES)r;   r™   ÚsuperrØ  s      €r>   rl   zEdgeRule.__init__Ñ  s+   ø€ Ø”Ô(¨Ô+ˆØˆŒ
Øœ¨1Ñ,ˆŒˆˆr@   c              '   ór   •K  — | j         j        d         }|| j        fz  } |j        | ||g|¢R Ž E d {V —† d S rÜ   )rØ  rÙ  rÚ  Úapply)r;   ri   r;  rÍ   rÜ  rØ  s        €r>   rÞ  zEdgeRule.applyÖ  sZ   øè è € Ø”Ô(¨Ô+ˆØ�$”*�ÑˆØ�5”;˜t U¨GÐ<°eÐ<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r@   c                 óR   •— | j         j        d         }|                     | ¦  «        S rÜ   )rØ  rÙ  Ú__str__)r;   rÜ  rØ  s     €r>   rà  zEdgeRule.__str__Û  s$   ø€ Ø”Ô(¨Ô+ˆØ�}Š}˜TÑ"Ô"Ð"r@   )rN   rO   rP   r)  rl   rÞ  rà  Ú__classcell__)rØ  s   @r>   rÖ  rÖ  Ê  st   ø€ € € € € ðð ð-ð -ð -ð -ð -ð
=ð =ð =ð =ð =ð
#ð #ð #ð #ð #ð #ð #ð #ð #r@   rÖ  c                   ó   — e Zd ZdS )ÚTopDownPredictEdgeRuleN©rN   rO   rP   rR   r@   r>   rã  rã  à  ó   € € € € € Ø€Dr@   rã  c                   ó   — e Zd ZdS )ÚBottomUpEdgeRuleNrä  rR   r@   r>   rç  rç  ä  rå  r@   rç  c                   ó   — e Zd ZdS )ÚBottomUpLeftCornerEdgeRuleNrä  rR   r@   r>   ré  ré  è  rå  r@   ré  c                   ó   — e Zd ZdS )ÚFundamentalEdgeRuleNrä  rR   r@   r>   rë  rë  ì  rå  r@   rë  c                   óÊ  — e Zd Zd5d„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%d6d'„Z&d(„ Z'd7d*„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:d0„ Z;d1„ Z<d2„ Z=d3„ Z>d4„ Z?d&S )8ÚChartParserAppúChart Parser Applicationc                 óx  — |                       ||¦  «         d | _        	 t          ¦   «         | _        | j                             |¦  «         | j                             d| j        ¦  «         t          | j        ¦  «        }t          | j        ¦  «        }t          | j        ¦  «        }|                     dd¬¦  «         |                     dd¬¦  «         |                     ddd¬¦  «         |                      | j        ¦  «         |  	                    ¦   «          |  
                    |¦  «         |                      |¦  «         |                      |¦  «         |                      ¦   «          d | _        d | _        |                      ¦   «          d S #  t#          d	¦  «         |                      ¦   «          ‚ xY w)
NrW   rr   rs   r8  r-  r“   r�   r:  zError creating Tree View)Ú_init_parserr\   r   r]   r^   r_   r   rx   r  Ú_init_animationÚ_init_chartviewÚ_init_rulelabelry  rv  Ú_matrixÚ_resultsrz  Úprint)r;   r;  rí  r]   Úframe3Úframe2Úframe1s          r>   rl   zChartParserApp.__init__ö  s–  € à×Ò˜' 6Ñ*Ô*Ð*àˆŒ
ð	å™œˆDŒJØŒJ×Ò˜UÑ#Ô#Ð#ØŒJ�OŠO˜M¨4¬<Ñ8Ô8Ð8õ ˜4œ:Ñ&Ô&ˆFÝ˜4œ:Ñ&Ô&ˆFÝ˜4œ:Ñ&Ô&ˆFØ�KŠK˜X¨FˆKÑ3Ô3Ð3Ø�KŠK˜X¨CˆKÑ0Ô0Ð0Ø�KŠK˜X¨F¸1ˆKÑ=Ô=Ð=à×Ò˜TœZÑ(Ô(Ð(Ø× Ò Ñ"Ô"Ð"Ø× Ò  Ñ(Ô(Ð(Ø× Ò  Ñ(Ô(Ð(Ø×Ò˜vÑ&Ô&Ð&Ø×ÒÑ Ô Ð àˆDŒLØ ˆDŒMð ×ÒÑ!Ô!Ð!Ð!Ð!øð	ÝÐ,Ñ-Ô-Ð-Ø�LŠL‰NŒNˆNØøøøs   ŸE2F Æ&F9c                 óX   — | j         €d S | j                              ¦   «          d | _         d S r    r¡   ©r;   rì   s     r>   r_   zChartParserApp.destroy  s.   € ØŒ:ÐØˆFØŒ
×ÒÑÔÐØˆŒ
ˆ
ˆ
r@   c                 óJ   — t          ¦   «         rdS  | j        j        |i |¤Ž dS )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\   r�  r&  s      r>   r�  zChartParserApp.mainloop!  s5   € õ ‰9Œ9ð 	ØˆFØˆŒ
Ô˜TÐ, VÐ,Ð,Ð,Ð,Ð,r@   c                 óJ   — || _         || _        |                      ¦   «          d S r    )r2  Ú_tokensÚ_reset_parser)r;   r;  rí  s      r>   rð  zChartParserApp._init_parser0  s(   € ØˆŒØˆŒØ×ÒÑÔÐÐÐr@   c                 óZ  — t          | j        ¦  «        | _        | j                             | j        ¦  «         | j                             ¦   «         | _        t          ¦   «                              | j        | j        ¦  «        D ]}Œ| j         	                    ¦   «         | _
        d | _        d S r    )r#   r2  Ú_cpÚ
initializerþ  ri   rX   r!   rÞ  ÚstepÚ_cpstepr6  )r;   Ú	_new_edges     r>   rÿ  zChartParserApp._reset_parser5  sŠ   € Ý& t¤}Ñ5Ô5ˆŒØŒ×Ò˜DœLÑ)Ô)Ð)Ø”h—n’nÑ&Ô&ˆŒõ &™œ×-Ò-¨d¬k¸4¼=ÑIÔIð 	ð 	ˆIØð ”x—}’}‘”ˆŒð ˆŒˆˆr@   c                 óÌ  — t          t          ¦   «         d         ¬¦  «        | _        |                     d| j        ¦  «         t	          |¦  «        | _        | j                             | j                             d¦  «        ¦  «         t          dd| j                             ¦   «         ¬¦  «        | _	        t          d| j                             ¦   «         ¬¦  «        | _
        d S )	Nr2   r.  r/  r,  r7   r9   r)  r-  )r   r   r2  r3  r   Ú_sizerÈ   Úcgetr  r0  r1  r�   s     r>   r  zChartParserApp._init_fontsD  s¬   € å¥&¡(¤(¨6Ô"2Ð3Ñ3Ô3ˆŒØ�Š˜ ¤Ñ/Ô/Ð/õ ˜D‘\”\ˆŒ
ØŒ
�Š�t”}×)Ò)¨&Ñ1Ô1Ñ2Ô2Ð2å [¸ÀdÄjÇnÂnÑFVÔFVÐWÑWÔWˆŒÝ °4´:·>²>Ñ3CÔ3CÐDÑDÔDˆŒ
ˆ
ˆ
r@   c                 óà   — t          | j        ¦  «        | _        | j                             d¦  «         t          | j        ¦  «        | _        | j                             d¦  «         d| _        d S )Nr�   r‚   r   )r   r\   Ú_steprÈ   Ú_animateÚ
_animatingrÕ   s    r>   rñ  zChartParserApp._init_animationP  s]   € å˜DœJÑ'Ô'ˆŒ
ØŒ
�Š�qÑÔÐõ ˜tœzÑ*Ô*ˆŒØŒ×Ò˜!ÑÔÐð ˆŒˆˆr@   c                 ó€   — t          | j        |dd¬¦  «        | _        | j                             d| j        ¦  «         d S )Nr�   )r  r  r–   )rþ  rX   Ú_cvr�   Ú_click_cv_edge)r;   rh   s     r>   rò  zChartParserApp._init_chartview\  s=   € Ý˜Tœ[¨&¸AÈQÐOÑOÔOˆŒØŒ×Ò˜h¨Ô(;Ñ<Ô<Ð<Ð<Ð<r@   c                 óD  — d}t          ||| j        ¬¦  «        | _        t          |ddd| j        ¬¦  «        | _        | j                             d¬¦  «         | j                             d¬¦  «         t          || j        d	¬
¦  «        }|                     d¬¦  «         d S )NzLast edge generated by:)rp   r2   r   r«  rº  )rˆ   r€   r  r2   r0  r/  ÚStep)Úvariablerp   r.  )r   r0  Ú_rulelabel1Ú_rulelabel2rx   r   r
  )r;   rh   Úruletxtr  s       r>   ró  zChartParserApp._init_rulelabel`  sª   € Ø+ˆå  ¨g¸D¼NÐKÑKÔKˆÔÝ Ø˜" X°cÀÄð
ñ 
ô 
ˆÔð 	Ô×Ò 6ÐÑ*Ô*Ð*ØÔ×Ò 6ÐÑ*Ô*Ð*Ý˜6¨D¬J¸VÐDÑDÔDˆØ�	Š	�wˆ	ÑÔÐÐÐr@   c                 ó¦  — t          |¦  «        }t          |¦  «        }|                     dd¬¦  «         |                     dd¬¦  «         t          |ddd| j        ¬	¦  «                             d
¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         t          |d¬¦  «                             d¬¦  «         t          |ddd| j	        ¬	¦  «                             d¬¦  «         t          |d¬¦  «                             d¬¦  «         t          |ddd| j
        ¬	¦  «                             d¬¦  «         t          |d¬¦  «                             d¬¦  «         t          |ddd| j        ¬	¦  «                             d¬¦  «         d S )Nrr   r-  r8  rƒ   rs   zReset
Parserz#90c0d0r½   )rp   rŠ   r.   rq   r.  r/  zTop Down
Strategyr0  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>   ry  zChartParserApp._init_buttonsl  s®  € Ý�v‘”ˆÝ�v‘”ˆØ�Š˜¨ˆÑ,Ô,Ð,Ø�Š˜ VˆÑ,Ô,Ð,åØØ Ø ØØ”Jð	
ñ 	
ô 	
÷ Š$�Gˆ$Ñ
Ô
Ð
õ
 	ØØ%Ø ØØÔ*ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØ&Ø ØØÔ+ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØ2Ø ØØÔ6ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
åØØ&Ø ØØÔ&ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØ)Ø ØØÔ)ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
Ýˆf˜BÐÑÔ×$Ò$¨&Ð$Ñ1Ô1Ð1åØØ*Ø ØØ”Nð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
Ýˆf˜BÐÑÔ×$Ò$¨&Ð$Ñ1Ô1Ð1åØØ6Ø ØØÔ-ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
Ýˆf˜BÐÑÔ×$Ò$¨&Ð$Ñ1Ô1Ð1åØØ$Ø ØØÔ$ð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
Ð
Ð
r@   c                 óF  — | j                              d| j        j        ¦  «         | j                              d| j        j        ¦  «         | j                              d| j        j        ¦  «         | j                              d| j        j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j	        ¦  «         | j                              d	| j
        ¦  «         | j                              d
| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        fd„¦  «         | j                              d| j        fd„¦  «         | j                              d| j        fd„¦  «         | j                              d| j        fd„¦  «         d S )Nz<Up>z<Down>z<Prior>z<Next>rW   rm  z<F1>z<Control-s>rÃ  z<Control-r>r!  r&  r  z<space>z<Control-g>z<Control-t>rd  c                 ó,   — |                      d¦  «        S rÜ   ©rÈ   ©r£   Úas     r>   ú<lambda>z/ChartParserApp._init_bindings.<locals>.<lambda>Ó  ó   € ¸¿º¸a¹¼€ r@   r­  c                 ó,   — |                      d¦  «        S )Nr|   r"  r#  s     r>   r%  z/ChartParserApp._init_bindings.<locals>.<lambda>Ô  r&  r@   r�  c                 ó,   — |                      d¦  «        S )Nr‚   r"  r#  s     r>   r%  z/ChartParserApp._init_bindings.<locals>.<lambda>Õ  r&  r@   rm  c                 óR   — |                      |                     ¦   «          ¦  «        S r    )rÈ   r  )r£   rm  s     r>   r%  z/ChartParserApp._init_bindings.<locals>.<lambda>Ø  s   € °Q·U²U¸q¿uºu¹w¼w¸;Ñ5GÔ5G€ r@   )r\   r^   r  rB  rE  rI  rK  r_   ÚhelpÚ
save_chartr{  r  r  r  r  Ú_stop_animationÚedit_grammarÚedit_sentencer  r
  rÕ   s    r>   rz  zChartParserApp._init_bindings½  s"  € ØŒ
�Š˜ ¤Ô 2Ñ3Ô3Ð3ØŒ
�Š˜ $¤(Ô"6Ñ7Ô7Ð7ØŒ
�Š˜	 4¤8Ô#3Ñ4Ô4Ð4ØŒ
�Š˜ $¤(Ô"4Ñ5Ô5Ð5ØŒ
�Š˜ t¤|Ñ4Ô4Ð4ØŒ
�Š˜ t¤|Ñ4Ô4Ð4ØŒ
�Š˜ ¤	Ñ*Ô*Ð*àŒ
�Š˜ t¤Ñ7Ô7Ð7ØŒ
�Š˜ t¤Ñ7Ô7Ð7ØŒ
�Š˜ t¤zÑ2Ô2Ð2àŒ
�Š˜˜TÔ3Ñ4Ô4Ð4ØŒ
�Š˜˜TÔ4Ñ5Ô5Ð5ØŒ
�Š˜˜TÔ?Ñ@Ô@Ð@ØŒ
�Š˜	 4Ô#7Ñ8Ô8Ð8àŒ
�Š˜ tÔ'8Ñ9Ô9Ð9ØŒ
�Š˜ tÔ'9Ñ:Ô:Ð:ð 	Œ
�Š˜¨¬Ð@Ð@Ð@ÑAÔAÐAØŒ
�Š˜¨¬Ð@Ð@Ð@ÑAÔAÐAØŒ
�Š˜¨¬Ð@Ð@Ð@ÑAÔAÐAð 	Œ
�Š˜¨¬ÐGÐGÐGÑHÔHÐHÐHÐHr@   c                 ój
  — t          | j        ¦  «        }t          |d¬¦  «        }|                     dd| j        d¬¦  «         |                     dd| j        d¬¦  «         |                     dd| j        d	¬¦  «         |                     ¦   «          |                     d
| j        ¬¦  «         |                     d| j        ¬¦  «         |                     ¦   «          |                     dd| j	        d¬¦  «         | 
                    dd|¬¦  «         t          |d¬¦  «        }|                     dd| j        d¬¦  «         |                     dd| j        d¬¦  «         | 
                    dd|¬¦  «         t          |d¬¦  «        }|                     dd| j        ¬¦  «         |                     dd| j        ¬¦  «         | 
                    dd|¬¦  «         t          |d¬¦  «        }|                     dd| j        d¬¦  «         |                     dd| j        d ¬¦  «         |                     d!d| j        d"¬¦  «         |                     ¦   «          |                     d#| j        ¬¦  «         |                     d$| j        ¬¦  «         |                     d%| j        ¬¦  «         |                     d&| j        ¬¦  «         |                     d'| j        ¬¦  «         | 
                    d(d|¬¦  «         t          |d¬¦  «        }|                     d)d| j        d*¬+¦  «         |                     ¦   «          |                     d,d| j        d¬-¦  «         |                     d.d| j        dd/¬0¦  «         |                     d1d| j        d2d3¬0¦  «         |                     d4d| j        d5d6¬0¦  «         | 
                    d7d|¬¦  «         t          |d¬¦  «        }|                     d8| j        dd9| j        ¬:¦  «         |                     d;| j        dd<| j        ¬:¦  «         |                     d=| j        dd>| j        ¬:¦  «         |                     d?| j        dd@| j        ¬:¦  «         |                     dA| j        ddB| j        ¬:¦  «         | 
                    dCd|¬¦  «         t          |d¬¦  «        }|                     dDd| j        ¬¦  «         |                     dEd| j        dF¬¦  «         | 
                    dGd|¬¦  «         | j                             |¬H¦  «         d S )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ÚEditrU   r{  )rO  r3   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  rm  )rO  r3   r  r‡  zNo Animation)rO  r3   r  ÚvaluezSlow Animationrd  )rO  r3   r  r5  r‡  zNormal Animationr|   r­  zFast Animationr‚   r�  ÚAnimateÚTinyrº   )rO  r  r3   r5  rq   ÚSmallrÿ  ÚMediumé   ÚLargeé   ÚHugeé   ÚZoomÚAboutÚInstructionsÚF1ÚHelpr—  ) r	   r\   r˜  r+  r{  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>   rv  zChartParserApp._init_menubarÚ  s�  € Ý�t”zÑ"Ô"ˆå˜¨Ð+Ñ+Ô+ˆØ×ÒØØØ”OØ ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØØØ”OØ ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØ¨1°d´jÈhð 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×Ò >¸4Ô;LÐÑMÔMÐMØ×Ò >¸4Ô;LÐÑMÔMÐMØ×ÒÑ Ô Ð Ø×ÒØ A¨t¬|Èð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×ÒØ ØØÔ%Ø ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØØØÔ&Ø ð	 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×ÒØ ¨A°tÔ7Gð 	ñ 	
ô 	
ð 	
ð 	×Ò 9¸À4ÔCTÐÑUÔUÐUØ×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×ÒØ%ØØÔ*Øð	 	ñ 	
ô 	
ð 	
ð 	×ÒØ&ØØÔ+Øð	 	ñ 	
ô 	
ð 	
ð 	×ÒØ2ØØÔ6Øð	 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×ÒÐ#3¸T¼^ÐÑLÔLÐLØ×ÒØ.¸Ô8Qð 	ñ 	
ô 	
ð 	
ð 	×ÒÐ#7ÀÔASÐÑTÔTÐTØ×ÒØ)°4Ô3Hð 	ñ 	
ô 	
ð 	
ð 	×ÒÐ#5¸tÔ?OÐÑPÔPÐPØ×Ò '°Q¸XÐÑFÔFÐFå˜7¨AÐ.Ñ.Ô.ˆØ×#Ò#Ø A°´
Èð 	$ñ 	
ô 	
ð 	
ð 	×!Ò!Ñ#Ô#Ð#Ø×#Ò#Ø ¨A¸¼ÈQð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø"ØØ”]ØØð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø$ØØ”]ØØð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø"ØØ”]ØØð 	$ñ 	
ô 	
ð 	
ð 	×Ò )°q¸{ÐÑKÔKÐKå˜¨Ð+Ñ+Ô+ˆØ× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×Ò 7°aÀÄÐÑLÔLÐLØ×ÒØ ¨A°t´yÈdð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEàŒ
×Ò˜wÐÑ'Ô'Ð'Ð'Ð'r@   c                 ó|   — || j         k    r|                      |¦  «         d S | j                             ¦   «          d S r    )r6  Ú_select_edger  r½  rø   s     r>   r  zChartParserApp._click_cv_edge}  sE   € Ø�4”?Ò"Ð"à×Ò˜dÑ#Ô#Ð#Ð#Ð#ð ŒH×ÒÑ!Ô!Ð!Ð!Ð!r@   c                 ód   — |                       |¦  «         | j                             |¦  «         d S r    )rS  r  rù   rø   s     r>   Ú_select_matrix_edgez"ChartParserApp._select_matrix_edge‡  s2   € Ø×Ò˜$ÑÔÐØŒ×Ò˜4Ñ Ô Ð Ð Ð r@   c                 ó  — || _         | j                             |d¦  «         | j                             |¦  «         | j        r| j                             |¦  «         | j        r| j                             |¦  «         d S d S )Nz#f00)r6  r  r  r  rô  rù   rø   s     r>   rS  zChartParserApp._select_edge‹  s‡   € ØˆŒàŒ×Ò˜t VÑ,Ô,Ð,ØŒ×Ò˜4Ñ Ô Ð àŒ<ð 	-ØŒL×&Ò& tÑ,Ô,Ð,ØŒ<ð 	)ØŒL×"Ò" 4Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)r@   c                 ó¼   — d | _         | j                             ¦   «          | j                             ¦   «          | j        r| j                             ¦   «          d S d S r    )r6  r  rÿ   rZ  rô  rÕ   s    r>   Ú_deselect_edgezChartParserApp._deselect_edge–  s_   € ØˆŒàŒ×ÒÑÔÐØŒ×ÒÑÔÐàŒ<ð 	'ØŒL×$Ò$Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r@   c                 ó8  — |                       | j                             ¦   «         ¦  «         | j                             ¦   «          | j                             |¦  «         | j                             |d¦  «         | j                             |¦  «         | j        r| j                             ¦   «          | j        r| j                             |¦  «         | j        r| j                             |¦  «         | j	        r| j	                             |¦  «         d S d S )Nr‘  )
Ú_display_ruler  Úcurrent_chartruler  rÎ   r  r  rù   rô  rõ  rø   s     r>   Ú_show_new_edgezChartParserApp._show_new_edgeŸ  s  € Ø×Ò˜4œ8×5Ò5Ñ7Ô7Ñ8Ô8Ð8àŒ�ŠÑÔÐØŒ×Ò˜4Ñ Ô Ð ØŒ×Ò˜t VÑ,Ô,Ð,ØŒ×Ò˜4Ñ Ô Ð àŒ<ð 	"ØŒL×ÒÑ!Ô!Ð!ØŒ<ð 	-ØŒL×&Ò& tÑ,Ô,Ð,ØŒ<ð 	)ØŒL×"Ò" 4Ñ(Ô(Ð(àŒ=ð 	'ØŒM× Ò  Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r@   c                 óì   — d| _         	 t          | j        dt          pd                     ¦   «         dd¬¦  «         d S #  t          | j        dt          pd                     ¦   «         d¬¦  «         Y d S xY w)Nr   zHelp: Chart Parser Applicationrj  éK   Úfixed)rˆ   r2   r
  )r  r   r\   r)  Ústripr¢   s     r>   r*  zChartParserApp.helpµ  s�   € ØˆŒð	ÝØ”
Ø0Ý�˜B×%Ò%Ñ'Ô'ØØðñ ô ð ð ð øð	ÝØ”
Ø0Ý�˜B×%Ò%Ñ'Ô'Øð	ñ ô ð ð ð ð øøøs	   ‰2= ½3A3c                 ó*   — d}t          d|¦  «         d S )Nz5NLTK Chart Parser Application
Written by Edward LoperzAbout: Chart Parser Application)r   )r;   r£   ÚABOUTs      r>   rK  zChartParserApp.aboutÈ  s   € ØMˆÝÐ2°EÑ:Ô:Ð:Ð:Ð:r@   rË  rÍ  ))zPlaintext grammar fileú.cfgrË  rÍ  c                 ó  — t          | j        d¬¦  «        }|sdS 	 t          |d¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   || _        | j                             |¦  «         | j        r| j         	                    |¦  «         | j        r| j         
                    ¦   «          | j        r| j         	                    |¦  «         | j         	                    |¦  «         dS # t          $ r}‚ d}~ww xY w)zLoad a chart from a pickle filerÌ  rÏ  NrÞ  )r   rÕ  rÖ  r×  rß  rX   r  rÎ   rô  r©   ró   rõ  r  rÙ  r   )r;   rì   r~  rå  ri   r£   s         r>   r{  zChartParserApp.load_chart×  s_  € å"ØÔ+¸ið
ñ 
ô 
ˆð ð 	ØˆFð	SÝ�h Ñ%Ô%ð ,¨Ýœ FÑ+Ô+�ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,àˆDŒKØŒH�OŠO˜EÑ"Ô"Ð"ØŒ|ð .Ø”×&Ò& uÑ-Ô-Ð-ØŒ|ð -Ø”×*Ò*Ñ,Ô,Ð,ØŒ}ð /Ø”×'Ò'¨Ñ.Ô.Ð.ØŒH×Ò˜uÑ%Ô%Ð%Ð%Ð%øÝð 	Sð 	Sð 	SØøøøøð	Søøøs;   œC7 ¬AÁC7 ÁAÁC7 ÁAÁB C7 Ã7
DÄDÄDc                 óè   — t          | j        d¬¦  «        }|sdS 	 t          |d¦  «        5 }t          j        | j        |¦  «         ddd¦  «         dS # 1 swxY w Y   dS # 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î  sÞ   € å$ØÔ+¸ið
ñ 
ô 
ˆð ð 	ØˆFð	RÝ�h Ñ%Ô%ð 2¨Ý”˜DœK¨Ñ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2øåð 	Rð 	Rð 	RØøøøøð	Røøøs:   œA! ¬AÁA! ÁAÁA! ÁAÁA! Á!
A1Á+A,Á,A1c                 óú  — t          | j        d¬¦  «        }|sdS 	 |                     d¦  «        r=t          |d¦  «        5 }t	          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   nMt          |¦  «        5 }t          j        |                     ¦   «         ¦  «        }ddd¦  «         n# 1 swxY w Y   |  	                    |¦  «         dS # t          $ r}t          dd|z  ¦  «         Y d}~dS d}~ww xY w)z!Load a grammar from a pickle filerc  rÏ  NrÌ  rÞ  zError Loading GrammarúUnable to open file: %r)r   ÚGRAMMAR_FILE_TYPESrã  rÖ  r×  rß  r   Ú
fromstringÚreadr_  rÙ  r   )r;   rì   r~  rå  r;  r£   s         r>   rE  zChartParserApp.load_grammarü  s˜  € å"ØÔ-Àð
ñ 
ô 
ˆð ð 	ØˆFð		UØ× Ò  Ñ+Ô+ð <Ý˜( DÑ)Ô)ð 2¨VÝ$œk¨&Ñ1Ô1�Gð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2øõ ˜(‘^”^ð < vÝ!œn¨V¯[ª[©]¬]Ñ;Ô;�Gð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à×Ò˜WÑ%Ô%Ð%Ð%Ð%øÝð 	Uð 	Uð 	UÝÐ-Ð/HÈ8Ñ/SÑTÔTÐTÐTÐTÐTÐTÐTÐTøøøøð	Uøøøs_   œ%C ÁA"ÁC Á"A&Á&C Á)A&Á*C Á='B0Â$C Â0B4Â4C Â7B4Â8C Ã
C:ÃC5Ã5C:c                 óˆ  ‡ — t          ‰ j        d¬¦  «        }|sd S 	 |                     d¦  «        rLt          |d¦  «        5 }t	          j        ‰ j        ‰ j        f|¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          |d¦  «        5 }‰ j         	                    ¦   «         }ˆ fd„|D ¦   «         }ˆ fd„|D ¦   «         }|D ]}| 
                    d|z  ¦  «         Œ|D ]}| 
                    d|z  ¦  «         Œ	 d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r}t          d	d
|z  ¦  «         Y d }~d S d }~ww xY w)Nrc  rÏ  rÌ  rÒ  rº  c                 ór   •— g | ]3}|                      ¦   «         ‰j                             ¦   «         k    ¯1|‘Œ4S rR   ©rC   r2  rÀ   ©r¯   Úpr;   s     €r>   r°   z/ChartParserApp.save_grammar.<locals>.<listcomp>	  s9   ø€ ÐRÐRÐR 1°·²±´¸D¼M×<OÒ<OÑ<QÔ<QÒ1QÐ1Q˜QÐ1QÐ1QÐ1Qr@   c                 ór   •— g | ]3}|                      ¦   «         ‰j                             ¦   «         k    ¯1|‘Œ4S rR   rm  rn  s     €r>   r°   z/ChartParserApp.save_grammar.<locals>.<listcomp>	  s9   ø€ ÐQÐQÐQ !°·²±´¸4¼=×;NÒ;NÑ;PÔ;PÒ0PÐ0P˜AÐ0PÐ0PÐ0Pr@   z%s
zError Saving Grammarrg  )r   rh  rã  rÖ  r×  rØ  rX   rþ  r2  ÚproductionsÚwriterÙ  r   )	r;   rì   r~  rÛ  ÚprodsrÀ   ÚrestÚprodr£   s	   `        r>   rD  zChartParserApp.save_grammar	  sD  ø€ Ý$ØÔ-Àð
ñ 
ô 
ˆð ð 	ØˆFð	TØ× Ò  Ñ+Ô+ð 5Ý˜( DÑ)Ô)ð F¨WÝ”K ¤¨d¬lÐ ;¸WÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð Fð Fõ ˜( CÑ(Ô(ð 5¨GØ œM×5Ò5Ñ7Ô7�EØRÐRÐRÐR¨ÐRÑRÔR�EØQÐQÐQÐQ uÐQÑQÔQ�DØ %ð 5ð 5˜ØŸš f¨t¡mÑ4Ô4Ð4Ð4Ø $ð 5ð 5˜ØŸš f¨t¡mÑ4Ô4Ð4Ð4ð5ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5øõ ð 	Tð 	Tð 	TÝÐ,Ð.GÈ(Ñ.RÑSÔSÐSÐSÐSÐSÐSÐSÐSøøøøð	Tøøøsf   �%D Á"A1Á$D Á1A5Á5D Á8A5Á9D Á>D ÂA0DÃ?D ÄDÄD ÄDÄD Ä
EÄ#D<Ä<Ec                 óV  — d| _         |                      ¦   «          | j                             | j        ¦  «         | j        r| j                             | j        ¦  «         | j        r| j                             ¦   «          | j        r!| j                             | j        ¦  «         d S d S r§   )	r  rÿ  r  rÎ   rX   rô  r©   ró   rõ  rû  s     r>   r  zChartParserApp.reset$	  s£   € ØˆŒØ×ÒÑÔÐØŒ�Š˜œÑ$Ô$Ð$ØŒ<ð 	0ØŒL×"Ò" 4¤;Ñ/Ô/Ð/ØŒ<ð 	)ØŒL×&Ò&Ñ(Ô(Ð(ØŒ=ð 	1ØŒM×#Ò# D¤KÑ0Ô0Ð0Ð0Ð0ð	1ð 	1r@   c                 óF   — t          | j        | j        | j        ¦  «         d S r    )r   r\   r2  r_  r¢   s     r>   r-  zChartParserApp.edit_grammar3	  s!   € Ý�$”*˜dœm¨TÔ-=Ñ>Ô>Ð>Ð>Ð>r@   c                 óŽ   — || _         | j                             |¦  «         | j        r| j                             |¦  «         d S d S r    )r2  r  r_  rõ  r^  s     r>   r_  zChartParserApp.set_grammar6	  sO   € ØˆŒØŒ×Ò˜WÑ%Ô%Ð%ØŒ=ð 	/ØŒM×%Ò% gÑ.Ô.Ð.Ð.Ð.ð	/ð 	/r@   c                 ó|   — d                      | j        ¦  «        }d}d}t          | j        ||| j        |¦  «         d S )NrV  r0  zEnter a new sentence to parse.)ri  rþ  r   r\   Úset_sentence)r;   r£   Úsentencer]   Úinstrs        r>   r.  zChartParserApp.edit_sentence<	  s@   € Ø—8’8˜DœLÑ)Ô)ˆØˆØ0ˆÝ�D”J ¨%°Ô1BÀEÑJÔJÐJÐJÐJr@   c                 óz   — t          |                     ¦   «         ¦  «        | _        |                      ¦   «          d S r    )rÇ   Úsplitrþ  r  )r;   r{  s     r>   rz  zChartParserApp.set_sentenceB	  s,   € Ý˜HŸNšNÑ,Ô,Ñ-Ô-ˆŒØ�
Š
‰Œˆˆˆr@   c                 óÄ   — | j         �| j                              ¦   «          t          | j        | j        ¦  «        | _         | j                              d| j        ¦  «         d S r•   )rô  r_   rT   r\   rX   r�   rU  r¢   s     r>   rF  zChartParserApp.view_matrixJ	  sT   € ØŒ<Ð#ØŒL× Ò Ñ"Ô"Ð"Ý& t¤z°4´;Ñ?Ô?ˆŒØŒ×!Ò! (¨DÔ,DÑEÔEÐEÐEÐEr@   c                 ó�   — | j         �| j                              ¦   «          t          | j        | j        | j        ¦  «        | _         d S r    )rõ  r_   r+  r\   rX   r2  r¢   s     r>   rG  zChartParserApp.view_resultsP	  s;   € ØŒ=Ð$ØŒM×!Ò!Ñ#Ô#Ð#Ý(¨¬°T´[À$Ä-ÑPÔPˆŒˆˆr@   c                 ól   — d| _         |                      | j                             ¦   «         ¦  «         d S r§   )r  rU  r  r  rÕ   s    r>   rJ  zChartParserApp.resizeY	  s/   € ØˆŒØ×Ò˜4œ:Ÿ>š>Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,r@   c                 ó0  — | j                              |¦  «         | j                             t	          |¦  «         ¬¦  «         | j                             t	          |¦  «         ¬¦  «         | j                             t	          |¦  «         ¬¦  «         d S rR  )r  rU  r1  rO  rS  r0  r2  rT  s     r>   rU  zChartParserApp.set_font_size]	  s�   € ØŒ×Ò˜tÑ$Ô$Ð$ØŒ
×Ò¥3 t¡9¤9 *ÐÑ-Ô-Ð-ØŒ× Ò ¥s¨4¡y¤y jÐ Ñ1Ô1Ð1ØŒ×Ò¥c¨$¡i¤i ZÐÑ0Ô0Ð0Ð0Ð0r@   c                 óN   — t          | j                             ¦   «         ¦  «        S r    )rS  r  r  rÕ   s    r>   rW  zChartParserApp.get_font_sizec	  s   € Ý�4”:—>’>Ñ#Ô#Ñ$Ô$Ð$r@   Nc                 ó&  — | j         r	d| _         d S |                      d ¦  «         | j                             ¦   «         r™| j        }|�`|�^| j                              ||¦  «        g¦  «         |                      ¦   «         }|€"| j         	                    ¦   «          d | _        d S d S | j                             |¦  «         |                      ¦   «          d S | j                             |¦  «         | j
                             ¦   «         rd| _         |                      ¦   «          d S | j        D ]}|€ nŒ| j                             ¦   «          | j        r| j                             ¦   «          | j        r| j                             ¦   «          d S d S )Nr   r�   )r  rZ  r
  r  r6  r  Úset_strategyÚ_apply_strategyr  rÿ   r  Ú_animate_strategyr  rÎ   rô  rõ  )r;   ÚstrategyÚedge_strategyÚ	selectionÚnewedger™   s         r>   Úapply_strategyzChartParserApp.apply_strategyj	  s²  € àŒ?ð 	ØˆDŒOØˆFð 	×Ò˜4Ñ Ô Ð ð Œ:�>Š>ÑÔð 	+ØœˆIØÐ%¨MÐ,Eà”×%Ò% } }°YÑ'?Ô'?Ð&@ÑAÔAÐAØ×.Ò.Ñ0Ô0�ð �?Ø”H×(Ò(Ñ*Ô*Ð*Ø&*�D”O�O�Oð #�?ð ”×%Ò% hÑ/Ô/Ð/Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&ð ŒH×!Ò! (Ñ+Ô+Ð+ØŒ}× Ò Ñ"Ô"ð +Ø"#�”Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(à œLð ð �DØ�|Ø˜ð $à”—’Ñ!Ô!Ð!Ø”<ð *Ø”L×'Ò'Ñ)Ô)Ð)Ø”=ð +Ø”M×(Ò(Ñ*Ô*Ð*Ð*Ð*ð+ð +r@   c                 ó   — d| _         d S r§   )r  r¢   s     r>   r,  zChartParserApp._stop_animation’	  s   € ØˆŒˆˆr@   r�   c                 ó   — | j         dk    rd S |                      ¦   «         �Ü| j                             ¦   «         dk    s| j                             ¦   «         dk    rd S | j                             ¦   «         dk    r"| j                             d| j        ¦  «         d S | j                             ¦   «         dk    r"| j                             d| j        ¦  «         d S | j                             d| j        ¦  «         d S d S )Nr   r�   i¸  r|   iè  r‘   )r  r†  r  r  r
  r\   Úafterr‡  )r;   Úspeeds     r>   r‡  z ChartParserApp._animate_strategy•	  s÷   € ØŒ?˜aÒÐØˆFØ×ÒÑ!Ô!Ð-ØŒ}× Ò Ñ"Ô" aÒ'Ð'¨4¬:¯>ª>Ñ+;Ô+;¸qÒ+@Ð+@Ø�ØŒ}× Ò Ñ"Ô" aÒ'Ð'Ø”
× Ò   tÔ'=Ñ>Ô>Ð>Ð>Ð>Ø”×"Ò"Ñ$Ô$¨Ò)Ð)Ø”
× Ò   tÔ'=Ñ>Ô>Ð>Ð>Ð>à”
× Ò   TÔ%;Ñ<Ô<Ð<Ð<Ð<ð .Ð-r@   c                 ó\   — t          | j        ¦  «        }|�|                      |¦  «         |S r    )Únextr  r\  )r;   Únew_edges     r>   r†  zChartParserApp._apply_strategy¢	  s0   € Ý˜œÑ%Ô%ˆàÐØ×Ò Ñ)Ô)Ð)Øˆr@   c                 ó†   — |€d| j         d<   d S t          |¦  «        }|| j         d<   | j                             ¦   «         }d S )Nrj  rp   )r  rh  r  rW  )r;   ÚrulerÈ  r,  s       r>   rZ  zChartParserApp._display_rule©	  sI   € Øˆ<Ø')ˆDÔ˜VÑ$Ð$Ð$å�t‘9”9ˆDØ'+ˆDÔ˜VÑ$Ø”8×)Ò)Ñ+Ô+ˆDˆDˆDr@   c                 ó<   — |                       | j        d ¦  «         d S r    )rŒ  Ú_TD_INITr¢   s     r>   r  zChartParserApp.top_down_initÂ	  s    € Ø×Ò˜DœM¨4Ñ0Ô0Ð0Ð0Ð0r@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_TD_PREDICTrã  r¢   s     r>   r  zChartParserApp.top_down_predictÅ	  s"   € Ø×Ò˜DÔ,Õ.DÑEÔEÐEÐEÐEr@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_BU_RULErç  r¢   s     r>   r  zChartParserApp.bottom_upÈ	  s!   € Ø×Ò˜DœMÕ+;Ñ<Ô<Ð<Ð<Ð<r@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_BU_LC_RULEré  r¢   s     r>   r  z#ChartParserApp.bottom_up_leftcornerË	  s"   € Ø×Ò˜DÔ,Õ.HÑIÔIÐIÐIÐIr@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_FUNDAMENTALrë  r¢   s     r>   r  zChartParserApp.fundamentalÎ	  s"   € Ø×Ò˜DÔ-Õ/BÑCÔCÐCÐCÐCr@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_BU_STRATEGYrç  r¢   s     r>   r  z!ChartParserApp.bottom_up_strategyÑ	  s"   € Ø×Ò˜DÔ-Õ/?Ñ@Ô@Ð@Ð@Ð@r@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_BU_LC_STRATEGYré  r¢   s     r>   r  z,ChartParserApp.bottom_up_leftcorner_strategyÔ	  s"   € Ø×Ò˜DÔ0Õ2LÑMÔMÐMÐMÐMr@   c                 óF   — |                       | j        t          ¦  «         d S r    )rŒ  Ú_TD_STRATEGYrã  r¢   s     r>   r  z ChartParserApp.top_down_strategy×	  s"   € Ø×Ò˜DÔ-Õ/EÑFÔFÐFÐFÐFr@   )rî  r    )r�   )@rN   rO   rP   rl   r_   r�  rð  rÿ  r  rñ  rò  ró  ry  rz  rv  r  rU  rS  rX  r\  r*  rK  rÕ  rh  r{  r+  rE  rD  r  r-  r_  r.  rz  rF  rG  rJ  rU  rW  rŒ  r,  r‡  r†  rZ  r$   r—  r%   r™  r   r›  r   r�  r"   rŸ  r¥  r¡  r£  r  r  r  r  r  r  r  r  rR   r@   r>   rí  rí  õ  s©  € € € € € ð#ð #ð #ð #ðJð ð ð	-ð 	-ð 	-ðð ð ð
ð ð ð
Eð 
Eð 
Eð
ð 
ð 
ð=ð =ð =ð
 ð 
 ð 
 ðOð Oð OðbIð Ið Ið:](ð ](ð ](ðF"ð "ð "ð!ð !ð !ð	)ð 	)ð 	)ð'ð 'ð 'ð'ð 'ð 'ð,ð ð ð&;ð ;ð ;ð 3Ð4FÐGÐðð ð ÐðSð Sð Sð.Rð Rð RðUð Uð Uð$Tð Tð Tð,	1ð 	1ð 	1ð?ð ?ð ?ð/ð /ð /ðKð Kð Kðð ð ðFð Fð FðQð Qð Qð-ð -ð -ð1ð 1ð 1ð%ð %ð %ð&+ð &+ð &+ð &+ðPð ð ð=ð =ð =ð =ðð ð ð,ð ,ð ,ð  �Ñ!Ô!Ð"€HØ%Ð%Ñ'Ô'Ð(€KØ#Ð#Ñ%Ô%Ð&€HØ-Ð-Ñ/Ô/Ð0€KØ-Ð-Ñ/Ô/Ð0€Lð ˜kÑ)¨LÑ8€LØ˜lÑ*€LØ! LÑ0€Oð1ð 1ð 1ðFð Fð Fð=ð =ð =ðJð Jð JðDð Dð DðAð Að AðNð Nð NðGð Gð Gð Gð Gr@   rí  c                  óª  — t          j        d¦  «        } d}d}t          |                     ¦   «         ¦  «        }t	          d¦  «         |                      ¦   «         D ]#}t	          dt          |¦  «        dz   f¦  «         Œ$t	          d¦  «         t	          d|z  ¦  «         t	          d	¦  «         t          | |¦  «                             ¦   «          d S )
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   ri  rÇ   r~  rö  rq  r  rí  r�  )r;  Úsentrí  r•  s       r>   Úapprª  Û	  sÒ   € ÝŒnð	ñô €Gð  8€DØ+€DÝ�$—*’*‘,”,ÑÔ€Få	ˆ,ÑÔÐØ×#Ò#Ñ%Ô%ð *ð *ˆÝˆv•t˜D‘z”z CÑ'Ð(Ñ)Ô)Ð)Ð)Ý	ˆ#�J„J€JÝ	ˆ-˜&Ñ
 Ñ!Ô!Ð!Ý	Ð
8Ñ9Ô9Ð9Ý�7˜FÑ#Ô#×,Ò,Ñ.Ô.Ð.Ð.Ð.r@   Ú__main__rª  )Br)  Úos.pathrà  r×  Útkinterr   r   r   r   r   r   r	   r
   r   r   Útkinter.filedialogr   r   Útkinter.fontr   Útkinter.messageboxr   r   Ú	nltk.drawr   r   r   Únltk.draw.utilr   r   r   r   r   r   Únltk.grammarr   r   Únltk.parse.chartr   r   r   r    r!   r"   r#   r$   r%   r&   Ú	nltk.treer'   Ú	nltk.utilr(   r*   rT   r+  rc  rþ  rÖ  rã  rç  ré  rë  rí  rª  rN   Ú__all__rR   r@   r>   ú<module>r¸     sF  ððð ð< €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ˆ}ñ ô ð ð@I)ð I)ð I)ð I)ð I)ñ I)ô I)ð I)ðbL)ð L)ð L)ð L)ð L)ñ L)ô L)ð L)ðhJTð JTð JTð JTð JTñ JTô JTð JTðdNð Nð Nð Nð Nñ Nô Nð Nðp#ð #ð #ð #ð #ñ #ô #ð #ð,	ð 	ð 	ð 	ð 	˜XÐ'9ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�xÐ!4ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	 Ð+Eñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜(Ð$=ñ 	ô 	ð 	ðcGð cGð cGð cGð cGñ cGô cGð cGðL/ð /ð /ð< ˆzÒÐØ€C�E„E€Eð ˆ'€€€r@   