B
    .Kc                 @   s   d Z ddlmZ ddlmZmZmZmZmZ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%eee&ef dddZ'dS )z,Docutils-native XML and pseudo-XML builders.    )path)AnyDictIteratorOptionalSetTypeUnion)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eee
 ee f ed< eZddd	d
Zee dddZdeee edddZee ddddZeeddddZddddZdS )
XMLBuilderz%
    Builds Docutils-native XML.
    Zxmlz The XML files are in %(outdir)s.z.xmlT_writer_classN)returnc             C   s   d S )N )selfr   r   2lib/python3.7/site-packages/sphinx/builders/xml.pyinit#   s    zXMLBuilder.initc          	   c   s   x| j jD ]}|| j jkr"|V  q
t| j|| j }yt|}W n tk
r\   d}Y nX y$t| j 	|}||kr|V  W q
 t
k
r   Y q
X q
W 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_docs)r$   typr   c             C   s   |S )Nr   )r   r$   r&   r   r   r   get_target_uri8   s    zXMLBuilder.get_target_uri)docnamesr   c             C   s   |  | | _d S )N)r   writer)r   r(   r   r   r   prepare_writing;   s    zXMLBuilder.prepare_writing)r$   doctreer   c          
   C   s\  |  }x&| jj D ]}d|j }d||< qW x|tjD ]t}xn|j	 D ]`\}}t
|trnt||j|< |j| }t
|trNx*t|D ]\}}	t
|	trt|	||< qW qNW q>W tdd}
| j||
 t| jt|| j }tt| y,t|ddd}|| jj W d Q R X W n6 tk
rV } zttd|| W d 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   Zdomainsvaluesnamefindallr
   ZElementZ
attributesitems
isinstancetuplelist	enumerater   r)   writer   r   r   r   r    r   dirnameopenoutputr#   loggerZwarningr   )r   r$   r+   domainZxmlnsZnodeZattvalueivalZdestinationZoutfilenameferrr   r   r   	write_doc>   s,    





zXMLBuilder.write_docc             C   s   d S )Nr   )r   r   r   r   finishX   s    zXMLBuilder.finish)N)__name__
__module____qualname____doc__r0   formatr   epilogr    Zallow_parallelr   r   r	   r   r   __annotations__r   Zdefault_translator_classr   r   strr%   r   r'   r   r*   r   rB   rC   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)rD   rE   rF   rG   r0   rH   r   rI   r    r   r   r   r   r   r   rL   \   s   rL   )appr   c             C   s.   |  t |  t | ddd ddddS )NZ
xml_prettyTr   Zbuiltin)versionZparallel_read_safeZparallel_write_safe)Zadd_builderr   rL   Zadd_config_value)rM   r   r   r   setupi   s    

rO   N)(rG   osr   typingr   r   r   r   r   r   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   Z	getLoggerrD   r;   r   rL   rK   rO   r   r   r   r   <module>   s    $
G