o $a&@s0dZddlZddlZddlmZmZddlmZddlmZmZm Z m Z m Z m Z m Z mZddlZddlmZddlmZddlmZdd lmZdd lmZdd lmZmZmZer`dd lm Z e!e"Z#Gd dde Z$Gddde$Z%GdddZ&de'dee(e'fde'fddZ)iddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d=d!d!d@dAdBdCdDdEZ*e+dFdG,e*Z-ej.j/fdHedIe'dJe e'dKede'f dLdMZ0dXdIe'dHedNe e'de'fdOdPZ/dQe'dRdSde'fdTdUZ1dQe'dRdSde'fdVdWZ2dS)Yz sphinx.util.i18n ~~~~~~~~~~~~~~~~ Builder superclass for all builders. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)datetimetimezone)path) TYPE_CHECKINGCallable GeneratorList NamedTupleOptionalTupleUnion)write_mo)read_po) SphinxError)__)logging)SEP canon_pathrelpath)BuildEnvironmentc@s&eZdZUeed<eed<eed<dS)LocaleFileInfoBasebase_dirdomaincharsetN)__name__ __module__ __qualname__str__annotations__rr2/usr/lib/python3/dist-packages/sphinx/util/i18n.pyr!s  rc@szeZdZedefddZedefddZedefddZedefdd Zde fd d Z dd ede ddfddZ dS) CatalogInforeturncC |jdS)N.porselfrrr po_file) zCatalogInfo.po_filecCr#)Nz.mor%r&rrr mo_file-r)zCatalogInfo.mo_filecCt|j|jSN)rjoinrr(r&rrr po_path1zCatalogInfo.po_pathcCr+r,)rr-rr*r&rrr mo_path5r/zCatalogInfo.mo_pathcCs&t|j pt|jt|jkSr,)rexistsr0getmtimer.r&rrr is_outdated9szCatalogInfo.is_outdatedFlocale use_fuzzyNc Cst|j|jd3}zt||}Wn#ty3}zttd|j|WYd}~WddSd}~wwWdn1s>wYt|jd6}zt |||Wntyn}zttd|j|WYd}~n d}~wwWddSWddS1swYdS)N)encodingzreading error: %s, %swbzwriting error: %s, %s) openr.rr Exceptionloggerwarningrr0r )r'r4r5file_popoexcfile_morrr r >s,  "zCatalogInfo.write_mo)F) rrrpropertyrr(r*r.r0boolr3r rrrr r!'sr!c @seZdZdZdedeedededdf dd Zedeeddffd d Z edee eefddffd d Z edee ddffddZ dS)CatalogRepositoryz"A repository for message catalogs.basedir locale_dirslanguager6r"NcCs||_||_||_||_dSr,)rC _locale_dirsrEr6)r'rCrDrEr6rrr __init__Ps zCatalogRepository.__init__ccs\|jsdS|jD]"}t|j|}t||jd}t|r#|Vq ttd|q dS)N LC_MESSAGESzlocale_dir %s does not exists) rErFrr-rCr1r:verboser)r' locale_dir locale_pathrrr rDWs  zCatalogRepository.locale_dirsc cs|jD]<}t||jd}t|D],\}}}|D] }|dr&||q|D]}|dr>t||}|t ||fVq)qqdS)NrH.r$) rDrr-rEoswalk startswithremoveendswithr) r'rJrCrootdirnames filenamesdirnamefilenamefullpathrrr pofilesds      zCatalogRepository.pofilesccs8|jD]\}}tt|d}t|||jVqdS)Nr)rXrrsplitextr!r6)r'rCrVrrrr catalogsss zCatalogRepository.catalogs)rrr__doc__rrrGr@rrDr rXr!rZrrrr rBMs  "rBdocname compactionr"cCs&t|tr|S|r|tddS|S)z'Convert docname to domain for catalogs.r) isinstancersplitr)r\r]rrr docname_to_domainzs raz%aEEEz%AEEEEz%bMMMz%BMMMMz%cmediumz%-ddz%dddz%-HHz%HHHz%-Ihz%Ihhz%-jDz%jDDDz%-mMz%mMMz%-Mmz%MmmasssWWeWYYyyyyzzzZZZ%)z%pz%-Sz%Sz%Uz%wz%-Wz%W%x%Xz%yz%Yz%Zz%zz%%z(%s)|dateformatr4 formatterc Cs||durd}t|dstjj}z||||dWSttjjfy+|||ddYSty=t t d||YSw)Nentzinfo)r4z[Invalid date format. Quote the string by single quote if you want to output it directly: %s) hasattrbabeldates format_date ValueErrorcoreUnknownLocaleErrorAttributeErrorr:r;r)rrr4rrrr babel_format_dates   rrEc Cs|durtd}|durtt|}nttj}g}t |}|D]3}|t vrTt |d}|dkr;t jj}n |dkrDt jj}nt jj}|t||||dq&||q&d|S)NSOURCE_DATE_EPOCHr~r)r4r)rMgetenvrutcfromtimestampfloatnowrutc astimezonedate_format_rer`date_format_mappingsgetrrr format_timeformat_datetimeappendrr-) rrrEsource_date_epochresulttokenstoken babel_formatfunctionrrr rs(        rrVenvrc Cs|jjs|S|jj}t}t|\|d<|d<t|d}|r,|tjs,|tj7}t|j }|r?|tjs?|tj7}||d<t |d|d<||d<|jj|d<z |j di|WSt yr}zt d||d}~ww) NrRextrbasenamedocpathrEz$Invalid figure_language_filename: %rr)configrEfigure_language_filenamedictrrYrUrQsepr\rrKeyErrorr)rVrfilename_formatrgrUrr>rrr get_image_filename_for_languages*    rcCs6|jjs|St||}||\}}t|r|S|Sr,)rrEr relfn2pathrr1)rVr translated_abspathrrr search_image_for_languages  r)NN)3r[rMrerrrtypingrrrrr r r r babel.datesrbabel.messages.mofiler babel.messages.pofiler sphinx.errorsr sphinx.localer sphinx.utilrsphinx.util.osutilrrrsphinx.environmentr getLoggerrr:rr!rBrrArarcompiler-rrrrrrrrrr s  (       &-      ( "