Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/Cython/Tempita/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/Cython/Tempita/__pycache__/_tempita.cpython-37.pyc

B

Z��Z���@s�dZddlmZddlZddlZddlZyddlmZWn e	k
rXddl
mZYnXddlZddlZddl
mZddlmZddlmZmZmZmZmZmZd	d
ddd
ddgZe�d�Ze�dej�ZGdd	�d	e�ZGdd�de�ZGdd�de�Z dd�Z!Gdd
�d
e"�Z#dXdd�Z$dYdd�Z%Gdd�de&�Z'Gdd�de"�Z(dZd d!�Z)d"d#�Z*d$d%�Z+Gd&d�de#�Z,d'd
�Z-Gd(d)�d)e"�Z.Gd*d+�d+e"�Z/Gd,d-�d-e"�Z0Gd.d/�d/e"�Z1e1�Z2[1d[d0d1�Z3e�d2�Z4d3d4d5d6d7d8gZ5e�d9�Z6e�d:�Z7d;d<�Z8d=d>�Z9d\d?d@�Z:d]dBdC�Z;dDdE�Z<dFdG�Z=dHdI�Z>dJdK�Z?dLdM�Z@dNdO�ZAdPdQ�ZBdRdS�ZCdTZDd^dUdV�ZEeFdWk�r|eE�dS)_a�
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)�quote)�StringIO�)�looper)�bytes�unicode_�basestring_�next�
is_unicode�coerce_text�
TemplateError�Template�sub�HTMLTemplate�sub_html�html�bunchz\s+in\s+z^[a-z_][a-z0-9_]*$c@s"eZdZdZddd�Zdd�ZdS)r
z.Exception raised while parsing a template
    NcCst�||�||_||_dS)N)�	Exception�__init__�position�name)�self�messagerr�r�J/opt/alt/python37/lib64/python3.7/site-packages/Cython/Tempita/_tempita.pyr;szTemplateError.__init__cCsDd�|j�}|jr,d||jd|jdf}|jr@|d|j7}|S)N� z%s at line %s column %srrz in %s)�join�argsrr)r�msgrrr�__str__@szTemplateError.__str__)N)�__name__�
__module__�__qualname__�__doc__rr rrrrr
7s
c@seZdZdS)�_TemplateContinueN)r!r"r#rrrrr%Jsr%c@seZdZdS)�_TemplateBreakN)r!r"r#rrrrr&Nsr&cCs.tj�tj�|j�|�}|jj||j|jd�S)N)�	namespace�get_template)	�os�pathr�dirnamer�	__class__�
from_filenamer'r()rZ
from_templater*rrr�get_file_templateRsr.c@s�eZdZdded�ZdZdZd#dd�Zdddefd	d
�Z	e
e	�Z	dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�ZdS)$rz{{z}})�start_braces�
end_bracesr�utf8Nrc	Cs>||_|dkr$|jd|jdf}n*|jj��|_|d|jd<|d|jd<||_t|�|_|dkr�|dk	r�yt�|�}	Wnt	k
r�YnfX|	j
}
|	j}d|
kr�|
d}|�d�s�|�d�r�|dd�}nd	|
kr�|
d	}nd
}|r�|d|7}||_
t||||jd�|_|dk�ri}||_||_|dk	�r:||_dS)
Nr/r0rr�__file__z.pycz.pyo���r!z<string>z:%s)r�line_offset�
delimeters)�content�default_namespacer,�copyr5r�_unicode�sys�	_getframe�
ValueError�	f_globals�f_lineno�endswithr�parse�_parsedr'r(�default_inherit)rr6rr'�
stacklevelr(rBr4r5�caller�globals�linenorrrrdsB



zTemplate.__init__cCs:t|d�}|��}|��|r(|�|�}||||||d�S)N�rb)r6rr'rBr()�open�read�close�decode)�cls�filenamer'�encodingrBr(�f�crrrr-�s

zTemplate.from_filenamecCs$d|jjtt|��dd�|jfS)Nz<%s %s name=%r>�)r,r!�hex�idr)rrrr�__repr__�szTemplate.__repr__cOs�|rL|rtd��t|�dkr$td��t|dd�sDtd|df��|d}|}|j|d<|jrl|�|j�|�|�\}}}|s�|j}|r�|�||||�}|S)Nz3You can only give positional *or* keyword argumentsrz)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 %rZ__template_name__)	�	TypeError�len�hasattrrr'�update�
_interpretrB�_interpret_inherit)rr�kw�ns�result�defs�inheritrrr�
substitute�s,
zTemplate.substitutecCsHd}g}i}|j|j|||d�d|kr4|�d�}nd}d�|�||fS)NT)�outr_�__inherit__�)�_interpret_codesrA�popr)rr]�__traceback_hide__�partsr_r`rrrrZ�szTemplate._interpretc
Csrd}|jstdd|jd��|�||�}t|j�}x |��D]\}}	t|||	�q:W||_|��}||d<|�|�S)NTz:You cannot use inheritance without passing in get_template)rrr)	r(r
r�TemplateObjectrU�setattr�bodyr8ra)
rrkr_Zinherit_templater]rgZtemplZself_r�valuerrrr[�s
zTemplate._interpret_inheritcCs<d}x2|D]*}t|t�r$|�|�q
|�||||�q
WdS)NT)�
isinstancer	�append�_interpret_code)r�codesr]rbr_rg�itemrrrre�s


zTemplate._interpret_codescCsd}|d|d}}|dkr4|�|d||��n�|dkrFt���n�|dkrXt���n�|dkr�|d|d	|d
}}	}
|�|	||�}	|�||	|
|||��n`|dkr�|dd�}|�||||��n8|dk�r6|d�d
�}|�|d||�}x,|dd�D]}
|�|
||�}||�}�qW|�|�||��n�|dk�rt|d|d	}}	||k�r|�|	||�}|||<n�|dk�r�|d}	|�|	||�}||d<nd|dk�r�|d}|d	}|d
}t	||||||d�||<||<n |dk�r�dSd�st
d|��dS)NTrr�pyrQ�continue�break�for���cond�expr�|�defaultr`rc�def)rkr]�pos�commentzUnknown code: %r)�_execr%r&�_eval�_interpret_for�
_interpret_if�splitrn�_repr�TemplateDef�AssertionError)r�coder]rbr_rgrr}�varsryr6rh�base�part�func�varr^rl�	signaturerrrro�sP









zTemplate._interpret_codec	Cs�d}x�|D]�}t|�dkr(|||d<nHt|�t|�krPtdt|�t|�f��xt||�D]\}	}
|
||	<q\Wy|�||||�Wq
tk
r�w
Yq
tk
r�PYq
Xq
WdS)NTrrz&Need %i items to unpack (got %i items))rWr<�ziprer%r&)rr�ryr6r]rbr_rgrqrrlrrrr�s 
zTemplate._interpret_forc
Cspd}xf|D]^}t|t�rt�|d|d}}|dkr<d}	n|�|d||�}	|	r
|�|d|||�Pq
WdS)NTrr�elserQrv)rmr	r�r�re)
rrhr]rbr_rgr�rr}r^rrrr�s
zTemplate._interpret_ifc
Cs�d}yFyt||j|�}Wn.tk
rF}ztd|��Wdd}~XYnX|Stk
r�}z6t|dd�rt|jd}nt|�}|�||�f|_�Wdd}~XYnXdS)NTz invalid syntax in expression: %srr)�evalr7�SyntaxErrorr�getattrrr�_add_line_info)rr�r]r}rgrl�eZarg0rrrr�(szTemplate._evalc
Csnd}yt||j|�WnRtk
rh}z4|jrF|�|jd|�f|_n|�d|�f|_�Wdd}~XYnXdS)NTr)�execr7rrr�)rr�r]r}rgr�rrrr9szTemplate._execcCshd}yn|dkrdS|jrDyt|�}Wqptk
r@t|�}YqpXn,t|t�sVt|�}t|�rp|jrp|�	|j�}Wn:t
k
r�}z|�|jd|�f|_�Wdd}~XYn�X|j�r.t|t��r.|js�td|��y|�
|j�}WnFtk
�r*}z&t|j|j|j|j|jd|��Wdd}~XYnXn2|j�s`t|��r`|j�sTtd|��|�	|j�}|SdS)NTrdrzHCannot decode bytes value %r into unicode (no default_encoding provided)z
 in string %rzHCannot encode unicode value %r into bytes (no default_encoding provided))r9r�UnicodeDecodeErrorrrmr	rr�default_encoding�encoderr�rrKrN�object�start�end�reason�UnicodeEncodeError)rrlr}rgr�rrrr�DsL
$zTemplate._reprcCs.d||d|df}|jr*|d|j7}|S)Nz%s at line %s column %srrz in file %s)r)rrr}rrrr�ns
zTemplate._add_line_info)NNNNNrN)r!r"r#rr7r�rBrr.r-�classmethodrTrarZr[reror�r�r�rr�r�rrrrrYs.
+	+*cKs"|�d�}t|||d�}|�|�S)N�__name)rr5)�getrra)r6r5r\r�tmplrrrrvs
cCst||d�}|�|�S)N)r)rra)r6r�rMr�rrr�paste_script_template_renderer|sr�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rcKs&x |��D]\}}t|||�q
WdS)N)rUrj)rr\rrlrrrr�szbunch.__init__cCs|||<dS)Nr)rrrlrrr�__setattr__�szbunch.__setattr__cCs*y||Stk
r$t|��YnXdS)N)�KeyError�AttributeError)rrrrr�__getattr__�szbunch.__getattr__cCsDd|kr4yt�||�Stk
r0t�|d�SXnt�||�SdS)Nr{)�dict�__getitem__r�)r�keyrrrr��szbunch.__getitem__cCs(d|jjd�dd�t|���D��fS)Nz<%s %s>rcSsg|]\}}d||f�qS)z%s=%rr)�.0�k�vrrr�
<listcomp>�sz"bunch.__repr__.<locals>.<listcomp>)r,r!r�sortedrU)rrrrrT�szbunch.__repr__N)r!r"r#rr�r�r�rTrrrrr�s
	c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcCs
||_dS)N)rl)rrlrrrr�sz
html.__init__cCs|jS)N)rl)rrrrr �szhtml.__str__cCs|jS)N)rl)rrrr�__html__�sz
html.__html__cCsd|jj|jfS)Nz<%s %r>)r,r!rl)rrrrrT�sz
html.__repr__N)r!r"r#rr r�rTrrrrr�sTcCs�|st|d�r|��S|dkr"dSt|t�s4t|�}tjdkrft|t�rft�	|�
d�d�}|�d�}nt�	|d�}tjdkr�t|�r�|�dd�}|S)Nr�rd�3�latin1r�ascii�xmlcharrefreplace)
rXr�rmr	rr:�versionr�cgi�escaperKr�r)rl�forcerrr�
html_quote�s

r�cCs"t|�}t|�r|�d�}t|�S)Nr1)rrr��	url_quote)r�rrr�url�s
r�cKsfg}xRt|���D]B\}}|dkr$q|�d�r:|dd�}|�dt|�t|�f�qWtd�|��S)N�_r3z%s="%s"r)r�rUr?rnr�rr)r\rhrrlrrr�attr�s
r�c@s4eZdZej��Ze�eee	e
ed��dd�ZdS)r)rr�r�r�cCs>t|d�r|��}d}nd}t�|||�}|r6t|�S|SdS)Nr�FT)rXr�rr�r�)rrlr}r�plainrrrr��s
zHTMLTemplate._reprN)
r!r"r#rr7r8rYr�rr�r�r�r�rrrrr�s

cKs |�d�}t||d�}|�|�S)Nr�)r)r�rra)r6r\rr�rrrr�s
c@s@eZdZddd�Zdd�Zdd�Zdd	�Zdd
d�Zdd
�ZdS)r�NcCs.||_||_||_||_||_||_||_dS)N)�	_template�
_func_name�_func_signature�_body�_ns�_pos�_bound_self)r�template�	func_nameZfunc_signaturerkr]r}�
bound_selfrrrr�szTemplateDef.__init__cCsd|j|j|jj|jfS)Nz"<tempita function %s(%s) at %s:%s>)r�r�r�rr�)rrrrrT�szTemplateDef.__repr__cCs|�S)Nr)rrrrr szTemplateDef.__str__cOsZ|�||�}|j��}|�|�|jdk	r4|j|d<g}i}|j�|j|||�d�|�S)Nrrd)	�_parse_signaturer�r8rYr�r�rer�r)rrr\�valuesr]rbZsubdefsrrr�__call__s



zTemplateDef.__call__c	Cs0|dkr|S|j|j|j|j|j|j|j|d�S)N)r�)r,r�r�r�r�r�r�)r�obj�typerrr�__get__s
zTemplateDef.__get__cCsTi}|j\}}}}i}xF|��D]:\}	}
|s@|	|kr@td|	��|	|krR|
||<q |
||	<q Wt|�}t|�}xv|r�x|r�|d|kr�|�d�qvW|r�|�d�}	|�d�||	<qp|r�t|�||<Pqptdd�dd�|D����qpWx4|��D](\}	}|	|kr�|j�||j	|j
�||	<q�Wx$|D]}	|	|k�r"td|	���q"W|�rP|||<|S)NzUnexpected argument %srzExtra position arguments: %sz, cSsg|]}t|��qSr)�repr)r�r�rrrr�3sz0TemplateDef._parse_signature.<locals>.<listcomp>zMissing argument: %s)r�rUrV�listrf�tuplerr�r�r�r�)rrr\r��sig_argsZvar_args�var_kw�defaultsZextra_kwrrlZ
value_exprrrrr�sF




zTemplateDef._parse_signature)N)N)	r!r"r#rrTr r�r�r�rrrrr��s
	
r�c@seZdZdd�Zdd�ZdS)ricCs||_t|�|_dS)N)�_TemplateObject__name�TemplateObjectGetterr�)rrrrrrCszTemplateObject.__init__cCsd|jj|jfS)Nz<%s %s>)r,r!r�)rrrrrTGszTemplateObject.__repr__N)r!r"r#rrTrrrrriAsric@s$eZdZdd�Zdd�Zdd�ZdS)r�cCs
||_dS)N)�#_TemplateObjectGetter__template_obj)rZtemplate_objrrrrMszTemplateObjectGetter.__init__cCst|j|t�S)N)r�r��Empty)rr�rrrr�Psz TemplateObjectGetter.__getattr__cCsd|jj|jfS)Nz<%s around %r>)r,r!r�)rrrrrTSszTemplateObjectGetter.__repr__N)r!r"r#rr�rTrrrrr�Ksr�c@sJeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
krFeZdS)�_EmptycOs|S)Nr)rrr\rrrr�Xsz_Empty.__call__cCsdS)Nrdr)rrrrr [sz_Empty.__str__cCsdS)Nr�r)rrrrrT^sz_Empty.__repr__cCsdS)Nrdr)rrrr�__unicode__asz_Empty.__unicode__cCstd�S)Nr)�iter)rrrr�__iter__dsz_Empty.__iter__cCsdS)NFr)rrrr�__bool__gsz_Empty.__bool__r�N)r!r"r#r�r rTr�r�r�r:r��__nonzero__rrrrr�Ws
r�cCs�|dkrtjdtjdf}d}g}d}|ddf}t�dt�|d�t�|d�f�}	x�|	�|�D]�}
|
�d�}t||
��||�}||dkr�|r�t	d|d||d	��n&||dkr�|s�t	d
|d||d	��||dk�r|||
�
��}
|
�r|�|
�d}n|�|||
�
��|f�d}|
��}|}qfW|�rRt	d|d||d
��||d�}
|
�rn|�|
�|�r|t|�}|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

    Nr/r0Frrz%s|%sz%s inside expression)rrz%s outside expressionTzNo %s to finish last expression)rr)
rr7�re�compiler��finditer�group�
find_positionr�r
r�rn�trim_lex)�srZtrim_whitespacer4r5Zin_expr�chunks�last�last_posZtoken_re�matchryr}r�rrr�lexusL




r�z.^(?:if |elif |for |def |inherit |default |py:)r��endif�endfor�enddefrsrtz\n\r?[\t ]*$z	^[\t ]*\nc	Cs�d}�x�t|�D�]�\}}t|t�r&q|d}t�|�sB|tkrBq|sLd}n||d}|dt|�krnd}n||d}t|t�rt|t�s�q|p�t�|�}|dkr�|��s�d}|dk	r�|d|kr�|��s�d}|r|�rt	�|��s|t|�dkr|��s|�r^|dk�r|���r&|dk�r4d||d<n*t�|�}|d|�
�d�}|||d<|r|}|t|�dk�r�|���s�d||d<qt	�|�}||��d�}|||d<qW|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']
    NrrdrTrQr�)�	enumeratermr	�statement_re�search�single_statementsrW�trail_whitespace_re�strip�lead_whitespace_rer�r�)	�tokensZ	last_trim�i�currentrq�prev�
next_chunkZprev_ok�mrrrr��sN





r�cCsJ|�d||�}|dkr*||�d||�}n|d||}|d||fS)z/Given a string and index, return (line, column)�
rr)�count�rfind)�string�index�
last_indexr��lines�columnrrrr��s
r�cCsV|dkrtjdtjdf}t||||d�}g}x |rPt||�\}}|�|�q2W|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
    Nr/r0)rr4r5)rr7r��
parse_exprrn)r�rr4r5r�r^r�rrrr@�s2r@rcCs(t|dt�r"|d|dd�fS|d\}}|��}|�d�r�|dd��d�}|�d�sf|�d�r�|�d�}d|kr�|�dd�}|�dd	�}|d7}nd|kr�td
||d��d||f|dd�fS|d
k�r�d|kr�td||d��||f|dd�fS|�d��rt|||�S|�d��s(|dk�rDtd|��d||d��n�|dk�rbtd|||d��n�|dk�r�td|||d��n�|�d��r�t	|||�S|�d��r�t
|||�S|�d��r�t|||�S|�d��r�t|||�S|�d��r
d||ddf|dd�fSd||ddf|dd�fS)Nrrzpy:rvz 	r��
z
rdz.Multi-line py blocks must start with a newline)rrrr)rsrtruzcontinue outside of for loopzif zelif r�z%s outside of an if block)�if�elifruz%s with no expression)r�r�r�z
Unexpected %szfor zdefault zinherit zdef �#r~ry)
rmr	r��
startswith�lstrip�replacer
�
parse_condr��	parse_for�
parse_default�
parse_inherit�	parse_def)r�r�contextryr}rrrr;sb








rcCs�|dd}g}|d}xj|s,td||d��t|dt�rf|dddkrfd|ft|�|dd�fSt|||�\}}|�|�qWdS)Nrr)rzMissing {{endif}})rrr�rx)r
rmr��parse_one_condrn)r�rrr��piecesr�rrrr
ps
r
cCs,|d|dd�\}}}g}|�d�r4|dd�}|�d�rXd||dd���|f}nN|�d�r|d	||d
d���|f}n*|dkr�d|d|f}nds�td||f��x�|s�td
||d��t|dt��r
|dddk�s|dd�d��s|dddk�r
||fSt|||�\}}|�|�q�WdS)Nrr�:r3zif rrvzelif r�r�zUnexpected token %r at %szNo {{endif}})rrr�)	r?rrr�r
rmr�rrn)r�rr�firstr}r6r�r�rrrr�s.



rc
CsH|d\}}|dd�}d|}g}|�d�s2t�|�d�rH|dd�}|dd���}t�|�}|sxtd|||d	��|d|���}d
|kr�td|||d	��tdd
�|d|����	d�D��}||�
�d�}xl|s�td||d	��t|dt��r&|dddk�r&d||||f|dd�fSt|||�\}	}|�
|	�q�WdS)Nrr)ruzfor rr3rvzBad for (no "in") in %r)rr�(z=You cannot have () in the variable section of a for loop (%r)cSsg|]}|��r|���qSr)r�)r�r�rrrr��szparse_for.<locals>.<listcomp>�,z
No {{endfor}}r�ru)rr�r?r��in_rer�r
r�r�r�r�rmrrn)
r�rrrr}r6r�r�ryr�rrrr�s>


"
rcCs�|d\}}|�d�st�|�dd�d}|�dd�}t|�dkrTtd|||d��|d��}d|krvtd||d��t�|�s�td	|||d��|d��}d
|||f|dd�fS)Nrzdefault r�=z:Expression must be {{default var=value}}; no = found in %r)rrrz'{{default x, y = ...}} is not supportedz-Not a valid variable name for {{default}}: %rr{)rr�r�rWr
r��var_rer�)r�rrrr}rhr�ryrrrr�s&


rcCs@|d\}}|�d�st�|�dd�d}d||f|dd�fS)Nrzinherit rr`)rr�r�)r�rrrr}ryrrrr
�sr
c
Cs*|d\}}|dd�}|�d�s&t�|�dd�d}|�d�rL|dd�}d|krf|}dddif}nF|�d�s�td	|||d
��n(|dd�}|�dd�\}}t|||�}|d}g}xl|s�td||d
��t|dt��r|ddd
k�rd||||f|dd�fSt|||�\}	}|�	|	�q�WdS)Nrrzdef rr3rr�)z*Function definition doesn't end with ): %s)rr)r|zMissing {{enddef}}r�r|)
rr�r�r?r
�parse_signaturermr�rrn)
r�rrrr�r��sig�sig_textr6r�rrrr�s6


rcsxt�t|�j��g}d}d}i}d�fdd�	}�x:d}|�\}	}
|	tjkrLP|	tjkrt|
dksf|
dkrt|
}|�\}	}
|	tjkr�td|||d��|
}|�\}	}
|	tjks�|	tjkr�|
dkr�|dkr�|}n|dkr�|}n
|�|�|	tjkr2Pq2|dk	�r
td|||d��|	tjkr2|
d	kr2d}d}
d
}d}}g}�x0|d�\}	}
}}|dk�rV|}|}|	tjk�r~|�r~td|||d��|�s�|	tjk�s�|	tjk�r�|
dk�r�t	|||�}|||<|�|�P|�|	|
f�|�r�|	tjk�r�|
|k�r�|d7}nh|�r.|	tjk�r.|
|
k�r.|d8}|�sbd}}
n4|�s8|	tjk�r8|
d
k�r8|
}d}dddd
�|}
�q8Wq2W||||fS)NFcs^yt��\}}\}}\}}}Wntk
r8tjdfSX|rR||||f||ffS||fSdS)Nrd)r
�
StopIteration�tokenize�	ENDMARKER)r}�tok_type�
tok_string�srow�scol�erow�ecol�line)r�rr�	get_tokensz"parse_signature.<locals>.get_token�*z**zInvalid signature: (%s))rrrrrTr)r�[�{r�]�})F)
r�generate_tokensr�readliner �OP�NAMEr
rn�isolate_expression)rrr}r�Zvar_argr�r�r(Zvar_arg_typer!r"�var_nameZ	nest_typeZunnest_typeZ
nest_count�	start_pos�end_posrhr�r�Zdefault_exprr)r�rr�s~	











"


rc	Cs�|\}}|d8}|\}}|d8}|�d�}||krB||||�S|||d�g}|�||d|��|t|�kr�|�||d|��d�|�S)NrTrd)�
splitlines�extendrWrnr)	r�r4r5r#r$r%r&rrhrrrr2Fs
r2zn%prog [OPTIONS] TEMPLATE arg=value

Use py:arg=value to set a Python value; otherwise all values are
strings.
cCs�ddl}ddl}ddl}ddl}|dkr6|jdd�}|�d�}|jt|�td�}|j	ddddd	d
�|j	ddd
dd�|j	ddd
dd�|�
|�\}}t|�dkr�td�|�
d�|d}|dd�}i}	|jr�|	�|j�xd|D]\}
d|
k�r
td|
�|�
d�|
�dd�\}}
|�d��r:|dd�}t|
�}
|
|	|<q�W|dk�r`|j��}d}nt|d�}
|
��}|
��|j�r�t}nt}|||d�}|�|	�}|j�r�t|jd�}
|
�|�|
��n|j�|�dS)NrrZPaste)r��usagez-oz--output�outputZFILENAMEz(File to write output to (default stdout))�dest�metavar�helpz--html�use_html�
store_truez9Use HTML style filling (including automatic HTML quoting))r:�actionr<z--env�use_envz-Put the environment in as top-level variablesz!You must give a template filenamerQrzBad argument: %rzpy:rv�-z<stdin>rG)r�wb)r:�optparse�
pkg_resourcesr)�argv�get_distribution�OptionParserr�_fill_command_usage�
add_option�
parse_argsrW�print�exitr@rY�environr�rr��stdinrIrHrJr=rrrar9�write�stdout)rr:rCrDr)�dist�parser�optionsZ
template_namer�rlrZtemplate_contentrOZ
TemplateClassr�r^rrr�fill_command]sv










rT�__main__)N)N)T)NTrN)NrN)r)N)Gr$�
__future__rr�r:r��urllibrr��ImportError�urllib.parser)r�iorZ_looperrZcompat3rrr	r
rr�__all__r�r�Irrr
r%r&r.r�rrr�r�rrr�r�r�rrr�rir�r�r�r�r�r�r�r�r�r�r@rr
rrrr
rrr2rHrTr!rrrr�<module>sx 



"
M

?


:

=
5#L
@