o
    f                     @   s  d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZ g dZed	Zed
ejZG dd deZG dd deZG dd deZdd ZG dd deZdGddZdGddZG dd de Z!G dd deZ"G dd deZ#G dd  d eZ$G d!d" d"eZ%e% Z&[%dHd$d%Z'ed&Z(g d'Z)ed(Z*ed)Z+d*d+ Z,d,d- Z-dId.d/Z.dJd1d2Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCZ8dGdDdEZ9e:dFkre9  dS dS )Ka  
A small templating language

This implements a small templating language.  This language implements
if/elif/else, for/continue/break, expressions, and blocks of Python
code.  The syntax is::

  {{any expression (function calls etc)}}
  {{any expression | filter}}
  {{for x in y}}...{{endfor}}
  {{if x}}x{{elif y}}y{{else}}z{{endif}}
  {{py:x=1}}
  {{py:
  def foo(bar):
      return 'baz'
  }}
  {{default var = default_value}}
  {{# comment}}

You use this with the ``Template`` class or the ``sub`` shortcut.
The ``Template`` class takes the template string and the name of
the template (for errors) and a default namespace.  Then (like
``string.Template``) you can call the ``tmpl.substitute(**kw)``
method to make a substitution (or ``tmpl.substitute(a_dict)``).

``sub(content, **kw)`` substitutes the template immediately.  You
can use ``__name='tmpl.html'`` to set the name of the template.

If there are syntax errors ``TemplateError`` will be raised.
    )absolute_importN)StringIO   )looper)bytesunicode_basestring_next
is_unicodecoerce_text)TemplateErrorTemplatesubbunchz\s+in\s+z^[a-z_][a-z0-9_]*$c                   @   s"   e Zd ZdZdddZdd ZdS )r   z.Exception raised while parsing a template
    Nc                 C   s   t | | || _|| _d S N)	Exception__init__positionname)selfmessager   r    r   S/var/www/html/mig_web/myenv/lib/python3.10/site-packages/Cython/Tempita/_tempita.pyr   7   s   
zTemplateError.__init__c                 C   sD   d | j}| jrd|| jd | jd f }| jr |d| j 7 }|S )N %s at line %s column %sr   r   z in %s)joinargsr   r   )r   msgr   r   r   __str__<   s   zTemplateError.__str__r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   3   s    
r   c                   @      e Zd ZdS )_TemplateContinueNr   r    r!   r   r   r   r   r$   F       r$   c                   @   r#   )_TemplateBreakNr%   r   r   r   r   r'   J   r&   r'   c                 C   s.   t jt j|j| }|jj||j|jdS )N)	namespaceget_template)	ospathr   dirnamer   	__class__from_filenamer(   r)   )r   from_templater+   r   r   r   get_file_templateN   s
   r0   c                   @   s   e Zd ZddedZdZdZ			d#ddZdddefd	d
Z	e
e	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S )$r   z{{z}})start_braces
end_bracesr   utf8Nr   c
                 C   sf  || _ |	rdd l}
|
dt |d u r|	}|d u r$| jd | jd f}n| jj | _|d | jd< |d | jd< | | _| _t	|| _
|d u r|d urzt|}W n	 ty\   Y n3w |j}|j}d|v r||d }|dsu|dr{|d d	 }nd
|v r|d
 }nd}|r|d| 7 }|| _t|||| jd| _|d u ri }|| _|| _|d ur|| _d S d S )Nr   zk'delimeters' kwarg is being deprecated in favor of correctly spelled 'delimiters'. Please adjust your code.r1   r2   r   __file__z.pycz.pyor   z<string>z:%sr   line_offset
delimiters)contentwarningswarnDeprecationWarningdefault_namespacer-   copyr8   
delimetersr
   _unicodesys	_getframe
ValueError	f_globalsf_linenoendswithr   parse_parsedr(   r)   default_inherit)r   r9   r   r(   
stacklevelr)   rI   r7   r8   r?   r:   callerglobalslinenor   r   r   r   `   sZ   


zTemplate.__init__c                 C   sR   t |d}| }W d    n1 sw   Y  |r ||}| |||||dS )Nrb)r9   r   r(   rI   r)   )openreaddecode)clsfilenamer(   encodingrI   r)   fcr   r   r   r.      s   

zTemplate.from_filenamec                 C   s$   d| j jtt| dd  | jf S )Nz<%s %s name=%r>   )r-   r   hexidr   r   r   r   r   __repr__   s   zTemplate.__repr__c                 O   s   |r&|rt dt|dkrt dt|d ds"t d|d f |d }|}| j|d< | jr6|| j | |\}}}|sC| j}|rM| ||||}|S )Nz3You can only give positional *or* keyword argumentsr   z)You can only give one positional argumentr   itemszqIf you pass in a single argument, you must pass in a dictionary-like object (with a .items() method); you gave %r__template_name__)		TypeErrorlenhasattrr   r(   update
_interpretrI   _interpret_inherit)r   r   kwnsresultdefsinheritr   r   r   
substitute   s4   
zTemplate.substitutec                 C   sH   d}g }i }| j | j|||d d|v r|d}nd }d|||fS )NT)outrg   __inherit__ )_interpret_codesrH   popr   )r   re   __traceback_hide__partsrg   rh   r   r   r   rb      s   zTemplate._interpretc           
      C   sn   d}| j stdd | jd|  || }t| j}| D ]
\}}	t|||	 q||_| }||d< ||S )NTz:You cannot use inheritance without passing in get_templater   r   r   )	r)   r   r   TemplateObjectr\   setattrbodyr>   ri   )
r   rt   rg   inherit_templatere   ro   templself_r   valuer   r   r   rc      s   

zTemplate._interpret_inheritc                 C   s8   d}|D ]}t |tr|| q| |||| qd S )NT)
isinstancer   append_interpret_code)r   codesre   rj   rg   ro   itemr   r   r   rm      s   
zTemplate._interpret_codesc                 C   s  d}|d |d }}|dkr|  |d || d S |dkr!t |dkr(t |dkrM|d |d	 |d
 }}	}
| |	||}	| ||	|
||| d S |dkra|dd  }| |||| d S |dkr|d d}| |d ||}|dd  D ]}| |||}||}q{|| || d S |dkr|d |d	 }}	||vr| |	||}|||< d S d S |dkr|d }	| |	||}||d< d S |dkr|d }|d	 }|d
 }t	| |||||d ||< ||< d S |dkrd S J d| )NTr   r   pyrW   continuebreakfor      condexpr|defaultrh   rk   def)rt   re   poscommentzUnknown code: %r)
_execr$   r'   _eval_interpret_for_interpret_ifsplitrz   _reprTemplateDef)r   codere   rj   rg   ro   r   r   varsr   r9   rp   basepartfuncvarrf   rx   	signaturer   r   r   r{      sT   
zTemplate._interpret_codec              	   C   s   d}|D ]N}t |dkr|||d < n"t |t |kr'tdt |t |f t||D ]\}	}
|
||	< q,z
| |||| W q tyH   Y q tyR   Y  d S w d S )NTr   r   z&Need %i items to unpack (got %i items))r_   rC   ziprm   r$   r'   )r   r   r   r9   re   rj   rg   ro   r}   r   rx   r   r   r   r     s(   
zTemplate._interpret_forc           
      C   sp   d}|D ]1}t |trJ |d |d }}|dkrd}	n	| |d ||}	|	r5| |d |||  d S qd S )NTr   r   elserW   r   )ry   r   r   rm   )
r   rp   re   rj   rg   ro   r   r   r   rf   r   r   r   r     s   zTemplate._interpret_ifc              
   C   s   d}zzt || j|}W |W S  ty  } ztd| d }~ww  tyE } zt|dd r4|jd }nt|}| ||f|_ d }~ww )NTz invalid syntax in expression: %sr   r   )evalr=   SyntaxErrorr   getattrr   r   _add_line_info)r   r   re   r   ro   rx   earg0r   r   r   r   ,  s&   zTemplate._evalc              
   C   sb   d}z
t || j| W d S  ty0 } z|jr#| |jd |f|_ | d |f|_ d }~ww )NTr   )execr=   r   r   r   )r   r   re   r   ro   r   r   r   r   r   =  s   zTemplate._execc                 C   sB  d}z6|d u r
W dS | j r!zt|}W n# ty    t|}Y nw t|ts*t|}t|r7| jr7|	| j}W n t
yP } z| |jd |f|_ d }~ww | j rt|tr| jsbtd| z	|| j}W |S  ty } zt|j|j|j|j|jd|  d }~ww | j st|r| jstd| |	| j}|S )NTrl   r   zHCannot decode bytes value %r into unicode (no default_encoding provided)z in string %rzHCannot encode unicode value %r into bytes (no default_encoding provided))r@   r   UnicodeDecodeErrorr   ry   r   r   r
   default_encodingencoder   r   r   rQ   rT   objectstartendreasonUnicodeEncodeError)r   rx   r   ro   r   r   r   r   r   H  sf   
zTemplate._reprc                 C   s.   d||d |d f }| j r|d| j  7 }|S )Nr   r   r   z in file %sr   )r   r   r   r   r   r   r   r  s   zTemplate._add_line_info)NNNNNr   NN)r   r    r!   r   r=   r   rI   r   r0   r.   classmethodr[   ri   rb   rc   rm   r{   r   r   r   r   r   r   r   r   r   r   r   U   s6    
6
	+*r   c                 K   s:   | d}d|v r|dnd }t| |||d}||S )N__namer?   )r   r8   r?   )getrn   r   ri   )r9   r8   rd   r   r?   tmplr   r   r   r   z  s   

r   c                 C   s   t | |d}||S )Nr   )r   ri   )r9   r   rS   r   r   r   r   paste_script_template_renderer  s   
r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c                 K   s"   |  D ]
\}}t| || qd S r   )r\   rs   )r   rd   r   rx   r   r   r   r     s   zbunch.__init__c                 C   s   || |< d S r   r   )r   r   rx   r   r   r   __setattr__  s   zbunch.__setattr__c                 C   s"   z| | W S  t y   t|w r   )KeyErrorAttributeErrorr   r   r   r   r   __getattr__  s
   
zbunch.__getattr__c                 C   sB   d| v rzt | |W S  ty   t | d Y S w t | |S )Nr   )dict__getitem__r   )r   keyr   r   r   r     s   zbunch.__getitem__c                 C   s(   d| j jddd t|  D f S )N<%s %s>r   c                 S   s   g | ]
\}}d ||f qS )z%s=%rr   ).0kvr   r   r   
<listcomp>  s    z"bunch.__repr__.<locals>.<listcomp>)r-   r   r   sortedr\   rZ   r   r   r   r[     s   zbunch.__repr__N)r   r    r!   r   r   r   r   r[   r   r   r   r   r     s    	r   c                   @   sB   e Zd Z	dddZdd Zdd Zdd	 Zdd
dZdd ZdS )r   Nc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S r   )	_template
_func_name_func_signature_body_ns_pos_bound_self)r   template	func_namefunc_signaturert   re   r   
bound_selfr   r   r   r     s   
zTemplateDef.__init__c                 C   s   d| j | j| jj| jf S )Nz"<tempita function %s(%s) at %s:%s>)r   r   r   r   r   rZ   r   r   r   r[     s   
zTemplateDef.__repr__c                 C   s   |  S r   r   rZ   r   r   r   r     s   zTemplateDef.__str__c                 O   sZ   |  ||}| j }|| | jd ur| j|d< g }i }| j| j||| d|S )Nr   rl   )	_parse_signaturer   r>   ra   r   r   rm   r   r   )r   r   rd   valuesre   rj   subdefsr   r   r   __call__  s   




zTemplateDef.__call__c              	   C   s0   |d u r| S | j | j| j| j| j| j| j|dS )N)r   )r-   r   r   r   r   r   r   )r   objtyper   r   r   __get__  s   zTemplateDef.__get__c                 C   sH  i }| j \}}}}i }| D ]\}	}
|s|	|vrtd|	 |	|v r(|
||< q|
||	< qt|}t|}|rt|rL|d |v rL|d |rL|d |v s?|r[|d}	|d||	< n|rdt|||< ntdddd |D  |s7| D ]\}	}|	|vr| j|| j	| j
||	< qx|D ]}	|	|vrtd|	 q|r|||< |S )NzUnexpected argument %sr   zExtra position arguments: %sz, c                 S   s   g | ]}t |qS r   )reprr   r   r   r   r   r     s    z0TemplateDef._parse_signature.<locals>.<listcomp>zMissing argument: %s)r   r\   r^   listrn   tupler   r   r   r   r   )r   r   rd   r   sig_argsvar_argsvar_kwdefaultsextra_kwr   rx   
value_exprr   r   r   r     sX   




zTemplateDef._parse_signaturer   )	r   r    r!   r   r[   r   r   r   r   r   r   r   r   r     s    


r   c                   @   s   e Zd Zdd Zdd ZdS )rr   c                 C   s   || _ t| | _d S r   )_TemplateObject__nameTemplateObjectGetterr   r   r   r   r   r     s   zTemplateObject.__init__c                 C      d| j j| jf S )Nr   )r-   r   r   rZ   r   r   r   r[        zTemplateObject.__repr__N)r   r    r!   r   r[   r   r   r   r   rr     s    rr   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s
   || _ d S r   )#_TemplateObjectGetter__template_obj)r   template_objr   r   r   r     s   
zTemplateObjectGetter.__init__c                 C   s   t | j|tS r   )r   r   Empty)r   attrr   r   r   r      s   z TemplateObjectGetter.__getattr__c                 C   r   )Nz<%s around %r>)r-   r   r   rZ   r   r   r   r[     r   zTemplateObjectGetter.__repr__N)r   r    r!   r   r   r[   r   r   r   r   r     s    r   c                   @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dk r%eZdS dS )_Emptyc                 O   s   | S r   r   )r   r   rd   r   r   r   r        z_Empty.__call__c                 C      dS Nrl   r   rZ   r   r   r   r     r   z_Empty.__str__c                 C   r   )Nr   r   rZ   r   r   r   r[     r   z_Empty.__repr__c                 C   r   r   r   rZ   r   r   r   __unicode__  r   z_Empty.__unicode__c                 C   s   t dS )Nr   )iterrZ   r   r   r   __iter__  s   z_Empty.__iter__c                 C   r   )NFr   rZ   r   r   r   __bool__  r   z_Empty.__bool__3N)r   r    r!   r   r   r[   r   r   r   rA   version__nonzero__r   r   r   r   r     s    
r   Tc                 C   sp  |du rt jd t jd f}d}g }d}|d df}tdt|d t|d f }	|	| D ]c}
|
d}t| |
 ||}||d krU|rUt	d|d  ||d	||d krh|sht	d
|d  ||d	||d kr| ||

  }|r}|| d}n|| ||

  |f d}|
 }|}q2|rt	d|d  ||d| |d }|r|| |rt|}|S )aY  
    Lex a string into chunks:

        >>> lex('hey')
        ['hey']
        >>> lex('hey {{you}}')
        ['hey ', ('you', (1, 7))]
        >>> lex('hey {{')
        Traceback (most recent call last):
            ...
        TemplateError: No }} to finish last expression at line 1 column 7
        >>> lex('hey }}')
        Traceback (most recent call last):
            ...
        TemplateError: }} outside expression at line 1 column 7
        >>> lex('hey {{ {{')
        Traceback (most recent call last):
            ...
        TemplateError: {{ inside expression at line 1 column 10

    Nr1   r2   Fr   r   z%s|%sz%s inside expressionrq   z%s outside expressionTzNo %s to finish last expression)r   r   )r   r=   recompileescapefinditergroupfind_positionr   r   r   rz   trim_lex)sr   trim_whitespacer7   r8   in_exprchunkslastlast_postoken_rematchr   r   r   r   r   r   lex%  sV   


r   z.^(?:if |elif |for |def |inherit |default |py:))r   endifendforenddefr   r   z\n\r?[\t ]*$z	^[\t ]*\nc           	      C   s  d}t | D ]\}}t|trq|d }t|s|tvrq|s#d}n| |d  }|d t| kr4d}n| |d  }t|trDt|tsEq| pLt|}|dkrW| sWd}|durg|d |krg| sgd}|r|r|t	|s||t| d kr| s|r|dkr| r|dkrd| |d < nt|}|d|
 d  }|| |d < |r|}|t| d kr| sd| |d < qt	|}|| d }|| |d < q| S )aa  
    Takes a lexed set of tokens, and removes whitespace when there is
    a directive on a line by itself:

       >>> tokens = lex('{{if x}}\nx\n{{endif}}\ny', trim_whitespace=False)
       >>> tokens
       [('if x', (1, 3)), '\nx\n', ('endif', (3, 3)), '\ny']
       >>> trim_lex(tokens)
       [('if x', (1, 3)), 'x\n', ('endif', (3, 3)), 'y']
    Nr   rl   r   TrW   r   )	enumeratery   r   statement_researchsingle_statementsr_   trail_whitespace_restriplead_whitespace_rer   r   )	tokens	last_trimicurrentr}   prev
next_chunkprev_okmr   r   r   r   j  sX   



r   c                 C   sJ   |  d||}|dkr|| d|| }n|d ||  }|d | |fS )z/Given a string and index, return (line, column)
r   r   )countrfind)stringindex
last_indexr   linescolumnr   r   r   r     s
   r   c                 C   sT   |du rt jd t jd f}t| |||d}g }|r(t||\}}|| |s|S )a  
    Parses a string into a kind of AST

        >>> parse('{{x}}')
        [('expr', (1, 3), 'x')]
        >>> parse('foo')
        ['foo']
        >>> parse('{{if x}}test{{endif}}')
        [('cond', (1, 3), ('if', (1, 3), 'x', ['test']))]
        >>> parse('series->{{for x in y}}x={{x}}{{endfor}}')
        ['series->', ('for', (1, 11), ('x',), 'y', ['x=', ('expr', (1, 27), 'x')])]
        >>> parse('{{for x, y in z:}}{{continue}}{{endfor}}')
        [('for', (1, 3), ('x', 'y'), 'z', [('continue', (1, 21))])]
        >>> parse('{{py:x=1}}')
        [('py', (1, 3), 'x=1')]
        >>> parse('{{if x}}a{{elif y}}b{{else}}c{{endif}}')
        [('cond', (1, 3), ('if', (1, 3), 'x', ['a']), ('elif', (1, 12), 'y', ['b']), ('else', (1, 23), None, ['c']))]

    Some exceptions::

        >>> parse('{{continue}}')
        Traceback (most recent call last):
            ...
        TemplateError: continue outside of for loop at line 1 column 3
        >>> parse('{{if x}}foo')
        Traceback (most recent call last):
            ...
        TemplateError: No {{endif}} at line 1 column 3
        >>> parse('{{else}}')
        Traceback (most recent call last):
            ...
        TemplateError: else outside of an if block at line 1 column 3
        >>> parse('{{if x}}{{for x in y}}{{endif}}{{endfor}}')
        Traceback (most recent call last):
            ...
        TemplateError: Unexpected endif at line 1 column 25
        >>> parse('{{if}}{{endif}}')
        Traceback (most recent call last):
            ...
        TemplateError: if with no expression at line 1 column 3
        >>> parse('{{for x y}}{{endfor}}')
        Traceback (most recent call last):
            ...
        TemplateError: Bad for (no "in") in 'x y' at line 1 column 3
        >>> parse('{{py:x=1\ny=2}}')
        Traceback (most recent call last):
            ...
        TemplateError: Multi-line py blocks must start with a newline at line 1 column 3
    Nr1   r2   r6   )r   r=   r   
parse_exprrz   )r   r   r7   r8   r  rf   r  r   r   r   rG     s   2
rG   r   c                 C   s  t | d tr| d | dd  fS | d \}}| }|drc|dd  d}|ds3|drM|d}d|v rH|dd}|dd	}|d7 }nd|v rXtd
||dd||f| dd  fS |dv r|d|vrrtd||d||f| dd  fS |drt| ||S |ds|dkrtd| d  ||d|dv rtd| ||d|dv rtd| ||d|drt	| ||S |drt
| ||S |drt| ||S |drt| ||S |drd|| d d f| dd  fS d|| d d f| dd  fS )Nr   r   py:r   z 	r  z
rl   z.Multi-line py blocks must start with a newlinerq   r~   )r   r   r   zcontinue outside of for loopif elif r   z%s outside of an if block)ifelifr   z%s with no expression)r   r   r   zUnexpected %sfor default inherit def #r   r   )ry   r   r  
startswithlstripreplacer   
parse_condr   	parse_forparse_defaultparse_inherit	parse_def)r  r   contextr   r   r   r   r   r    sl   









r  c                 C   s   | d d }g }|d }	 | st d||dt| d tr3| d d dkr3d|ft| | dd  fS t| ||\}} || q)Nr   r   )r  zMissing {{endif}}rq   r   r   )r   ry   r   parse_one_condrz   )r  r   r+  r   piecesr  r   r   r   r&     s   
r&  c                 C   s  | d | dd  \}}} g }| dr|d d }|dr,d||dd   |f}n%|dr>d	||d
d   |f}n|dkrId|d |f}nJ d||f 	 | s[td||dt| d tr| d d dks{| d d ds{| d d dkr|| fS t| ||\}} || qR)Nr   r   :r5   r  r  r   r  r     r   zUnexpected token %r at %szNo {{endif}}rq   r   )rF   r#  r$  r   ry   r   r  rz   )r  r   r+  firstr   r9   r   r  r   r   r   r,  0  s4   



r,  c           
      C   sB  | d \}}| dd  } d| }g }| dsJ ||dr&|d d }|dd   }t|}|s>td| ||d	|d |  }d
|v rStd| ||d	tdd |d |  dD }||	 d  }	 | swtd||d	t
| d tr| d d dkrd||||f| dd  fS t| ||\}	} ||	 qn)Nr   r   )r   r  r.  r5   r   zBad for (no "in") in %rrq   (z=You cannot have () in the variable section of a for loop (%r)c                 S   s   g | ]
}|  r|  qS r   )r  r   r   r   r   r   ^  s    zparse_for.<locals>.<listcomp>,zNo {{endfor}}r   r   )r#  rF   r  in_rer  r   r   r   r   r   ry   r  rz   )
r  r   r+  r0  r   r9   r   r   r   r  r   r   r   r'  K  sL   


r'  c                 C   s   | d \}}| dsJ |d dd }|dd}t|dkr*td| ||d|d  }d|v r;td||dt|sItd	| ||d|d  }d
|||f| dd  fS )Nr   r  r   =z:Expression must be {{default var=value}}; no = found in %rrq   r2  z'{{default x, y = ...}} is not supportedz-Not a valid variable name for {{default}}: %rr   )r#  r   r_   r   r  var_rer  )r  r   r+  r0  r   rp   r   r   r   r   r   r(  n  s0   
r(  c                 C   s@   | d \}}| dsJ |d dd }d||f| dd  fS )Nr   r   r   rh   )r#  r   )r  r   r+  r0  r   r   r   r   r   r)    s   r)  c           
      C   s  | d \}}| dd  } | dsJ |d dd }|dr&|d d }d|vr3|}dd d i f}n"|dsAtd	| ||d
|d d }|dd\}}t|||}|d }g }	 | setd||d
t| d tr| d d dkrd||||f| dd  fS t| ||\}	} ||	 q\)Nr   r   r!  r.  r5   r1  r   )z*Function definition doesn't end with ): %srq   )r   zMissing {{enddef}}r   r   )	r#  r   rF   r   parse_signaturery   r   r  rz   )
r  r   r+  r0  r   r   sigsig_textr9   r  r   r   r   r*    s<   


r*  c                    s^  t t| j g }d }d }i }d fdd	}	 d }| \}	}
|	t jkr&n|	t jkr:|
dks3|
dkr:|
}| \}	}
|	t jkrHtd|  ||d|
}| \}	}
|	t jks]|	t jkrw|
d	krw|dkrd|}n|dkrk|}n|| |	t jkrvnq|d urtd|  ||d|	t jkr(|
d
kr(d }d }d}d  }}g }	 |d\}	}
}}|d u r|}|}|	t jkr|rtd|  ||d|s|	t jks|	t jkr|
d	krt	| ||}|||< || nL||	|
f |r|	t jkr|
|kr|d7 }n4|r|	t jkr|
|kr|d8 }|sd  }}n|s'|	t jkr'|
dv r'|
}d}dddd| }qq||||fS )NFc                    s\   zt  \}}\}}\}}}W n ty   tjdf Y S w | r*||||f||ffS ||fS r   )r	   StopIterationtokenize	ENDMARKER)r   tok_type
tok_stringsrowscolerowecolliner  r   r   	get_token  s   z"parse_signature.<locals>.get_tokenr   *z**zInvalid signature: (%s)rq   r2  r4  r   T)r1  [{r6  ]})F)
r;  generate_tokensr   readliner<  OPNAMEr   rz   isolate_expression)r9  r   r   r   var_argr   r   rE  var_arg_typer=  r>  var_name	nest_typeunnest_type
nest_count	start_posend_posrp   r   r   default_exprr   rD  r   r7    s   	








9r7  c           	      C   s   |\}}|d8 }|\}}|d8 }|  d}||kr!|| || S || |d  g}|||d |  |t|k rF||| d |  d|S )Nr   Trl   )
splitlinesextendr_   rz   r   )	r  rV  rW  r?  r@  rA  rB  r  rp   r   r   r   rO    s   

rO  zn%prog [OPTIONS] TEMPLATE arg=value

Use py:arg=value to set a Python value; otherwise all values are
strings.
c                 C   s  dd l }dd l}dd l}dd l}| d u r|jdd  } |d}|jt|td}|j	ddddd	d
 |j	ddddd |
| \}} t| dk rRtd |d | d }| dd  } i }	|jrg|	|j | D ],}
d|
vrztd|
  |d |
dd\}}
|dr|d d }t|
}
|
|	|< qi|dkr|j }d}nt|d}| }W d    n1 sw   Y  t||d}||	}|jrt|jd}|| W d    d S 1 sw   Y  d S |j| d S )Nr   r   Paste)r   usagez-oz--outputoutputFILENAMEz(File to write output to (default stdout))destmetavarhelpz--envuse_env
store_truez-Put the environment in as top-level variables)r_  actionra  z!You must give a template filenamerW   r4  zBad argument: %rr  r   -z<stdin>rN   r   wb)rA   optparsepkg_resourcesr*   argvget_distributionOptionParserr   _fill_command_usage
add_option
parse_argsr_   printexitrb  ra   environr   r#  r   stdinrP   rO   r   ri   r]  writestdout)r   rA   rg  rh  r*   distparseroptionstemplate_namer   rx   r   template_contentrU   r   rf   r   r   r   fill_command  sl   







"rz  __main__r   )NTr   N)Nr   N)r   );r"   
__future__r   r   rA   r*   r;  ior   _looperr   compat3r   r   r   r	   r
   r   __all__r   r3  Ir5  r   r   r$   r'   r0   r   r   r   r   r   r   r   rr   r   r   r   r   r  r  r  r  r   r   rG   r  r&  r,  r'  r(  r)  r*  r7  rO  rl  rz  r   r   r   r   r   <module>   sd    
  
'
M


?

:


=5#L
5
