Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/Cython/Tempita/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/Cython/Tempita/__pycache__/_tempita.cpython-35.pyc



Z��Z���@s�dZddlmZddlZddlZddlZyddlmZWn"e	k
rrddl
mZYnXddlZddlZddl
mZddlmZddlmZmZmZmZmZmZd	d
ddd
ddgZejd�Zejdej�ZGdd	�d	e�ZGdd�de�ZGdd�de�Z dd�Z!Gdd
�d
e"�Z#ddd�Z$ddd�Z%Gdd�de&�Z'Gdd�de"�Z(dd 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[1ddddd0d1�Z3ejd2�Z4d3d4d5d6d7d8gZ5ejd9�Z6ejd:�Z7d;d<�Z8d=d>�Z9dddd?d@�Z:fdAdB�Z;dCdD�Z<dEdF�Z=dGdH�Z>dIdJ�Z?dKdL�Z@dMdN�ZAdOdP�ZBdQdR�ZCdSZDddTdU�ZEeFdVkr�eE�dS)Wa�
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@s1eZdZdZddd�Zdd�ZdS)r
z.Exception raised while parsing a template
    NcCs&tj||�||_||_dS)N)�	Exception�__init__�position�name)�self�messagerr�r�J/opt/alt/python35/lib64/python3.5/site-packages/Cython/Tempita/_tempita.pyr;s	zTemplateError.__init__cCsZdj|j�}|jr<d||jd|jdf}|jrV|d|j7}|S)N� z%s at line %s column %srrz in %s)�join�argsrr)r�msgrrr�__str__@s		zTemplateError.__str__)�__name__�
__module__�__qualname__�__doc__rr rrrrr
7sc@seZdZdS)�_TemplateContinueN)r!r"r#rrrrr%Jsr%c@seZdZdS)�_TemplateBreakN)r!r"r#rrrrr&Nsr&cCsFtjjtjj|j�|�}|jj|d|jd|j�S)N�	namespace�get_template)	�os�pathr�dirnamer�	__class__�
from_filenamer'r()rZ
from_templater*rrr�get_file_templateRs$	r.c	@s	eZdZdddddeiZdZdZdddddddd	d
�Zdddedd�Z	e
e	�Z	d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�ZdS)%r�start_bracesz{{�
end_bracesz}}r�utf8Nrc	Cs�||_|dkr2|jd|jdf}n7|jjj�|_|d|jd<|d|jd<||_t|�|_|dkrM|dk	rMytj|�}	Wnt	k
r�Yn�X|	j
}
|	j}d|
kr|
d}|jd�s|jd�r9|dd�}nd|
kr3|
d}nd	}|rM|d
|7}||_
t|d|d|d
|j�|_|dkr�i}||_||_|dk	r�||_dS)Nr/r0rr�__file__z.pycz.pyor!z<string>z:%sr�line_offset�
delimeters���)�content�default_namespacer,�copyr4r�_unicode�sys�	_getframe�
ValueError�	f_globals�f_lineno�endswithr�parse�_parsedr'r(�default_inherit)rr6rr'�
stacklevelr(rBr3r4�caller�globals�linenorrrrdsB	
	
		

	$		zTemplate.__init__cCs_t|d�}|j�}|j�|r:|j|�}|d|d|d|d|d|�S)N�rbr6rr'rBr()�open�read�close�decode)�cls�filenamer'�encodingrBr(�f�crrrr-�s
zTemplate.from_filenamecCs0d|jjtt|��dd�|jfS)Nz<%s %s name=%r>�)r,r!�hex�idr)rrrr�__repr__�s	zTemplate.__repr__cOs�|rj|rtd��t|�dkr6td��t|dd�s`td|df��|d}|}|j|d<|jr�|j|j�|j|�\}}}|s�|j}|r�|j||||�}|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.substitutecCskd}g}i}|j|j|d|d|�d|krO|jd�}nd}dj|�||fS)NT�outr_�__inherit__�)�_interpret_codesrA�popr)rr]�__traceback_hide__�partsr_r`rrrrZ�szTemplate._interpretc
Cs�d}|js*tdddd|j��|j||�}t|j�}x*|j�D]\}}	t|||	�qXW||_|j�}||d<|j|�S)NTz:You cannot use inheritance without passing in get_templaterrr)	r(r
r�TemplateObjectrU�setattr�bodyr8ra)
rrkr_Zinherit_templater]rgZtemplZself_r�valuerrrr[�s		
zTemplate._interpret_inheritcCsPd}xC|D];}t|t�r2|j|�q
|j||||�q
WdS)NT)�
isinstancer	�append�_interpret_code)r�codesr]rbr_rg�itemrrrre�s

zTemplate._interpret_codesc
Cs�d}|d|d}}|dkrA|j|d||�n_|dkrYt��nG|dkrqt��n/|dkr�|d|d	|d
}}	}
|j|	||�}	|j||	|
|||�n�|dkr|dd�}|j||||�n�|dkr�|djd
�}|j|d||�}x9|dd�D]'}
|j|
||�}||�}qOW|j|j||��n
|dkr�|d|d	}}	||kr�|j|	||�}|||<n�|dkr|d}	|j|	||�}||d<n�|dkrz|d}|d	}|d
}t	|||d|d|d|�||<||<n&|dkr�dSds�t
d|��dS)NTrr�pyrQ�continue�break�for���cond�expr�|�defaultr`rc�defrkr]�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|�dkr6|||d<ndt|�t|�krptdt|�t|�f��x't||�D]\}	}
|
||	<q�Wy|j||||�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
Cs�d}x�|D]�}t|t�s)t�|d|d}}|dkrSd}	n|j|d||�}	|	r
|j|d|||�Pq
WdS)NTrr�elserQrv)rmr	r�r�re)
rrhr]rbr_rgr�rr}r^rrrr�s
	zTemplate._interpret_ifcCs�d}yYyt||j|�}Wn5tk
rY}ztd|��WYdd}~XnX|SWnntk
r�}zNt|dd�r�|jd}nt|�}|j||�f|_�WYdd}~XnXdS)NTz invalid syntax in expression: %srr)�evalr7�SyntaxErrorr�getattrrr�_add_line_info)rr�r]r}rgrl�eZarg0rrrr�(s zTemplate._evalcCs�d}yt||j|�Wnktk
r�}zK|jr]|j|jd|�f|_n|jd|�f|_�WYdd}~XnXdS)NTr)�execr7rrr�)rr�r]r}rgr�rrrr9s	"zTemplate._execc"Cs�d}y�|dkrdS|jrVyt|�}Wq�tk
rRt|�}Yq�XnBt|t�sqt|�}t|�r�|jr�|j	|j�}WnGt
k
r�}z'|j|jd|�f|_�WYdd}~Xn�X|jr�t|t�r�|jstd|��y|j
|j�}Wq�tk
r�}z4t|j|j|j|j|jd|��WYdd}~Xq�XnA|jr�t|�r�|js�td|��|j	|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._reprcCs9d||d|df}|jr5|d|j7}|S)Nz%s at line %s column %srrz in file %s)r)rrr}rrrr�ns
	zTemplate._add_line_info)r!r"r#rr7r�rBrr.r-�classmethodrTrarZr[reror�r�r�rr�r�rrrrrYs.		+	+*cKs4|jd�}t|d|d|�}|j|�S)N�__namerr4)�getrra)r6r4r\r�tmplrrrrvscCst|d|�}|j|�S)Nr)rra)r6r�rMr�rrr�paste_script_template_renderer|sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rcKs1x*|j�D]\}}t|||�q
WdS)N)rUrj)rr\rrlrrrr�szbunch.__init__cCs|||<dS)Nr)rrrlrrr�__setattr__�szbunch.__setattr__cCs1y||SWntk
r,t|��YnXdS)N)�KeyError�AttributeError)rrrrr�__getattr__�s
zbunch.__getattr__cCs\d|krHytj||�SWqXtk
rDtj|d�SYqXXntj||�SdS)Nr{)�dict�__getitem__r�)r�keyrrrr��s
zbunch.__getitem__cCs6d|jjdjdd�t|j��D��fS)Nz<%s %s>rcSs&g|]\}}d||f�qS)z%s=%rr)�.0�k�vrrr�
<listcomp>�s	z"bunch.__repr__.<locals>.<listcomp>)r,r!r�sortedrU)rrrrrT�s	zbunch.__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�sTcCs�|r t|d�r |j�S|dkr0dSt|t�sKt|�}tjdkr�t|t�r�tj	|j
d�d�}|jd�}ntj	|d�}tjdkr�t|�r�|jdd�}|S)Nr�rd�3�latin1r�ascii�xmlcharrefreplace)
rXr�rmr	rr:�versionr�cgi�escaperKr�r)rl�forcerrr�
html_quote�s
r�cCs1t|�}t|�r'|jd�}t|�S)Nr1)rrr��	url_quote)r�rrr�url�sr�cKs�g}xqt|j��D]]\}}|dkr4q|jd�rS|dd�}|jdt|�t|�f�qWtdj|��S)N�_rz%s="%s"rr5)r�rUr?rnr�rr)r\rhrrlrrr�attr�s'r�c
@sSeZdZejj�Zejedede	de
de��dd�ZdS)rrr�r�r�cCsWt|d�r$|j�}d}nd}tj|||�}|rOt|�S|SdS)Nr�FT)rXr�rr�r�)rrlr}r�plainrrrr��s	
zHTMLTemplate._reprN)
r!r"r#rr7r8rYr�rr�r�r�r�rrrrr�s
cKs.|jd�}t|d|�}|j|�S)Nr�r)r�rra)r6r\rr�rrrr�sc@s^eZdZddd�Zdd�Zdd�Zdd	�Zdd
d�Zdd
�ZdS)r�NcCsC||_||_||_||_||_||_||_dS)N)�	_template�
_func_name�_func_signature�_body�_ns�_pos�_bound_self)r�template�	func_nameZfunc_signaturerkr]r}�
bound_selfrrrr�s						zTemplateDef.__init__cCs#d|j|j|jj|jfS)Nz"<tempita function %s(%s) at %s:%s>)r�r�r�rr�)rrrrrT�szTemplateDef.__repr__cCs|�S)Nr)rrrrr szTemplateDef.__str__cOs|j||�}|jj�}|j|�|jdk	rJ|j|d<g}i}|jj|j|||�dj|�S)Nrrd)	�_parse_signaturer�r8rYr�r�rer�r)rrr\�valuesr]rbZsubdefsrrr�__call__s

zTemplateDef.__call__c	CsD|dkr|S|j|j|j|j|j|j|jd|�S)Nr�)r,r�r�r�r�r�r�)r�obj�typerrr�__get__s
zTemplateDef.__get__cCs�i}|j\}}}}i}x`|j�D]R\}	}
|r]|	|kr]td|	��|	|krv|
||<q.|
||	<q.Wt|�}t|�}x�|r=x'|r�|d|kr�|jd�q�W|r�|jd�}	|jd�||	<q�|rt|�||<Pq�tddjdd�|D����q�WxH|j�D]:\}	}|	|krK|jj||j	|j
�||	<qKWx*|D]"}	|	|kr�td|	��q�W|r�|||<|S)NzUnexpected argument %srzExtra position arguments: %sz, cSsg|]}t|��qSr)�repr)r�r�rrrr�3s	z0TemplateDef._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)	r!r"r#rrTr r�r�r�rrrrr��s	r�c@s(eZdZdd�Zdd�ZdS)ricCs||_t|�|_dS)N)�_TemplateObject__name�TemplateObjectGetterr�)rrrrrrCs	zTemplateObject.__init__cCsd|jj|jfS)Nz<%s %s>)r,r!r�)rrrrrTGszTemplateObject.__repr__N)r!r"r#rrTrrrrriAsric@s4eZdZdd�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�Ksr�c@smeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
krieZdS)�_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__cCs
tf�S)N)�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|dkr&tjdtjdf}d}g}d}|ddf}tjdtj|d�tj|d�f�}	x.|	j|�D]}
|
jd�}t||
j�||�}||dkr�|r�t	d|dd	|d
|��n7||dkr+|r+t	d|dd	|d
|��||dkrm|||
j
��}
|
rd|j|
�d}n)|j|||
j
��|f�d}|
j�}|}q�W|r�t	d
|dd
|d	|��||d�}
|
r�|j|
�|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

    Nr/r0Frrz%s|%sz%s inside expressionrrz%s outside expressionTzNo %s to finish last expression)
rr7�re�compiler��finditer�group�
find_positionr�r
r�rn�trim_lex)�srZtrim_whitespacer3r4Zin_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	CsXd}xKt|�D]=\}}t|t�r1q|d}tj|�rZ|tkrZq|sid}n||d}|dt|�kr�d}n||d}t|t�st|t�r�q|p�tj|�}|dkr�|j�r�d}|dk	r+|d|kr+|j�r+d}|r|sjt	j|�sj|t|�dkr|j�r|r�|dkr�|j�s�|dkr�d||d<n7tj|�}|d|j
�d�}|||d<|r|}|t|�dkr|j�rd||d<qt	j|�}||j�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�cCsa|jd||�}|dkr=||jd||�}n|d||}|d||fS)z/Given a string and index, return (line, column)�
rr)�count�rfind)�string�index�
last_indexr��lines�columnrrrr��s
r�cCs}|dkr&tjdtjdf}t|d|d|d|�}g}x,|rxt||�\}}|j|�qMW|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/r0rr3r4)rr7r��
parse_exprrn)r�rr3r4r�r^r�rrrr@�s2
	r@cCs�t|dt�r+|d|dd�fS|d\}}|j�}|jd�r|dd�jd�}|jd�s�|jd�r�|jd�}d|kr�|jdd�}|jdd	�}|d7}n$d|kr�td
d|d|��d
||f|dd�fS|d$krdd|krJtdd|d|��||f|dd�fS|jd�r�t|||�S|jd�s�|dkr�td|j�dd|d|��n|d%kr�td|d|d|��n�|d&krtd|d|d|��n�|jd�r<t	|||�S|jd�r[t
|||�S|jd�rzt|||�S|jd �r�t|||�S|jd!�r�d"||ddf|dd�fSd#||ddf|dd�fS)'Nrrzpy:rvz 	r��
z
rdz.Multi-line py blocks must start with a newlinerrrrrsrtruzcontinue outside of for loopzif zelif r�z%s outside of an if block�if�elifz%s with no expressionr�r�r�z
Unexpected %szfor zdefault zinherit zdef �#r~ry)rsrt)rrru)r�r�r�)
rmr	r��
startswith�lstrip�replacer
�
parse_condr��	parse_for�
parse_default�
parse_inherit�	parse_def)r�r�contextryr}rrrr;sb


%rcCs�|dd}g}|d	}x�|s?tdd|d|��t|dt�r�|dddkr�d|ft|�|dd�fSt|||�\}}|j|�q!WdS)
NrrrzMissing {{endif}}rrr�rx)r)r
rmr��parse_one_condrn)r�rrr��piecesr�rrrr
ps
$r
cCs�|d|dd�\}}}g}|jd�rF|dd�}|jd�rzd||dd�j�|f}nq|jd�r�d||d	d�j�|f}n=|d
kr�d
|d|f}nds�td||f��x�|stdd
|d|��t|dt�rh|dddks^|ddjd�s^|ddd
krh||fSt|||�\}}|j|�q�WdS)Nrr�:zif rrvzelif r�r�zUnexpected token %r at %szNo {{endif}}rrr�r5)	r?rrr�r
rmr�rrn)r�rr�firstr}r6r�r�rrrr�s.!%%
rc
Cs�|d\}}|dd�}d|}g}|jd�sEt�|jd�rd|dd�}|dd�j�}tj|�}|s�td|d|d	|��|d|j��}d
|kr�td|d|d	|��tdd
�|d|j��j	d�D��}||j
�d�}x�|sRtdd|d	|��t|dt�r�|dddkr�d||||f|dd�fSt|||�\}	}|j
|	�q4WdS)Nrrruzfor rrvzBad for (no "in") in %rrr�(z=You cannot have () in the variable section of a for loop (%r)cSs(g|]}|j�r|j��qSr)r�)r�r�rrrr��s	zparse_for.<locals>.<listcomp>�,z
No {{endfor}}r�)rur5)rr�r?r��in_rer�r
r�r�r�r�rmrrn)
r�rrrr}r6r�r�ryr�rrrr�s>

/#rcCs
|d\}}|jd�s%t�|jdd�d}|jdd�}t|�dkr{td|d|d|��|dj�}d|kr�td	d|d|��tj|�s�td
|d|d|��|dj�}d|||f|dd�fS)Nrzdefault r�=z:Expression must be {{default var=value}}; no = found in %rrrrz'{{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cCsX|d\}}|jd�s%t�|jdd�d}d||f|dd�fS)Nrzinherit rr`)rr�r�)r�rrrr}ryrrrr
�sr
c
Cs�|d\}}|dd�}|jd�s5t�|jdd�d}|jd�rj|dd
�}d|kr�|}fddif}nh|jd�s�td|d|d	|��n:|dd�}|jdd�\}}t|||�}|d}g}x�|s*tdd|d	|��t|dt�rt|dddkrtd
||||f|dd�fSt|||�\}	}|j	|	�qWdS)Nrrzdef rr�)z*Function definition doesn't end with ): %srrr|zMissing {{enddef}}r�r5r5)r|)
rr�r�r?r
�parse_signaturermr�rrn)
r�rrrr�r��sig�sig_textr6r�rrrr�s6

#rcsbtjt|�j��g}d}d}i}d�fdd�}x
d}|�\}	}
|	tjkrmP|	tjkr�|
dks�|
dkr�|
}|�\}	}
|	tjkr�td|d|d|��|
}|�\}	}
|	tjks|	tjkr]|
d	kr]|dkr(|}n"|dkr=|}n
|j|�|	tjkrHPqH|dk	r�td|d|d|��|	tjkrH|
d
krHd}d}
d}d}}g}x�|d�\}	}
}}|dkr�|}|}|	tjkr&|r&td|d|d|��|r�|	tjksW|	tjkr�|
d	kr�t	|||�}|||<|j|�P|j|	|
f�|r�|	tjkr�|
|kr�|d
7}q�|r|	tjkr|
|
kr|d
8}|sJd}}
q�|r�|	tjkr�|
dkr�|
}d
}ddddddi|}
q�WqHW||||fS)NFc
s}y+t��\}}\}}\}}}Wntk
rLtjdfSYnX|ro||||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)rrrrrTrr�[�{r�]�})rr*r+)
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}|jd�}||krY||||�S|||d�g}|j||d|��|t|�kr�|j||d|��dj|�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.
c	Cs�ddl}ddl}ddl}ddl}|dkrO|jdd�}|jd�}|jdt|�dt�}|j	dddd	d
ddd
�|j	ddddddd�|j	ddddddd�|j
|�\}}t|�dkrtd�|j
d�|d}|dd�}i}	|jrS|	j|j�x�|D]z}
d|
kr�td|
�|j
d�|
jdd�\}}
|jd�r�|dd�}t|
�}
|
|	|<qZW|dkr�|jj�}d}n%t|d�}
|
j�}|
j�|jr3t}nt}||d|�}|j|	�}|jr�t|jd �}
|
j|�|
j�n|jj|�dS)!NrrZPaster��usagez-oz--output�dest�output�metavarZFILENAME�helpz(File to write output to (default stdout)z--html�use_html�action�
store_truez9Use HTML style filling (including automatic HTML quoting)z--env�use_envz-Put the environment in as top-level variablesz!You must give a template filenamerQrzBad argument: %rzpy:rv�-z<stdin>rGr�wb)r:�optparse�
pkg_resourcesr)�argv�get_distribution�OptionParserr�_fill_command_usage�
add_option�
parse_argsrW�print�exitr@rY�environr�rr��stdinrIrHrJr=rrrar:�write�stdout)rr:rCrDr)�dist�parser�optionsZ
template_namer�rlrZtemplate_contentrOZ
TemplateClassr�r^rrr�fill_command]sv			


	

	
			

rT�__main__)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>sv
.�"M
	?:
=5#L@