o 3a3'@sddlZddlmZddlmZmZmZddlmZddl m Z m Z edZ dd Z ed Zed Zed Zed ZedZedZdddZdS)N)StringIO)TRANSLATOR_COMMENT_MARKLexer TokenType)_lazy_re_compile)TranslatorCommentWarningtrim_whitespacez\ScCs t||S)zg Change every non-whitespace character to the given char. Used in the templatize function. )dot_resub)srccharrC/usr/lib/python3/dist-packages/django/utils/translation/template.pyblankout 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| dD] \}}| t rP|}qCt| dD]\}}|durl||krl| d |qX| d qXd} g} q%| |jq%|rc|jtjkr*t|j}t|j}|r|r|r| d j|||||||| d n| d j||||||| d |D] }| t|dq|D] }| t|dqn+|r| dj||||| d n | dj|||| d |D] }| t|dqd}d}d}g}g}q%|rd}q%d}|rd|}td|j||jf|jtjkrF|r=|d|jq%|d|jq%|jtjkrb|jdd}|r]||q%||q%| dur|j|jd}| |kr|jtjkr| | D]}d}|rd|}d||| f}t|tqg| | <n | dd| | d} |jtjkrt|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 !|jD] }!| d |!q8|drlt#|d} | d}|ddkr`|"d}n |ddkrl|"d}d}d}d!|$v}g}g}q%|r|D] }"| d |"qq%|jd"krd} q%| t|jd#q%|jtjkr|j%d$}#t |#d}"|"r| d |"d|#ddD]"}$|$&d%dkr| d&|$%d'ddq| t|$d(qq%|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. NFucSsd|}|r t|}|S)Nr)joinr )tokenstrimmessagerrr join_tokens7s ztemplatize..join_tokens endcommentTz # %sz # z, npgettext({p}{!r}, {p}{!r}, {p}{!r},count) )pz# ngettext({p}{!r}, {p}{!r}, count) SPz 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) trimmedcommentB|z:_(z %s :FX)F))rrtokenize token_typerBLOCKcontentsr enumerate splitlineslstrip startswithrwriteappend endblock_rematch plural_reformatr SyntaxErrorlinenoVARTEXTreplacecountCOMMENTwarningswarnr inline_reblock_re constant_refindallstrip context_resplit_contentssplitfind setdefaultgetvalue)%r originoutmessage_contextintransinpluralr!singularplural incommentr"lineno_comment_mapcomment_lineno_cache raw_prefixrtcontenttranslators_comment_startr7line endbmatch pluralmatchpartfilemsgr+ cur_linenocwarn_msgimatchbmatchcmatchesg context_matchfmatchcmatchpartsrrrr templatize#sN                            rh)N)r=iordjango.template.baserrrdjango.utils.regex_helperrrrr r rrDr?r@r2r4rArhrrrrs