o $a@sdZddlmZddlmZmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZmZdd lmZmZe e!Z"GdddeZ#Gddde#Z$dedee%effddZ&dS)z sphinx.builders.xml ~~~~~~~~~~~~~~~~~~~ Docutils-native XML and pseudo-XML builders. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. )path)AnyDictIteratorSetTypeUnion)nodes) StringOutput)Node) XMLTranslator)Sphinx)Builder)__)logging) ensurediros_path)PseudoXMLWriter XMLWriterc@seZdZUdZdZdZedZdZdZ e Z e e e e efed<eZdd d Zdeefd d Zdd ededefddZdeeddfddZd ededdfddZdddZdS) XMLBuilderz% Builds Docutils-native XML. xmlz The XML files are in %(outdir)s.z.xmlT _writer_classreturnNcCdSNselfrr5/usr/lib/python3/dist-packages/sphinx/builders/xml.pyinit+zXMLBuilder.initc cs|jjD]D}||jjvr|Vqt|j||j}zt|}Wn ty-d}Ynwzt|j |}||kr?|VWqt yIYqwdS)Nr) env found_docsall_docsrjoinoutdir out_suffixgetmtime Exceptiondoc2pathOSError)rdocname targetname targetmtimesrcmtimerrrget_outdated_docs.s(    zXMLBuilder.get_outdated_docsr+typcCs|Srr)rr+r0rrrget_target_uri@r zXMLBuilder.get_target_uridocnamescCs|||_dSr)rwriter)rr2rrrprepare_writingCszXMLBuilder.prepare_writingdoctreec Cs@|}|tjD]6}|jD].\}}t|tr!t||j|<|j|}t|tr?t |D]\}}t|tr>t|||<q/qq t dd}|j ||t |jt||j} tt | z#t| ddd} | |j jWdWdS1s|wYWdSty} zttd| | WYd} ~ dSd} ~ ww)Nzutf-8)encodingwzerror writing file %s: %s)deepcopytraverser Element attributesitems isinstancetuplelist enumerater r3writerr$r%rr&rdirnameopenoutputr*loggerwarningr) rr+r5nodeattvalueival destination outfilenameferrrrr write_docFs0      & zXMLBuilder.write_doccCrrrrrrrfinish]r zXMLBuilder.finish)rNr)__name__ __module__ __qualname____doc__nameformatrepilogr&allow_parallelrrrrr__annotations__r default_translator_classrrstrr/r1rr4r rPrQrrrrrs  rc@s(eZdZdZdZdZedZdZe Z dS)PseudoXMLBuilderz1 Builds pseudo-XML for display purposes. pseudoxmlz'The pseudo-XML files are in %(outdir)s.z .pseudoxmlN) rRrSrTrUrVrWrrXr&rrrrrrr]asr]apprcCs.|t|t|dddddddS)N xml_prettyTr!builtin)versionparallel_read_safeparallel_write_safe) add_builderrr]add_config_value)r_rrrsetupns  rgN)'rUosrtypingrrrrrrdocutilsr docutils.ior docutils.nodesr docutils.writers.docutils_xmlr sphinx.applicationr sphinx.buildersr sphinx.localer sphinx.utilrsphinx.util.osutilrrsphinx.writers.xmlrr getLoggerrRrErr]r\rgrrrrs"          D