
    Fe                       d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZ erddlmZ ddlmZ ddlmZ  ej@                  e!      Z" G d de      Z# G d de#      Z$ddZ%y)z,Docutils-native XML and pseudo-XML builders.    )annotations)path)TYPE_CHECKINGAny)nodes)StringOutput)XMLTranslator)Builder)__)logging)	ensurediros_path)PseudoXMLWriter	XMLWriter)Iterator)Node)Sphinxc                      e Zd ZU dZdZdZ ed      ZdZdZ	e
Zded<   ded	<   eZdd
ZddZdddZddZddZddZy)
XMLBuilderz%
    Builds Docutils-native XML.
    xmlz The XML files are in %(outdir)s.z.xmlTz'type[XMLWriter] | type[PseudoXMLWriter]_writer_classzXMLWriter | PseudoXMLWriterwriterc                     y N selfs    5/usr/lib/python3/dist-packages/sphinx/builders/xml.pyinitzXMLBuilder.init+           c              #    K   | j                   j                  D ]  }|| j                   j                  vr|  t        j                  | j
                  || j                  z         }	 t        j                  |      }	 t        j                  | j                   j                  |            }||kD  r|  y # t        $ r d}Y Hw xY w# t        $ r Y w xY ww)Nr   )env
found_docsall_docsr   joinoutdir
out_suffixgetmtime	Exceptiondoc2pathOSError)r   docname
targetnametargetmtimesrcmtimes        r   get_outdated_docszXMLBuilder.get_outdated_docs.   s     xx** 	Gdhh///4;;$//0IJJ "mmJ7==):):7)CDk)!M	      sH   A$C'B7=7C4C7CCCC	CCCCNc                    |S r   r   )r   r-   typs      r   get_target_urizXMLBuilder.get_target_uri@   s    r!   c                0    | j                  |       | _        y r   )r   r   )r   docnamess     r   prepare_writingzXMLBuilder.prepare_writingC   s    ((.r!   c                   |j                         }| j                  j                  j                         D ]  }d|j                  z   }d||<    |j                  t        j                        D ]  }|j                  j                         D ]  \  }}t        |t              rt        |      |j                  |<   |j                  |   }t        |t              sNt        |      D ]$  \  }}	t        |	t              st        |	      ||<   &   t        d      }
| j                  j!                  ||
       t#        j$                  | j&                  t)        |      | j*                  z         }t-        t#        j.                  |             	 t1        |dd      5 }|j!                  | j                  j2                         d d d        y # 1 sw Y   y xY w# t4        $ r*}t6        j9                  t;        d      ||       Y d }~y d }~ww xY w)Nzxmlns:zhttps://www.sphinx-doc.org/zutf-8)encodingwzerror writing file %s: %s)deepcopyr#   domainsvaluesnamefindallr   Element
attributesitems
isinstancetuplelist	enumerater   r   writer   r&   r'   r   r(   r   dirnameopenoutputr,   loggerwarningr   )r   r-   doctreedomainxmlnsnodeattvalueivaldestinationoutfilenameferrs                 r   	write_doczXMLBuilder.write_docF   s    ""$hh&&--/ 	;Fv{{*E:GEN	; OOEMM2 	1D"oo335 1
UeU++/;DOOC(,eT*"+E"2 13%c51'+CyE!H11	1 #G4';/iiWW-=-OP$,,{+,	Nk39 ,Q**+, , , 	NNN29:KMM	Ns6   G &G?G GG G 	H HHc                     y r   r   r   s    r   finishzXMLBuilder.finish`   r    r!   )returnNone)r\   zIterator[str]r   )r-   strr3   z
str | Noner\   r^   )r6   zset[str]r\   r]   )r-   r^   rM   r   r\   r]   )__name__
__module____qualname____doc__r>   formatr   epilogr(   allow_parallelr   r   __annotations__r	   default_translator_classr   r1   r4   r7   rY   r[   r   r!   r   r   r      s^     DF23FJN=FM:F'',$/N4r!   r   c                  0    e Zd ZdZdZdZ ed      ZdZe	Z
y)PseudoXMLBuilderz1
    Builds pseudo-XML for display purposes.
    	pseudoxmlz'The pseudo-XML files are in %(outdir)s.z
.pseudoxmlN)r_   r`   ra   rb   r>   rc   r   rd   r(   r   r   r   r!   r   ri   ri   d   s(     DF9:FJ#Mr!   ri   c                    | j                  t               | j                  t               | j                  ddd       ddddS )N
xml_prettyTr#   builtin)versionparallel_read_safeparallel_write_safe)add_builderr   ri   add_config_value)apps    r   setuprt   q   sB    OOJOO$%tU3 "# r!   N)rs   r   r\   zdict[str, Any])&rb   
__future__r   osr   typingr   r   docutilsr   docutils.ior   docutils.writers.docutils_xmlr	   sphinx.buildersr
   sphinx.localer   sphinx.utilr   sphinx.util.osutilr   r   sphinx.writers.xmlr   r   collections.abcr   docutils.nodesr   sphinx.applicationr   	getLoggerr_   rK   r   ri   rt   r   r!   r   <module>r      sg    2 "  %  $ 7 #   1 9(#)			8	$E EP
$z 
$
r!   