3

T'ícæ+ã@sPdZddlmZddlmZmZddlmZmZmZddl	m
Z
mZmZddl
m
Z
ddlmZmZmZmZmZmZmZmZmZddlmZdd	lmZdd
lmZddlmZm Z ddl!m"Z"dd
l#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2m3Z3ddl4m5Z5m6Z6ddl7m8Z8m9Z9m:Z:ddl;m<Z<ddl=m>Z>e,j?e@ƒZAGdd„dƒZBGdd„dƒZCGdd„dƒZDGdd„de>ƒZEGd d!„d!e<ƒZFGd"d#„d#e$ƒZGe
ƒZHejIeHƒejJeHƒZKe
d$ƒZLeLd%k	rüeMeLƒZHedƒZKGd&d'„d'eƒZNeNƒZOePePeQd(œd)d*„ZRGd+d,„d,eGƒZSe"eePefd-œd.d/„ZTd%S)0z The MessageCatalogBuilder class.é)Úopen)ÚOrderedDictÚdefaultdict)ÚdatetimeÚ	timedeltaÚtzinfo)ÚgetenvÚpathÚwalk)Útime)	ÚAnyÚDefaultDictÚDictÚ	GeneratorÚIterableÚListÚSetÚTupleÚUnion)Úuuid4)Únodes)ÚElement)ÚaddnodesÚpackage_dir)ÚSphinx)ÚBuilder)Úpairindextypes)Ú
ThemeError)Ú__)ÚloggingÚsplit_index_msgÚstatus_iterator)Úbold)ÚCatalogInfoÚdocname_to_domain)Úextract_messagesÚtraverse_translatable_index)Ú
canon_pathÚ	ensuredirÚrelpath)ÚTags)ÚSphinxRendererc@s2eZdZdZeeeeefeedœdd„ZdS)ÚMessagez!An entry of translatable message.)ÚtextÚ	locationsÚuuidscCs||_||_||_dS)N)r-r.r/)Úselfr-r.r/©r1ú9/tmp/pip-build-gk9425m9/sphinx/sphinx/builders/gettext.pyÚ__init__!szMessage.__init__N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrrrÚintr3r1r1r1r2r,sr,c@sPeZdZdZddœdd„Zeeedfddœdd	„Ze	e
ddfdœd
d„ZdS)ÚCatalogz!Catalog of translatable messages.N)ÚreturncCsg|_tƒ|_dS)N)ÚmessagesrÚmetadata)r0r1r1r2r3*szCatalog.__init__Ú	MsgOrigin)ÚmsgÚoriginr;cCsNt|dƒsdS||jkr.|jj|ƒg|j|<|j|j|j|j|jfƒdS)NÚuid)Úhasattrr=r<ÚappendÚsourceÚlinerA)r0r?r@r1r1r2Úadd0s


zCatalog.addccsJxD|jD]:}dd„|j|Dƒ}dd„|j|Dƒ}t|||ƒVqWdS)NcSsg|]\}}}||f‘qSr1r1)Ú.0rDrEÚuuidr1r1r2ú
<listcomp><sz$Catalog.__iter__.<locals>.<listcomp>cSsg|]\}}}|‘qSr1r1)rGrDrErHr1r1r2rI=s)r<r=r,)r0ÚmessageZ	positionsr/r1r1r2Ú__iter__:szCatalog.__iter__)r4r5r6r7r3r8rrrFrr,rKr1r1r1r2r:'s
r:c@s"eZdZdZeeddœdd„ZdS)r>z3
    Origin holder for Catalog message origin.
    N)rDrEr;cCs||_||_tƒj|_dS)N)rDrErÚhexrA)r0rDrEr1r1r2r3FszMsgOrigin.__init__)r4r5r6r7r8r9r3r1r1r1r2r>Asr>cs>eZdZdeeddœ‡fdd„
Zeeedœ‡fdd„Z‡ZS)	ÚGettextRendererN)Ú
template_pathÚoutdirr;csT||_|dkrtjtddƒ}tƒj|ƒttdœdd„}||jjd<||jjd<dS)NÚ	templatesÚgettext)Úsr;cSs$|jddƒ}|jddƒ}|jddƒS)Nú\z\\ú"z\"Ú
z\n"
")Úreplace)rRr1r1r2ÚescapeSsz(GettextRenderer.__init__.<locals>.escapeÚerW)	rOr	ÚjoinrÚsuperr3r8ÚenvÚfilters)r0rNrOrW)Ú	__class__r1r2r3MszGettextRenderer.__init__)ÚfilenameÚcontextr;cs*ttdœ‡fdd„}||d<tƒj||ƒS)N)rRr;cstt|ˆjƒƒS)N)r'r)rO)rR)r0r1r2Ú_relpath]sz(GettextRenderer.render.<locals>._relpathr))r8rZÚrender)r0r^r_r`)r])r0r2ra\szGettextRenderer.render)NN)r4r5r6r8r3rraÚ
__classcell__r1r1)r]r2rMLsrMc@s eZdZdZeedœdd„ZdS)ÚI18nTagszžDummy tags module for I18nBuilder.

    To translate all text inside of only nodes, this class
    always returns True value even if no tags are defined.
    )Ú	conditionr;cCsdS)NTr1)r0rdr1r1r2Úeval_conditionjszI18nTags.eval_conditionN)r4r5r6r7rÚboolrer1r1r1r2rcdsrccs eZdZUdZdZdZdZedZddœ‡fdd„Z	de
e
e
d	œd
d„Zee
dœdd
„Z
ee
ddœdd„Zeee
ddœdd„Ze
ejddœdd„Z‡ZS)ÚI18nBuilderz
    General i18n builder.
    Zi18nr-NF)r;cs6tƒjƒ|jj|j|jjjƒtƒ|_t	t
ƒ|_dS)N)rZÚinitr[Zset_versioning_methodÚversioning_methodÚconfigÚgettext_uuidrcÚtagsrr:Úcatalogs)r0)r]r1r2rhws


zI18nBuilder.init)ÚdocnameÚtypr;cCsdS)NÚr1)r0rnror1r1r2Úget_target_uri~szI18nBuilder.get_target_uricCs|jjS)N)r[Z
found_docs)r0r1r1r2Úget_outdated_docsszI18nBuilder.get_outdated_docs)Údocnamesr;cCsdS)Nr1)r0rsr1r1r2Úprepare_writing„szI18nBuilder.prepare_writing)rmrJr;cCsdS)Nr1)r0rmrJr1r1r2Úcompile_catalogs‡szI18nBuilder.compile_catalogs)rnÚdoctreer;c
Csò|jt||jjƒ}xD|jj|jtjƒD],}x&t	|ƒD]\}}d|_
|j||ƒq8Wq*Wx t	|ƒD]\}}|j||ƒqdWd|jjjkrîxbt
|ƒD]V\}}xL|D]D\}}}	}
}x4t||ƒD]&}|dkrÖ|tjƒkrÖq¼|j||ƒq¼Wq¢Wq”WdS)NrpÚindexÚpair)rmr$rjÚgettext_compactr[ZtocsÚfindallrÚtoctreer%rArFÚgettext_additional_targetsr&r rÚvalues)
r0rnrvÚcatalogr{Únoder?ÚentriesroZ_tidÚ_mainÚ_keyÚmr1r1r2Ú	write_docŠszI18nBuilder.write_doc)N)r4r5r6r7ÚnameriZversioning_comparerfZuse_message_catalogrhr8rqrrrrtr#rurÚdocumentr„rbr1r1)r]r2rgns
rgZSOURCE_DATE_EPOCHNcsFeZdZeeddœ‡fdd„Zeedœdd„Zeedœdd	„Z‡Z	S)
Ú
LocalTimeZoneN)ÚargsÚkwargsr;cstƒj||Žt|_dS)N)rZr3Útzdelta)r0rˆr‰)r]r1r2r3®szLocalTimeZone.__init__)Údtr;cCs|jS)N)rŠ)r0r‹r1r1r2Ú	utcoffset²szLocalTimeZone.utcoffsetcCstdƒS)Nr)r)r0r‹r1r1r2ÚdstµszLocalTimeZone.dst)
r4r5r6rr3rrrŒrrbr1r1)r]r2r‡­sr‡)ÚfilepathÚnew_contentr;cCs tj|ƒsdSyxt|ddb}|jƒ}|jdƒ}|jdƒ}|jdƒ}|jdƒ}|d|…|d|…kp|||d…||d…kSQRXWntk
ršYnXdS)NTzutf-8)Úencodingz"POT-Creation-Date:z"PO-Revision-Date:)r	ÚexistsrÚreadrwÚ
ValueError)rŽrZoldpotZold_contentZold_header_indexZnew_header_indexZold_body_indexZnew_body_indexr1r1r2Úshould_write¼s




"r”cs‚eZdZdZdZedƒZddœ‡fdd„Zee	dœdd	„Z
ddœd
d„Zdee	e	e	dd
œ‡fdd„
Z
ddœ‡fdd„Z‡ZS)ÚMessageCatalogBuilderz=
    Builds gettext-style message catalogs (.pot files).
    rQz'The message catalogs are in %(outdir)s.N)r;cs"tƒjƒ|jƒ|jj|ƒdS)N)rZrhZcreate_template_bridgerP)r0)r]r1r2rhÕs
zMessageCatalogBuilder.initc	Csvtƒ}xj|jjD]^}tj|jj|ƒ}xHt|ƒD]<\}}}x0|D](}|jdƒr>t	tj||ƒƒ}|j
|ƒq>Wq.WqW|S)Nz.html)ÚsetrjZtemplates_pathr	rYÚappÚsrcdirr
Úendswithr'rF)	r0Ztemplate_filesrNZ
tmpl_abs_pathÚdirpathZ_dirsÚfilesÚfnr^r1r1r2Ú_collect_templatesÚs

z(MessageCatalogBuilder._collect_templatescCst|jƒƒ}|jƒtjttdƒ|jƒddtjtdƒt|ƒƒ|j	j
j}x²t|tdƒdt|ƒ|j
jƒD]’}yXt|dd}|jƒ}WdQRXx2||ƒD]&\}}}t||ƒ}	|jd	j||	ƒqœWWqltk
rü}
ztd
||
fƒ|
‚WYdd}
~
XqlXqlWdS)Nzbuilding [%s]: T)Znonlztargets for %d template fileszreading templates... Zpurplezutf-8)rÚsphinxz%s: %r)ÚlistrÚsortÚloggerÚinfor"rr…ÚlenrPÚenvironmentÚextract_translationsr!r—Ú	verbosityrr’r>rmrFÚ	Exceptionr)r0r›r¥ÚtemplateÚfr_rEZ_methr?r@Úexcr1r1r2Ú_extract_from_templateås

z,MessageCatalogBuilder._extract_from_templateÚupdate)rsÚsummaryÚmethodr;cs|jƒtƒj|||ƒdS)N)r«rZÚbuild)r0rsr­r®)r]r1r2r¯øszMessageCatalogBuilder.buildc
sþtƒjƒ|jj|jj|jj|jj|jjtj	t
tƒjdƒ|jj
|jjdœ}x®t|jjƒtdƒdt|jƒ|jjdd„ƒD]€\}}ttj|jtj|ƒƒƒt|ƒ|d<t|jdjd	|ƒ}tj|j|d
ƒ}t||ƒrvt|ddd
}|j |ƒWdQRXqvWdS)Nz%Y-%m-%d %H:%M%z)ÚversionÚ	copyrightÚprojectZlast_translatorZ
language_teamÚctimeZdisplay_locationZdisplay_uuidzwriting message catalogs... Z	darkgreencSs|dS)Nrr1)Ztextdomain__r1r1r2Ú<lambda>sz.MessageCatalogBuilder.finish.<locals>.<lambda>r<)rOz
message.pot_tz.potÚwzutf-8)r)!rZÚfinishrjr°r±r²Úgettext_last_translatorÚgettext_language_teamrÚ
fromtimestampÚ	timestampÚltzÚstrftimeÚgettext_locationrkr!rmÚitemsrr£r—r¦r(r	rYrOÚdirnamerŸrMrar”rÚwrite)r0r_Ú
textdomainr~ÚcontentZpofnZpofile)r]r1r2r¶üs*


zMessageCatalogBuilder.finish)Nr¬)r4r5r6r7r…rÚepilogrhrr8rr«rr¯r¶rbr1r1)r]r2r•Îsr•)r—r;cCs~|jtƒ|jdddtthƒ|jdddƒ|jdddƒ|jdddƒ|jd	gdƒ|jd
ddƒ|jdd
dƒddddœS)NryTrQr½rkFZgettext_auto_buildr[r|r·zFULL NAME <EMAIL@ADDRESS>r¸zLANGUAGE <LL@li.org>Úbuiltin)r°Zparallel_read_safeZparallel_write_safe)Zadd_builderr•Zadd_config_valuerfr8)r—r1r1r2Úsetups
rÅ)Ur7ÚcodecsrÚcollectionsrrrrrÚosrr	r
rÚtypingrr
rrrrrrrrHrZdocutilsrZdocutils.nodesrržrrZsphinx.applicationrZsphinx.buildersrZsphinx.domains.pythonrZ
sphinx.errorsrZ
sphinx.localerZsphinx.utilrr r!Zsphinx.util.consoler"Zsphinx.util.i18nr#r$Zsphinx.util.nodesr%r&Zsphinx.util.osutilr'r(r)Zsphinx.util.tagsr*Zsphinx.util.templater+Ú	getLoggerr4r¡r,r:r>rMrcrgrºr¹ÚutcfromtimestamprŠZsource_date_epochÚfloatr‡r»r8rfr”r•rÅr1r1r1r2Ú<module>sR,

4
K