
^Q\'                 @   s'  d  d l  m Z d  d l Z d  d l Z d  d l 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 m Z d d l m Z m Z e j d	  Z d
 d   Z e j d  Z e j d  Z e j d  Z e j d  Z e j d  Z e j d  Z d d d d  Z d S)    )unicode_literalsN)TOKEN_BLOCKTOKEN_COMMENT
TOKEN_TEXT	TOKEN_VARTRANSLATOR_COMMENT_MARKLexer)six)
force_text)StringIO   )TranslatorCommentWarningtrim_whitespacez\Sc             C   s   t  j | |   S)zg
    Change every non-whitespace character to the given char.
    Used in the templatize function.
    )dot_resub)srcchar r   G/var/www/dbchiro/venv/build/Django/django/utils/translation/template.pyblankout   s    r   z.^\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?'))\s*z^\s*trans\s+((?:"[^"]*?")|(?:'[^']*?'))(?:\s*\|\s*[^\s:]+(?::(?:[^\s'":]+|(?:"[^"]*?")|(?:'[^']*?')))?)*(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?\s*zD^\s*blocktrans(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?(?:\s+|$)z^\s*endblocktrans$z^\s*plural$z_\(((?:".*?")|(?:'.*?'))\)zutf-8c       &      C   s  t  |  |  }  t d  } d } d } d } d } g  } g  }	 d }
 g  } i  } d } t j rf d n d } d d d  } x<t |   j   D](} |
 r| j t k r| j d k rd j	 |  } d } xA t
 | j d   D]* \ } } | j   j t  r | } q q Wx\ t
 | j d   D]E \ } } | d k	 r_| | k r_| j d	 |  q'| j d
  q'Wd }
 g  } q| j | j  q | r| j t k r~t j | j  } t j | j  } | r4| r| r| j d j | | | |  | |	 |  d |  n1 | j d j | | |  | |	 |  d |  x$ | D] } | j t | d   qLWx |	 D] } | j t | d   qsWn} | r| j d j | | | |  d |  n% | j d j | | |  d |  x$ | D] } | j t | d   qWd } d } d } g  } g  }	 q| rCd } qd } | r\d | } n  t d | j | | j f   q| j t k r| r|	 j d | j  q| j d | j  q| j t k r| j j d d  } | r|	 j |  q| j |  qq | d k	 r| j | j j d  } | | k r| j t k rxN | | D]B } d } | rxd | } n  d | | | f } t j | t  qYWg  | | <qn | j d d j	 | |   d } n  | j t k rt  j | j  } t! j | j  } t" j# | j  } | rG| j$ d  }  |  d d k rR|  j% d  }  n" |  d d k rt|  j% d  }  n  |  j d d  }  | j$ d  r(t& j | j$ d   }! |! j$ d  } | d d k r| j% d  } n" | d d k r | j% d  } n  | j d j | |  d |  d } q| j d j |  d |  q| r%x+ t" j# | j  D] }" | j d  |"  q`W| j$ d  rt& j | j$ d   }! |! j$ d  } | d d k r| j% d  } q| d d k r| j% d  } qn  d } d } d! | j'   k } g  } g  }	 q| rPxS | D] }# | j d  |#  q2Wq| j d" k rhd }
 q| j t | j d#   q | j t k rH| j j( d$  }$ t" j |$ d  }# |# r| j d  |# j$ d   n  x |$ d d  D]U }% |% j) d%  d k r+| j d& |% j( d' d  d  q| j t |% d(   qWq | j t k r| j j   j t  r| j* | j g   j | j  | j } qq | j t | j d)   q W| j+   S)*z
    Turn a Django template into something that is understood by xgettext. It
    does so by translating the Django translation tags into standard gettext
    function invocations.
     NFuc             S   s(   d j  |   } | r$ t |  } n  | S)Nr   )joinr   )tokensZtrimmessager   r   r   join_tokens@   s    ztemplatize.<locals>.join_tokensZ
endcommentTz # %sz #
z, npgettext({p}{!r}, {p}{!r}, {p}{!r},count) pz# ngettext({p}{!r}, {p}{!r}, count) SPz pgettext({p}{!r}, {p}{!r}) z gettext({p}{!r}) z	file %s, zDTranslation blocks must not include other block tags: %s (%sline %d)z%%(%s)s%z%%
zjThe translator-targeted comment '%s' (%sline %d) was ignored, because it wasn't the last item on the line.z# %sz | r   r   "'   z _(%s) trimmedcommentB|z:_(z %s :FX),r
   r   r	   PY3r   tokenize
token_typer   contentsr   	enumerate
splitlineslstrip
startswithr   writeappendendblock_rematch	plural_reformatr   SyntaxErrorlinenor   r   replacecountr   warningswarnr   	inline_reblock_reconstant_refindallgroupstrip
context_reZsplit_contentssplitfind
setdefaultgetvalue)&r   origincharsetoutZmessage_contextZintransZinpluralr$   ZsingularpluralZ	incommentr%   Zlineno_comment_mapZcomment_lineno_cacheZ
raw_prefixr   tcontentZtranslators_comment_startr:   lineZ	endbmatchZpluralmatchpartZfilemsgr.   Z
cur_linenocZwarn_msgZimatchZbmatchZcmatchesgZcontext_matchZfmatchZcmatchpartsr   r   r   r   
templatize*   s2   ""	

						$rU   )
__future__r   rer=   Zdjango.template.baser   r   r   r   r   r   Zdjango.utilsr	   Zdjango.utils.encodingr
   Zdjango.utils.sixr   r   r   r   compiler   r   rE   r?   r@   r5   r7   rA   rU   r   r   r   r   <module>   s"   .	