o
    a"<fj                     @   s   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 d dl	m
Z
mZ dd ZG dd	 d	eZd
d ZG dd dZdS )    N)nodes)	Extension)	CallBlockCallExtensionAttribute)TemplateSyntaxErrorTemplateDoesNotExistc                 C   s,   t | dri }| jD ]}|| q
|S | S )Ndicts)hasattrr	   update)contextcontext_dictd r   P/var/www/html/kck/venv/lib/python3.10/site-packages/compressor/offline/jinja2.pyflatten_context   s   

r   c                   @   s*   e Zd ZdZedgZdd Zdd ZdS )SpacelessExtensionz
    Functional "spaceless" extension equivalent to Django's.

    See: https://github.com/django/django/blob/master/django/template/defaulttags.py
    	spacelessc                 C   s:   t |jj}|jdgdd}t| dg g g ||S )Nzname:endspacelessT)drop_needle
_spaceless)nextstreamlinenoparse_statementsr   r   call_method
set_lineno)selfparserr   bodyr   r   r   parse!   s   zSpacelessExtension.parsec                 C   s   ddl m} ||  S )Nr   )strip_spaces_between_tags)django.utils.htmlr    strip)r   callerr    r   r   r   r   (   s   zSpacelessExtension._spacelessN)__name__
__module____qualname____doc__settagsr   r   r   r   r   r   r      s
    
r   c                 C   sL   zddl m} W n ty   ddlm  m} Y nw | dkr$||S dS )z2
    Incomplete emulation of Flask's url_for.
    r   )staticfilesNstatic )'django.contrib.staticfiles.templatetagsr*   ImportErrordjango.templatetags.statictemplatetagsr+   )modfilenamer*   r   r   r   url_for.   s   
r3   c                   @   sb   e Zd Z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dZdS )Jinja2Parserz0compressor.contrib.jinja2ext.CompressorExtensionc                 C   s   || _ || _d S N)charsetenv)r   r6   r7   r   r   r   __init__A   s   
zJinja2Parser.__init__c                 C   s   t j|dd=}z| j| | j}W n% tjy) } ztt	|d }~w tj
y; } ztt	|d }~ww W d    |S 1 sGw   Y  |S )Nrb)mode)ioopenr7   r   readdecoder6   jinja2r   strTemplateNotFoundr   )r   template_namefiletemplateer   r   r   r   E   s   
zJinja2Parser.parsec                 C   s   dS )NTr   )r   rD   r   r   r   r   process_templateP      zJinja2Parser.process_templatec                 C   s   | j j }|t| |S r5   )r7   globalscopyr   r   )r   offline_contextr   r   r   r   get_init_contextS   s   zJinja2Parser.get_init_contextc                 C   s   d S r5   r   r   rD   r   noder   r   r   process_node^   rG   zJinja2Parser.process_nodec                 C   s8   | j tj|}tj| j |i }t|}||S r5   )r7   compiler?   r   Template	from_coder   render)r   rD   r   r   compiled_nodeflat_contextr   r   r   _render_nodesa   s   
zJinja2Parser._render_nodesc                 C   s   |  |||jS r5   )rU   r   rL   r   r   r   render_nodelisth      zJinja2Parser.render_nodelistc                 C   s   |  |||gS r5   )rU   rL   r   r   r   render_nodek   rW   zJinja2Parser.render_nodec                 C   s0   t |dt |dg }t|tjjr||j S |S )Nr   r   )getattr
isinstancer?   r   Ifelse_)r   rM   r   r   r   r   get_nodelistn   s   
zJinja2Parser.get_nodelistNc                 c   sv    |  |D ]2}t|tr+t|jtr+t|jjtr+|jjj| jkr+d|jj_	|V  q| j
||dD ]}|V  q2qd S )N_compress_forced)
block_name)r]   rZ   r   callr   rM   r   
identifierCOMPRESSOR_IDname
walk_nodes)r   rM   r_   r   r   r   r   rd   v   s   


zJinja2Parser.walk_nodes)NN)r$   r%   r&   rb   r8   r   rF   rK   rN   rU   rV   rX   r]   rd   r   r   r   r   r4   >   s    r4   )r;   r?   
jinja2.extr   r   jinja2.nodesr   r   r   compressor.exceptionsr   r   r   r   r3   r4   r   r   r   r   <module>   s    