
    Ki                        d Z ddlmZ dZddlZddlmc mZ ddl	m
Z
mZmZmZ  G d dej                        Z G d d	ej                  ej                   ej"                        Zdd
ZddZddZy)zA Docutils-XML parser.

   Provisional:
     The API is not fixed yet.
     Defined objects may be renamed or changed
     in any Docutils release without prior notice.
    )annotationsreStructuredTextN)frontendnodesparsersutilsc                  0    e Zd ZdZdZ	 dZdZdddZd
dZy	)ParserzA Docutils-XML parser.)xmlzdocutils-xmlz
xml parser)r   FT)doctitle_xformvalidatec                    | j                  ||       t        ||      }t        |t        j                        s|j                  |       | j                          y)zg
        Parse `inputstring` and populate `document`, a "document tree".

        Provisional.
        N)setup_parseparse_element
isinstancer   documentappendfinish_parse)selfinputstringr   nodes       i/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docutils/parsers/docutils_xml.pyparsezParser.parse.   sF     	h/[(3$/OOD!    NreturnNone)	__name__
__module____qualname____doc__	supportedconfig_sectionconfig_section_dependenciessettings_default_overridesr    r   r   r
   r
   !   s+     'I'!N".49.2"$r   r
   c                  F    e Zd ZdZej
                  ej                  fdffZy)Unknownz+An unknown element found by the XML parser.*N)r   r   r    r!   r   ElementTextcontent_modelr&   r   r   r(   r(   =   s    5}}ejj1379Mr   r(   c                   d}t        j                  d      }t        | j                  d            D ]N  \  }}	 |j	                  |       |j                         D ]$  \  }}||}t        |dz         |j                  d<   & P t        ||      S # t         j                  $ rQ}| |j                  j                  d| d	|j                  j                  |j                  d
          Y d}~ kd}~ww xY w)aU  
    Parse `inputstring` as "Docutils XML", return `nodes.Element` instance.

    :inputstring: XML source.
    :document: `nodes.document` instance (default: a new dummy instance).
               Provides settings and reporter.
               Populated and returned, if the inputstring's root element
               is <document>.

    Caution:
      The function does not detect invalid XML.

      To check the validity of the returned node,
      you may use its `validate()` method::

        node = parse_element('<tip><hint>text</hint></tip>')
        node.validate()

    Provisional.
    N)start)eventsT)keepends   source linezXML parse error: .r   )sourceline)ETXMLPullParser	enumerate
splitlinesfeedread_eventsstrattrib
ParseErrorreportererrorsettings_sourcepositionelement2node)	r   r   rootparserir5   eventelementes	            r   r   r   B   s    * DZ0F[33T3BC 4	KK"("4"4"6 9w<"D03AaC}-9 h'' }} 	##&7s!$<+3+<+<+D+D)*A $ 8 	s   ABC5$AC00C5c                   |<t        j                  dt        j                  t                    }|j
                  dk(   | -t        j                  dd      }t        j                  dd|      S 	 t        t        | j                        }t        |t        j                        st        }|t        j                  k(  r,|}|j
                  xs |j                   j"                  |_        n |       }t%        | j'                  d            |_        t+        |t              r<| j                  |_        |j.                  j1                  d| j                   d|       | j3                         D ]B  \  }}|j5                  d      s|dk(  r	 t        j6                  |   |      |j8                  |<   D t+        |t        jB                        r||_!        n?t+        |t        jD                        r%|jG                  |d	jI                  |d
         |       |d   r|jK                  |       |xr0 t+        |t        jL                  t        jN                  t        f       }tQ        || jR                  |       | D ]5  }|jU                  tW        |||             tQ        ||jX                  |       7 |S # t        $ r
 t        }Y w xY w# t:        t<        f$ r1 ||j>                  v r|jA                         }||j8                  |<   Y w xY w)a  
    Convert an `etree` element and its children to Docutils doctree nodes.

    :element:  `xml.etree` element
    :document: see `parse_element()`
    :unindent: Remove formatting indentation of follow-up text lines?
               Cf. `append_text()`.
               TODO: do we need an "unindent" configuration setting?

    Return a `docutils.nodes.Element` instance.

    Internal.
    z	xml input zNo XML element found.r2   zUnknown element type <z>.)	base_node{ namesids)-r   new_documentr   get_default_settingsr
   r4   r   problematic	paragraphgetattrtag
issubclassr*   r(   AttributeErrorr   rA   rB   intgetr5   r   tagnamer?   warningitems
startswithATTRIBUTE_VALIDATORS
attributes
ValueErrorKeyErrorlist_attributessplit
decorationsubstitution_definitionnote_substitution_defjoinset_idFixedTextElementliteralappend_texttextr   rD   tail)	rI   r   unindentproblem	nodeclassr   keyvaluechilds	            r   rD   rD   j   s    %%k&.&C&CF&KM;&##B(?@r2w//E7;;/	)U]]3I ENN""//FX->->-F-F{GKK./DI$ {{!!$W[[M4 	" 	
 mmo )
U>>##"6	)#(#=#=c#B5#IDOOC 	) $(()"	D%77	8&&tSXXd7m-DhOE{
  K
%00%--I!K KH gllH- 0L(;<D%**h/0
 K_  	* H% 	)d***#(DOOC 	)s$   /:J- %K-K ?K <LLc                @   |sy |rt        j                  dd|      }t        | t        j                        r%| j                  t        j                  |             y |j                         r3| j                  t        j                  |j                                      y y )Nz
 +
)resubr   r   TextElementr   r+   strip)r   rn   rp   s      r   rm   rm      so     vvfdD)$))*EJJt$%	 	EJJtzz|,- 
r   )N)NTr   )r!   
__future__r   __docformat__rx   xml.etree.ElementTreeetreeElementTreer6   docutilsr   r   r   r   r
   SpecialInliner*   r(   r   rD   rm   r&   r   r   <module>r      sa    #" 	 " " 4 4W^^ 8:emmU\\5== :
%(PIX.r   