B
    d                 @   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.
    xmlz The XML files are in %(outdir)s.z.xmlT_writer_classN)returnc             C   s   d S )N )selfr   r   `/work/yifan.wang/ringdown/master-ringdown-env/lib/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   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val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__r2   formatr   epilogr!   Zallow_parallelr   r   r	   r   r   __annotations__r   Zdefault_translator_classr   r   strr&   r   r(   r   r+   r   rH   rI   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)rJ   rK   rL   rM   r2   rN   r   rO   r!   r   r   r   r   r   r   rR   \   s   rR   )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   rR   Zadd_config_value)rS   r   r   r   setupi   s    

rV   N)(rM   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   	getLoggerrJ   r>   r   rR   rQ   rV   r   r   r   r   <module>   s    $
G