o
    rZhH                     @   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   E/var/www/auris/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   Z_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)$ZNNP)zT^(walks|sees|eats|chases|believes|gives|sleeps|chases|persuades|tries|seems|leaves)$VB)z!^(go|order|vanish|find|approach)$r7   )z^(a)$Zex_quant)z	^(every)$Z
univ_quant)z.^(sandwich|man|dog|pizza|unicorn|cat|senator)$ZNN)z^(big|gray|former)$ZJJ)z^(him|himself)$ZPRP)taggerF)	depparserremove_duplicates)r   r   r   _glue)r4   r8   r9   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r<   z*FontsizeZ	helveticabold)familyweightr>   )r@   r>   r      )r
   r   _sysfontZ
option_addr   _sizer%   Zcgetget	_boldfont_font_bigfont)r4   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leftrB   fillsidepadxZExamplesr<   textsinglegroovewhite#909090#004040#c0f0c0Z
selectmoderelief
background
foregroundr<   ZselectforegroundZselectbackgroundrightr   rO   rN   expandend  %s   (   heightwidthverticalZorientZyscrollcommandcommandyrO   rN   <<ListboxSelect>>)r   Z_exampleFramepackr   rF   Z_exampleList_labelr   rG   _exampleListr#   insertconfigminlenr   r%   yviewr2   _exampleList_select)r4   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 )NrK   rL   rB   rM   ZReadingsrQ   rS   rT   rU   rV   rW   rX   rY   r]   r   r^   rg   rh   ri   rj   rl   rm   )r   Z_readingFramero   r   rF   Z_readingList_labelr   rG   _readingListr   rr   r%   ru   _populate_readingListbox)r4   rw   rx   ry   r   r   r   r/      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   r`   ra   r   rb      rd   rn   )
rz   deleterangert   r'   rq   rr   rs   r2   _readingList_select)r4   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   r2   destroynextprevr4   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   rB   )rN   rO   rP   padyZPrevz#90c0d0black)rR   r[   r\   rk   rL   )rO   Next)r   Z_buttonframero   r   r   r   )r4   rw   Z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   re   r1   _redraw)r4   eventx1y1Zx2y2r   r   r   r3      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 )
NrU   
   rB   Zsunken)r[   ZcloseenoughborderrZ   r   rK   top)r_   rN   rO   r   )r   r   ro   canvasr1   Z_treeZ_textwidgetsZ	_textline)r4   rw   r   r   r   r   r0      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   )ZtearoffZExitr   q)label	underlinerk   acceleratorFile)r   r   menur   zn, SpaceZPreviouszp, BackspaceActionzRemove Duplicatesr)r   r   variablerk   r   OptionsZTinyr   )r   r   r   valuerk   ZSmall   ZMedium   ZLarge   ZHuge   ZViewZAbout)r   r   rk   ZHelp)r   )r   Zadd_commandr   Zadd_cascader   r   Zadd_checkbuttonr;   r:   _toggle_remove_duplicatesZadd_radiobuttonrD   resizeaboutrr   )r4   rw   ZmenubarZfilemenuZ
actionmenuZ
optionmenuZviewmenuZ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   )r1   r)   clearr(   	DrsWidgetdrawr*   )r4   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   r4   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   )rz   curselectionr>   rt   int_select_previous_example_readingList_store_selectionr4   r   	selectionZ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_selectionrt   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   )rz   r   r>   rt   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&   rt   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    )Ztkinter.messageboxr   showr   r   )r4   r   ZABOUTZTITLEr   r   r   r   r     s   zDrtGlueDemo.aboutc                 G   s   d| _ | j  d S r   )r   r   Z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)r4   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)r>   rB   )
rD   r%   rE   rG   	configureabsrF   rC   rH   r   )r4   r>   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   r`   c                 S   r   r   r   )r   exr   r   r   r     r   z9DrtGlueDemo._toggle_remove_duplicates.<locals>.<listcomp>r   )r;   r:   rp   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   )rp   r   rt   r   r   r4   r   r   r   r   r   rv        
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   r`   zError: z  %s *rb   rc   rd   )r&   r#   rp   r   r$   
isinstancelistr'   r*   r;   Zparse_to_meaning	Exceptionr   r   strr}   rq   rr   rs   rt   r{   selection_setr(   r   )r4   r   r   cacher   r   r   r   r     s>   


z(DrtGlueDemo._exampleList_store_selectionc                 C   r   r   )rz   r   rt   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   r`   )	r'   rz   r   r   simplify	normalizeZresolve_anaphorar(   r   )r4   r   readingr   r   r   r     s   
z(DrtGlueDemo._readingList_store_selectionr   )__name__
__module____qualname__r6   r+   r"   r.   r/   r{   r!   r-   r3   r0   r,   r   r   r   r   r   r   r   r   r   r   r   rv   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    )rR   r<   r=   r   )r   r   r   r   )r(   r1   r
   ZitemcgetZcreate_textr<   Z_BUFFERbbox)r4   r   Zdrsattribsr   r   r   r6     s   
zDrsWidget.__init__c                 C   s2   t | j| jd \}}dd|d |d f| _d S )N)r   r   r   )r   r(   r1   r   r   )r4   r]   r   r   r   r   r     s   zDrsWidget.drawc                 C   s   | j j| jddd d S )NrU   0)rN   rf   )r1   Zcreate_rectangler   r   r   r   r   r   
  s   zDrsWidget.clearN)r   r   r   r6   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   )r5   r   r   r   demo  s   r   __main__N) tkinterr   r   r   r   r   r   r   r	   Ztkinter.fontr
   Znltk.draw.utilr   r   ImportErrorZ
nltk.parser   Znltk.sem.drtr   r   Znltk.sem.gluer   Znltk.sem.logicr   Znltk.tagr   Z	nltk.utilr   r   r   r   r   r   r   r   r   <module>   s,   	(   d
