B
    CVvg3'  ã               @   s’   d dl 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
mZ edƒZdd	„ Zed
ƒZedƒZedƒZedƒZedƒZedƒZddd„ZdS )é    N)ÚStringIO)ÚTRANSLATOR_COMMENT_MARKÚLexerÚ	TokenType)Ú_lazy_re_compileé   )ÚTranslatorCommentWarningÚtrim_whitespacez\Sc             C   s   t  || ¡S )zg
    Change every non-whitespace character to the given char.
    Used in the templatize function.
    )Údot_reÚsub)ÚsrcÚchar© r   úE/tmp/pip-install-o3oxmrkh/Django/django/utils/translation/template.pyÚblankout   s    r   z.^\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?'))\s*z¡^\s*trans(?:late)?\s+((?:"[^"]*?")|(?:'[^']*?'))(?:\s*\|\s*[^\s:]+(?::(?:[^\s'":]+|(?:"[^"]*?")|(?:'[^']*?')))?)*(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?\s*zM^\s*blocktrans(?:late)?(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?(?:\s+|$)z^\s*endblocktrans(?:late)?$z^\s*plural$z_\(((?:".*?")|(?:'.*?'))\)c       %   	   C   sd  t dƒ}d}d}d}d}g }g }d}	g }
i }d}d}d*dd„}�xt| ƒ ¡ D �]}|	�r
|jtjkrü|jdkrüd |
¡}d}x,t| 	d¡ƒD ]\}}| 
¡  t¡rŽ|}qŽW xDt| 	d¡ƒD ]2\}}|dk	rä||krä| d	| ¡ q¼| d
¡ q¼W d}	g }
n|
 |j¡ qN|�rî|jtjk�r|t |j¡}t |j¡}|�rF|�rÒ|�rn| dj||||ƒ|||ƒ|d�¡ n"| dj|||ƒ|||ƒ|d�¡ x|D ]}| t|dƒ¡ �q–W x~|D ]}| t|dƒ¡ �q¶W n^|�rö| dj||||ƒ|d�¡ n| dj|||ƒ|d�¡ x|D ]}| t|dƒ¡ �qW d}d}d}g }g }n4|�rRd}n(d}|�rdd| }td|j||jf ƒ‚np|jtjk�r´|�r¢| d|j ¡ n| d|j ¡ n8|jtjk�rX|j dd¡}|�râ| |¡ n
| |¡ qN|dk	�rˆ|j|j d¡ }||k�rl|jtjk�r„x>|| D ]2}d}|�rBd| }d|||f }t |t¡ �q,W g ||< n| dd || ¡ ¡ d}|jtjk�rrt |j¡}t |j¡}t  !|j¡}|�rŠ|d }|d dk�râ| "d¡}n|d dk�rú| "d¡}| dd¡}|d �rtt# |d ¡} | d }|d dk�r@| "d¡}n|d dk�rX| "d¡}| dj|||d�¡ d}n| dj||d�¡ næ|�r&x$t  !|j¡D ]}!| d |! ¡ �qžW |d �rt# |d ¡} | d }|d dk�rð| "d¡}n|d dk�r| "d¡}d}d}d!| $¡ k}g }g }nJ|�rLxB|D ]}"| d |" ¡ �q2W n$|jd"k�r^d}	n| t|jd#ƒ¡ qN|jtjk�r|j %d$¡}#t  |#d ¡}"|"�r²| d |"d  ¡ x¤|#dd… D ]B}$|$ &d%¡dk�rð| d&|$ %d'd¡d  ¡ n| t|$d(ƒ¡ �qÀW qN|jtjk�rF|j 
¡  t¡�rX| '|jg ¡ |j¡ |j}qN| t|jd)ƒ¡ qNW | (¡ 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  | ¡}|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)F))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Ú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_startr4   Ú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   )N)r8   Úior   Zdjango.template.baser   r   r   Zdjango.utils.regex_helperr   r   r   r	   r
   r   r?   r:   r;   r/   r1   r<   rN   r   r   r   r   Ú<module>   s   