
    w:i                         d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ g d	Zd
Z G d de          Z G d de          Z G d de          Z G d de          ZdS )zYBasic support for the template engine plugin API used by TurboGears and
CherryPy/Buffet.
    )string_typesETHTMLXML)DocType)Template)TemplateLoader)MarkupTemplate)TextTemplateNewTextTemplate)ConfigurationErrorAbstractTemplateEnginePluginMarkupTemplateEnginePluginTextTemplateEnginePluginzrestructuredtext enc                       e Zd ZdZdS )r   z=Exception raised when invalid plugin options are encountered.N)__name__
__module____qualname____doc__     N/var/www/html/trac/venv/lib/python3.11/site-packages/genshi/template/plugin.pyr   r       s        GGGGr   r   c                   @    e Zd ZdZdZdZd	dZd
dZddZddZ	d Z
dS )r   z!Implementation of the plugin API.Nc           	         || _         |i }|| _        |                    dd           | _        |                    dd          }t	          |t
                    r|                                dv }d |                    dd                              d          D             }| | _        	 t          |                    d	d
                    }n3# t          $ r& t          d|                    d	          z            w xY w|                    dd           }|rt          |d          st          d          |                    dd          }|dvrt          d|z            	 t          |                    dd                    }n3# t          $ r& t          d|                    d          z            w xY wt          d |D             ||| j        |||          | _        d S )Nzgenshi.default_encodingzgenshi.auto_reload1r   onyestruec                     g | ]}||S r   r   .0ps     r   
<listcomp>z9AbstractTemplateEnginePlugin.__init__.<locals>.<listcomp>4   s3     N N NQKLNq N N Nr   zgenshi.search_path :zgenshi.max_cache_size   z&Invalid value for max_cache_size: "%s"zgenshi.loader_callback__call__z"loader callback must be a functionzgenshi.lookup_errorsstrict)lenientr*   zUnknown lookup errors mode "%s"zgenshi.allow_execTz!Invalid value for allow_exec "%s"c                     g | ]}||S r   r   r"   s     r   r%   z9AbstractTemplateEnginePlugin.__init__.<locals>.<listcomp>L   s    %B%B%BA%Ba%B%B%Br   )auto_reloadmax_cache_sizedefault_classvariable_lookup
allow_execcallback)get_extra_varsoptionsgetdefault_encoding
isinstancer   lowersplituse_package_namingint
ValueErrorr   hasattrboolr
   template_classloader)	selfextra_vars_funcr4   r-   search_pathr.   loader_callbacklookup_errorsr1   s	            r   __init__z%AbstractTemplateEnginePlugin.__init__*   s[   -?G ',Et L Lkk"6<<k<00 	L%++--1KKKN N{{#7<<BB3GGN N N&1/	K -Db!I!IJJNN 	K 	K 	K$%M%,[[1H%I%I&J K K K	K "++&>EE 	K7?J#G#G 	K$%IJJJ$:HEE 555$%F%2&3 4 4 4	Ggkk*=tDDEEJJ 	G 	G 	G$%H%,[[1D%E%E&F G G G	G %%B%B%B%B%B1<4B373F5B0:.=? ? ?s   +#C 0C?&#F
 
0F:c                 
   ||                      |          S | j        rL|                    d          }|dk    r1ddlm} |d|         }||dz   d         | j        z   } |||          }| j                            |          S )z_Find a template specified in python 'dot' notation, or load one from
        a string.
        N.r   )resource_filename   )r?   r:   rfindpkg_resourcesrI   	extensionr@   load)rA   templatenametemplate_stringdividerrI   packagebasenames          r   load_templatez*AbstractTemplateEnginePlugin.load_templateT   s     &&&777" 	D"((--G!||;;;;;;&xx0'!5F00(CC{---r   Fc                 B    || j         }d|i}| j        r
| j        |d<   |S )Nmethodencoding)default_formatr6   )rA   formatfragmentkwargss       r   _get_render_optionsz0AbstractTemplateEnginePlugin._get_render_optionse   s6    >(FF#  	7!%!6F:r   c                 r    |                      ||          } |                     ||          j        di |S )z8Render the template to a string using the provided info.)rY   rZ   r   )r\   	transformrender)rA   inforY   rZ   templater[   s         r   r_   z#AbstractTemplateEnginePlugin.renderm   sA    ))()KK4t~~dH--4>>v>>>r   c                 p    t          |t                    s|                     |          } |j        di |S )%Render the output to an event stream.r   )r7   r	   rT   generate)rA   r`   ra   s      r   r^   z&AbstractTemplateEnginePlugin.transformr   s@    (H-- 	4))(33H x ((4(((r   NN)NNF)NFN)r   r   r   r   r?   rM   rF   rT   r\   r_   r^   r   r   r   r   r   $   s        ++NI(? (? (? (?T. . . ."   ? ? ? ?
) ) ) ) )r   r   c                   >     e Zd ZdZeZdZddZd	 fd	Z fdZ	 xZ
S )
r   z6Implementation of the plugin API for markup templates.z.htmlNc                 x   t                               | ||           | j                            d          }|r0t	          j        |          }|t          d|z            || _        nd | _        | j                            dd                                          }|dvrt          d|z            || _        d S )Nzgenshi.default_doctypezUnknown doctype %rzgenshi.default_formathtml)ri   xhtmlxmltextzUnknown output format %r)	r   rF   r4   r5   r   r   default_doctyper8   rX   )rA   rB   r4   rm   doctyperY   s         r   rF   z#MarkupTemplateEnginePlugin.__init__   s    $--dOWMMM,**+CDD 	(k/22G()=)OPPP#*D  #'D !!"96BBHHJJ999$%?&%HIII$r   Fc                     t          t          |                               ||          }| j        r|s
| j        |d<   |S )Nrn   )superr   r\   rm   )rA   rY   rZ   r[   	__class__s       r   r\   z.MarkupTemplateEnginePlugin._get_render_options   sO    1 00BB 	 	5 	5 $ 4F9r   c                    t           t          t          d}| j        r'|                    |                                            |                    |           t          t          |                               ||          S )rc   r   )r   r   r   r3   updaterp   r   r^   )rA   r`   ra   datarq   s       r   r^   z$MarkupTemplateEnginePlugin.transform   sn    $s33 	/KK++--...D/66@@xPPPr   re   rf   )r   r   r   r   r   r?   rM   rF   r\   r^   __classcell__)rq   s   @r   r   r   y   s        @@#NI% % % %"     Q Q Q Q Q Q Q Q Qr   r   c                   &    e Zd ZdZeZdZdZddZdS )r   z4Implementation of the plugin API for text templates.z.txtrl   Nc                     |i }|                     d          }t          |t                    r|                                dv }|rt          | _        t                              | ||           d S )Nzgenshi.new_text_syntaxr   )r5   r7   r   r8   r   r?   r   rF   )rA   rB   r4   
new_syntaxs       r   rF   z!TextTemplateEnginePlugin.__init__   sv    ?G[[!9::
j,// 	J#))++/IIJ 	2"1D$--dOWMMMMMr   re   )	r   r   r   r   r   r?   rM   rX   rF   r   r   r   r   r      sC        >>!NIN
N 
N 
N 
N 
N 
Nr   r   N)r   genshi.compatr   genshi.inputr   r   r   genshi.outputr   genshi.template.baser	   genshi.template.loaderr
   genshi.template.markupr   genshi.template.textr   r   __all____docformat__r<   r   objectr   r   r   r   r   r   <module>r      s    ' & & & & & & & & & & & & & & & ! ! ! ! ! ! ) ) ) ) ) ) 1 1 1 1 1 1 1 1 1 1 1 1 > > > > > > > >E E E%H H H H H H H HR) R) R) R) R)6 R) R) R)j$Q $Q $Q $Q $Q!= $Q $Q $QNN N N N N; N N N N Nr   