B
    ª0H[û&  ã               @   s¨   d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	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)ÚTOKEN_BLOCKÚTOKEN_COMMENTÚ
TOKEN_TEXTÚ	TOKEN_VARÚTRANSLATOR_COMMENT_MARKÚLexeré   )Ú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   úeC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\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   sd  t dƒ}d}d}d}d}g }g }d}	g }
i }d}d}d*dd„}�xt| ƒ ¡ D �]}|	�r|jt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k�rxt |j¡}t |j¡}|�rB|�rÎ|�rj| 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|�rNd}n(d}|�r`d| }td|j||jf ƒ‚nl|jtk�r®|�rœ| d|j ¡ n| d|j ¡ n6|jtk�rX|j dd¡}|�rÚ| |¡ n
| |¡ qN|dk	�r~|j|j d¡ }||k�rb|jtk�rzx>|| D ]2}d}|�r8d| }d|||f }t |t¡ �q"W g ||< n| dd || ¡ ¡ d}|jtk�rtt |j¡}t |j¡}t  |j¡}|�r†| !d¡}|d dk�rØ| "d¡}n|d dk�rð| "d¡}| dd¡}| !d¡�rpt# | !d¡¡} |  !d¡}|d dk�r<| "d¡}n|d dk�rT| "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|�rNxB|D ]}"| d |" ¡ �q4W n$|jd"k�r`d}	n| t|jd#ƒ¡ qN|jt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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_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)F))r   r   Ú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ÚoutZmessage_contextZintransZinpluralr!   ZsingularÚpluralZ	incommentr"   Zlineno_comment_mapZcomment_lineno_cacheZ
raw_prefixr   ÚtÚcontentZtranslators_comment_startr6   Ú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   
















rP   )N)Úrer9   Úior   Zdjango.template.baser   r   r   r   r   r   r   r
   r   Úcompiler   r   rA   r;   r<   r1   r3   r=   rP   r   r   r   r   Ú<module>   s    





