U
    \Sh                     @  s   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 ddlmZ ddlmZmZ ddlmZmZ eeZ G dd deZ!G dd de!Z"dddddZ#dS )z,Docutils-native XML and pseudo-XML builders.    )annotations)path)AnyIterator)nodes)StringOutput)Node)XMLTranslator)Sphinx)Builder)__)logging)	ensurediros_path)PseudoXMLWriter	XMLWriterc                   @  s   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ddZddddZd!ddddddZdd
dddZddd
dddZd
ddd ZdS )"
XMLBuilderz%
    Builds Docutils-native XML.
    xmlz The XML files are in %(outdir)s.z.xmlTz'type[XMLWriter] | type[PseudoXMLWriter]_writer_classzXMLWriter | PseudoXMLWriterwriterNone)returnc                 C  s   d S N selfr   r   F/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/xml.pyinit&   s    zXMLBuilder.initzIterator[str]c              	   c  s   | j jD ]}|| j jkr |V  qt| j|| j }zt|}W n tk
rZ   d}Y nX z$t| j 	|}||kr~|V  W q t
k
r   Y qX qd S )Nr   )envZ
found_docsZall_docsr   joinoutdir
out_suffixgetmtime	ExceptionZdoc2pathOSError)r   docnameZ
targetnameZtargetmtimeZsrcmtimer   r   r   get_outdated_docs)   s    

zXMLBuilder.get_outdated_docsNstrz
str | None)r%   typr   c                 C  s   |S r   r   )r   r%   r(   r   r   r   get_target_uri;   s    zXMLBuilder.get_target_urizset[str])docnamesr   c                 C  s   |  | | _d S r   )r   r   )r   r*   r   r   r   prepare_writing>   s    zXMLBuilder.prepare_writingr   )r%   doctreer   c              
   C  sL  |  }| jj D ]}d|j }d||< q|tjD ]l}|j	 D ]\\}}t
|trft||j|< |j| }t
|trFt|D ]\}}	t
|	trt|	||< qqFq8tdd}
| j||
 t| jt|| j }tt| z,t|ddd}|| jj W 5 Q R X W n6 tk
rF } zttd|| W 5 d }~X Y nX d S )Nzxmlns:zhttps://www.sphinx-doc.org/zutf-8)encodingwzerror writing file %s: %s)deepcopyr   domainsvaluesnamefindallr   ZElement
attributesitems
isinstancetuplelist	enumerater   r   writer   r   r    r   r!   r   dirnameopenoutputr$   loggerwarningr   )r   r%   r,   domainZxmlnsnodeZattvalueivalZdestinationZoutfilenameferrr   r   r   	write_docA   s,    






zXMLBuilder.write_docc                 C  s   d S r   r   r   r   r   r   finish[   s    zXMLBuilder.finish)N)__name__
__module____qualname____doc__r2   formatr   epilogr!   Zallow_parallelr   r   __annotations__r	   Zdefault_translator_classr   r&   r)   r+   rG   rH   r   r   r   r   r      s   
r   c                   @  s(   e Zd ZdZdZdZedZdZe	Z
dS )PseudoXMLBuilderz1
    Builds pseudo-XML for display purposes.
    Z	pseudoxmlz'The pseudo-XML files are in %(outdir)s.z
.pseudoxmlN)rI   rJ   rK   rL   r2   rM   r   rN   r!   r   r   r   r   r   r   rP   _   s   rP   r
   zdict[str, Any])appr   c                 C  s.   |  t |  t | ddd ddddS )NZ
xml_prettyTr   builtin)versionZparallel_read_safeZparallel_write_safe)Zadd_builderr   rP   Zadd_config_value)rQ   r   r   r   setupl   s    

rT   N)$rL   
__future__r   osr   typingr   r   Zdocutilsr   Zdocutils.ior   Zdocutils.nodesr   Zdocutils.writers.docutils_xmlr	   Zsphinx.applicationr
   Zsphinx.buildersr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.osutilr   r   Zsphinx.writers.xmlr   r   	getLoggerrI   r>   r   rP   rT   r   r   r   r   <module>   s"   
H