o ua,@sTdZddlmZddlmZmZddlmZmZmZddl m Z m Z m Z ddl m Z ddlmZmZmZmZmZmZmZmZmZddlmZdd lmZdd lmZdd lmZm 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;mZ>e,?e@ZAGdddZBGdddZCGdddZDGddde>ZEGd d!d!e<ZFGd"d#d#e$ZGe ZHeIeHeJeHZKe d$ZLeLd%ureMeLZHedZKGd&d'd'eZNeNZOd(ePd)ePd*eQfd+d,ZRGd-d.d.eGZSd/e"d*eePeffd0d1ZTd%S)2z sphinx.builders.gettext ~~~~~~~~~~~~~~~~~~~~~~~ The MessageCatalogBuilder class. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. )open) OrderedDict defaultdict)datetime timedeltatzinfo)getenvpathwalk)time) Any DefaultDictDict GeneratorIterableListSetTupleUnion)uuid4)nodes)Element)addnodes package_dir)Sphinx)Builder)pairindextypes) ThemeError)__)loggingsplit_index_msgstatus_iterator)bold) CatalogInfodocname_to_domain)extract_messagestraverse_translatable_index) canon_path ensuredirrelpath)Tags)SphinxRendererc@s6eZdZdZdedeeeefdeefddZdS)Messagez!An entry of translatable message.text locationsuuidscCs||_||_||_dSN)r-r.r/)selfr-r.r/r29/usr/lib/python3/dist-packages/sphinx/builders/gettext.py__init__)s zMessage.__init__N) __name__ __module__ __qualname____doc__strrrintr4r2r2r2r3r,'s*r,c@sPeZdZdZd ddZdedeedfddfd d Zde e ddffd d Z dS)Catalogz!Catalog of translatable messages.returnNcCsg|_t|_dSr0)messagesrmetadatar1r2r2r3r42s zCatalog.__init__msgorigin MsgOrigincCsNt|dsdS||jvr|j|g|j|<|j||j|j|jfdS)Nuid)hasattrr>r=appendsourcelinerC)r1r@rAr2r2r3add8s     z Catalog.addccsH|jD]}dd|j|D}dd|j|D}t|||VqdS)NcSsg|] \}}}||fqSr2r2.0rFrGuuidr2r2r3 Dsz$Catalog.__iter__..cSsg|]\}}}|qSr2r2rIr2r2r3rLEs)r=r>r,)r1message positionsr/r2r2r3__iter__Bs  zCatalog.__iter__r<N) r5r6r7r8r4r9rrrHrr,rOr2r2r2r3r;/s   r;c@s&eZdZdZdededdfddZdS)rBz3 Origin holder for Catalog message origin. rFrGr<NcCs||_||_tj|_dSr0)rFrGrhexrC)r1rFrGr2r2r3r4NszMsgOrigin.__init__)r5r6r7r8r9r:r4r2r2r2r3rBIsrBcsFeZdZd dededdffdd Zdededeffd d ZZS) GettextRendererN template_pathoutdirr<csV||_|durttdd}t|dtdtfdd}||jjd<||jjd<dS) N templatesgettextsr<cSs$|dd}|dd}|ddS)N\z\\"z\" z\n" ")replacerWr2r2r3escape[s   z(GettextRenderer.__init__..escapeer]) rTr joinrsuperr4r9envfilters)r1rSrTr] __class__r2r3r4Us  zGettextRenderer.__init__filenamecontextcs,dtdtffdd }||d<t||S)NrWr<cstt|jSr0)r'r)rTr\r?r2r3_relpathesz(GettextRenderer.render.._relpathr))r9r`render)r1rerfrgrcr?r3rhdszGettextRenderer.render)NN)r5r6r7r9r4rrh __classcell__r2r2rcr3rRTs"rRc@s"eZdZdZdedefddZdS)I18nTagszDummy 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<cCdS)NTr2)r1rkr2r2r3eval_conditionrzI18nTags.eval_conditionN)r5r6r7r8r boolrmr2r2r2r3rjlsrjcseZdZUdZdZdZdZeed<dZ dfdd Z dd e d e de fd d Z de e fddZde e ddfddZde ede ddfddZd e dejddfddZZS) I18nBuilderz General i18n builder. i18nr-Nversioning_compareFr<cs6t|j|j|jjjt|_t t |_ dSr0) r`initraset_versioning_methodversioning_methodconfig gettext_uuidrjtagsrr;catalogsr?rcr2r3rss  zI18nBuilder.initdocnametypcCrl)Nr2)r1rzr{r2r2r3get_target_urirnzI18nBuilder.get_target_uricCs|jjSr0)ra found_docsr?r2r2r3get_outdated_docszI18nBuilder.get_outdated_docsdocnamescCdSr0r2)r1rr2r2r3prepare_writingrnzI18nBuilder.prepare_writingryrMcCrr0r2)r1ryrMr2r2r3compile_catalogsrnzI18nBuilder.compile_catalogsdoctreec Cs|jt||jj}|jj|tjD]}t |D] \}}d|_ | ||qqt |D] \}}| ||q-d|jjj vrkt |D])\}}|D] \}}} } } t||D]} |dkrb| tvrbqU| | |qUqIqCdSdS)Nr|indexpair)ryr$rvgettext_compactratocstraversertoctreer%rCrHgettext_additional_targetsr&r rvalues) r1rzrcatalogrnoder@entriesr{tidmainkey_mr2r2r3 write_docs&zI18nBuilder.write_docrPr0)r5r6r7r8namerurrro__annotations__use_message_catalogrsr9r}rrrr#rrdocumentrrir2r2rcr3rpvs   rpSOURCE_DATE_EPOCHNcsNeZdZdededdffdd Zdedefdd Zdedefd d ZZ S) LocalTimeZoneargskwargsr<Ncstj|i|t|_dSr0)r`r4tzdelta)r1rrrcr2r3r4s zLocalTimeZone.__init__dtcCs|jSr0)rr1rr2r2r3 utcoffsetszLocalTimeZone.utcoffsetcCstdSNr)rrr2r2r3dstrzLocalTimeZone.dst) r5r6r7r r4rrrrrir2r2rcr3rsrfilepath new_contentr<cCst|sdSzJt|dd9}|}|d}|d}|d}|d}|d||d|kp>||d||dkWdWS1sJwYWdSty[YdSw)NTutf-8encodingz"POT-Creation-Date:z"PO-Revision-Date:)r existsrreadr ValueError)rroldpot old_contentold_header_indexnew_header_indexold_body_indexnew_body_indexr2r2r3 should_writes"     $ rc s|eZdZdZdZedZdfdd Zdee fdd Z dd d Z dd e e de de ddffdd Z dfdd ZZS)MessageCatalogBuilderz= Builds gettext-style message catalogs (.pot files). rVz'The message catalogs are in %(outdir)s.r<Ncs"t||j|dSr0)r`rscreate_template_bridgerUr?rcr2r3rss zMessageCatalogBuilder.initc Csjt}|jjD]+}t|jj|}t|D]\}}}|D]}|dr0t t||}| |qqq|S)Nz.html) setrvtemplates_pathr r_appsrcdirr endswithr'rH) r1template_filesrS tmpl_abs_pathdirpathdirsfilesfnrer2r2r3_collect_templatess   z(MessageCatalogBuilder._collect_templatesc Cst|}|tjttd|jddttdt||j j j }t |tddt||j jD]K}z4t|dd }|}Wdn1sMwY||D]\}}}t||} |jd || qVWq5ty} z td || f| d} ~ wwdS) Nzbuilding [%s]: T)nonlztargets for %d template fileszreading templates... purplerrsphinxz%s: %r)listrsortloggerinfor"rrlenrU environmentextract_translationsr!r verbosityrrrBryrH Exceptionr) r1rrtemplatefrfrGmethr@rAexcr2r2r3_extract_from_templates*      z,MessageCatalogBuilder._extract_from_templateupdatersummarymethodcs|t|||dSr0)rr`build)r1rrrrcr2r3rszMessageCatalogBuilder.buildc st|jj|jj|jj|jj|jjt t t  d|jj |jjd}t|jtddt|j|jjddD]J\}}tt|jt|t||d<t|jdd |}t|j|d }t||rt|d d d  }| |Wdn1swYq:dS)Nz%Y-%m-%d %H:%M%z)version copyrightprojectlast_translator language_teamctimedisplay_location display_uuidzwriting message catalogs... darkgreencSs|dSrr2) textdomain__r2r2r3sz.MessageCatalogBuilder.finish..r=)rTz message.pot_tz.potwrr)!r`finishrvrrrgettext_last_translatorgettext_language_teamr fromtimestamp timestampltzstrftimegettext_locationrwr!ryitemsrrrrr(r r_rTdirnamerrRrhrrwrite)r1rf textdomainrcontentpofnpofilercr2r3rs4       zMessageCatalogBuilder.finishrP)Nr)r5r6r7r8rrepilogrsrr9rrrrrrir2r2rcr3rs $rrcCs~|t|dddtth|ddd|ddd|ddd|d gd|d d d|d d dddddS)NrTrVrrwFgettext_auto_buildrarrzFULL NAME rzLANGUAGE builtin)rparallel_read_safeparallel_write_safe) add_builderradd_config_valueror9)rr2r2r3setup!s r)Ur8codecsr collectionsrrrrrosrr r r typingr r rrrrrrrrKrdocutilsrdocutils.nodesrrrrsphinx.applicationrsphinx.buildersrsphinx.domains.pythonr sphinx.errorsr sphinx.localer sphinx.utilrr r!sphinx.util.consoler"sphinx.util.i18nr#r$sphinx.util.nodesr%r&sphinx.util.osutilr'r(r)sphinx.util.tagsr*sphinx.util.templater+ getLoggerr5rr,r;rBrRrjrprrutcfromtimestamprsource_date_epochfloatrrr9rorrrr2r2r2r3sV  ,              4 K