
\c           @   s\  d  Z  d d l Z d d l Z d d l 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 m Z d d l m Z d d	 l m Z m Z d d
 l m Z m Z d d l m Z d d l m Z d d l m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ 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/ m0 Z0 m1 Z1 m2 Z2 d d l3 m4 Z4 m5 Z5 d d l6 m7 Z7 d d l8 m9 Z9 d d l: m; Z; e< rcd d l m Z m= Z= m> Z> m? Z? m Z d d l@ mA ZA d d l mB ZB d d lC m
 Z
 d d lD mE ZE d d lF mG ZG d d lH mI ZI d d lJ mK ZK n  e jL d  ZM e7 jN eO  ZP d e jQ f d     YZR d eR f d      YZS d! eR f d"     YZT d# e f d$     YZU d%   ZV d& e f d'     YZW d( eW f d)     YZX d* eW f d+     YZY d, eZ f d-     YZ[ d.   Z\ d/   Z] d0   Z^ d S(1   s   
    sphinx.io
    ~~~~~~~~~

    Input/Output files

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iN(   t	   Publisher(   t	   FileInputt
   NullOutput(   t   Parser(   t
   standalone(   t
   StringListt   string2lines(   t   UnfilteredWriter(   t	   text_typet	   iteritems(   t   Anyt   Union(   t   RemovedInSphinx30Warning(   t   __(   t   ApplySourceWorkaroundt   ExtraTranslatableNodest   CitationReferencest   DefaultSubstitutionst   MoveModuleTargetst   HandleCodeBlockst   SortIdst   AutoNumberingt   AutoIndexUpgradert   FilterSystemMessagest   UnreferencedFootnotesDetectort   SphinxSmartQuotest   DoctreeReadEventt   ManpageLink(   t   SphinxTransformer(   t   RefOnlyBulletListTransform(   t   PreserveTranslatableMessagest   Localet   RemoveTranslatableInline(   t   SphinxDomainst   SubstitutionDefinitionsRemover(   t   logging(   t   LoggingReporter(   t   UIDTransform(   R
   t   Dictt   Listt   TupleR   (   t   nodes(   t   Input(   t	   Transform(   t   Sphinx(   t   Builder(   t   BuildEnvironments   :\w+:.*?t   SphinxBaseReaderc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   sm   
    A base class of readers for Sphinx.

    This replaces reporter by Sphinx's on generating document.
    c         O   s&   | j  |  _  t j j |  | |  d  S(   N(   t   envR   t   Readert   __init__(   t   selft   appt   argst   kwargs(    (    s(   lib/python2.7/site-packages/sphinx/io.pyR2   B   s    c         C   s   t  j j |   |  j S(   N(   R   R1   t   get_transformst
   transforms(   R3   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR7   G   s    c         C   sS   t  j j |   } t |  | _ | j j |  j  | j } t j	 |  | _ | S(   sg   Creates a new document object which having a special reporter object good
        for logging.
        (
   R   R1   t   new_documentR   t   transformert   set_environmentR0   t   reporterR$   t   from_reporter(   R3   t   documentR<   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR9   K   s    	(   t   __name__t
   __module__t   __doc__R2   R7   R9   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR/   ;   s   		t   SphinxStandaloneReaderc           B   s\   e  Z d  Z e e e e e e e	 e
 e e e e e e e e e e e e e g Z d   Z RS(   s-   
    A basic document reader for Sphinx.
    c         O   s3   |  j  | j j   |  _  t j |  | | |  d  S(   N(   R8   t   registryR7   R/   R2   (   R3   R4   R5   R6   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR2   j   s    (   R?   R@   RA   R   R   R   R   R   R   R   R   R   R   R   R    R   R   R   R   R   R!   R"   R   R%   R8   R2   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRB   ]   s   					t   SphinxI18nReaderc           B   sY   e  Z d  Z e e e e e e e	 e
 e e e e e e e g Z d   Z e d    Z RS(   s  
    A document reader for i18n.

    This returns the source line number of original text as current source line number
    to let users know where the error happened.
    Because the translated texts are partial and they don't have correct line numbers.
    c         C   s   t  j d t d d d S(   s/   Stores the source line number of original text.s9   SphinxI18nReader.set_lineno_for_reporter() is deprecated.t
   stackleveli   N(   t   warningst   warnR   (   R3   t   lineno(    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   set_lineno_for_reporter   s    	c         C   s   t  j d t d d d S(   Ns$   SphinxI18nReader.line is deprecated.RE   i   i    (   RF   RG   R   (   R3   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   line   s    	(   R?   R@   RA   R   R   R   R   R   R   R   R   R    R   R   R   R   R   R"   R8   RI   t   propertyRJ   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRD   p   s   						t   SphinxDummyWriterc           B   s   e  Z d  Z d Z d   Z RS(   s0   Dummy writer module used for generating doctree.t   htmlc         C   s   d  S(   N(    (   R3   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt	   translate   s    (   RM   (   R?   R@   RA   t	   supportedRN   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRL      s   c         O   s   |  S(   s.   Bypass source object as is to cheat Publisher.(    (   t   sourceR5   R6   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   SphinxDummySourceClass   s    t   SphinxBaseFileInputc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s   A base class of SphinxFileInput.

    It supports to replace unknown Unicode characters to '?'. And it also emits
    Sphinx events :event:`source-read` on reading.
    c         O   sF   | |  _  | |  _ t j d |  j  d | d <t j |  | |  d  S(   Nt   sphinxt   error_handler(   R4   R0   t   codecst   register_errort   warn_and_replaceR   R2   (   R3   R4   R0   R5   t   kwds(    (    s(   lib/python2.7/site-packages/sphinx/io.pyR2      s
    		
c         C   s&   t  | t  r | S| j |  j d  S(   NRS   (   t
   isinstanceR   t   decodet   encoding(   R3   t   data(    (    s(   lib/python2.7/site-packages/sphinx/io.pyRZ      s    c         C   s<   t  j |   } | g } |  j j d |  j j |  | d S(   se   Reads the contents from file.

        After reading, it emits Sphinx event ``source-read``.
        s   source-readi    (   R   t   readR4   t   emitR0   t   docname(   R3   R\   t   arg(    (    s(   lib/python2.7/site-packages/sphinx/io.pyR]      s    	c         C   s   | j  j d d | j  } | j  j d | j  } | d k rQ t | j   } n  | j  j d d | j  d } t j t d  | j  | d | j !d | j  | j | j	 !d | j  | j	 | !d |  j
 j | f d	 | j	 f S(
   s6   Custom decoding error handler that warns and replaces.s   
i    ii   s5   undecodable source characters, replacing with "?": %rs   >>>s   <<<t   locationu   ?(   t   objectt   rfindt   startt   findt   lent   countt   loggert   warningR   t   endR0   R_   (   R3   t   errort	   linestartt   lineendRH   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRW      s    0(   R?   R@   RA   R2   RZ   R]   RW   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRR      s
   			t   SphinxFileInputc           B   s   e  Z d  Z d Z RS(   s   A basic FileInput for Sphinx.t   *(   Ro   (   R?   R@   RA   RO   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRn      s   t   SphinxRSTFileInputc           B   s8   e  Z d  Z d Z d   Z d   Z d   Z d   Z RS(   s  A reST FileInput for Sphinx.

    This FileInput automatically prepends and appends text by :confval:`rst_prolog` and
    :confval:`rst_epilog`.

    .. important::

       This FileInput uses an instance of ``StringList`` as a return value of ``read()``
       method to indicate original source filename and line numbers after prepending and
       appending.
       For that reason, ``sphinx.parsers.RSTParser`` should be used with this to parse
       a content correctly.
    t   restructuredtextc         C   s   |  j  |  } | r8 | j | d d d  | d 7} n  x: t | j    D]& \ } } | j | | | d |  qK W| j | | d d d d  d  S(   Nt    s   <generated>i    i   s   <rst_prolog>(   t   count_docinfo_linest   insertt	   enumeratet
   splitlines(   R3   t   textt   prologt   docinfoRH   RJ   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   prepend_prolog   s    c         C   sM   | j  d d d  x3 t | j    D] \ } } | j  | d |  q& Wd  S(   NRr   s   <generated>i    s   <rst_epilog>(   t   appendRu   Rv   (   R3   Rw   t   epilogRH   RJ   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   append_epilog   s    c         C   s   t  j |   } t | d t } t   } x0 t |  D]" \ } } | j | |  j |  q7 W|  j j	 j
 r |  j | |  j j	 j
  n  |  j j	 j r |  j | |  j j	 j  n  | S(   Nt   convert_whitespace(   RR   R]   R   t   TrueR   Ru   R{   t   source_pathR0   t   configt
   rst_prologRz   t
   rst_epilogR}   (   R3   t   inputstringt   linest   contentRH   RJ   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR]      s    	c         C   sQ   t  |  d k r d Sx0 t | j  D] \ } } t j |  s& Pq& q& W| Sd  S(   Ni    (   Rf   Ru   R\   t
   docinfo_ret   match(   R3   R   RH   RJ   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRs     s    (   Rq   (   R?   R@   RA   RO   Rz   R}   R]   Rs   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyRp      s   			t   FiletypeNotFoundErrorc           B   s   e  Z RS(    (   R?   R@   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyR     s   c         C   s@   x9 t  |   D]% \ } } | j |  r | p1 d Sq Wt  d  S(   NRq   (   R	   t   endswithR   (   t   source_suffixt   filenamet   suffixt   filetype(    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   get_filetype  s    c   	      C   s  t  |  j j |  } |  j j |  } t |   } | |  | d d d | d | j j } |  j j |  |  } | j	 j
 d k r | j d k r t j | _ n  t d | d | d t   d t d	 t    } | j d d
 d  | j d | j d  | j | |  | j   | j S(   s(   Parse a document and convert to doctree.RP   R   R[   t   CommonMarkParsert   readert   parsert   writert   source_classt   destinationRq   N(    (   R   R   R   RC   t   get_source_inputRB   t   Nonet   source_encodingt   create_source_parsert	   __class__R?   t   settings_spect	   RSTParserR    RL   RQ   R   t   set_componentst   process_programmatic_settingst   settingst
   set_sourcet   publishR>   (	   R4   R0   R   R   t   input_classR   RP   R   t   pub(    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   read_doc%  s$    !	
c         C   s9   |  j  j t  |  j  j t  i d d 6t d 6t d 6S(   Nt   builtint   versiont   parallel_read_safet   parallel_write_safe(   RC   t   add_source_inputRn   Rp   R   (   R4   (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   setupB  s    (_   RA   RU   t   reRF   t   docutils.coreR    t   docutils.ioR   R   t   docutils.parsers.rstR   R   t   docutils.readersR   t   docutils.statemachineR   R   t   docutils.writersR   t   sixR   R	   t   typingR
   R   t   sphinx.deprecationR   t   sphinx.localeR   t   sphinx.transformsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t%   sphinx.transforms.compact_bullet_listR   t   sphinx.transforms.i18nR   R   R    t   sphinx.transforms.referencesR!   R"   t   sphinx.utilR#   t   sphinx.util.docutilsR$   t   sphinx.versioningR%   t   FalseR&   R'   R(   t   docutilsR)   R*   t   docutils.parserst   docutils.transformsR+   t   sphinx.applicationR,   t   sphinx.buildersR-   t   sphinx.environmentR.   t   compileR   t	   getLoggerR?   Rh   R1   R/   RB   RD   RL   RQ   RR   Rn   Rp   t	   ExceptionR   R   R   R   (    (    (    s(   lib/python2.7/site-packages/sphinx/io.pyt   <module>
   sX   ^("
	5?	
	