
2!V                 @   s   d  d l  m Z 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 Gd	 d
   d
 e  Z d d   Z Gd d   d e  Z d S)    )absolute_importN)nodes)	Extension)	CallBlockCallExtensionAttribute)TemplateSyntaxErrorTemplateDoesNotExistc             C   s>   t  |  d  r: i  } x |  j D] } | j |  q W| S|  S)Ndicts)hasattrr
   update)contextZcontext_dictd r   F/tmp/pip-build-0sboevxh/django-compressor/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
    Z	spacelessc             C   sU   t  | j  j } | j d g d d } t j |  j d g   g  g  |  j |  S)Nzname:endspacelessZdrop_needleT
_spaceless)nextstreamlinenoZparse_statementsr   r   Zcall_methodZ
set_lineno)selfparserr   bodyr   r   r   parse"   s    zSpacelessExtension.parsec             C   s#   d d l  m } | |   j    S)Nr   )strip_spaces_between_tags)Z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   s-   d d l  m } |  d k r) | j |  Sd S)z2
    Incomplete emulation of Flask's url_for.
    r   )staticfilesstatic )Z'django.contrib.staticfiles.templatetagsr$   r%   )modfilenamer$   r   r   r   url_for/   s    r)   c               @   s   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   r+   r,   r   r   r   __init__>   s    	zJinja2Parser.__init__c             C   s   t  j | d d  } y( |  j j | j   j |  j   } Wns t j k
 r| } z t t	 |    WYd  d  } ~ Xn: t j
 k
 r } z t t	 |    WYd  d  } ~ Xn XWd  QX| S)Nmoderb)ioopenr,   r   readdecoder+   jinja2r   strZTemplateNotFoundr	   )r   Ztemplate_namefiletemplateer   r   r   r   B   s    ($+zJinja2Parser.parsec             C   s   d S)NTr   )r   r7   r   r   r   r   process_templateM   s    zJinja2Parser.process_templatec             C   s#   |  j  j j   } | j |  | S)N)r,   globalscopyr   )r   Zoffline_contextr   r   r   r   get_init_contextP   s    zJinja2Parser.get_init_contextc             C   s   d  S)Nr   )r   r7   r   noder   r   r   process_node[   s    zJinja2Parser.process_nodec             C   sR   |  j  j t j j |   } t j j |  j  | i   } t |  } | j |  S)N)r,   compiler4   r   TemplateZ	from_coder   render)r   r7   r   r   Zcompiled_nodeZflat_contextr   r   r   _render_nodes^   s    zJinja2Parser._render_nodesc             C   s   |  j  | | | j  S)N)rB   r   )r   r7   r   r=   r   r   r   render_nodeliste   s    zJinja2Parser.render_nodelistc             C   s   |  j  | | | g  S)N)rB   )r   r7   r   r=   r   r   r   render_nodeh   s    zJinja2Parser.render_nodec             C   sB   t  | d t  | d g    } t | t j j  r> | | j S| S)Nr   r   )getattr
isinstancer4   r   IfZelse_)r   r=   r   r   r   r   get_nodelistk   s    zJinja2Parser.get_nodelistNc             c   s   x |  j  |  D] } t | t  r{ t | j t  r{ t | j j t  r{ | j j j |  j k r{ d | j j _	 | Vq x" |  j
 | d | D] } | Vq Wq Wd  S)NZ_compress_forced
block_name)rH   rF   r   callr   r=   r   Z
identifierCOMPRESSOR_IDname
walk_nodes)r   r=   rI   r   r   r   rM   s   s    zJinja2Parser.walk_nodes)r   r   r    rK   r-   r   r9   r<   r>   rB   rC   rD   rH   rM   r   r   r   r   r*   ;   s   r*   )
__future__r   r0   r4   Z
jinja2.extr   r   Zjinja2.nodesr   r   r   Zcompressor.exceptionsr   r	   r   r   r)   objectr*   r   r   r   r   <module>   s   