
`]c           @   s  d  Z  d d l m 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 d d l 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	 l$ m% Z% d d
 l& m' Z' m( Z( d d l) m* Z* d d l+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 m1 Z1 d d l2 m3 Z3 m4 Z4 m5 Z5 d e- f d     YZ6 d e7 f d     YZ8 d e7 f d     YZ9 d e7 f d     YZ: d e7 f d     YZ; d e7 f d     YZ< d e< e" f d     YZ= d e< e f d     YZ> d e< e f d     YZ? d  e< e f d!     YZ@ d" e7 f d#     YZA d$   ZB eC d% k reB   n  d& g ZD d S('   s  
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.
i(   t   divisionN(
   t   Buttont   Canvast   Checkbuttont   Framet   IntVart   Labelt   Menut	   Scrollbart   Tkt   Toplevel(   t   Font(   t	   showerrort   showinfo(   t   asksaveasfilenamet   askopenfilename(
   t   BottomUpPredictCombineRulet   BottomUpPredictRulet   Chartt   LeafEdget   LeafInitRulet   SingleEdgeFundamentalRulet   SteppingChartParsert   TopDownInitRulet   TopDownPredictRulet   TreeEdge(   t   Tree(   t   Nonterminalt   CFG(   t   in_idle(   t   CanvasFramet   ColorizedListt   EntryDialogt   MutableOptionMenut   ShowTextt   SymbolWidget(   t	   CFGEditort   tree_to_treesegmentt   TreeSegmentWidgett   EdgeListc           B   s'   e  Z e j d  Z d   Z d   Z RS(   t
   rightarrowc         C   s\   | j  d d d | j  d d d d d | j  d	 d d
 | j  d d d d d d  S(   Nt   terminalt
   foregrounds   #006000t   arrowt   fontt   symbolt	   underlinet   0t   dots   #000000t   nonterminalt   bluet	   helveticait   bold(   R3   iR4   (   t
   tag_config(   t   selft
   textwidgett   options(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _init_colortags`   s
    c         C   s   g  } | j  d | j   d f  | j  |  j d f  x t | j    D]t \ } } | | j   k rz | j  d	  n  t | t  r | j  d | j   d f  qL | j  d | d f  qL W| j	   r | j  d
  n  | S(   Ns   %s	R1   R+   s    *R0   s    %ss    %rR)   (   s    *R0   (   s    *R0   (
   t   appendt   lhst   ARROWt	   enumeratet   rhsR0   t
   isinstanceR   R-   t   is_complete(   R6   t   itemt   contentst   it   elt(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt
   _item_reprh   s     (   t   __name__t
   __module__R#   t   SYMBOLSR<   R9   RE   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR'   ]   s   	t   ChartMatrixViewc           B   s   e  Z d  Z e d e 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 RS(   sS   
    A view of a chart that displays the contents of the corresponding matrix.
    s   Chart Matrixc         C   s   | |  _  g  |  _ g  |  _ d  |  _ | rr t |  |  _ |  j j |  |  j j d |  j	  |  j
 |  j  n t |  |  _ |  j |  j  |  j |  j  | r |  j |  j  n	 d  |  _ i  |  _ d |  _ |  j   d  S(   Ns   <Control-q>i    (   t   _chartt   _cellst   _markst   Nonet   _selected_cellR
   t   _roott   titlet   bindt   destroyt
   _init_quitR   t   _init_matrixt
   _init_listt   _init_numedgest   _numedges_labelt
   _callbackst
   _num_edgest   draw(   R6   t   parentt   chartt   toplevelRP   t   show_numedges(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   __init__   s$    							c         C   s;   t  | d d d |  j } | j d d d d d d	  d  S(
   Nt   textt   Quitt   commandt   sidet   bottomt   expandi    t   fillt   none(   R   RR   t   pack(   R6   t   roott   quit(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRS      s    c         C   s~   t  | d d d d } | j d d d d d	 d
 d d d d  t | d d d d d d |  _ |  j j d d d d  d  S(   Nt   borderi   t   relieft   sunkenRe   i    Rf   Rg   t   padxi   t   padyi   Rc   t   topt   widthi   t   heightt
   backgroundt   white(   R   Rh   R   t   _canvas(   R6   Ri   t   cframe(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRT      s    (!c         C   s8   t  | d d |  _ |  j j d d d d d d  d  S(	   NR`   s   0 edgesRe   i    Rf   Rg   Rc   Rp   (   R   RW   Rh   (   R6   Ri   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRV      s    c      	   C   ss   t  | g  d d d d |  _ |  j j d d d d d	 d
 d d  |  d  } |  j j d |  |  j j   d  S(   NRq   i   Rr   i   Rc   Rp   Re   i   Rf   t   bothRo   i   c         S   s   | j  d |   d  S(   Nt   select(   t   _fire_callbacks(   t   edgeR6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   cb   s    Rx   (   R'   t   _listRh   t   add_callbackt   focus(   R6   Ri   R{   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRU      s
    %c         G   s;   |  j  d  k r d  Sy |  j  j   Wn n Xd  |  _  d  S(   N(   RO   RM   RR   (   R6   t   e(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRR      s    c         C   s2   | |  j  k	 r. | |  _  d |  _ |  j   n  d  S(   Ni    (   RJ   RY   RZ   (   R6   R\   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt	   set_chart   s    		c   	   
   C   s  |  j  d  k r d  St |  j  } g  t |  D]% } g  t |  D] } d ^ qB ^ q/ } x1 |  j D]& } | | j   | j   c d 7<qd Wxt |  D]} xt | |  D] } | | | d k r d } nJ d t d d d | | | d  t	 d d d | | | d  f } |  j | | } |  j
 j | d	 | | | f |  j k r|  j
 j | d
 d d d |  j
 j |  q |  j
 j | d
 d d d q Wq Wt |  j j d |  j   } |  j j |  |  j j   |  _ |  j d  k	 rd |  j |  j d <n  d  S(   Ni    i   t   gray20s   #00%02x%02xi   i2   i   i
   Rf   t   outlines   #00ffffRq   i   t   blackt   spans   %d edgesR`   (   RO   RM   t   lenRK   t   rangeRJ   t   startt   endt   mint   maxRu   t
   itemconfigRN   t	   tag_raiset   listRx   R|   t   sett	   num_edgesRY   RW   (	   R6   t   Nt   jRC   t
   cell_edgesRz   t   colort   cell_tagt   edges(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   update   s0    8$	 '$c         C   s$   |  j  j d d d |  j   d  S(   Nt   inactiveboxt   statet   hidden(   Ru   R   R   (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   activate   s    c         C   s$   |  j  j d d d |  j   d  S(   NR   R   t   normal(   Ru   R   R   (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt
   inactivate   s    c         C   s   d |  j  j | i   | <d  S(   Ni   (   RX   t
   setdefault(   R6   t   eventt   func(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR}      s    c         C   s9   | d  k r |  j | =n y |  j | | =Wn n Xd  S(   N(   RM   RX   (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   remove_callback   s    c         G   sE   | |  j  k r d  Sx+ t |  j  | j    D] } | |   q- Wd  S(   N(   RX   R   t   keys(   R6   R   t   argst   cb_func(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRy      s     c         C   st   |  j  d  k r d  S| | f |  j k rD |  j j   |  j k rD d  S| | f |  _ |  j   |  j d | |  d  S(   Nt   select_cell(   RO   RM   RN   RJ   R   RY   R   Ry   (   R6   RC   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    -
c         C   s:   |  j  d  k r d  Sd  |  _ |  j j g   |  j   d  S(   N(   RO   RM   RN   R|   R   R   (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   deselect_cell  s
    	c         C   s6   |  j  | | f k r" |  j   n |  j | |  d  S(   N(   RN   R   R   (   R6   RC   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _click_cell  s    c         C   s'   |  j  | j     |  j j |  d  S(   N(   R   R   R|   t   view(   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt	   view_edge"  s    c         C   s:   |  j  d  k r d  S|  j | j     |  j j |  d  S(   N(   RO   RM   R   R   R|   t   mark(   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt	   mark_edge&  s    c         C   s'   |  j  d  k r d  S|  j j |  d  S(   N(   RO   RM   R|   t   unmark(   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   unmark_edge,  s    c         C   s:   |  j  d  k r d  S|  j | j     |  j j |  d  S(   N(   RO   RM   R   R   R|   t   markonly(   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   markonly_edge1  s    c         C   s
  |  j  d  k r d  Sd } } d } |  j } | j d  |  j j   d } t | d  | | } t | d  | | | } | j d  x t |  D] } | j | d | | | d | d t	 |  d	 d
 | j | | | d | | | | d d t	 |  d	 d | j
 | | | d | | | | | | d | d d | j
 | | | | | | | | | | d d q W| j | | | | | | | | d d g  t |  D]% }	 g  t |  D] } d  ^ q^ q|  _ x t |  D] } x t | |  D] }	 | j |	 | | | | | |	 d | | | d | | d d }
 |
 |  j | |	 <|  | |	 d  } | j |
 d |  qWqWt | d  t | d  } } | j d d | d | d d d d d d d }
 | j |
  |  j   d  S(   Ni   i   t   alli   Rq   Rr   i   R`   t   anchorR   t   nt   dasht   .Rf   R   c         S   s   | j  | |  d  S(   N(   R   (   R   R6   RC   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR{   p  s    s
   <Button-1>iid   t   gray50R   R   t   tagR   (   RO   RM   Ru   t   deleteRJ   t
   num_leavest   intR   t   create_textt   reprt   create_linet   create_rectangleRK   t   tag_bindt	   tag_lowerR   (   R6   t   LEFT_MARGINt
   BOT_MARGINt
   TOP_MARGINt   cR   t   dxt   dyRC   R   t   tR{   t   xmaxt   ymax(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRZ   7  sn    
	0&;	!
	c         O   s   |  j  j | |   d  S(   N(   RO   Rh   (   R6   R   t   kwargs(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRh     s    N(   RF   RG   t   __doc__t   Truet   FalseR_   RS   RT   RV   RU   RR   R   R   R   R   R}   RM   R   Ry   R   R   R   R   R   R   R   RZ   Rh   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRI   }   s.   				
				%												Nt   ChartResultsViewc           B   sz   e  Z e 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 RS(   c         C   st  | |  _  | |  _ g  |  _ d |  _ g  |  _ d  |  _ d  |  _ | r} t |  |  _	 |  j	 j
 d  |  j	 j d |  j  n t |  |  _	 | r/t |  j	  } | j d d d d d d	  t | d
 d d |  j j d d  t | d
 d d |  j j d d  t | d
 d d |  j j d d  n  t |  j	 d d |  _ |  j j d d d d d d  |  j   d  S(   Ni
   s!   Chart Parser Application: Resultss   <Control-q>Rc   Rd   Re   i    Rf   t   xR`   Ra   Rb   t   rights	   Print Allt   lefts   Print Selectiont   closeenoughi   Rp   i   Rw   (   RJ   t   _grammart   _treest   _yt   _treewidgetsRM   t
   _selectiont
   _selectboxR
   RO   RP   RQ   RR   R   Rh   R   t	   print_allt   print_selectionR   t   _cframeR   (   R6   R[   R\   t   grammarR]   t   buttons(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR_     s,    							%%
c         C   s   |  j  d  k r d  S| d  k	 rf | j   |  j j   k r> d  S| j   d |  j j   f k rf d  Sn  xB |  j j |  j j    D]% } | |  j	 k r |  j
 |  q q Wd  S(   Ni    (   RO   RM   R;   R   R   R   RJ   R   t   parsesR   t   _add(   R6   Rz   t   parse(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    !"c         C   s   |  j  j |  |  j j   } t | |  } |  j j |  |  j j | d |  j  | j |  j	  | j
   d d |  _ d  S(   Ni
   i   (   R   R:   R   t   canvasR%   R   t
   add_widgetR   t
   bind_clickt   _clickt   bbox(   R6   R   R   t
   treewidget(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    c      	   C   s}   |  j  j   } |  j d  k	 r1 | j |  j  n  | |  _ | j   \ } } } } | j | | | | d d d d |  _ d  S(   NRq   i   R   s   #088(   R   R   R   RM   R   R   R   R   (   R6   t   widgetR   t   x1t   y1t   x2t   y2(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    	c         C   sW   | | j    d <x@ | j   D]2 } t | t  rE |  j | |  q | | d <q Wd  S(   NR   (   t   labelt   subtreesR?   R&   t   _color(   R6   R   R   t   child(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s
    c         G   s$   |  j  d  k r d  S|  j j   d  S(   N(   RO   RM   R   t   print_to_file(   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    c         G   s  |  j  d  k r d  S|  j d  k r2 t d d  n |  j j   } x3 |  j D]( } | |  j k	 rK |  j j |  qK qK W| j |  j	  |  j j
   \ } } } } |  j j d | d |  d | | d | | d f | d <|  j j   |  j g |  _ |  j   |  j   d  S(   Ns   Print Errors   No tree selectedi
   s	   0 0 %s %si   t   scrollregion(   RO   RM   R   R   R   R   R   t   destroy_widgetR   R   R   t   moveR   t   clearR   (   R6   R   R   R   R   R   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s     $
c         C   s   |  j  d  k r d  Sx! |  j D] } |  j j |  q Wg  |  _ g  |  _ |  j d  k	 rt |  j j   j |  j	  n  d  |  _ d |  _
 d  S(   Ni
   (   RO   RM   R   R   R   R   R   R   R   R   R   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    			c         C   s!   |  j    | |  _ |  j   d  S(   N(   R   RJ   R   (   R6   R\   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    
	c         C   s!   |  j    | |  _ |  j   d  S(   N(   R   R   R   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   set_grammar  s    
	c         G   s;   |  j  d  k r d  Sy |  j  j   Wn n Xd  |  _  d  S(   N(   RO   RM   RR   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRR     s    c         O   s   |  j  j | |   d  S(   N(   RO   Rh   (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRh     s    N(   RF   RG   R   R_   RM   R   R   R   R   R   R   R   R   R   RR   Rh   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s   !										t   ChartComparerc           B   s$  e  Z d  Z i d d 6e j d d 6e j d d 6Z 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 RS(%   s  

    :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.
    t   -t   intersectiont   andt   uniont   orc         G   s(  d g d } t  |  |  _ d |  _ d |  _ |  j |  _ |  j |  _ i |  j d 6|  _ |  j |  _ d  |  _	 t
   |  _ |  j j d  |  j j d |  j  |  j j d |  j  |  j |  j  |  j |  j  |  j |  j  |  j |  j  |  j |  j  x | D] } |  j |  qWd  S(   Nt    i   RM   s   Chart Comparisons   <Control-q>s   <Control-x>(   R   t   _emptychartt
   _left_namet   _right_namet   _left_chartt   _right_chartt   _chartst
   _out_chartRM   t	   _operatorR	   RO   RP   RQ   RR   t   _init_menubart   _init_chartviewst   _init_dividert   _init_buttonst   _init_bindingst
   load_chart(   R6   t   chart_filenamest   faketokt   filename(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR_   D  s(    			c         G   s;   |  j  d  k r d  Sy |  j  j   Wn n Xd  |  _  d  S(   N(   RO   RM   RR   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRR   j  s    c         O   s   d  S|  j  j | |   (   N(   RO   t   mainloop(   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  s  s    c      	   C   sx  t  |  } t  | d d } | j d d d d d d d |  j  | j d d	 d d
 d d d |  j  | j   | j d d d d d |  j d d  | j d d d d d |  t  | d d } | j d d d |  j d d  | j d d d |  j d d  | j d d d |  j	 d d  | j   | j d d d |  j
  | j d d d d d |  |  j j d |  d  S(   Nt   tearoffi    R   s
   Load Chartt   accelerators   Ctrl-oR.   Rb   s   Save Outputs   Ctrl-st   Exiti   s   Ctrl-xt   Filet   menut   Intersectiont   +t   Uniont   *t
   DifferenceR   s   Swap Chartst   Compare(   R   t   add_commandt   load_chart_dialogt   save_chart_dialogt   add_separatorRR   t   add_cascadet   _intersectiont   _uniont   _differencet   _swapchartsRO   t   config(   R6   Ri   t   menubart   filemenut   opmenu(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  {  s4    	
	

			
c         C   s8   t  | d d d d } | j d d d d d	 d  d  S(
   NRk   i   Rl   Rm   Rc   Rp   Rf   R   t   ipady(   R   Rh   (   R6   Ri   t   divider(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    c         C   s  d$ } d% } t  | d d } | j d d d d	 d
 d  t  | d d d d } | j d d d d d d d d	 d
 d  t | t |  j j    d |  j |  _ |  j j d d d d d
 d  t | |  j	 d t
 d t |  _ |  j j d d d d d d d d	 d
 d  |  j j d |  j  |  j j d |  j  |  j j   t | d d d d d d d  | |  _ |  j j d d d d d d  t  | d d d d } | j d d d d d d d d	 d
 d  t | t |  j j    d |  j |  _ |  j j d d d d d
 d  t | |  j	 d t
 d t |  _ |  j j d d d d d d d d	 d
 d  |  j j d |  j  |  j j d |  j  |  j j   t | d d! d d d d d  | j d d d d d d  t  | d d d d } | j d d d d d d d d	 d
 d  t | d d" |  _ |  j j d d d d#  t | |  j	 d t
 d t |  _ |  j j d d d d d d d d	 d
 d  |  j j d |  j  |  j j d |  j  |  j j   d  S(&   NR-   iR3   Rs   s   #c0c0c0Rc   Rp   Re   i   Rf   Rw   Rk   i   Rl   t   grooveR   Rn   i   Ro   i   Rb   i   R   R]   R^   Rd   Rx   R   R`   t    Rq   R,   t   =t   Outputi	   (   R-   i(   R3   i(   R   Rh   R!   R   R   R   t   _select_leftt   _left_selectorRI   R   R   R   t   _left_matrixR}   t   select_edgeR   R   R   t	   _op_labelt   _select_rightt   _right_selectort   _right_matrixt
   _out_labelt   _out_matrix(   R6   Ri   t   opfontt   eqfontt   framet	   cv1_framet	   cv2_framet	   out_frame(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    sR    ('+$('+'(+c      	   C   s  t  |  } | j d d d d d d d d  t | d	 d
 d |  j j d d  t | d	 d d |  j j d d  t | d	 d d |  j j d d  t  | d d j d d  t | d	 d d |  j j d d  t | d	 d d |  j j d d  d  S(   NRc   Rd   Ro   i   Rf   R   Re   i    R`   R  Rb   R   R  R  Rq   i   s   Swap Chartss   Detatch OutputR   (   R   Rh   R   R  R  R  R   t   _detatch_out(   R6   Ri   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    "%%%c         C   s   | j  d |  j  d  S(   Ns   <Control-o>(   RQ   R  (   R6   Ri   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    c         C   sV   | |  _  |  j | |  _ |  j j |  j  | d k rH |  j j   n  |  j   d  S(   NRM   (   R   R   R   R-  R   R   t	   _apply_op(   R6   t   name(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR+    s    	c         C   sV   | |  _  |  j | |  _ |  j j |  j  | d k rH |  j j   n  |  j   d  S(   NRM   (   R   R   R   R2  R   R   R<  (   R6   R=  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR0    s    	c         C   sX   |  j  d k r |  j   n8 |  j  d k r8 |  j   n |  j  d k rT |  j   n  d  S(   NR   R   R   (   R  R  R  R  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR<    s    s   Pickle files   .pickles	   All filesR  c         G   s   t  d |  j d d  } | s" d  Sy/ t | d   } t j |  j |  Wd  QXWn* t k
 r} } t d d | | f  n Xd  S(   Nt	   filetypest   defaultextensions   .picklet   wbs   Error Saving Charts   Unable to open file: %r
%s(   R   t   CHART_FILE_TYPESt   opent   picklet   dumpR  t	   ExceptionR   (   R6   R   R  t   outfileR   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    c         G   sd   t  d |  j d d  } | s" d  Sy |  j |  Wn* t k
 r_ } t d d | | f  n Xd  S(   NR>  R?  s   .pickles   Error Loading Charts   Unable to open file: %r
%s(   R   RA  R  RE  R   (   R6   R   R  R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  &  s    c         C   s   t  | d   } t j |  } Wd  QXt j j |  } | j d  rU | d  } n  | j d  rq | d  } n  | |  j | <|  j j	 |  |  j
 j	 |  |  j |  j k r |  j j |  n% |  j |  j k r |  j
 j |  n  d  S(   Nt   rbs   .pickleis   .charti(   RB  RC  t   loadt   ost   patht   basenamet   endswithR   R,  t   addR1  R   R   R   R   (   R6   R  t   infileR\   R=  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  3  s    c         C   s+   |  j  j   |  j j   |  j j   d  S(   N(   R-  R   R2  R4  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _update_chartviewsF  s    c         C   s   | |  j  k r" |  j j |  n |  j j   | |  j k rQ |  j j |  n |  j j   | |  j k r |  j j |  n |  j j   d  S(   N(   R   R-  R   R   R   R2  R  R4  (   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR.  O  s    c         C   s=   |  j  j | |  |  j j | |  |  j j | |  d  S(   N(   R-  R   R2  R4  (   R6   RC   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   ]  s    c         C   so   |  j    s d  St |  j j    } x3 |  j D]( } | |  j k r/ | j | g   q/ q/ W|  j d |  d  S(   NR   (   t   _checkcompatR   R   t   tokensR   t   insertt   _update(   R6   t	   out_chartRz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  f  s    c         C   so   |  j    s d  St |  j j    } x3 |  j D]( } | |  j k r/ | j | g   q/ q/ W|  j d |  d  S(   NR   (   RP  R   R   RQ  R   RR  RS  (   R6   RT  Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  q  s    c         C   s   |  j    s d  St |  j j    } x! |  j D] } | j | g   q/ Wx! |  j D] } | j | g   qS W|  j d |  d  S(   NR   (   RP  R   R   RQ  RR  R   RS  (   R6   RT  Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  |  s    c         C   s7   |  j  |  j } } |  j j |  |  j j |  d  S(   N(   R   R   R,  R   R1  (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    c         C   s   |  j  j   |  j j   k s` |  j  j   |  j j   k s` |  j  |  j k s` |  j |  j k r |  j |  _ |  j j |  j  |  j j   d |  j	 d <t
 St Sd  S(   NR*  R`   (   R   RQ  R   t   property_namesR   R  R4  R   R   R3  R   R   (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRP    s    c         C   s]   | |  _  |  j | |  j d <| |  _ |  j j |  d |  j |  j  |  j f |  j d <d  S(   NR`   s   %s %s %s(	   R  t	   _OPSYMBOLR/  R  R4  R   R   R   R3  (   R6   t   operatorRT  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRS    s    		c         C   s=   |  j  |  _ |  j j |  j  d |  j d <|  j j   d  S(   NR(  R`   (   R   R  R4  R   R/  R   (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _clear_out_chart  s    c         C   s$   t  |  j |  j d |  j d d  S(   NRP   R`   (   RI   RO   R  R3  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR;    s    (   s   Pickle files   .pickle(   s	   All filesR  (    RF   RG   R   R#   RH   RV  R_   RR   R  R  R  R  R  R  R+  R0  R<  RA  R  R  R  RO  R.  R   R  R  R  R   RP  RS  RX  R;  (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   "  s>   	&				'		=																					t	   ChartViewc           B   s  e  Z d  Z d Z d Z d Z d Z d+ d  Z d   Z	 d d d d	  Z
 d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d+ d  Z d   Z d   Z d d  Z d   Z d   Z d+ d+ d  Z d d  Z d+ d  Z d d  Z d   Z d   Z d    Z d!   Z  d"   Z! d+ d#  Z" d$   Z# d%   Z$ d d&  Z% d'   Z& d(   Z' d+ d)  Z( d*   Z) RS(,   s  
    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').
    i
   i   i(   c         K   si  | j  d d  } | j  d d  } | j  d d  |  _ | |  _ i  |  _ g  |  _ i  |  _ i  |  _ g  |  _ d! |  _	 d |  _
 g  |  _ d |  _ | d! k rt   } | j d  | d  } | d	  } | j d
 |  t | d d d | }	 |	 j d d  | |  _ n	 | |  _ |  j |  |  j |  j  \ |  _ |  _ d |  j d <d |  j d <| rt |  j d d d d }
 |
 j d d d d  t |
 d d |  _ d |  j d <|  j j d d  n	 d! |  _ | r|  j |  j d d  \ } } | | |  _ |  _ d |  j d <n	 d! |  _ |  j   |  j   |  j   |  j   |  j j d  |  j   d! S("   s4   
        Construct a new ``Chart`` display.
        t	   draw_treei    t   draw_sentencei   t   fontsizeis
   Chart Viewc         S   s   | j    d  S(   N(   RR   (   R   Rp   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   destroy1  s    c         S   s   |  j    d  S(   N(   RR   (   Rp   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   destroy2  s    t   qR`   t   DoneRb   Rc   Rd   i,  Rr   i   R   Rl   t   sunkRk   i   Rf   Rw   i2   s   #e0e0e0Rs   R   R   i   s   <Configure>N(!   t   gett	   _fontsizeRJ   RX   t   _edgelevelst	   _edgetagsRL   t	   _treetoksRM   t   _treetoks_edget   _treetoks_indext
   _tree_tagst   _compactR	   RP   RQ   R   Rh   RO   t   _init_fontst
   _sb_canvast	   _chart_sbt   _chart_canvasR   R   t   _sentence_canvast   _tree_sbt   _tree_canvast   _analyzeRZ   t   _resizet   _growt
   _configure(   R6   R\   Ri   t   kwRZ  R[  Rp   R]  R^  t   bRv   t   sbR   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR_     sX    														



c         C   sl   t  d d d d d |  j  |  _ t  d d d |  j  |  _ t  d t   d  |  _ | j d |  j  d  S(   Nt   familyR3   t   weightR4   t   sizeR,   s   *Font(   R   Rc  t	   _boldfontt   _fontR   t   _sysfontt
   option_add(   R6   Ri   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRk  E  s    !t   yRw   Rd   c         C   s   t  | d d d d } | j d | d | d |  t | d d	 } t | d
 d } | j d d d d  | j d d d | d d  | j | d <| j | d <| | f S(   sK   
        Helper for __init__: construct a canvas with a scrollbar.
        Rl   Ra  Rk   i   Rf   Re   Rc   Rs   s   #e0e0e0t   orientt   verticalR   R  R   t   yesRb   t   yscrollcommand(   R   Rh   R   R   t   yviewR   (   R6   Ri   Re   Rf   Rc   Rv   R   Rx  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRl  L  s    c         G   s   |  j  j d d d  d  S(   Nt   scrollit   units(   Rn  R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt	   scroll_up_  s    c         G   s   |  j  j d d d  d  S(   NR  i   R  (   Rn  R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   scroll_downb  s    c         G   s   |  j  j d d d  d  S(   NR  it   pages(   Rn  R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   page_upe  s    c         G   s   |  j  j d d d  d  S(   NR  i   R  (   Rn  R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt	   page_downh  s    c         C   s   |  j  j   } t t |  j d  | |  j t j d  } |  j j d |  |  j j d |  j d  | d t j | |  _ |  j	 d k	 r |  j |  j	 d <n  d S(   s/   
        Grow the window, if necessary
        Rq   i   Rr   N(   RJ   R   R   R   Rn  t	   _unitsizeRY  t   _MARGINt	   configureRo  RM   t   _sentence_height(   R6   R   Rq   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRt  k  s    +c         C   sp   |  j  j d t |   |  j j d t |   |  j j d t |   |  j   |  j   |  j   d  S(   NR{  (   R}  R  t   absR|  R~  Rr  Rt  RZ   (   R6   R{  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   set_font_size  s    

c         C   s   t  |  j  S(   N(   R  Rc  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   get_font_size  s    c         C   s8   |  j  j   } | j d t j | |  _ |  j   d S(   s   
        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.
        i   N(   RJ   R   Rq   RY  R  R  RZ   (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRu    s    c         C   s   | d k	 r\ | |  _ g  |  _ i  |  _ |  j   |  j   |  j   |  j   |  j   n= x0 |  j D]% } | |  j	 k rf |  j
 |  qf qf W|  j   d S(   su  
        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(   RM   RJ   Rd  RL   Rr  Rt  RZ   t
   erase_treeRs  Re  t	   _add_edge(   R6   R\   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    
			



c         C   s   | j    \ } } x |  j | D]{ } | j    \ } } | | k oO | k  n s | | k ok | k  n s | | k o | k o | k n r  t Sq  Wt S(   s   
        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.
        (   R   Rd  R   R   (   R6   Rz   t   lvlt   s1t   e1t	   otheredget   s2t   e2(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _edge_conflict  s    _c         C   s`  |  j  } t | t  r | j   } g  } xR | j   D]D } t | t  rh | j t | j     q7 | j t	 |   q7 Wd j
 |  } n | j   } d } x | | f D] } | j d d d | d |  j d d d d	 } | j |  }	 | j |  |	 d
 }
 t | j   d  } t |  j |
 |  |  _ t |  j |	 d |	 d  |  _ q Wd S(   s   
        Given a new edge, recalculate:

            - _text_height
            - _unitsize (if the edge text is too big for the current
              _unitsize, then increase _unitsize)
        R(  R   i    R`   R,   R   t   nwt   justifyR   i   i   i   N(   Rn  R?   R   R;   R>   R   R:   t   strR-   R   t   joinR   R|  R   R   R   t   lengthR  t   _text_height(   R6   Rz   R   R;   t   rhseltsRD   R>   t   sR   R   Rq   t   edgelen(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _analyze_edge  s(    	'
i    c         C   s(  t  | t  r d S| |  j k r& d S|  j |  |  j   |  j s |  j j | g  t |  j  d } |  j	 | |  |  j
   d Sd } x t rx3 | t |  j  k r |  j j g   |  j
   q W| | k r|  j | |  r|  j | j |  Pn  | d 7} q W|  j	 | |  d S(   s   
        Add a single edge to the ChartView:

            - Call analyze_edge to recalculate display parameters
            - Find an available level
            - Call _draw_edge
        Ni   i    (   R?   R   Re  R  Rt  Rj  Rd  R:   R   t
   _draw_edgeRs  R   R  (   R6   Rz   t   minlvlR  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s,    	
	
	c         C   s   d  } x: t t |  j   D]# } | |  j | k r | } Pq q W| d  k rS d  S| d |  j } |  j d } |  j j d d  |  j d k r |  j j d | | |  j  n  d  S(   Ni   i
   t   movetog      ?i    (	   RM   R   R   Rd  t   _chart_level_sizeR  Rn  R  t   _chart_height(   R6   Rz   t   levelRC   R  R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   	  s    c      	   C   s  |  j  } | j   |  j t j } | j   |  j t j } | | k rf | t d |  j d  7} n  | d |  j } | j | | | | d d d d } t	 | t
  rg  } xR | j   D]D }	 t	 |	 t  r | j t |	 j     q | j t |	   q W| j   }
 n g  } d }
 d	 j | |
   } d	 j | |
  } | j | d | d
 | d |  j d d } | j |  d d } | j |  d | j |  d d } | j | d | d | d | d  } | j | d | d
 | d |  j d d } | j | | d | d
 t | j    d d d |  j } | | | | | f |  j | <|  | d  } | j | d |  | j | d |  | j | d |  | j | d |  | j | d |  |  j |  d S(   s6   
        Draw a single edge on the ChartView.
        i   i   i   R+   t   lastRq   i   i    R(  R`   R,   R   R  i   i   R  c         S   s   | j  d |  d  S(   NRx   (   Ry   (   R   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR{   B  s    s
   <Button-1>N(   Rn  R   R  RY  R  R   R   R  R   R?   R   R>   R   R:   R  R-   R   R0   R  R   R}  R   t   create_ovalR;   R|  Re  R   t   _color_edge(   R6   Rz   R  R   R   R   R  t   linetagR>   RD   t   post   rhs1t   rhs2t   rhstag1t   dotxt   dotyt   dottagt   rhstag2t   lhstagR{   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    sB    	$+((+5c         C   s  | |  j  k r d S|  j } | d k	 r | d k	 r | |  j k rS |  j | } n  |  j  | } | j | d d | | j | d d | | j | d d | d | | j | d d | | j | d d | d S|  j j   } | |  j k r|  j |  j |  n  | j   rL| j	   d | f k rL|  j | d	 d
  n8 t
 | t  rq|  j | d d  n |  j | d d  d S(   s   
        Color in an edge with the given colors.
        If no colors are specified, use intelligent defaults
        (dependent on selection, etc.)
        Ni    Rf   i   i   R   i   i   s   #084s   #042s   #48cs   #246s   #00fs   #008(   Re  Rn  RM   RL   R   RJ   R   R  R@   R   R?   R   (   R6   Rz   t	   linecolort	   textcolorR   t   tagsR   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  M  s*    	$s   #0dfc         C   s   | |  j  | <|  j |  d S(   s   
        Mark an edge
        N(   RL   R  (   R6   Rz   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   l  s    c         C   sf   | d k rK t |  j j    } i  |  _ x5 | D] } |  j |  q1 Wn |  j | =|  j |  d S(   s/   
        Unmark an edge (or all edges)
        N(   RM   R   RL   R   R  (   R6   Rz   t   old_marked_edges(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   s  s    	
c         C   s   |  j    |  j | |  d  S(   N(   R   R   (   R6   Rz   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    
c   	      C   s>  d } d } |  j  } x |  j j   D] } | j d d d t |  d |  j d d d d } | j |  } | j |  | d	 t j	 } t
 | |  } t
 | | d
 | d  } q% W| |  _ | |  _ |  j d	 t j |  _ x$ |  j j   D] } |  j |  q W|  j d	 |  _ d
 t j |  j |  _ |  j   d S(   s   
        Analyze the sentence string, to figure out how big a unit needs
        to be, How big the tree should be, etc.
        iF   i    R`   R,   R   R  R  R   i   i   i   N(   Rn  RJ   t   leavesR   R   R}  R   R   RY  t   _LEAF_SPACINGR   R  R  R  R  R   R  R  t   _TREE_LEVEL_SIZEt   _tree_heightRs  (	   R6   t   unitsizet   text_heightR   t   leafR   R   Rq   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRr    s&    	-		c         C   s   |  j  } |  j j   |  j t j d } t |  j  } | d |  j |  _	 d d | |  j	 f | d <|  j
 r d d | |  j f |  j
 d <n  d S(   s   
        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.
        i   i    R   N(   Rn  RJ   R   R  RY  R  R   Rd  R  R  Rq  R  (   R6   R   Rq   t   levels(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRs    s    	!	c      
   C   s  d } |  j  } |  j } |  j } t j } g  |  _ xt d |  j j   d  D]} | |  j	 | } | r | j
 | d | |  } | j |  n  | r | j
 | d | |  j  }	 | j |	  n  | j
 | d | |  }
 | j |
  | j | d d d t |  d d d |  j } | j |  | d d k r| rU| j | d	 d
 n  | rq| j |	 d	 d
 n  | j |
 d	 d
 qP | r| j | d	 d n  | r| j |	 d	 d n  | j |
 d	 d qP Wd S(   sv   
        Draw location lines.  These are vertical gridlines used to
        show where each location unit is.
        iP  i    i   i   R`   R   R  R,   Rf   t   gray60t   gray80N(   Rq  Ro  Rn  RY  R  t	   _loclinesR   RJ   R   R  R   R   R  R   R   R}  R   (   R6   t   BOTTOMt   c1t   c2t   c3t   marginRC   R   t   t1t   t2t   t3t   t4(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _draw_loclines  s:    					#1c         C   s#  |  j  j   d k r d S|  j } t j } t j } x t |  j  j    D] \ } } | |  j | } | |  j } | | d } | j | | d t	 |  d |  j
 d d d d	 }	 | j |	  }
 | j | d |
 d
 t j d | d |
 d t j d d d d d } | j |  qJ Wd S(   s   Draw the sentence string.i    Ni   R`   R,   R   R   R  R   i   i   Rf   s   #f0f0f0R   (   RJ   R   Ro  RY  R  R=   R  R  R   R   R}  R   R   R  R   (   R6   R   R  R  RC   R  R   R   R   R   R   t   rt(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _draw_sentence  s(    			"-	c         C   sC   x! |  j  D] } |  j j |  q
 Wg  |  _ d  |  _ d |  _ d  S(   Ni    (   Ri  Rq  R   Rf  RM   Rg  Rh  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s
    		c         C   sW  | d  k r |  j d  k r d  S| d  k r7 |  j } n  |  j | k r g  |  j j |  D] } t | t  rY | ^ qY |  _ | |  _ d |  _ n  t |  j  d k r d  Sx! |  j	 D] } |  j
 j |  q W|  j |  j } |  j | | j    |  j   |  j j   |  j d t j } | j   t j |  j } d d | | f |  j
 d <d  S(   Ni    i   R   (   RM   Rg  RJ   t   treesR?   R   Rf  Rh  R   Ri  Rq  R   t   _draw_treetokR   t   _draw_treecycleR   R  RY  R  Rr   R  R  (   R6   Rz   R   R   t   treet   wt   h(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRZ    s$    7	
!c         C   s1   |  j  d t |  j  |  _  |  j |  j  d  S(   Ni   (   Rh  R   Rf  RZ  Rg  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt
   cycle_tree(  s    c         C   s{  t  |  j  d k r d  Sd t  |  j  } |  j } t j } |  j j   |  j | d } | j | d d d d | d |  j	 } |  j
 j |  | j |  \ } } } } x t t  |  j   D] } | d t  |  j  | d }	 | |  j k rd	 }
 n d
 }
 | j |	 | d |	 d | |	 d | d d |
 d d } |  j
 j |  |  | d  } | j | d |  q Wd  S(   Ni   s   %d Treesi   R   t   neR`   R,   i   s   #084s   #fffi
   i   Rf   R   R   c         S   s   | | _  | j   d  S(   N(   Rh  RZ  (   R   R6   RC   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR{   G  s    	s
   <Button-1>(   R   Rf  Rq  RY  R  RJ   R   R  R   R|  Ri  R:   R   R   Rh  t   create_polygonR   (   R6   R   R   R  R   R   t   _R  RC   R   Rf   R{   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  ,  s&    		'	4c         C   sv  |  j  } t j } g  } xz | D]r } t | t  rc |  j | | | d  \ } } | j |  q | j d | d |  j d |  | d 7} q W| r t |  t	 |  }	 n' d | d |  j d | }	 | d 7} | t j
 |  j }
 | j |	 |
 d d d d d t | j    d d	 d
 |  j } |  j j |  |
 t j
 |  j } xt | |  D]\ } } t | t  r| r| j |	 |
 |  j | | d d d d } |  j j |  n  t | t  r| r| j |	 |
 |  j | | d d d d d d } |  j j |  n  t | t  sb| j |	 |
 |  j | d d d d d } |  j j |  qbqbW|	 | f S(   s   
        :param index: The index of the first leaf in the tree.
        :return: The index of the first leaf after the tree.
        i   i   R   R   R  t   centerR`   Rf   s   #042R,   Rq   s   #084s   #048R   s   2 3i'  (   Rq  RY  R  R?   R   R  R:   R  t   sumR   R  R  R   R  R   R|  Ri  t   zipR   (   R6   t   treetokt   indext   depthR   R  t   child_xsR   t   child_xt   nodext   nodeyR   t   childyt   childx(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  M  sl    		$

	
	
	c         C   s   |  j  r& |  j  j d  |  j   n  |  j rL |  j j d  |  j   n  |  j j d  i  |  _ xE t t |  j	   D]. } x% |  j	 | D] } |  j
 | |  q Wq{ Wx |  j D] } |  j |  q W|  j   d S(   s1   
        Draw everything (from scratch).
        R   N(   Rq  R   RZ  Ro  R  Rn  Re  R   R   Rd  R  RJ   R  R  (   R6   R  Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRZ     s    			c         C   s   d |  j  j | i   | <d  S(   Ni   (   RX   R   (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR}     s    c         C   s9   | d  k r |  j | =n y |  j | | =Wn n Xd  S(   N(   RM   RX   (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    c         G   sE   | |  j  k r d  Sx+ t |  j  | j    D] } | |   q- Wd  S(   N(   RX   R   R   (   R6   R   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRy     s     N(*   RF   RG   R   R  R  R  t   _CHART_LEVEL_SIZERM   R_   Rk  Rl  R  R  R  R  Rt  R  R  Ru  R   R  R  R  R   R  R  R   R   R   Rr  Rs  R  R  R  RZ  R  R  R  RZ   R}   R   Ry   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRY    sN   -Y											"+		5	&		)		 		!P			t   EdgeRulec           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   
    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         C   s-   |  j  j d } | |  _ | j d |  _ d  S(   Ni   (   t	   __class__t	   __bases__t   _edget	   NUM_EDGES(   R6   Rz   t   super(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR_     s    	c         g   sL   |  j  j d } | |  j f 7} x% | j |  | | |  D] } | Vq9 Wd  S(   Ni   (   R  R  R  t   apply(   R6   R\   R   R   R  R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    c         C   s   |  j  j d } | j |   S(   Ni   (   R  R  t   __str__(   R6   R  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    (   RF   RG   R   R_   R  R  (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s   		t   TopDownPredictEdgeRulec           B   s   e  Z RS(    (   RF   RG   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s   t   BottomUpEdgeRulec           B   s   e  Z RS(    (   RF   RG   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s   t   BottomUpLeftCornerEdgeRulec           B   s   e  Z RS(    (   RF   RG   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s   t   FundamentalEdgeRulec           B   s   e  Z RS(    (   RF   RG   (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s   t   ChartParserAppc           B   s(  e  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   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d6 d7 g Z d8 d9 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; d(  Z& d)   Z' d* d+  Z( d,   Z) d-   Z* e+   g Z, e-   g Z. e/   g Z0 e1   g Z2 e3   g Z4 e, e. e4 Z5 e0 e4 Z6 e2 e4 Z7 d.   Z8 d/   Z9 d0   Z: d1   Z; d2   Z< d3   Z= d4   Z> d5   Z? RS(<   s   Chart Parser Applicationc         C   sK  |  j  | |  d  |  _ yt   |  _ |  j j |  |  j j d |  j  t |  j  } t |  j  } t |  j  } | j d d d d  | j d d d d  | j d d d d d d	  |  j	 |  j  |  j
   |  j |  |  j |  |  j |  |  j   d  |  _ d  |  _ |  j   Wn d
 GH|  j     n Xd  S(   Ns   <Control-q>Rc   Rd   Rf   Rg   R   Rw   Re   i   s   Error creating Tree View(   t   _init_parserRM   RO   R	   RP   RQ   RR   R   Rh   Rk  t   _init_animationt   _init_chartviewt   _init_rulelabelR  R  t   _matrixt   _resultsR  (   R6   R   RQ  RP   t   frame3t   frame2t   frame1(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR_     s2    	

		
c         G   s-   |  j  d  k r d  S|  j  j   d  |  _  d  S(   N(   RO   RM   RR   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRR   "  s    c         O   s$   t    r d S|  j j | |   d S(   s   
        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   RO   R  (   R6   R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  (  s    	c         C   s    | |  _  | |  _ |  j   d  S(   N(   R   t   _tokenst   _reset_parser(   R6   R   RQ  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  7  s    		c         C   s|   t  |  j  |  _ |  j j |  j  |  j j   |  _ x# t   j |  j |  j  D] } qS W|  j j	   |  _
 d  |  _ d  S(   N(   R   R   t   _cpt
   initializeR  R\   RJ   R   R  t   stept   _cpstepRM   R   (   R6   t	   _new_edge(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  <  s    "c         C   s   t  d t   d  |  _ | j d |  j  t |  |  _ |  j j |  j j d   t  d d d d d |  j j    |  _	 t  d d d |  j j    |  _
 d  S(   NR,   s   *FontR{  Ry  R3   Rz  R4   (   R   R   R~  R  R   t   _sizeR   t   cgetRb  R|  R}  (   R6   Ri   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRk  K  s    'c         C   sQ   t  |  j  |  _ |  j j d  t  |  j  |  _ |  j j d  d |  _ d  S(   Ni   i   i    (   R   RO   t   _stepR   t   _animatet
   _animating(   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  W  s
    c         C   s;   t  |  j | d d d d |  _ |  j j d |  j  d  S(   NRZ  i   R[  Rx   (   RY  RJ   t   _cvR}   t   _click_cv_edge(   R6   R[   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  c  s    !c      
   C   s   d } t  | d | d |  j |  _ t  | d d d d d d	 d |  j |  _ |  j j d
 d  |  j j d
 d  t | d |  j d d } | j d
 d  d  S(   Ns   Last edge generated by:R`   R,   Rq   i(   Rl   R'  R   R  Rc   R   t   variablet   StepR   (   R   R|  t   _rulelabel1t   _rulelabel2Rh   R   R  (   R6   R[   t   ruletxtR  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  g  s    'c      
   C   sU  t  |  } t  |  } | j d d d d  | j d d d d  t | d d d	 d
 d d d |  j j d d  t | d d d	 d
 d d d |  j j d d  t | d d d	 d
 d d d |  j j d d  t | d d d	 d
 d d d |  j j d d  t | d d d	 d d d d |  j j d d  t | d d d	 d d d d |  j j d d  t  | d d j d d  t | d d d	 d d d d |  j	 j d d  t  | d d j d d  t | d d d	 d d d d |  j
 j d d  t  | d d j d d  t | d d d	 d d d d |  j j d d  d  S(   NRc   Rd   Rf   R   Rp   Rg   R`   s   Reset
ParserRs   s   #90c0d0R*   R   Rb   R   s   Top Down
StrategyR   s   Bottom Up
Strategys   Bottom Up
Left-Corner Strategys   Top Down Init
Rules   #90f090s   Top Down Predict
RuleRq   i   s   Bottom Up Predict
Rules"   Bottom Up Left-Corner
Predict Rules   Fundamental
Rule(   R   Rh   R   t   resett   top_down_strategyt   bottom_up_strategyt   bottom_up_leftcorner_strategyt   top_down_initt   top_down_predictt	   bottom_upt   bottom_up_leftcornert   fundamental(   R6   R[   R  R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  s  s    c         C   s  |  j  j d |  j j  |  j  j d |  j j  |  j  j d |  j j  |  j  j d |  j j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j	  |  j  j d	 |  j
  |  j  j d
 |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j d   |  j  j d |  j d   |  j  j d |  j d   |  j  j d |  j d   d  S(   Ns   <Up>s   <Down>s   <Prior>s   <Next>s   <Control-q>s   <Control-x>s   <F1>s   <Control-s>s   <Control-o>s   <Control-r>R   Rw  R   s   <space>s   <Control-g>s   <Control-t>R   c         S   s   | j  d  S(   Ni   (   R   (   R   t   a(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   <lambda>  R   R)  c         S   s   | j  d  S(   Ni   (   R   (   R   R  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    R   R  c         S   s   | j  d  S(   Ni   (   R   (   R   R  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    R   R  c         S   s   | j  | j    S(   N(   R   Rb  (   R   R  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    R   (   RO   RQ   R  R  R  R  R  RR   t   helpt
   save_chartR  R  R  R  R  t   _stop_animationt   edit_grammart   edit_sentenceR  R  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s(    c   	      C   s  t  |  j  } t  | d d } | j d d d d d |  j d d  | j d d	 d d d |  j d d
  | j d d d d d |  j d d  | j   | j d d d |  j  | j d d d |  j  | j   | j d d d d d |  j	 d d  | j
 d d d d d |  t  | d d } | j d d d d d |  j d d  | j d d d d d |  j d d  | j
 d d d d d |  t  | d d } | j d d d d d |  j  | j d d d d d |  j  | j
 d d d d d |  t  | d d } | j d d d d d |  j d d  | j d d  d d d |  j d d!  | j d d" d d d |  j d d#  | j   | j d d$ d |  j  | j d d% d |  j  | j d d& d |  j  | j d d' d |  j  | j d d( d |  j  | j
 d d) d d d |  t  | d d } | j d d* d d d+ |  j d d,  | j   | j d d- d d d+ |  j d. d  | j d d/ d d d+ |  j d. d d d0  | j d d1 d d d+ |  j d. d2 d d3  | j d d4 d d d+ |  j d. d5 d d6  | j
 d d7 d d d |  t  | d d } | j d d8 d+ |  j d d d. d9 d |  j  | j d d: d+ |  j d d d. d; d |  j  | j d d< d+ |  j d d d. d= d |  j  | j d d> d+ |  j d d d. d? d |  j  | j d d@ d+ |  j d d d. dA d |  j  | j
 d dB d d d |  t  | d d } | j d dC d d d |  j  | j d dD d d d |  j d dE  | j
 d dF d d d |  |  j j d |  d  S(G   NR  i    R   s
   Save ChartR.   Rb   R  s   Ctrl-ss
   Load Charts   Ctrl-os   Reset Charts   Ctrl-rs   Save Grammars   Load GrammarR  i   s   Ctrl-xR  R  s   Edit Grammari   s   Ctrl-gs	   Edit Texts   Ctrl-tt   Edits   Chart Matrixi   t   Resultst   Views   Top Down StrategyR   s   Bottom Up StrategyRw  s   Bottom Up Left-Corner StrategyR   s   Bottom Up Rules   Bottom Up Left-Corner Rules   Top Down Init Rules   Top Down Predict Rules   Fundamental Rulet   ApplyR  R  R  s   No Animationt   values   Slow AnimationR   s   Normal Animationi   R)  s   Fast Animationi   R  t   Animatet   Tinyi
   t   Smalli   t   Mediumi   t   Largei   t   Hugei   t   Zoomt   Aboutt   Instructionst   F1t   Help(    R   RO   R  R!  R  R  R  t   save_grammart   load_grammarRR   R  R#  R$  t   view_matrixt   view_resultsR  R  R  R  R  R  R  R  t   add_checkbuttonR  t   add_radiobuttonR  R	  t   resizet   aboutR   R!  (	   R6   R"  R#  t   editmenut   viewmenut   rulemenut   animatemenut   zoommenut   helpmenu(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    					

												
			
									
		
		
		
		
	c         C   s0   | |  j  k r |  j |  n |  j j   d  S(   N(   R   t   _select_edgeR  R  (   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s    c         C   s!   |  j  |  |  j j |  d  S(   N(   RC  R  R   (   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _select_matrix_edge  s    c         C   sh   | |  _  |  j j | d  |  j j |  |  j rH |  j j |  n  |  j rd |  j j |  n  d  S(   Ns   #f00(   R   R  R   RZ  R  R   (   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRC    s    			c         C   s@   d  |  _ |  j j   |  j j   |  j r< |  j j   n  d  S(   N(   RM   R   R  R   R  R  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _deselect_edge  s
    		c         C   s   |  j  |  j j    |  j j   |  j j |  |  j j | d  |  j j |  |  j ro |  j j   n  |  j r |  j j |  n  |  j r |  j j |  n  |  j	 r |  j	 j |  n  d  S(   Ns   #0df(
   t   _display_ruleR  t   current_chartruleR  R   RZ  R   R   R  R  (   R6   Rz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   _show_new_edge  s    				c         G   sk   d |  _  y/ t |  j d t p! d j   d d d d Wn, t |  j d t pS d j   d d n Xd  S(   Ni    s   Help: Chart Parser ApplicationR   Rq   iK   R,   t   fixed(   R  R"   RO   R   t   strip(   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR     s    	c         G   s   d d } t  d |  d  S(   Ns   NLTK Chart Parser Application
s   Written by Edward Lopers   About: Chart Parser Application(   R   (   R6   R   t   ABOUT(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR<    s    
s   Pickle files   .pickles	   All filesR  s   Plaintext grammar files   .cfgc         G   s   t  d |  j d d  } | s" d Sy t | d   } t j |  } Wd QX| |  _ |  j j |  |  j r |  j j	 |  n  |  j r |  j j
   n  |  j r |  j j	 |  n  |  j j	 |  Wn' t k
 r }   t d d |  n Xd S(   s   Load a chart from a pickle fileR>  R?  s   .pickleNRG  s   Error Loading Charts   Unable to open file: %r(   R   RA  RB  RC  RH  RJ   R  R   R  R   R   R  R  RE  R   (   R6   R   R  RN  R\   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    s&    				c         G   s   t  d |  j d d  } | s" d Sy/ t | d   } t j |  j |  Wd QXWn' t k
 rz }   t d d |  n Xd S(   s   Save a chart to a pickle fileR>  R?  s   .pickleNR@  s   Error Saving Charts   Unable to open file: %r(   R   RA  RB  RC  RD  RJ   RE  R   (   R6   R   R  RF  R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR!    s    c         G   s   t  d |  j d d  } | s" d Syw | j d  r^ t | d   } t j |  } Wd QXn- t | d   } t j | j    } Wd QX|  j	 |  Wn$ t
 k
 r } t d d	 |  n Xd S(
   s!   Load a grammar from a pickle fileR>  R?  s   .cfgNs   .pickleRG  t   rs   Error Loading Grammars   Unable to open file: %r(   R   t   GRAMMAR_FILE_TYPESRL  RB  RC  RH  R   t
   fromstringt   readR   RE  R   (   R6   R   R  RN  R   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR6  	  s    c   
      G   sj  t  d |  j d d  } | s" d  Sy| j d  rk t | d  # } t j |  j |  j f |  Wd  QXn t | d   } |  j j	   } g  | D]' } | j
   |  j j   k r | ^ q } g  | D]' } | j
   |  j j   k r | ^ q } x | D] } | j d |  q Wx | D] } | j d |  qWWd  QXWn$ t k
 re}	 t d d	 |  n Xd  S(
   NR>  R?  s   .cfgs   .pickleR@  R  s   %s
s   Error Saving Grammars   Unable to open file: %r(   R   RM  RL  RB  RC  RD  RJ   R  R   t   productionsR;   R   t   writeRE  R   (
   R6   R   R  RF  t   prodst   pR   t   restt   prodR   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR5  	  s$    %44c         G   s   d |  _  |  j   |  j j |  j  |  j rE |  j j |  j  n  |  j r^ |  j j   n  |  j r} |  j j |  j  n  d  S(   Ni    (	   R  R  R  R   RJ   R  R   R   R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  +	  s    	
			c         G   s   t  |  j |  j |  j  d  S(   N(   R$   RO   R   R   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR#  :	  s    c         C   s9   | |  _  |  j j |  |  j r5 |  j j |  n  d  S(   N(   R   R  R   R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR   =	  s    		c         G   s>   d j  |  j  } d } d } t |  j | | |  j |  d  S(   NR(  s	   Edit Texts   Enter a new sentence to parse.(   R  R  R    RO   t   set_sentence(   R6   R   t   sentenceRP   t   instr(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR$  C	  s    c         C   s#   t  | j    |  _ |  j   d  S(   N(   R   t   splitR  R  (   R6   RW  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRV  I	  s    c         G   sQ   |  j  d  k	 r |  j  j   n  t |  j |  j  |  _  |  j  j d |  j  d  S(   NRx   (   R  RM   RR   RI   RO   RJ   R}   RD  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR7  Q	  s    c         G   sA   |  j  d  k	 r |  j  j   n  t |  j |  j |  j  |  _  d  S(   N(   R  RM   RR   R   RO   RJ   R   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR8  W	  s    c         C   s#   d |  _  |  j |  j j    d  S(   Ni    (   R  R  R	  Rb  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR;  `	  s    	c         C   sb   |  j  j |  |  j j d t |   |  j j d t |   |  j j d t |   d  S(   NR{  (   R  R  R}  R  R  R|  R~  (   R6   R{  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  d	  s    c         C   s   t  |  j j    S(   N(   R  R	  Rb  (   R6   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  j	  s    c         C   sY  |  j  r d |  _  d  S|  j d   |  j j   r |  j } | d  k	 r | d  k	 r |  j j | |  g  |  j   } | d  k r |  j	 j
   d  |  _ q qU|  j j |  |  j   n |  j j |  |  j j   r d |  _  |  j   nc x! |  j D] } | d  k r Pq q W|  j	 j   |  j r<|  j j   n  |  j rU|  j j   n  d  S(   Ni    i   (   R  RF  RM   R  Rb  R   R  t   set_strategyt   _apply_strategyR  R   R  t   _animate_strategyR  R   R  R  (   R6   t   strategyt   edge_strategyt	   selectiont   newedgeRz   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   apply_strategyq	  s4    						c         G   s   d |  _  d  S(   Ni    (   R  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR"  	  s    i   c         C   s   |  j  d k r d  S|  j   d  k	 r |  j j   d k sO |  j j   d k rS d  S|  j j   d k r |  j j d |  j  q |  j j   d k r |  j j d |  j  q |  j j d |  j  n  d  S(   Ni    i   i  i   i  i   (	   R  R[  RM   R  Rb  R  RO   t   afterR\  (   R6   t   speed(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR\  	  s    *c         C   s/   t  |  j  } | d  k	 r+ |  j |  n  | S(   N(   t   nextR  RM   RH  (   R6   t   new_edge(    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR[  	  s    c         C   sH   | d  k r d |  j d <n( t |  } | |  j d <|  j j   } d  S(   NR   R`   (   RM   R  R  R  R  (   R6   t   ruleR=  R{  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyRF  	  s
    c         G   s   |  j  |  j d   d  S(   N(   Ra  t   _TD_INITRM   (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _TD_PREDICTR  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _BU_RULER  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _BU_LC_RULER  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _FUNDAMENTALR  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _BU_STRATEGYR  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _BU_LC_STRATEGYR  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    c         G   s   |  j  |  j t  d  S(   N(   Ra  t   _TD_STRATEGYR  (   R6   R   (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR  	  s    (   s   Pickle files   .pickle(   s	   All filesR  (   s   Plaintext grammar files   .cfg(   s   Pickle files   .pickle(   s	   All filesR  N(@   RF   RG   R_   RR   R  R  R  Rk  R  R  R  R  R  R  R  RD  RC  RE  RH  R   R<  RA  RM  R  R!  R6  R5  R  R#  R   R$  RV  R7  R8  R;  R  R  RM   Ra  R"  R\  R[  RF  R   Rg  R   Rh  R   Ri  R   Rj  R   Rk  Rn  Rl  Rm  R  R  R  R  R  R  R  R  (    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyR    st   %									Q			
																							(			

							c          C   s   t  j d  }  d } d } t | j    } d GHx) |  j   D] } d t |  d f GHq? Wd GHd | GHd	 GHt |  |  j   d  S(
   NsW  
    # 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'
    s*   John ate the cake on the table with a forks   John ate the cake on the tables
   grammar= (s       t   ,t   )s   tokens = %rs,   Calling "ChartParserApp(grammar, tokens)"...(   R   RN  R   RY  RP  R   R  R  (   R   t   sentRQ  Rf  (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   app	  s    		t   __main__Rr  (E   R   t
   __future__R    RC  t   os.pathRI  t   six.moves.tkinterR   R   R   R   R   R   R   R   R	   R
   t   six.moves.tkinter_fontR   t   six.moves.tkinter_messageboxR   R   t   six.moves.tkinter_tkfiledialogR   R   t   nltk.parse.chartR   R   R   R   R   R   R   R   R   R   t	   nltk.treeR   t   nltk.grammarR   R   t	   nltk.utilR   t   nltk.draw.utilR   R   R    R!   R"   R#   t	   nltk.drawR$   R%   R&   R'   t   objectRI   R   R   RY  R  R  R  R  R  R  Rr  RF   t   __all__(    (    (    s7   lib/python2.7/site-packages/nltk/app/chartparser_app.pyt   <module>"   sF   FF.
      	  	
