o
    Ni                     @  s   d Z ddlmZ ddl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mZ erVdd
lmZ ddlmZ ddlmZ ddlmZ d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ZdS )z$A Base class for additional parsers.    )annotations)TYPE_CHECKINGN)nodes)states)
StringList)SmartQuotes)append_epilogprepend_prolog)	Transform)Sphinx)Config)BuildEnvironment)ExtensionMetadatac                   @  s,   e Zd ZU dZded< de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   envappr   returnNonec                 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)_appr   r   )selfr    r   B/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/parsers.pyset_application(   s   zParser.set_applicationN)r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r      s
   
 	r   c                      s6   e Zd ZdZd fddZdddZdddZ  ZS )	RSTParserzA reST parser for Sphinx.r   list[type[Transform]]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   
transforms	__class__r   r   r"   5   s   

zRSTParser.get_transformsinputstringstr | StringListdocumentnodes.documentr   c                 C  s   |  || tj| j| j|jjd| _t|t	r*t
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_widthconvert_whitespace)inlinerN)setup_parser   RSTStateMachiner+   r,   reporter
debug_flagstatemachine
isinstancestrdocutilsstring2linessettingsr.   r   current_sourcedecoraterunr0   finish_parse)r   r'   r)   lines
inputlinesr   r   r   parse?   s"   

zRSTParser.parsecontentr   c                 C  s    t || jj t|| jj dS )z'Preprocess reST content before parsing.N)r	   r   
rst_prologr   
rst_epilog)r   rB   r   r   r   r<   X   s   zRSTParser.decorate)r   r    )r'   r(   r)   r*   r   r   )rB   r   r   r   )r   r   r   r   r"   rA   r<   __classcell__r   r   r%   r   r   2   s
    

r   r   r   r   r   c                 C  s   |  t ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_source_parserr   )r   r   r   r   setup^   s
   
rK   )r   r   r   r   ) r   
__future__r   typingr   docutils.parsersr8   docutils.parsers.rstr   r   docutils.statemachiner   docutils.transforms.universalr   sphinx.util.rstr   r	   docutils.transformsr
   sphinx.applicationr   sphinx.configr   sphinx.environmentr   sphinx.util.typingr   parsersr   rstr   rK   r   r   r   r   <module>   s&    ,