o 3Ûøa3'ã@s’ddlZddlmZddlmZmZmZddlmZddl m Z m Z edƒZ dd „Z ed ƒZed ƒZed ƒZed ƒZedƒZedƒZddd„ZdS)éN)ÚStringIO)ÚTRANSLATOR_COMMENT_MARKÚLexerÚ TokenType)Ú_lazy_re_compileé)ÚTranslatorCommentWarningÚtrim_whitespacez\ScCs t ||¡S)zg Change every non-whitespace character to the given char. Used in the templatize function. )Údot_reÚsub)ÚsrcÚchar©rúC/usr/lib/python3/dist-packages/django/utils/translation/template.pyÚblankout s rz.^\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% Cs,tdƒ}d}d}d}d}g}g}d} g} i} d} d} d*dd„}t|ƒ ¡D]ë}| r~|jtjkrw|jdkrwd | ¡}d}t|  d¡ƒD] \}}|  ¡  t ¡rP|}qCt|  d¡ƒD]\}}|durl||krl|  d |¡qX|  d ¡qXd} g} q%|  |j¡q%|rc|jtjkr*t |j¡}t |j¡}|r|rÚ|r®|  d j||||ƒ|||ƒ| d ¡n|  d j|||ƒ|||ƒ| d ¡|D] }|  t|dƒ¡qÁ|D] }|  t|dƒ¡qÎn+|rë|  dj||||ƒ| d ¡n |  dj|||ƒ| d ¡|D] }|  t|dƒ¡qúd}d}d}g}g}q%|rd}q%d}|rd|}td|j||jfƒ‚|jtjkrF|r=| d|j¡q%| d|j¡q%|jtjkrb|j dd¡}|r]| |¡q%| |¡q%| dur®|j|j d¡}| |kr |jtjkrŸ| | D]}d}|rŒd|}d||| f}t |t¡qg| | <n |  dd | | ¡¡d} |jtjkrŸt |j¡}t |j¡}t  !|j¡}|r/|d}|ddkrÛ| "d¡}n |ddkrç| "d¡}| dd¡}|dr$t# |d¡} | d}|ddkr | "d¡}n |ddkr| "d¡}|  dj||| d ¡d}q%|  dj|| d ¡q%|r{t  !|j¡D] }!|  d |!¡q8|drlt# |d¡} | d}|ddkr`| "d¡}n |ddkrl| "d¡}d}d}d!| $¡v}g}g}q%|rŒ|D] }"|  d |"¡q€q%|jd"kr•d} q%|  t|jd#ƒ¡q%|jtjkré|j %d$¡}#t  |#d¡}"|"r¿|  d |"d¡|#dd…D]"}$|$ &d%¡dkrÞ|  d&|$ %d'd¡d¡qÅ|  t|$d(ƒ¡qÅq%|jtjkr|j  ¡  t ¡r|  '|jg¡ |j¡|j} q%|  t|jd)ƒ¡q%| (¡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ÚucSsd |¡}|r t|ƒ}|S)Nr)Újoinr )ÚtokensÚtrimÚmessagerrrÚ join_tokens7s ztemplatize..join_tokensÚ 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 | rrú"ú'éz _(%s) ÚtrimmedÚcommentÚBú|z:_(z %s ú:ÚFÚX)F))rrÚtokenizeÚ token_typerÚBLOCKÚcontentsrÚ enumerateÚ splitlinesÚlstripÚ startswithrÚwriteÚappendÚ endblock_reÚmatchÚ plural_reÚformatrÚ SyntaxErrorÚlinenoÚVARÚTEXTÚreplaceÚcountÚCOMMENTÚwarningsÚwarnrÚ inline_reÚblock_reÚ constant_reÚfindallÚstripÚ context_reÚsplit_contentsÚsplitÚfindÚ setdefaultÚgetvalue)%r ÚoriginÚoutÚmessage_contextÚintransÚinpluralr!ÚsingularÚpluralÚ incommentr"Úlineno_comment_mapÚcomment_lineno_cacheÚ raw_prefixrÚtÚcontentÚtranslators_comment_startr7ÚlineÚ endbmatchÚ pluralmatchÚpartÚfilemsgr+Ú cur_linenoÚcÚwarn_msgÚimatchÚbmatchÚcmatchesÚgÚ context_matchÚfmatchÚcmatchÚpartsrrrrÚ templatize#sN  €    üýÿ ýþ ÿÿ  €   ü€         ÿ    ÿ  ü€rh)N)r=ÚiorÚdjango.template.baserrrÚdjango.utils.regex_helperrrrr r rrDr?r@r2r4rArhrrrrÚs   þ