
    Qjfk                    J   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  G d dej6                  j8                        Z G d dej6                  j:                  j8                  e      ZddZy)z$A Base class for additional parsers.    )annotations)TYPE_CHECKINGN)nodes)states)
StringList)SmartQuotes)append_epilogprepend_prolog)	Transform)Sphinx)Config)BuildEnvironment)ExtensionMetadatac                  .    e Zd ZU dZded<   ded<   ddZy)	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   envc                V    || _         |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
        N)_appr   r   )selfapps     .lib/python3.12/site-packages/sphinx/parsers.pyset_applicationzParser.set_application(   s!    
 	jj77    N)r   r   returnNone)__name__
__module____qualname____doc____annotations__r    r   r   r   r      s     N 
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                N    t         |          }|j                  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__s     r   r'   zRSTParser.get_transforms5   s&     W+-
+&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   RSTStateMachiner,   r-   reporter
debug_flagstatemachine
isinstancestrdocutilsstring2linessettingsr/   r   current_sourcedecoraterunr1   finish_parse)r   inputstringdocumentlines
inputliness        r   parsezRSTParser.parse?   s    h/"22,,,,##..
 k3'))66x'8'8'B'BW[ 7 E $E8+B+BCJ$Jj!j(DLLIr   c                    t        || j                  j                         t        || j                  j                         y)z'Preprocess reST content before parsing.N)r
   r   
rst_prologr	   
rst_epilog)r   contents     r   r=   zRSTParser.decorateV   s*    w 6 67gt{{556r   )r   zlist[type[Transform]])r@   zstr | StringListrA   znodes.documentr   r   )rH   r   r   r   )r   r   r   r    r'   rD   r=   __classcell__)r*   s   @r   r$   r$   2   s    #.7r   r$   c                8    | j                  t               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_source_parserr$   )r   s    r   setuprP   \   s%    )$ "# r   )r   r   r   r   ) r    
__future__r   typingr   docutils.parsersr9   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$   rP   r"   r   r   <module>r_      ss    * "      ' , 5 9-)$34X$$ 2'7  $$++V '7Tr   