o
    iH                     @   s   z$d dl 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 W n	 ey-   Y nw d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ G d
d dZG dd dZdd Zedkroe  dS dS )    )ButtonFrameIntVarLabelListboxMenu	ScrollbarTk)Font)CanvasFrameShowText)
MaltParser)	DrsDrawerDrtVariableExpression)DrtGlue)Variable)RegexpTagger)in_idlec                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd6d*d+Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd)S )7DrtGlueDemoc                 C   s   t  | _| jd |   | | j || _dd |D | _t| j| _| j	d d| _
g | _d | _d | _d | _|   | | j | | j | | j | | j | | j | jd| j d S )NzDRT Glue Democ                 S      g | ]}d qS N ).0exampler   r   Q/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nltk/sem/drt_glue_demo.py
<listcomp>(       z(DrtGlueDemo.__init__.<locals>.<listcomp>   z<Configure>)r	   _toptitle_init_bindings_init_fonts	_examples_readingCacher   _show_grammarset_curExample	_readings_drs
_drsWidget_error
_init_glue_init_menubar_init_buttons_init_exampleListbox_init_readingListbox_init_canvas_canvasbind
_configure)selfexamplesr   r   r   __init__   s(   zDrtGlueDemo.__init__c                 C   s(   t g d}t|d}t|dd| _d S )N))z^(David|Mary|John)$NNP)zT^(walks|sees|eats|chases|believes|gives|sleeps|chases|persuades|tries|seems|leaves)$VB)z!^(go|order|vanish|find|approach)$r9   )z^(a)$ex_quant)z	^(every)$
univ_quant)z.^(sandwich|man|dog|pizza|unicorn|cat|senator)$NN)z^(big|gray|former)$JJ)z^(him|himself)$PRP)taggerF)	depparserremove_duplicates)r   r   r   _glue)r5   r?   r@   r   r   r   r,   E   s
   
zDrtGlueDemo._init_gluec                 C   s   t t d d| _|d| j t|| _| j| jd t dd| j d| _	t d| j d| _
| j d	k rC| j d
 }n| j d
 }t dd|d| _d S )NfontrC   z*Fontsize	helveticabold)familyweightrE   )rH   rE   r      )r
   r   _sysfont
option_addr   _sizer&   cgetget	_boldfont_font_bigfont)r5   rootbigr   r   r   r"   Y   s   
zDrtGlueDemo._init_fontsc              
   C   s  t | | _}| jjdddd t| j| jdd| _| j  t| jddd	d
| jddd| _| jjdddd | j	D ]}| j
dd|  q:| jjtt| j	ddd t| j	dkryt| jdd}| jj|jd |j| jjd |jddd | jd| j d S )NbothleftrJ   fillsidepadxExamplesrC   textsinglegroovewhite#909090#004040#c0f0c0
selectmoderelief
background
foregroundrC   selectforegroundselectbackgroundrightr   rY   rX   expandend  %s   (   heightwidthverticalorientyscrollcommandcommandyrY   rX   <<ListboxSelect>>)r   _exampleFramepackr   rP   _exampleList_labelr   rQ   _exampleListr#   insertconfigminlenr   r&   yviewr3   _exampleList_select)r5   parent	listframer   
listscrollr   r   r   r/   j   s4   


z DrtGlueDemo._init_exampleListboxc              
   C   s   t | | _}| jjdddd t| j| jdd| _| j  t| jddd	d
| jddd| _| jjdddd t	| jdd}| jj
|jd |j
| jjd |jddd |   d S )NrU   rV   rJ   rW   Readingsr\   r^   r_   r`   ra   rb   rc   rd   rk   r   rl   ru   rv   rx   rz   r|   r}   )r   _readingFramer   r   rP   _readingList_labelr   rQ   _readingListr   r   r&   r   _populate_readingListbox)r5   r   r   r   r   r   r   r0      s,   

z DrtGlueDemo._init_readingListboxc                 C   sh   | j dd tt| jD ]}| j dd|d   q| j jtt| jddd | j d| j	 d S )	Nr   rn   ro   r   rp      rr   r~   )
r   deleteranger   r(   r   r   r   r3   _readingList_select)r5   ir   r   r   r      s
   z$DrtGlueDemo._populate_readingListboxc                 C   st   | j d| j | j d| j | j d| j | j d| j | j d| j | j d| j | j d| j d S )Nz<Control-q>z<Control-x>z<Escape>nz<space>pz<BackSpace>)r   r3   destroynextprevr5   r   r   r   r!      s   zDrtGlueDemo._init_bindingsc                 C   s\   t | | _}|jddddd t|ddd| jd	jd
d t|ddd| jd	jd
d d S )Nnonebottom   rJ   )rX   rY   rZ   padyPrevz#90c0d0black)r]   rg   rh   r{   rV   )rY   Next)r   _buttonframer   r   r   r   )r5   r   buttonframer   r   r   r.      s(   
zDrtGlueDemo._init_buttonsc                 C   sD   d| _ | j \}}}}|jd }d||||f | jd< |   d S )Nr      z%d %d %d %dscrollregion)	_autostep_cframer   rs   r2   _redraw)r5   eventx1y1x2y2r   r   r   r4      s
   
zDrtGlueDemo._configurec                 C   sN   t |ddddd| _| jjddddd	 | j  }| _d | _g | _d | _d S )
Nr`   
   rJ   sunken)rg   closeenoughborderrf   r   rU   top)rm   rX   rY   r   )r   r   r   canvasr2   _tree_textwidgets	_textline)r5   r   r   r   r   r   r1      s   
zDrtGlueDemo._init_canvasc                 C   s  t |}t |dd}|j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d|d t |dd}|jdd| jj| j	dd |jdd|d t |dd}|j
d| jdd| jd |j
d| jdd| jd |j
d| jdd| jd |j
d| jdd| jd |j
d| jdd| jd |jdd|d t |dd}|jdd| jd |jd d|d |j|d! d S )"Nr   )tearoffExitr   q)label	underliner{   acceleratorFile)r   r   menur   zn, SpacePreviouszp, BackspaceActionzRemove Duplicatesr)r   r   variabler{   r   OptionsTinyr   )r   r   r   valuer{   Small   Medium   Large   Huge   ViewAbout)r   r   r{   Help)r   )r   add_commandr   add_cascader   r   add_checkbuttonrB   rA   _toggle_remove_duplicatesadd_radiobuttonrM   resizeaboutr   )r5   r   menubarfilemenu
actionmenu
optionmenuviewmenuhelpmenur   r   r   r-      s   


zDrtGlueDemo._init_menubarc                 C   sb   | j }| jd ur| j  | jrt| j | j| _| j  | jr/t| j | j| _| j  d S d S r   )r2   r*   clearr)   	DrsWidgetdrawr+   )r5   r   r   r   r   r   3  s   


zDrtGlueDemo._redrawc                 G   s(   d| _ | jd u r
d S | j  d | _d S Nr   )r   r   r   r5   er   r   r   r   F  s
   


zDrtGlueDemo.destroyc                 G   sx   | j  }| j  }|dkr6t|dkr-t|d }|dkr$|   d S | |d  d S | |d  d S |   d S Nr   r   )r   curselectionrE   r   int_select_previous_example_readingList_store_selectionr5   r   	selectionreadingListSizeindexr   r   r   r   M  s   

zDrtGlueDemo.prevc                 C   s6   | j dkr| | j d  d S | t| jd  d S r   )r'   _exampleList_store_selectionr   r#   r   r   r   r   r   d  s   
z$DrtGlueDemo._select_previous_examplec                 G   sx   | j  }| j  }|dkr6t|dkr/t|d }||d kr&|   d S | |d  d S | d d S |   d S r   )r   r   rE   r   r   _select_next_exampler   r   r   r   r   r   l  s   

zDrtGlueDemo.nextc                 C   s6   | j t| jd k r| | j d  d S | d d S Nr   r   )r'   r   r#   r   r   r   r   r   r     s   z DrtGlueDemo._select_next_examplec                 G   sF   d}d}zddl m} |||d  W d S    t| j|| Y d S )Nz\NLTK Discourse Representation Theory (DRT) Glue Semantics Demo
Written by Daniel H. GarrettezAbout: NLTK DRT Glue Demor   )Message)messager    )tkinter.messageboxr   showr   r   )r5   r   ABOUTTITLEr   r   r   r   r     s   zDrtGlueDemo.aboutc                 G   s   d| _ | j  d S r   )r   r   print_to_filer   r   r   r   
postscript  s   zDrtGlueDemo.postscriptc                 O   s    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   mainloop)r5   argskwargsr   r   r   r     s   zDrtGlueDemo.mainloopNc                 C   s~   |d ur
| j | | j  }| jjt| d | jjt| d | jjt| d | jjt|d  d | 	  d S )N)rE   rJ   )
rM   r&   rO   rQ   	configureabsrP   rK   rR   r   )r5   rE   r   r   r   r     s   
zDrtGlueDemo.resizec                 C   sZ   | j j | j _| jdd g | _|   dd | jD | _d| _d | _	d | _
|   d S )Nr   rn   c                 S   r   r   r   )r   exr   r   r   r     r   z9DrtGlueDemo._toggle_remove_duplicates.<locals>.<listcomp>r   )rB   rA   r   selection_clearr(   r   r#   r$   r'   r+   r)   r   r   r   r   r   r     s   z%DrtGlueDemo._toggle_remove_duplicatesc                 C   0   | j  }t|dkrd S | t|d  d S r   )r   r   r   r   r   r5   r   r   r   r   r   r        
zDrtGlueDemo._exampleList_selectc              
   C   s,  || _ | j| }| jdd |r| j| }|r+t|tr$|| _d | _n]g | _|| _nVz| j	
|| _d | _| j| j|< W nC ty } z7g | _ttdt| | _| j| j|< | j| | j|d|  | jjtt| jddd W Y d }~nd }~ww |   | j| d | _|   d S d S )Nr   rn   zError: z  %s *rp   rq   rr   )r'   r#   r   r   r$   
isinstancelistr(   r+   rB   parse_to_meaning	Exceptionr   r   strr   r   r   r   r   r   selection_setr)   r   )r5   r   r   cacher   r   r   r   r     s>   


z(DrtGlueDemo._exampleList_store_selectionc                 C   r   r   )r   r   r   r   r   r  r   r   r   r     r  zDrtGlueDemo._readingList_selectc                 C   sJ   | j | }| jdd |r#| j| |   | _|   d S d S )Nr   rn   )	r(   r   r   r  simplify	normalizeresolve_anaphorar)   r   )r5   r   readingr   r   r   r     s   
z(DrtGlueDemo._readingList_store_selectionr   )__name__
__module____qualname__r7   r,   r"   r/   r0   r   r!   r.   r4   r1   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s6    )"

L

&r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 K   s<   || _ || _t||jdddddd|_d|_d| _d S )Nr    )r]   rC   rD   r   )r   r   r   r   )r)   r2   r
   itemcgetcreate_textrC   _BUFFERbbox)r5   r   drsattribsr   r   r   r7     s   
zDrsWidget.__init__c                 C   s2   t | j| jd \}}dd|d |d f| _d S )N)r   r   r   )r   r)   r2   r   r  )r5   rk   r   r   r   r   r     s   zDrsWidget.drawc                 C   s   | j j| jddd d S )Nr`   0)rX   rt   )r2   create_rectangler  r   r   r   r   r   
  s   zDrsWidget.clearN)r  r  r  r7   r   r   r   r   r   r   r     s    	r   c                  C   s   g d} t |   d S )N)z
John walkszDavid sees MaryzDavid eats a sandwichzevery man chases a dogzJohn chases himself)r   r   )r6   r   r   r   demo  s   r  __main__N) tkinterr   r   r   r   r   r   r   r	   tkinter.fontr
   nltk.draw.utilr   r   ImportError
nltk.parser   nltk.sem.drtr   r   nltk.sem.gluer   nltk.sem.logicr   nltk.tagr   	nltk.utilr   r   r   r  r  r   r   r   r   <module>   s,   	(   d
