B
    d                 @   s  d Z ddlZddlZddlmZmZmZm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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# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 erNddl7m8Z8 e29e:Z;G dd dej<Z=G dd de=Z>G dd de=Z?G dd deZ@eeeedd d!ZAG d"d# d#eZBd$e#eCe	jDd%d&d'ZEd$eCed(d)d*ZFdS )+zInput/Output files    N)TYPE_CHECKINGAnyListType)nodes)	Publisher)Values)	FileInputInput
NullOutput)Parser)
standalone)	Transform)DanglingReferences)UnfilteredWriter)addnodes)RemovedInSphinx70Warning)BuildEnvironment)AutoIndexUpgraderDoctreeReadEventFigureAlignerSphinxTransformer)LocalePreserveTranslatableMessagesRemoveTranslatableInline)SphinxDomains)UnicodeDecodeErrorHandlerget_filetypelogging)LoggingReporter)UIDTransform)Sphinxc                   s~   e Zd ZU dZg Zeee  ed< e	e	dd fddZ
dddd	d
Zeee  d fddZejd fddZ  ZS )SphinxBaseReaderzm
    A base class of readers for Sphinx.

    This replaces reporter by Sphinx's on generating document.
    
transformsN)argskwargsreturnc                sX   ddl m} t|dkrFt|d |rF|d | _| jj| _|dd  }t j|| d S )Nr   )r!      )	sphinx.applicationr!   len
isinstance_appenv_envsuper__init__)selfr$   r%   r!   )	__class__ V/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/io.pyr/   .   s    

zSphinxBaseReader.__init__r!   )appr&   c             C   s   || _ |j| _d S )N)r+   r,   r-   )r0   r4   r2   r2   r3   setup7   s    zSphinxBaseReader.setup)r&   c                s:   t   | j }tg}x|D ]}||kr|| qW |S )N)r.   get_transformsr#   r   remove)r0   r#   unused	transform)r1   r2   r3   r6   ;   s    
zSphinxBaseReader.get_transformsc                sB   t   }tj|_t||_|j| jj	 |j
}t||_
|S )zm
        Creates a new document object which has a special reporter object good
        for logging.
        )r.   new_documentr   documentr1   r   ZtransformerZset_environmentsettingsr,   reporterr   Zfrom_reporter)r0   r;   r=   )r1   r2   r3   r:   F   s    

zSphinxBaseReader.new_document)__name__
__module____qualname____doc__r#   r   r   r   __annotations__r   r/   r5   r6   r   r;   r:   __classcell__r2   r2   )r1   r3   r"   %   s   
	r"   c                   sN   e Zd ZdZddd fddZeeeej	ddd	Z
eed
ddZ  ZS )SphinxStandaloneReaderz-
    A basic document reader for Sphinx.
    r!   N)r4   r&   c                s"   | j |j  | _ t | d S )N)r#   registryr6   r.   r5   )r0   r4   )r1   r2   r3   r5   ^   s    zSphinxStandaloneReader.setup)sourceparserr<   r&   c             C   s4   || _ | js|| _|| _| |j| _|   | jS )N)rF   rG   r<   read_sourcer,   inputparser;   )r0   rF   rG   r<   r2   r2   r3   readb   s    zSphinxStandaloneReader.read)r,   r&   c             C   s*   | j  }|g}|jd|j| |d S )z-Read content from source and do post-process.zsource-readr   )rF   rK   eventsemitdocname)r0   r,   contentargr2   r2   r3   rH   k   s    
z"SphinxStandaloneReader.read_source)r>   r?   r@   rA   r5   r
   r   r   r   r;   rK   r   strrH   rC   r2   r2   )r1   r3   rD   Y   s   	rD   c                   s(   e Zd ZdZddd fddZ  ZS )SphinxI18nReadera  
    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.
    r!   N)r4   r&   c                sZ   t  | | j|j  | _ttttt	t
ttg}x"|D ]}|| jkr8| j| q8W d S )N)r.   r5   r#   rE   r6   r   r   r   r   r   r   r   r    r7   )r0   r4   r8   r9   )r1   r2   r3   r5   ~   s    

zSphinxI18nReader.setup)r>   r?   r@   rA   r5   rC   r2   r2   )r1   r3   rR   u   s   rR   c               @   s"   e Zd ZdZdZddddZdS )SphinxDummyWriterz0Dummy writer module used for generating doctree.)htmlN)r&   c             C   s   d S )Nr2   )r0   r2   r2   r3   	translate   s    zSphinxDummyWriter.translate)r>   r?   r@   rA   	supportedrU   r2   r2   r2   r3   rS      s   rS   )rF   r$   r%   r&   c             O   s   | S )z.Bypass source object as is to cheat Publisher.r2   )rF   r$   r%   r2   r2   r3   SphinxDummySourceClass   s    rW   c                   s*   e Zd ZdZeedd fddZ  ZS )SphinxFileInputzA basic FileInput for Sphinx.N)r$   r%   r&   c                s   d|d< t  j|| d S )Nsphinxerror_handler)r.   r/   )r0   r$   r%   )r1   r2   r3   r/      s    zSphinxFileInput.__init__)r>   r?   r@   rA   r   r/   rC   r2   r2   )r1   r3   rX      s   rX   r!   )r4   r,   filenamer&   c             C   s   t jdtdd t|j}td| t }||  t	| j
j|}| j| |}|jjdkrp|jdkrptj|_t||t tt d}|d|jd |j|d	 |  |jS )
z(Parse a document and convert to doctree.z#sphinx.io.read_doc() is deprecated.   )
stacklevelrY   CommonMarkParserr2   )readerrG   writersource_classdestinationN)source_path)warningswarnr   r   rN   codecsregister_errorrD   r5   r   configZsource_suffixrE   create_source_parserr1   r>   settings_spec	RSTParserr   rS   rX   r   Zprocess_programmatic_settingsr<   Z
set_sourcepublishr;   )r4   r,   r[   rZ   r_   filetyperG   pubr2   r2   r3   read_doc   s&    



ro   )r4   rm   r&   c             C   s   t  }||  | j| |}|jjdkrH|jdkrHddlm} |j|_t	||t
 tt d}ddi| jj}tjd d d	kr|jf | n|jf | |_|S )
Nr^   r2   r   )r   )r_   rG   r`   ra   rb   	tracebackTr\   )r      )rD   r5   rE   ri   r1   r>   rj   docutils.parsers.rstr   r   rS   rX   r   r,   r<   docutils__version_info__Zget_settingsZsetup_option_parserget_default_values)r4   rm   r_   rG   rk   rn   defaultsr2   r2   r3   create_publisher   s"    

rw   )GrA   rf   rd   typingr   r   r   r   rs   r   Zdocutils.corer   Zdocutils.frontendr   Zdocutils.ior	   r
   r   Zdocutils.parsersr   rr   rk   Zdocutils.readersr   Zdocutils.transformsr   Zdocutils.transforms.referencesr   Zdocutils.writersr   rY   r   Zsphinx.deprecationr   Zsphinx.environmentr   Zsphinx.transformsr   r   r   r   Zsphinx.transforms.i18nr   r   r   Zsphinx.transforms.referencesr   Zsphinx.utilr   r   r   Zsphinx.util.docutilsr   Zsphinx.versioningr    r(   r!   	getLoggerr>   loggerReaderr"   rD   rR   rS   rW   rX   rQ   r;   ro   rw   r2   r2   r2   r3   <module>   sD   
4	 