ó
öÀ„\c           @   s1  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 ré d d l m Z m Z m Z m Z d d l m Z n  e j e ƒ Z  d e f d „  ƒ  YZ! d e! f d „  ƒ  YZ" d „  Z# d S(   sÕ   
    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.
iÿÿÿÿN(   t   path(   t   nodes(   t   StringOutput(   t   XMLTranslator(   t   Builder(   t   __(   t   logging(   t	   ensuredirt   os_path(   t	   XMLWritert   PseudoXMLWriter(   t   Anyt   Dictt   Iteratort   Set(   t   Sphinxt
   XMLBuilderc           B   sw   e  Z d  Z d Z d Z e d ƒ Z d Z e Z	 e
 Z e Z d „  Z d „  Z d
 d „ Z d „  Z d „  Z d	 „  Z RS(   s%   
    Builds Docutils-native XML.
    t   xmls    The XML files are in %(outdir)s.s   .xmlc         C   s   d  S(   N(    (   t   self(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   init/   s    c         c   sÊ   xÃ |  j  j D]µ } | |  j  j k r0 | Vq n  |  j  j | |  j |  j ƒ } y t j | ƒ } Wn t k
 rz d } n Xy3 t j |  j  j | ƒ ƒ } | | k r­ | Vn  Wq t	 k
 rÁ q Xq Wd  S(   Ni    (
   t   envt
   found_docst   all_docst   doc2patht   outdirt
   out_suffixR    t   getmtimet	   Exceptiont   EnvironmentError(   R   t   docnamet
   targetnamet   targetmtimet   srcmtime(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   get_outdated_docs3   s     
c         C   s   | S(   N(    (   R   R   t   typ(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   get_target_uriG   s    c         C   s   |  j  |  ƒ |  _ d  S(   N(   t   _writer_classt   writer(   R   t   docnames(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   prepare_writingK   s    c         C   s‘  | j  ƒ  } x½ | j t j ƒ D]© } x  | j j ƒ  D] \ } } t | t ƒ rf t | ƒ | j | <n  | j | } t | t ƒ r5 x? t	 | ƒ D]. \ } } t | t ƒ r t | ƒ | | <q q Wq5 q5 Wq Wt
 d d ƒ } |  j j | | ƒ t j |  j t | ƒ |  j ƒ }	 t t j |	 ƒ ƒ y5 t j |	 d d ƒ  }
 |
 j |  j j ƒ Wd  QXWn2 t t f k
 rŒ} t j t d ƒ |	 | ƒ n Xd  S(   Nt   encodings   utf-8t   ws   error writing file %s: %s(   t   deepcopyt   traverseR   t   Elementt
   attributest   itemst
   isinstancet   tuplet   listt	   enumerateR   R%   t   writeR    t   joinR   R   R   R   t   dirnamet   codecst   opent   outputt   IOErrort   OSErrort   loggert   warningR   (   R   R   t   doctreet   nodet   attt   valuet   it   valt   destinationt   outfilenamet   ft   err(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt	   write_docO   s&    ""c         C   s   d  S(   N(    (   R   (    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   finishg   s    N(   t   __name__t
   __module__t   __doc__t   namet   formatR   t   epilogR   t   Truet   allow_parallelR	   R$   R   t   default_translator_classR   R!   t   NoneR#   R'   RG   RH   (    (    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyR   !   s   				t   PseudoXMLBuilderc           B   s2   e  Z d  Z d Z d Z e d ƒ Z d Z e Z	 RS(   s1   
    Builds pseudo-XML for display purposes.
    t	   pseudoxmls'   The pseudo-XML files are in %(outdir)s.s
   .pseudoxml(
   RI   RJ   RK   RL   RM   R   RN   R   R
   R$   (    (    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyRS   l   s   c         C   sF   |  j  t ƒ |  j  t ƒ |  j d t d ƒ i d d 6t d 6t d 6S(   Nt
   xml_prettyR   t   builtint   versiont   parallel_read_safet   parallel_write_safe(   t   add_builderR   RS   t   add_config_valueRO   (   t   app(    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   setupy   s    ($   RK   R6   t   osR    t   docutilsR   t   docutils.ioR   t   docutils.writers.docutils_xmlR   t   sphinx.buildersR   t   sphinx.localeR   t   sphinx.utilR   t   sphinx.util.osutilR   R   t   sphinx.writers.xmlR	   R
   t   Falset   typingR   R   R   R   t   sphinx.applicationR   t	   getLoggerRI   R;   R   RS   R]   (    (    (    s2   lib/python2.7/site-packages/sphinx/builders/xml.pyt   <module>
   s"   "K