U
    \Sh                     @  s   d Z ddlmZ ddlmZmZ ddl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 erddlmZ G dd dejjZG dd dejjjeZdddddZdS )z$A Base class for additional parsers.    )annotations)TYPE_CHECKINGAnyN)nodes)states)
StringList)	Transform)SmartQuotes)Config)BuildEnvironment)append_epilogprepend_prolog)Sphinxc                   @  s2   e Zd ZU dZded< ded< dddd	d
ZdS )Parsera;  
    A base class of source parsers.  The additional parsers should inherit this class instead
    of ``docutils.parsers.Parser``.  Compared with ``docutils.parsers.Parser``, this class
    improves accessibility to Sphinx APIs.

    The subclasses can access sphinx core runtime objects (app, config and env).
    r
   configr   envr   Noneappreturnc                 C  s   || _ |j| _|j| _dS )zset_application will be called from Sphinx to set app and other instance variables

        :param sphinx.application.Sphinx app: Sphinx application object
        N)Z_appr   r   )selfr    r   A/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/parsers.pyset_application&   s    zParser.set_applicationN)__name__
__module____qualname____doc____annotations__r   r   r   r   r   r      s   
	r   c                      sH   e Zd ZdZdd fddZdddd	d
dZdddddZ  ZS )	RSTParserzA reST parser for Sphinx.zlist[type[Transform]])r   c                   s   t   }|t |S )z
        Sphinx's reST parser replaces a transform class for smart-quotes by its own

        refs: sphinx.io.SphinxStandaloneReader
        )superget_transformsremover	   )r   Z
transforms	__class__r   r   r!   3   s    

zRSTParser.get_transformszstr | StringListznodes.documentr   )inputstringdocumentr   c                 C  s   |  || tj| j| j|jjd| _t|t	rTt
jj||jjdd}t||j}n|}| | | jj||| jd |   dS )z(Parse text and generate a document tree.)state_classesinitial_statedebugT)	tab_widthZconvert_whitespace)inlinerN)Zsetup_parser   ZRSTStateMachiner'   r(   reporterZ
debug_flagZstatemachine
isinstancestrdocutilsZstring2linessettingsr*   r   Zcurrent_sourcedecoraterunr+   Zfinish_parse)r   r%   r&   linesZ
inputlinesr   r   r   parse=   s"    
 
zRSTParser.parser   )contentr   c                 C  s    t || jj t|| jj dS )z'Preprocess reST content before parsing.N)r   r   Z
rst_prologr   Z
rst_epilog)r   r5   r   r   r   r1   S   s    zRSTParser.decorate)r   r   r   r   r!   r4   r1   __classcell__r   r   r#   r   r   0   s   
r   r   zdict[str, Any]r   c                 C  s   |  t ddddS )NbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zadd_source_parserr   )r   r   r   r   setupY   s
    
r9   )r   
__future__r   typingr   r   Zdocutils.parsersr/   Zdocutils.parsers.rstr   r   Zdocutils.statemachiner   Zdocutils.transformsr   Zdocutils.transforms.universalr	   Zsphinx.configr
   Zsphinx.environmentr   Zsphinx.util.rstr   r   Zsphinx.applicationr   parsersr   rstr   r9   r   r   r   r   <module>   s"   )