
    w:iA                         d Z ddlmZ ddl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 ddlmZ ddlmZmZmZmZmZmZmZ ddlmZ ddlmZ dd	lT dd
lmZ dgZ dZ! G d de          Z"dS )zMarkup templating engine.    )chain)AttrsMarkup	NamespaceStream)STARTENDSTART_NSEND_NSTEXTPICOMMENT)	XMLParser)BadDirectiveErrorTemplateTemplateSyntaxError_apply_directivesEXECINCLUDESUB)Suite)interpolate)*)NewTextTemplateMarkupTemplatezrestructuredtext enc                       e Zd ZdZdZdZdefdefdefde	fde
fd	efd
efdefdefdefdefdefgZdZeZ	 	 ddZd Zd Zd Zd Zd ZddZd Zd dZdS )!r   aA  Implementation of the template language for XML-based templates.
    
    >>> tmpl = MarkupTemplate('''<ul xmlns:py="http://genshi.edgewall.org/">
    ...   <li py:for="item in items">${item}</li>
    ... </ul>''')
    >>> print(tmpl.generate(items=[1, 2, 3]))
    <ul>
      <li>1</li><li>2</li><li>3</li>
    </ul>
    zhttp://genshi.edgewall.org/zhttp://www.w3.org/2001/XIncludedefmatchwhen	otherwiseforifchoosewithreplacecontentattrsstripxmlNstrictTc           
      t    t          j        | |||||||           |                     | j        |            d S )N)filepathfilenameloaderencodinglookup
allow_exec)r   __init__add_directivesDIRECTIVE_NAMESPACE)selfsourcer,   r-   r.   r/   r0   r1   s           N/var/www/html/trac/venv/lib/python3.11/site-packages/genshi/template/markup.pyr2   zMarkupTemplate.__init__?   sO    $H!'(6%/	1 	1 	1 	1 	D4d;;;;;    c                     t          j        |            | j                            | j                   | xj        | j        | j        gz  c_        d S N)r   _init_filtersfiltersremove_include_match)r5   s    r7   r;   zMarkupTemplate._init_filtersF   sH    t$$$DM***dm44r8   c           	      |   t          |t                    st          || j        |          }g }|D ]\  }}}|t          u rJt          || j        |d         |d         | j                  D ]\  }}}|                    |||f           Z|t          u r|d         dk    r| j
        st          d| j        g|dd          R  	 t          |d         | j        |d         | j                  }nL# t          $ r?}t          || j        |d         |j        pdz   dz
  |d         |j        pdz             d }~ww xY w|                    t           ||f           '|t"          u rA|                                                    d          s|                    |||f           q|                    |||f           |S )	N)r-   r/         r0   r   pythonzPython code blocks not allowed!)
isinstancer   r   r-   r   r   r,   r0   appendr   r1   r   r   SyntaxErrorlinenooffsetr   r   lstrip
startswith)	r5   r6   r/   streamkinddatapossuiteerrs	            r7   _parsezMarkupTemplate._parseL   s%   &&)) 	2v(02 2 2F% 	1 	1OD$t||'24A36q6$+(O (O (O 5 5OD$MM4s"344445 Q8 3 3 G-.N.2mG>A!""gG G G GJ!$q'4=#a&)-6 6 6EE" J J J-c4=.1!f
a.H1.L.1!f
a.HJ J JJ tUC01111{{}}//44 5MM4s"3444 tT3/0000s   )C--
D67:D11D6c           	         d}i }g }i }|D ]\  }}	}
|t           u r|	\  }}g }d}|j        |k    r|                    |j                  }|!t	          |j        | j        |
d                   t          d |D                       }|                    |                    |          |||	                                |
f           d}g }|D ]\  }}|j        |k    r|                    |j                  }|!t	          |j        | j        |
d                   t          |          t          u r!t          |          dk    r|d         d         }|                    |                    |          |||	                                |
f           |                    ||f           t          |          }|r.|                    d            |t          |          |f|||f<   |                    |||f|
f           |dz  }|t          u rh|dz  }|                    ||	|
f           ||	f|v rC|                    ||	f          \  }}}||d          }|r
|dd         }t"          ||f|
fg||d <   m|t"          u r|	\  }}|                     |||          }t          |          dk    rj|d         d         t"          u rU|d         d         t"          us*|d         d         d         |d         d         d         k    r|d         d         \  }}||z  }|                    |||f|
f           +|t&          u r*|	\  }}|||<   ||k    r|                    ||	|
f           ^|t(          u r8|                    |	d           }|r||k    r|                    ||	|
f           |                    ||	|
f           |S )	Nr   FrA   c                 4    g | ]\  }}|j         |j        |fS  )	namespace	localname).0namevalues      r7   
<listcomp>z6MarkupTemplate._extract_directives.<locals>.<listcomp>   s@     !A !A !A[T515!A$.%!8 !A !A !Ar8   Tc                     | d         S )Nr   rV   )xs    r7   <lambda>z4MarkupTemplate._extract_directives.<locals>.<lambda>   s
    !A$ r8   )key)r   rW   get_directiverX   r   r,   dictrG   get_directive_indexcopytypelistlenr   sortr	   popr   _extract_directivesr
   r   )r5   rM   rW   factorydepthdirmap
new_stream	ns_prefixrN   rO   rP   tagr'   
directivesr(   clsargs	new_attrsrZ   r[   rJ   	substreamprev_substreamadded_directivesprefixuris                             r7   rk   z"MarkupTemplate._extract_directiveso   s   
	% U	5 U	5OD$u}}!
U
=I--!//>>C{/04s1vG G G !A !A$)!A !A !A B BD%%w'B'B3'G'G'+Y^^-=-=s'D E E E E	#( 8 8KD%~22%33DNCC;"3DN48M3q6#K #K K;;$..3u::??$)!HQKE"))7+F+Fs+K+K+.y~~7G7G+N O O O O "(($7777!),,	 3OOO777,6J,1,3FE3<( !!4#y)93"?@@@

!!4s"3444
 4=F**06

E4=0I0I-J *677 3I 4$-adO	z95s;+Jvww' -1*
N 44^Y5<> >	 	NNa''IaLOs,B,B+A.q1<<-a03A6)A,q/!:LLL2;A,q//$i"22J!!4*i)@#"FGGGG!! #$'	&!)##%%tT3&7888mmD$// 93)++%%tT3&7888 !!4s"34444r8   c                    g g}i }g }g }t          | j                  }|D ]\  }}}	|d         }|t          u r|\  }
}|
|v r|
j        dk    rr|                    d          }|st          d| j        g|	dd          R  |                    ||                    d          f           |                    g            |
j        dk    r0|                    g            |                    |d                    |                    ||
|f|	f           |t          u r5|r.||d         k    r"|	                                }||d         u sJ /||d         k    rd }t          |          t          |          k    r|	                                }|	                                 |d         }|	                                \  }}	 t          t          d                    |          p| j        }n)# t          $ r t          d	| j        g|	dd          R  w xY w|                    t          |||f|	f           |                    |||	f           4|t           u r|d         |k    r|d         ||d
         <   \|t"          u r||v r|	                    |           |                    |||	f           t          |          dk    sJ |d
         S )Nra   includehrefz(Include misses required attribute "href"rA   parsefallback)r)   textz.Invalid value for "parse" attribute of includer   )r   XINCLUDE_NAMESPACEr   rX   getr   r,   rG   r	   rj   rh   r   r   	__class__KeyErrorr   r
   r   )r5   rM   streamsprefixes	fallbacksincludesxinclude_nsrN   rO   rP   rq   r'   include_hreffallback_streamr   r}   r~   rs   s                     r7   _extract_includesz MarkupTemplate._extract_includes   s\   $	 788% 6	1 6	1OD$R[Fu}}!
U+%%}	11',yy'8'8+ O"5 7I6:m#OFI!""g#O #O #O O !uyy7I7I(JKKKr*****44r***!((555MM4#us";<<<< 5Z)@!@!@&-kkmmO*im;;;;;[333#H9~~X66#,==??KKMMM$R[F"*,,..KD%K#1$3  #e**7 )-  $ K K K1 3I26-KBEabb'K K K KK MM7T3,A3"GHHHHMM4s"34444!!d1g&<&<$(Ga!!DH$4$4T"""" tT3/00007||q    qzs   )G//&Hc              #     K   |D ]\  }}}|t           u r|\  }}g }|D ]\  }}	|	rmt          t          |	| j        |d         |d         | j                            }	t          |	          dk    r#|	d         d         t          u r|	d         d         }	|                    ||	f           |t          |          f}|||fV  d S )NrA   rB   rC   r   )	r   rg   r   r,   r0   rh   r   rG   r   )
r5   rM   rN   rO   rP   rq   r'   ru   rZ   r[   s
             r7   _interpolate_attrsz!MarkupTemplate._interpolate_attrs  s     % 	" 	"OD$u}}!
U	#( 4 4KD% 0 $[s1v14Q&M &M &M !N !Nu::??uQx{d/B/B$)!HQKE$$dE]3333E),,,c/!!!!	" 	"r8   c                 |    t          j        | |                     |                     |                    |          S )N)inlined)r   _preparer   r   )r5   rM   r   s      r7   r   zMarkupTemplate._prepare"  s@     $(()@)@)H)HII   	r8   c                 j    | j         r
J d            |                     | j        ||          | _        dS )a  Register a custom `DirectiveFactory` for a given namespace.
        
        :param namespace: the namespace URI
        :type namespace: `basestring`
        :param factory: the directive factory to register
        :type factory: `DirectiveFactory`
        :since: version 0.6
        z9Too late for adding directives, template already preparedN)	_preparedrk   _stream)r5   rW   rl   s      r7   r3   zMarkupTemplate.add_directives'  sK     > 	? 	? $? 	? 	? 	?//i079 9r8   r   c           	   +     K   j         }d }|D ]}|r|d         t          ur|d         t          ur|V  (t          |          D ]v\  }	\  }
}}}}|	|k     s||	|k    r |
|          du rJd|v r||	= |	dz  }	d ||	dz   d         D             D ]}
 |
|d           |	dz   }d|vr	d	|v r|dz  }g } |||j                  }|dk    r | j        |f||d
|}|                     t          |g||                    d|vrt                    t                    dgfd}t          |          }t          |||          } | j         | j        |fi |fd|	dz   i|D ]}|V  d         sD ]}d ||	d         D             D ]}
 |
|d         d            nx|V  dS )z_Internal stream filter that applies any defined match templates
        to the stream.
        c              3      K   d}	 t          |           }|d         t          u r|dz  }n|d         t          u r|dz  }|dk    r|V  n ||           d S Q)NrA   r   )nextr   r	   )rM   rG   rm   events       r7   _stripz%MarkupTemplate._match.<locals>._strip;  sv      E
V8u$$QJEE1X__QJE199KKKKF5MMME
r8   r   NT
match_oncerA   c                     g | ]
}|d          S r   rV   rY   mts     r7   r\   z)MarkupTemplate._match.<locals>.<listcomp>^  s     K K K2A K K Kr8   )
updateonlynot_recursive)startendnot_bufferedFc                 <    dd<                        |           S )NTr   select)pathr&   ctxt
namespacesselecteds    r7   r   z%MarkupTemplate._match.<locals>.selects  s"    &*&~~dJEEEr8   r   r   c                     g | ]
}|d          S r   rV   r   s     r7   r\   z)MarkupTemplate._match.<locals>.<listcomp>  s     G G G2A G G Gr8   )_match_templatesr   r	   	enumeraterG   r?   r>   r   rg   r   rc   r   _flatten)r5   rM   r   r   r   varsmatch_templatesr   r   idxtestr   templatehintsrr   pre_endtailinnerr   r&   r   r   s     `                @@@r7   r?   zMarkupTemplate._match5  sP      /	 	 	  H	 H	E # uQxu'<'<',Qxs':': !11? ?JJdD(E:z;;#/cSjj4z400D88#u,,+C0q !L Kq1J K K K G GUJFFFFF "AgG#500_5M5M1D"F64;77E{{ +E4 !Au07!A !A;?!A !A"mmE5'5$,G,GNNG%U22"&w--$WooG !&wHF F F F F F F F  v...D  1:t15 7  7H!,]T]8T .C .C=A.C .C-1"J "J9<q"JDH"J "J $ $ $
 $A; !%, ! !E  !H G1F G G G I IT!Wj$4HHHHHEo 9t QH	 H	r8   )NNNNr*   Tr:   )r   N)__name__
__module____qualname____doc__r4   r   DefDirectiveMatchDirectiveWhenDirectiveOtherwiseDirectiveForDirectiveIfDirectiveChooseDirectiveWithDirectiveReplaceDirectiveContentDirectiveAttrsDirectiveStripDirectiverr   
serializerr   _number_convr2   r;   rS   rk   r   r   r   r3   r?   rV   r8   r7   r   r   !   sM       	 	 8:,'N+=) 23,'%_-=)././N+N+-J JLDH<@< < < <5 5 5! ! !F] ] ]~@ @ @D" " "$   
9 9 9\ \ \ \ \ \r8   N)#r   	itertoolsr   genshi.corer   r   r   r   r   r	   r
   r   r   r   r   genshi.inputr   genshi.template.baser   r   r   r   r   r   r   genshi.template.evalr   genshi.template.interpolationr   genshi.template.directivesgenshi.template.textr   __all____docformat__r   rV   r8   r7   <module>r      st            8 8 8 8 8 8 8 8 8 8 8 8 G G G G G G G G G G G G G G G G G G " " " " " "4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ' & & & & & 5 5 5 5 5 5 ( ( ( ( 0 0 0 0 0 0
%p p p p pX p p p p pr8   