
    ~Ti%                    V   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r$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  G d dej:                  j<                        Z G d dej:                  j>                  j<                  e      Z ddZ!y)z$A Base class for additional parsers.    )annotations)TYPE_CHECKINGN)states)
StringList)SmartQuotes)_deprecation_warning)_append_epilogue_prepend_prologue)nodes)	Transform)Sphinx)Config)BuildEnvironment)ExtensionMetadatac                  R    e Zd ZU dZded<   ded<   ed
d       Zedd       ZddZy	)ParserzA base class for source parsers.

    Additional parsers should inherit from this class instead of
    ``docutils.parsers.Parser``.
    This class provides access to core Sphinx objects; *config* and *env*.
    r   _configr   _envc                    | j                   j                  }| j                   j                  }t        || dd       | j                  S )zThe config object.z.config
   r   remove)	__class__
__module____qualname__r   r   self
cls_modulecls_names      A/home/agent/.local/lib/python3.12/site-packages/sphinx/parsers.pyconfigzParser.config%   s?     ^^..
>>..ZH:W)=gN||    c                    | j                   j                  }| j                   j                  }t        || dd       | j                  S )zThe environment object.z.envr   r   )r   r   r   r   r   r   s      r!   envz
Parser.env-   s?     ^^..
>>..ZH:T):7Kyyr#   c                    | j                   j                  }| j                   j                  }t        || dd       |j                  | _        |j                  | _        y)zset_application will be called from Sphinx to set app and other instance variables

        :param sphinx.application.Sphinx app: Sphinx application object
        z.set_applicationr   r   N)r   r   r   r   r"   r   r%   r   )r   appr   r    s       r!   set_applicationzParser.set_application5   sL    
 ^^..
>>..ZH:5E)FwWzzGG	r#   N)returnr   )r)   r   )r'   r   r)   None)	__name__r   r   __doc____annotations__propertyr"   r%   r(    r#   r!   r   r      s?     O
   	r#   r   c                  4     e Zd ZdZd fdZddZddZ xZS )	RSTParserzA reST parser for Sphinx.c                f    t         t        t                        }|j                  t               |S )zSphinx's reST parser replaces a transform class for smart-quotes by its own

        refs: sphinx.io.SphinxStandaloneReader
        )superr1   get_transformsr   r   )r   
transformsr   s     r!   r4   zRSTParser.get_transformsD   s*    
 9ikAC
+&r#   c                   | j                  ||       t        j                  | j                  | j                  |j
                  j                        | _        t        |t              rMt        j                  j                  ||j                  j                  d      }t        ||j                        }n|}| j!                  |       | j                  j#                  ||| j$                         | j'                          y)z(Parse text and generate a document tree.)state_classesinitial_statedebugT)	tab_widthconvert_whitespace)inlinerN)setup_parser   RSTStateMachiner7   r8   reporter
debug_flagstatemachine
isinstancestrdocutilsstring2linessettingsr:   r   current_sourcedecoraterunr<   finish_parse)r   inputstringdocumentlines
inputliness        r!   parsezRSTParser.parseM   s    h/"22,,,,##..
 k3'))66"++55#' 7 E $E8+B+BCJ$Jj!j(DLLIr#   c                    t        || j                  j                         t        || j                  j                         y)z3Preprocess reStructuredText content before parsing.N)r
   r   
rst_prologr	   
rst_epilog)r   contents     r!   rH   zRSTParser.decoratef   s*    '4<<#:#:;$,,"9"9:r#   )r)   zlist[type[Transform]])rK   zstr | StringListrL   znodes.documentr)   r*   )rS   r   r)   r*   )r+   r   r   r,   r4   rO   rH   __classcell__)r   s   @r!   r1   r1   A   s    #2;r#   r1   c                8    | j                  t               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_source_parserr1   )r'   s    r!   setupr[   l   s%    )$ "# r#   )r'   r   r)   r   )"r,   
__future__r   typingr   docutils.parsersrD   docutils.parsers.rstr   docutils.statemachiner   docutils.transforms.universalr   sphinx.deprecationr   sphinx.util.rstr	   r
   r   docutils.transformsr   sphinx.applicationr   sphinx.configr   sphinx.environmentr   sphinx.util.typingr   parsersr   rstr1   r[   r/   r#   r!   <module>rk      sw    * "     ' , 5 3 ?-)$34$X$$ $N(;  $$++V (;Vr#   