
v^&                 @   s   d  d l  Z  d  d l Z d  d l m Z d  d l m Z m Z 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  Z d S)    N)StringIO)TRANSLATOR_COMMENT_MARKLexer	TokenType   )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   C/tmp/pip-build-8lau8j11/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_\(((?:".*?")|(?:'.*?'))\)c       %      C   s  t  d  } d } d } d } d } g  } g  } d }	 g  }
 i  } d } d } d d d  } x0t |   j   D]} |	 rt| j t j k ra| j d k rad j |
  } d } x> t | j	 d   D]' \ } } | j
   j t  r | } q Wx\ t | j	 d   D]E \ } } | d k	 rA| | k rA| j d	 |  q	| j d
  q	Wd }	 g  }
 q|
 j | j  qp | r| j t j k r`t j | j  } t j | j  } | r| r{| r| j d j | | | |  | | |  d |  n1 | j d j | | |  | | |  d |  x$ | D] } | j t | d   q1Wx | D] } | j t | d   qXWn} | r| j d j | | | |  d |  n% | j d j | | |  d |  x$ | D] } | j t | d   qWd } d } d } g  } g  } q| r(d } qd } | r>d | } t d | j | | j f   q| j t j k r| r| j d | j  q| j d | j  q| j t j k r| j j d d  } | r| j |  q| j |  qp | d k	 r| j | j j d  } | | k r| j t j k rxK | | D]? } d } | r]d | } d | | | f } t j | t  qAWg  | | <n | j d d j | |   d } | j t j k rZt j | j  } t j | j  } t  j! | j  } | r#| j" d  } | d d k r4| j# d  } n | d d k rS| j# d  } | 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  } | j d j | | d |  d } qW| 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  } n | d d k r| j# d  } d } d } d! | j%   k } g  } g  } q| r&xS | D] }" | j d  |"  qWq| j d" k r>d }	 q| j t | j d#   qp | j t j k r| j j& d$  }# t  j |# d  }" |" r| j d  |" j" d   x |# d d  D]U }$ |$ j' d%  d k r| j d& |$ j& d' d  d  q| j t |$ d(   qWqp | j t j k rs| j j
   j t  r| j( | j g   j | j  | j } qp | j t | j d)   qp 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 |  } | S)Nr   )joinr   )tokensZtrimmessager   r   r   join_tokens7   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   tokenize
token_typer   ZBLOCKcontentsr   	enumerate
splitlineslstrip
startswithr   writeappendendblock_rematch	plural_reformatr   SyntaxErrorlinenoZVARZTEXTreplacecountCOMMENTwarningswarnr   	inline_reblock_reconstant_refindallgroupstrip
context_reZsplit_contentssplitfind
setdefaultgetvalue)%r   originoutZmessage_contextZintransZinpluralr   ZsingularpluralZ	incommentr   Zlineno_comment_mapZcomment_lineno_cacheZ
raw_prefixr   tcontentZtranslators_comment_startr3   lineZ	endbmatchZpluralmatchpartZfilemsgr'   Z
cur_linenocZwarn_msgZimatchZbmatchZcmatchesgZcontext_matchZfmatchZcmatchpartsr   r   r   r   
templatize#   s0   !"
"	

		

			$rN   )rer7   ior   Zdjango.template.baser   r   r   r   r   r   compiler	   r   r?   r9   r:   r.   r0   r;   rN   r   r   r   r   <module>   s   	