a
    VŸ$cõƒ  ã                   @   sZ
  d dl mZmZmZ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mZmZ d dlZd dlZedƒZdad aejdd„ ƒZdd„ ZG d	d
„ d
ejƒZdaG dd„ deƒZ G dd„ deƒZ!g d¢Z"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%ej &d¡Z'G dd„ de%ƒZ(g Z)g Z*g Z+g d¢Z,dd„ e,D ƒZ-dd„ e,D ƒZ.dd„ e,D ƒZ/g d¢Z0dd„ e0D ƒZ1d d„ e0D ƒZ2d!d„ d"D ƒZ3d#d„ d$D ƒZ4d%d„ d&D ƒZ5d'd„ d(D ƒZ6e!d)ƒe!d*ƒe!d+ƒe!d,ƒe!d-ƒe!d.ƒgZ7d/d0„ Z8e(d1d2d ƒ e!d3ƒ e!d4ƒ e8e7ƒ e8e-ƒ e(d5d6d d7d8 e d5ƒ e!d9ƒ e!d:ƒ e!d;ƒ e!d<ƒ e8e7ƒ e8e-ƒ e8e1ƒ e(d=d>e'ƒ e8e7ƒ e8e-ƒ e8e6ƒ e(d?d@e'ƒ e8e7ƒ e8e-ƒ e8e6ƒ e(dAdBe'ƒ e8e7ƒ e8e-ƒ e8e6ƒ e(dCdDe'ƒ e dEƒ e dFƒ e!dGƒ e#dHƒ e8e7ƒ e8e-ƒ e(dIdJe'ƒ e dKƒ e#dHƒ e8e7ƒ e8e-ƒ dLD ].Z9e(e9dMe9 dNƒ e8e7ƒ e8e-ƒ e8e3ƒ q2e(dOdPd ƒ e dOƒ e!dQƒ e(dRdSd ƒ e dTƒ e!dQƒ e!dUƒ e(dVdWd ƒ e!d.ƒ e!dXƒ e!dYƒ e!dZƒ e!d[ƒ e!d\ƒ e!d]ƒ e!d^ƒ e!d_ƒ e8e7ƒ e8e-ƒ e8e1ƒ e(d`dad ƒ e dbƒ e(dcdddNƒ e!dQƒ e!deƒ e!dfƒ e!dgƒ e!dhƒ e!diƒ e!djƒ e8e7ƒ e8e-ƒ e8e3ƒ e8e4ƒ e(dkdld ƒ e!dmƒ e!dnƒ e!doƒ e!dpƒ e!dqƒ e!drƒ e!dsƒ e!dQƒ e!deƒ e!dfƒ e!dgƒ e!dhƒ e!dtƒ e!diƒ e!djƒ e8e7ƒ e8e-ƒ e8e3ƒ e8e4ƒ e(dudvd d7d8 e dwƒ e!dQƒ e!deƒ e!dfƒ e!dgƒ e!dhƒ e!dxƒ e!d;ƒ e!d<ƒ e!diƒ e!djƒ e8e7ƒ e8e-ƒ e8e3ƒ e8e4ƒ e8e.ƒ e8e2ƒ e(dwdyd d7d8 e dwƒ e!dxƒ e8e7ƒ e8e-ƒ e8e3ƒ e8e.ƒ e8e2ƒ dzD ]^Z9e(e9dMe9 d ƒ e!d{ƒ e!d|ƒ e!d}ƒ e!d^ƒ e!dfƒ e!dgƒ e8e7ƒ e8e-ƒ e8e5ƒ qe(d~ddNƒ e!d€ƒ e!dƒ e!d‚ƒ e!dƒƒ e!d„ƒ e!d…ƒ e!d†ƒ e!d‡ƒ e!dˆƒ e!d‰ƒ e$dŠdHƒ e8e7ƒ e8e-ƒ e8e/ƒ e(d‹dŒe'ƒ e!dƒ e!doƒ e!dpƒ e!dnƒ e!drƒ e!dqƒ e!dsƒ e!dmƒ e!dŽƒ e!dƒ e8e7ƒ e8e-ƒ e(dd‘dNƒ e d’ƒ e!dQƒ e!deƒ e!dfƒ e!dgƒ e8e7ƒ e8e-ƒ e8e3ƒ e8e4ƒ e(d“d”d ƒ e d’ƒ e!d{ƒ e!d|ƒ e!d}ƒ e8e7ƒ e8e-ƒ e8e5ƒ e(d•d–dNƒ e!d)ƒ e!d*ƒ ej:j;D ]Z<e#e<ƒ qe(d0d—d ƒ e dbƒ e!d)ƒ e!d*ƒ ej:j;D ]Z<e#e<ƒ qPe(d˜d™d ƒ e dšƒ e!dQƒ e(d›dœdNƒ e!dƒ e!dƒƒ e!džƒ e!dŸƒ e!d ƒ e!d¡ƒ e!d¢ƒ e!d£ƒ e!d¤ƒ e!d¥ƒ e!deƒ e!dfƒ e!dgƒ e!d¦ƒ e#d§ƒ e8e7ƒ e8e-ƒ e(d¨d©e'ƒ e!dªƒ e8e7ƒ e8e-ƒ e(d«d¬d ƒ e!dfƒ e!dgƒ e#d­ƒ e8e7ƒ e8e-ƒ G d®d¯„ d¯e%ƒZ=e=d°ƒ G d±d²„ d²e%ƒZ>e>d.ƒ G d³d´„ d´e%ƒZ?e?dµƒ G d¶d·„ d·e%ƒZ@e@d¸ƒ G d¹dº„ dºe%ƒZAeAd»ƒ G d¼d½„ d½e%ƒZBeBd¾d7ƒ eBd¿dÀƒ e+D ]Z<e< 8e*¡ 
qG dÁdÂ„ dÂejjCƒZDG dÃdÄ„ dÄe%ƒZEeEƒ ZFeF 8e*¡ dÅdÆ„ ZGdS )Çé    )ÚdivisionÚabsolute_importÚwith_statementÚprint_functionÚunicode_literals)ÚPY2Ú
basestringÚbchrÚbordÚchrÚopenÚpystrÚrangeÚroundÚstrÚtobytesÚunicodeNÚastc                   c   s   t d7 a dt  V  t d8 a d S )Né   z_%d)Únew_variable_serial© r   r   úrenpy/screenlang.pyÚnew_variable(   s    
r   c                 C   s,   t  | ¡D ]} t| dƒr
|  j|7  _q
d S ©NÚlineno)r   ÚwalkÚhasattrr   )ÚnodeÚamountr   r   r   Úincrement_lineno1   s    
r   c                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )ÚLineNumberNormalizerc                 C   s
   d| _ d S )Nr   )Ú	last_line©Úselfr   r   r   Ú__init__9   s    zLineNumberNormalizer.__init__c                    s6   t |dƒr"t| j|jƒ| _| j|_tt| ƒ |¡ d S r   )r   Úmaxr!   r   Úsuperr    Úgeneric_visit)r#   r   ©Ú	__class__r   r   r'   <   s    
z"LineNumberNormalizer.generic_visit)Ú__name__Ú
__module__Ú__qualname__r$   r'   Ú__classcell__r   r   r(   r   r    7   s   r    c                   @   s   e Zd ZdZdd„ ZdS )Ú
Positionalz?
    This represents a positional parameter to a function.
    c                 C   s   || _ trt | ¡ d S ©N©ÚnameÚparserÚadd©r#   r1   r   r   r   r$   Q   s    zPositional.__init__N©r*   r+   r,   Ú__doc__r$   r   r   r   r   r.   L   s   r.   c                   @   s   e Zd ZdZdd„ ZdS )ÚKeywordzF
    This represents an optional keyword parameter to a function.
    c                 C   s   || _ trt | ¡ d S r/   r0   r4   r   r   r   r$   ]   s    zKeyword.__init__Nr5   r   r   r   r   r7   X   s   r7   )
Ú Úinsensitive_Úhover_Úidle_Ú	activate_Ú	selected_Úselected_insensitive_Úselected_hover_Úselected_idle_Úselected_activate_c                   @   s   e Zd ZdZdd„ ZdS )ÚStylez:
    This represents a style parameter to a function.
    c                 C   s   || _ trt | ¡ d S r/   r0   r4   r   r   r   r$   w   s    zStyle.__init__Nr5   r   r   r   r   rB   r   s   rB   c                   @   s   e Zd ZdZdd„ ZdS )ÚPrefixStylezC
    This represents a prefixed style parameter to a function.
    c                 C   s   || _ || _trt | ¡ d S r/   )Úprefixr1   r2   r3   )r#   rD   r1   r   r   r   r$   ƒ   s    zPrefixStyle.__init__Nr5   r   r   r   r   rC   ~   s   rC   c                   @   sj   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Zddd„Z	ddd„Z
dd„ Zdd„ Zdd„ ZdS )ÚParserc                 C   s&   || _ g | _i | _i | _t | ¡ d S r/   )r1   Ú
positionalÚkeywordÚchildrenÚall_statementsÚappendr4   r   r   r   r$      s
    zParser.__init__c                 C   s   d| j j| jf S )Nz<%s: %s>)r)   r*   r1   r"   r   r   r   Ú__repr__š   s    zParser.__repr__c                 C   s¾   t |tƒr"|D ]}|  |¡ qdS t |tƒr:| j |¡ n€t |tƒrR|| j|j< nht |t	ƒrxt
D ]}|| j||j < q`nBt |tƒr¤t
D ]}|| j|j| |j < q†nt |tƒrº|| j|j< dS )z/
        Adds a clause to this parser.
        N)Ú
isinstanceÚlistr3   r.   rF   rJ   r7   rG   r1   rB   ÚSTYLE_PREFIXESrC   rD   rE   rH   )r#   ÚiÚjr   r   r   r3      s     





z
Parser.addFc                 C   sV   |  ¡ p| d¡}|rN|| jv rN|r8| j|  ||¡}n| j|  ||¡}|S d S d S )Nz\$)ÚwordÚmatchrH   Úparse_layoutÚparse)r#   Úlr1   Úlayout_moderQ   Úcr   r   r   Úparse_statement¹   s    zParser.parse_statementc                 C   s   |  d| j ¡ d S )NzEThe %s statement cannot be used as a container for the has statement.)Úerrorr1   ©r#   rU   r1   r   r   r   rS   Æ   s    zParser.parse_layoutc              	   C   s°   |  |¡ | ¡ }g }tƒ €}d}| ¡ rŽt|jƒdkrX| |  d|||f |j¡¡ n|}|  	||¡}|d u rz| 
d¡ | |¡ |d7 }q"W d   ƒ n1 s¢0    Y  |S )Nr   r   ú%s = (%s, %d)z#Expected screen language statement.)Úexpect_blockÚsubblock_lexerr   ÚadvanceÚlenÚblockÚextendÚ
parse_execÚnumberrX   rY   )r#   ÚstmtrU   r1   ÚrvÚ
child_nameÚcountrW   r   r   r   Úparse_childrenÉ   s    
 

(zParser.parse_childrenr   c                 C   s    t |tƒrtj |¡}zt |d¡jd j}W n^ t	yŒ } zFtj
 t||jd d  d d|jd d |jd d ¡‚W Y d}~n
d}~0 0 t||d ƒ |S )zˆ
        Parses an expression for eval, and then strips off the module
        and expr instances, and adjusts the line number.
        Úevalr   r   z-Syntax error while parsing python expression.é   é   N)rL   r   ÚrenpyÚpythonÚescape_unicoder   rT   ÚbodyÚvalueÚSyntaxErrorr2   Ú
ParseErrorÚfilenameÚargsr   )r#   Úexprr   re   Úer   r   r   Ú
parse_evalä   s    
ûzParser.parse_evalc                 C   sš   t |tƒrtj |¡}zt |d¡}W n^ ty„ } zFtj 	t
||jd d  d d|jd d |jd d ¡‚W Y d}~n
d}~0 0 t||d ƒ |jS )zŽ
        Parses an expression for exec, then strips off the module and
        adjusts the line number. Returns a list of statements.
        Úexecr   z'Syntax error while parsing python code.rj   rk   N)rL   r   rl   rm   rn   r   rT   rq   r2   rr   rs   rt   r   ro   )r#   Úcoder   re   rv   r   r   r   rb   û   s    
ûzParser.parse_execc                 C   s   |j }| |j¡}|  ||¡S r/   )rc   ÚrequireÚsimple_expressionrw   ©r#   rU   r   ru   r   r   r   Úparse_simple_expression  s    zParser.parse_simple_expressionc                 C   s   |j }| |j¡}|  ||¡S r/   )rc   rz   Úcomma_expressionrw   r|   r   r   r   Úparse_comma_expression  s    zParser.parse_comma_expressionc                 C   s   t dƒ‚dS )zï
        This is expected to parse a function statement, and to return
        a list of python ast statements.

        `l` the lexer.

        `name` the name of the variable containing the name of the
        current statement.
        zNot ImplementedN)Ú	ExceptionrZ   r   r   r   rT     s    zParser.parseN)F)r   )r   )r*   r+   r,   r$   rK   r3   rX   rS   rh   rw   rb   r}   r   rT   r   r   r   r   rE   ‹   s   


rE   Úmanyc                       s4   e Zd ZdZd
‡ fdd„	Zdd„ Zddd	„Z‡  ZS )ÚFunctionStatementParserz>
    This is responsible for parsing function statements.
    r   Fc                    sB   t t| ƒ |¡ || _|| _|| _| a|dkr8t | ¡ || _	d S )Nr   )
r&   r‚   r$   ÚfunctionÚ	nchildrenÚunevaluatedr2   Úchildbearing_statementsrJ   Úscope)r#   r1   rƒ   r„   r…   r‡   r(   r   r   r$   6  s    
z FunctionStatementParser.__init__c                 C   s   |   ||d¡S )NT)rT   rZ   r   r   r   rS   M  s    z$FunctionStatementParser.parse_layoutc              
      sþ  g }|j }|r(ˆjdkr(| dˆj ¡ ˆ ˆj|¡}tj|d|g g d d d‰ tƒ ‰‡ ‡‡fdd„}ˆj	D ]}ˆ j
 ˆ |¡¡ qj| d¡r¦| ¡  | ˆj¡ d}	qÌ| ¡ rÀ| ˆj¡ d}	qÌ||d	ƒ q‚| tjˆ d
¡ ˆjdkrø| ˆ d¡¡ ˆjdk}
d}g }|	r| | ¡ ¡ |r.| |¡ tƒ D}|D ],}| ¡ r<| ¡ }| d¡rèˆjdkr|| dˆj ¡ |dkr| d¡ ˆj||dd}|d u r´| d¡ | ¡  | ˆ d|||f ¡¡ | |¡ d}
qBˆ ||¡}|d ur.| ˆ d|||f ¡¡ | |¡ |d7 }qB| |¡ | ¡ sL||dƒ | ¡ sB||dƒ qLqBq<W d   ƒ n1 s‚0    Y  |
r¢| ˆ d¡¡ dˆvrÊˆ j tjdˆ ||¡d¡ dˆvrúˆjrúˆ j tjdˆ d|¡d¡ |S )Nr   z,The %s statement cannot be used as a layout.)r   Ú
col_offsetÚfuncrt   ÚkeywordsÚstarargsÚkwargsc                    s†   |   ¡ }|d u r|  |¡ |ˆjvr8|  d|ˆjf ¡ |ˆv rT|  d|ˆjf ¡ ˆ |¡ ˆ | ¡}ˆ j tjt	|ƒ|d¡ d S )NzA%r is not a keyword argument or valid child for the %s statement.z=keyword argument %r appears more than once in a %s statement.©Úargrp   )
rQ   rY   rG   r1   r3   r   rŠ   rJ   r   r   )rU   Úexpectr1   ru   ©Ú	call_nodeÚseen_keywordsr#   r   r   Úparse_keywordj  s    



ÿz4FunctionStatementParser.parse.<locals>.parse_keywordú:TFz3expected a keyword argument, colon, or end of line.)rp   r   zui.child_or_fixed()Úhasz(The %s statement does not take a layout.zCThe has statement may not be given after a child has been supplied.)rV   zHas expects a child statement.r[   z/expected a keyword argument or child statement.z+expected a keyword argument or end of line.z
ui.close()Úidr   r‡   Ú_scope)rc   r„   rY   r1   rw   rƒ   r   ÚCallÚsetrF   rt   rJ   r}   rR   Ú
expect_eolr\   ÚeolÚexpect_noblockÚExprra   rb   r]   r   r^   Ú
checkpointrG   rX   ÚpopÚrevertrŠ   r‡   )r#   rU   r1   rV   re   r   r‰   r“   Ú_ir`   Úneeds_closeÚchild_indexÚlexersrf   ÚstaterW   r   r   r   rT   P  s’    ù



















6
zFunctionStatementParser.parse)r   FF)F)r*   r+   r,   r6   r$   rS   rT   r-   r   r   r(   r   r‚   1  s   r‚   )ÚanchorÚxanchorÚyanchorÚposÚxposÚyposÚalignÚxalignÚyalignÚxoffsetÚyoffsetÚmaximumÚxmaximumÚymaximumÚareaÚclippingÚxfillÚyfillÚxcenterÚycenterÚxsizeÚysizeÚxysizeÚaltÚdebugc                 C   s   g | ]}t |ƒ‘qS r   ©rB   ©Ú.0rO   r   r   r   Ú
<listcomp>  ó    rÂ   c                 C   s   g | ]}t d |ƒ‘qS ©Útext_©rC   rÀ   r   r   r   rÂ     rÃ   c                 C   s   g | ]}t d |ƒ‘qS )Úside_rÆ   rÀ   r   r   r   rÂ     rÃ   )"Ú	antialiasÚverticalÚblack_colorÚboldÚcolorÚdrop_shadowÚdrop_shadow_colorÚfirst_indentÚfontÚsizeÚhyperlink_functionsÚitalicÚjustifyÚkerningÚlanguageÚlayoutÚline_leadingÚline_spacingÚminwidthÚ	min_widthÚnewline_indentÚoutlinesÚrest_indentÚ
ruby_styleÚslow_cpsÚslow_cps_multiplierÚslow_abortableÚstrikethroughÚ
text_alignÚtext_y_fudgeÚ	underlineÚminimumÚxminimumÚyminimumc                 C   s   g | ]}t |ƒ‘qS r   r¿   rÀ   r   r   r   rÂ   7  rÃ   c                 C   s   g | ]}t d |ƒ‘qS rÄ   rÆ   rÀ   r   r   r   rÂ   8  rÃ   c                 C   s   g | ]}t |ƒ‘qS r   r¿   rÀ   r   r   r   rÂ   :  rÃ   )Ú
backgroundÚ
foregroundÚleft_marginÚright_marginÚbottom_marginÚ
top_marginÚxmarginÚymarginÚleft_paddingÚright_paddingÚtop_paddingÚbottom_paddingÚxpaddingÚypaddingÚ
size_grouprç   rè   ré   c                 C   s   g | ]}t |ƒ‘qS r   r¿   rÀ   r   r   r   rÂ   O  rÃ   )ÚsoundÚmouseÚ
focus_maskÚchildÚkeyboard_focusc                 C   s   g | ]}t |ƒ‘qS r   r¿   rÀ   r   r   r   rÂ   W  rÃ   )Úbar_verticalÚ
bar_invertÚbar_resizingÚleft_gutterÚright_gutterÚ
top_gutterÚbottom_gutterÚleft_barÚ	right_barÚtop_barÚ
bottom_barÚthumbÚthumb_shadowÚthumb_offsetrú   Úunscrollablerý   c                 C   s   g | ]}t |ƒ‘qS r   r¿   rÀ   r   r   r   rÂ   k  rÃ   )Ú
box_layoutÚbox_wrapÚbox_wrap_spacingÚbox_reverseÚorder_reverseÚspacingÚfirst_spacingÚ	fit_firstrç   rè   ré   Úatr–   ÚstyleÚstyle_groupÚfocusÚdefaultc                 C   s   t  | ¡ d S r/   )r2   r3   )Úthingr   r   r   r3   ƒ  s    r3   Únullzui.nullÚwidthÚheightÚtextzui.textT)r‡   ÚslowÚ	slow_doneÚ
substituter‡   Úhboxzui.hboxÚvboxzui.vboxÚfixedzui.fixedÚgridzui.gridÚcolsÚrowsÚ	transposer  Úsidezui.sideÚ	positions)ÚwindowÚframezui.r   Úkeyzui.keyÚactionÚtimerzui.timerÚdelayÚrepeatÚinputzui.inputÚlengthÚallowÚexcludeÚ	copypasterD   ÚsuffixÚchangedÚpixel_widthÚimagezui.imageÚimÚbuttonz	ui.buttonÚclickedÚhoveredÚ	unhoveredÚ	alternateÚselectedÚ	sensitiveÚimagebuttonzui.imagebuttonÚautoÚidleÚhoverÚinsensitiveÚselected_idleÚselected_hoverÚselected_insensitiveÚimage_styleÚ
textbuttonzui.textbuttonÚlabelÚ
text_stylezui.label)ÚbarÚvbarÚ
adjustmentr   rp   Úviewportzui.viewportÚ
child_sizeÚ
mousewheelÚ	arrowkeysÚ	draggableÚ
edgescrollÚxadjustmentÚyadjustmentÚxinitialÚyinitialÚ
scrollbarsrÇ   Úimagemapzui.imagemapÚgroundÚalphaÚcacheÚhotspotzui.hotspot_with_childÚspotÚhotbarz	ui.hotbarÚ	transformzui.transformzui.addÚonzui.onÚeventÚdragzui.dragÚ	drag_nameÚ	droppableÚ
drag_raiseÚdraggingÚdraggedÚdroppedÚdrop_allowableÚdrag_handleÚdrag_joinedÚ
mouse_droprü   Ú	draggroupzui.draggroupÚmin_overlapÚ	mouseareazui.mousearearû   c                   @   s   e Zd Zdd„ ZdS )Ú
PassParserc                 C   s   |   d|j¡S )NÚpass)rb   rc   rZ   r   r   r   rT   –  s    zPassParser.parseN©r*   r+   r,   rT   r   r   r   r   ru  ”  s   ru  rv  c                   @   s   e Zd Zdd„ ZdS )ÚDefaultParserc                 C   s8   |  |j¡}|  d¡ | ¡ }d||f }|  ||j¡S )Nú=z_scope.setdefault(%r, (%s)))rz   rQ   Úrestrb   rc   )r#   rU   r1   rz  ry   r   r   r   rT   Ÿ  s
    
zDefaultParser.parseNrw  r   r   r   r   rx    s   rx  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú	UseParserc                    s   t t| ƒ |¡ t | ¡ d S r/   )r&   r{  r$   r†   rJ   r4   r(   r   r   r$   ¯  s    zUseParser.__init__c                 C   sØ   |j }| |j¡}d| }tj |¡}d }d }|r”d}	|jD ]V\}
}|	|jv rT|}n6|	|jv rd|}n&|
d u rz|d| 7 }n|d|
|f 7 }|	d7 }	q<|d| 7 }|rÄ|r´|d| 7 }|rÄ|d| 7 }|d	7 }|  	||¡S )
Nzrenpy.use_screen(%rr   z, (%s)z	, %s=(%s)r   z, _name=%s, _scope=_scopez, *(%s)z, **(%s)ú))
rc   rz   rQ   rl   r2   Úparse_argumentsÚ	argumentsÚstarred_indexesÚdoublestarred_indexesrb   )r#   rU   r1   r   Útarget_namery   rt   ÚextraposÚextrakwÚindexÚkÚvr   r   r   rT   ³  s2    


zUseParser.parse©r*   r+   r,   r$   rT   r-   r   r   r(   r   r{  ­  s   r{  Úusec                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚIfParserc                    s   t t| ƒ |¡ t | ¡ d S r/   )r&   r‰  r$   r†   rJ   r4   r(   r   r   r$   ä  s    zIfParser.__init__c              
   C   sŒ  t ƒ l}d}|j}|  | |j¡|¡}| d¡ | ¡  |  d|||f ¡}| |  d||¡¡ g }t	j
||||dd}	|d7 }| ¡ }
| ¡ rf|}|j}| d¡r|  | |j¡|¡}|  d|||f ¡}| |  d||¡¡ g }| t	j
||||dd¡ |d7 }| ¡ }
qŠ| d¡rV| |  d|||f ¡¡ | |  d||¡¡ qfqŠ| |
¡ qfqŠW d   ƒ n1 s|0    Y  |	gS )	Nr   r”   r[   Úif)Útestro   Úorelser   rˆ   r   ÚelifÚelse)r   rc   rw   rz   Úpython_expressionrš   rb   ra   rh   r   ÚIfrž   r^   rG   rJ   r    )r#   rU   r1   rf   rg   r   Ú	conditionro   rŒ  re   r¥   Ú
old_orelser   r   r   rT   è  s<    




&zIfParser.parser‡  r   r   r(   r   r‰  â  s   r‰  rŠ  c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú	ForParserc                    s   t t| ƒ |¡ t | ¡ d S r/   )r&   r“  r$   r†   rJ   r4   r(   r   r   r$   $  s    zForParser.__init__c                 C   s˜   d}g }|j }| d¡r$|  |¡}n| ¡  d¡}|s8qh| tj|t ¡ |dd¡ | d¡rhd}qqhq|sv| 	d¡ |s‚|d S tj
|t ¡ d	S d S )
NFz\(zutf-8r   )r–   Úctxr   rˆ   ú,TzExpected tuple pattern.)Úeltsr”  )rc   rR   Úparse_tuple_patternr1   ÚencoderJ   r   ÚNameÚStorerY   ÚTuple)r#   rU   Úis_tupleÚpatternr   Úpr   r   r   r—  (  s"    


zForParser.parse_tuple_patternc           
      C   sø   |j }|  |¡}| d¡ |  | |j¡|j ¡}| d¡ | ¡  tƒ œ}tƒ L}|  d|||f ¡}| |  	d||¡¡ | |  d| ¡¡ W d   ƒ n1 s¢0    Y  |  d| ¡}	|	 
tj|||g |dd¡ W d   ƒ n1 sê0    Y  |	S )	NÚinr”   z%s = (%s, %s)Úforz%s += 1z%s = 0r   )ÚtargetÚiterro   rŒ  r   rˆ   )rc   r—  rz   rw   r  rš   r   rb   ra   rh   rJ   r   ÚFor)
r#   rU   r1   r   r  Ú
expressionÚcounter_namerf   rH   re   r   r   r   rT   H  s*    


2ú&zForParser.parse)r*   r+   r,   r$   r—  rT   r-   r   r   r(   r   r“  "  s    r“  r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚPythonParserc                    s   t t| ƒ |¡ || _d S r/   )r&   r¦  r$   Úone_line)r#   r1   r§  r(   r   r   r$   o  s    zPythonParser.__init__c                 C   sP   |j }| jr | ¡ }| d¡ n$| d¡ | d¡ | ¡ }|d7 }|  ||¡S )Nzone-line python statementr”   zpython blockr   )rc   r§  rz  rœ   rz   r\   Úpython_blockrb   )r#   rU   r1   r   Úpython_coder   r   r   rT   t  s    

zPythonParser.parser‡  r   r   r(   r   r¦  m  s   r¦  ú$rm   Fc                   @   sD   e Zd ZdZdZdZdZdZdZdd„ Z	dd	„ Z
d
d„ Zdd„ ZdS )ÚScreenLangScreenzB
    This represents a screen defined in the screen language.
    r   ÚNoneÚFalseNc                 C   s4   t | _ d| _d| _d | _d | _d| _d| _d | _d S )Nr­  Ú0r¬  )r1   ÚmodalÚzorderÚtagry   ÚvariantÚpredictÚ
parametersr"   r   r   r   r$   Á  s    zScreenLangScreen.__init__c                 C   s   |dk rd| _ d| _d S )Nr   r­  r®  )r¯  r°  )r#   Úversionr   r   r   Úafter_upgradeÛ  s    zScreenLangScreen.after_upgradec                 C   sD   t jjj| j| | j| j| jt j 	| j
¡t j 	| j¡| j| jd	 dS )z#
        Defines a screen.
        )r¯  r°  r±  r²  r³  r´  ÚlocationN)rl   ÚdisplayÚscreenÚdefine_screenr1   r¯  r°  r±  rm   Úpy_evalr²  r³  r´  r·  )r#   r·  r   r   r   Údefineà  s    ÷zScreenLangScreen.definec                 O   sZ   |d }| j rB| dd¡}| di ¡}tj | j ||¡}| |¡ tjj| jj	|d d S )Nr—   Ú_argsr   Ú_kwargs)Úlocals)
r´  Úgetrl   r   Úapply_argumentsÚupdaterm   Úpy_exec_bytecodery   Úbytecode)r#   rt   rŒ   r‡   Úvaluesr   r   r   Ú__call__ñ  s    
zScreenLangScreen.__call__)r*   r+   r,   r6   Ú__version__r²  r³  r´  r·  r$   r¶  r¼  rÆ  r   r   r   r   r«  ±  s   r«  c                       s&   e Zd Z‡ fdd„Zddd„Z‡  ZS )ÚScreenParserc                    s   t t| ƒ d¡ d S )Nr¹  )r&   rÈ  r$   r"   r(   r   r   r$     s    zScreenParser.__init__Ú_namec              	      sN  |  ¡ }tƒ ‰ ‡ fdd„}|j}| |j¡ˆ _tj |¡ˆ _	||ƒrHq<q<| d¡ | 
¡  | d¡ | ¡ }g }d}tƒ †}| ¡ rò||ƒr¢||ƒr˜qŒqŒ| 
¡  q|| |  d|||f |j¡¡ |  ||¡}	|	d u rÞ| d¡ | |	¡ |d7 }q|W d   ƒ n1 s0    Y  tj||dd	}
t |
¡ tƒ  |
¡ tj |
|d
¡ˆ _ˆ S )Nc                    s   |   d¡r|  | j¡ˆ _dS |   d¡r8|  | j¡ˆ _dS |   d¡rT|  | j¡ˆ _dS |   d¡rp|  | j¡ˆ _dS |   d¡rŒ|  | j¡ˆ _dS dS )Nr¯  Tr°  r±  r²  r³  F)	rR   rz   r{   r¯  r°  rQ   r±  r²  r³  )rU   ©r¹  r   r   r“   	  s     




z)ScreenParser.parse.<locals>.parse_keywordr”   zscreen statementr   r[   z%Expected a screen language statement.r   )ro   r   rˆ   rx   )Úget_locationr«  rc   rz   rQ   r1   rl   r2   Úparse_parametersr´  rš   r\   r]   r   r^   ra   rb   rX   rY   r   ÚModuleÚfix_missing_locationsr    ÚvisitÚPyCodery   )r#   rU   r1   r·  r“   r   re   rg   rf   rW   r   r   rÊ  r   rT     s@    



*
zScreenParser.parse)rÉ  r‡  r   r   r(   r   rÈ  ÿ  s   rÈ  c                 C   s   | j a t | ¡}|S )z&
    Parses the screen statement.
    )rs   Úscreen_parserrT   )rU   r¹  r   r   r   Úparse_screen`  s    
rÒ  )HÚ
__future__r   r   r   r   r   Úrenpy.compatr   r   r	   r
   r   r   r   r   r   r   r   r   rl   Ú
contextlibÚ
__import__r   rs   r   Úcontextmanagerr   r   ÚNodeVisitorr    r2   Úobjectr.   r7   rN   rB   rC   rE   ÚSentinelr   r‚   ÚstylesrI   r†   Úposition_property_namesÚposition_propertiesÚtext_position_propertiesÚside_position_propertiesÚtext_property_namesÚtext_propertiesÚtext_text_propertiesÚwindow_propertiesÚbutton_propertiesÚbar_propertiesÚbox_propertiesÚui_propertiesr3   r1   ÚatlÚ
PROPERTIESrO   ru  rx  r{  r‰  r“  r¦  ÚObjectr«  rÈ  rÑ  rÒ  r   r   r   r   Ú<module>   s:  8
 $ ;%ú

2=H

%N]
