B
    \x                 @   s   d Z ddl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 ZdS )z
    sphinx.builders.xml
    ~~~~~~~~~~~~~~~~~~~

    Docutils-native XML and pseudo-XML builders.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)path)nodes)StringOutput)XMLTranslator)Builder)__)logging)	ensurediros_path)	XMLWriterPseudoXMLWriterc               @   sb   e Zd ZdZdZdZedZdZdZ	e
ZeZdd Zdd	 ZdddZdd Zdd Zdd Zd
S )
XMLBuilderz%
    Builds Docutils-native XML.
    Zxmlz The XML files are in %(outdir)s.z.xmlTc             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
| j || 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_docsZdoc2pathoutdir
out_suffixr   getmtime	ExceptionEnvironmentError)r   docnameZ
targetnameZtargetmtimeZsrcmtimer   r   r   get_outdated_docs3   s     

zXMLBuilder.get_outdated_docsNc             C   s   |S )Nr   )r   r   typr   r   r   get_target_uriG   s    zXMLBuilder.get_target_uric             C   s   |  | | _d S )N)_writer_classwriter)r   Zdocnamesr   r   r   prepare_writingK   s    zXMLBuilder.prepare_writingc          
   C   s8  |  }x|tjD ]t}xn|j D ]`\}}t|trFt||j|< |j| }t|tr&x*t	|D ]\}}t|trdt|||< qdW q&W qW t
dd}| j|| t| jt|| j }	tt|	 y,t|	dd}
|
| jj W d Q R X W n: ttfk
r2 } zttd|	| W d d }~X Y nX d S )Nzutf-8)encodingwzerror writing file %s: %s)deepcopyZtraverser   ZElementZ
attributesitems
isinstancetuplelist	enumerater   r   writer   joinr   r
   r   r	   dirnamecodecsopenoutputIOErrorOSErrorloggerZwarningr   )r   r   ZdoctreeZnodeZattvalueivalZdestinationZoutfilenameferrr   r   r   	write_docO   s&    




zXMLBuilder.write_docc             C   s   d S )Nr   )r   r   r   r   finishg   s    zXMLBuilder.finish)N)__name__
__module____qualname____doc__nameformatr   epilogr   Zallow_parallelr   r   r   Zdefault_translator_classr   r   r   r   r5   r6   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)r7   r8   r9   r:   r;   r<   r   r=   r   r   r   r   r   r   r   r>   l   s   r>   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   r>   Zadd_config_value)Zappr   r   r   setupy   s    

r@   )r:   r*   osr   Zdocutilsr   Zdocutils.ior   Zdocutils.writers.docutils_xmlr   Zsphinx.buildersr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.osutilr	   r
   Zsphinx.writers.xmlr   r   Z	getLoggerr7   r/   r   r>   r@   r   r   r   r   <module>
   s   
K