
    d                        d Z ddlmZmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ej        Zej        Zej        Zej        j        Zej        j        Zej        j        Zej        j        Z ej                    Z ej        dd           ej        dd	           ej        dd
           ej        dd           ej        dd           ej        dd           ej        dd           ej        dd           ej        dd          d	Z G d de          Zd Zd Z G d d          ZeeefZ  G d de          Z! G d de          Z" G d de"          Z# G d de"          Z$d Z%d!e%z  Z& G d" d#e          Z' G d$ d%          Z( G d& d'e(e          Z) G d( d)e(e'          Z* G d* d+e+          Z, G d, d-e          Z-d4d/Z.d4d0Z/d4d1Z0d4d2Z1d3 Z2dS )5zFacility to use the Expat parser to load a minidom instance
from a string or file.

This avoids all the overhead of SAX and pulldom to gain performance.
    )
xmlbuilderminidomNode)EMPTY_NAMESPACEEMPTY_PREFIXXMLNS_NAMESPACE)expat)_append_child_set_attribute_node)
NodeFilterNcdataenumerationentityentitiesididrefidrefsnmtokennmtokens)	CDATAENUMENTITYENTITIESIDIDREFIDREFSNMTOKENNMTOKENSc                   J    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZdS )ElementInfo
_attr_info_modeltagNameNc                 0    || _         g | _        || _        d S N)r$   r"   r#   )selfr$   models      &  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/xml/dom/expatbuilder.py__init__zElementInfo.__init__?   s        c                 *    | j         | j        | j        fS r&   r!   r'   s    r)   __getstate__zElementInfo.__getstate__D   s    T\99r+   c                 0    |\  | _         | _        | _        d S r&   r!   )r'   states     r)   __setstate__zElementInfo.__setstate__G   s    5:2dlllr+   c                     | j         D ]F}|d         |k    r8|d         }|d         dk    rt          d         c S t          |d                  c S Gt          j        S )N   r   (r   )r"   _typeinfo_mapr   _no_type)r'   anameinfots       r)   getAttributeTypezElementInfo.getAttributeTypeJ   sn    O 	3 	3DAw%HQ43;;(0000(b2222   r+   c                     t           j        S r&   )r   r7   )r'   namespaceURI	localNames      r)   getAttributeTypeNSzElementInfo.getAttributeTypeNST   s    r+   c                 v    | j         r1| j         d         }|t          j        j        t          j        j        fvS dS Nr   F)r#   r	   r(   XML_CTYPE_ANYXML_CTYPE_MIXED)r'   types     r)   isElementContentzElementInfo.isElementContentW   s?    ; 	;q>D 9 % ; = = = 5r+   c                 T    | j         r | j         d         t          j        j        k    S dS rA   )r#   r	   r(   XML_CTYPE_EMPTYr-   s    r)   isEmptyzElementInfo.isEmpty_   s'    ; 	;q>U[%@@@5r+   c                 N    | j         D ]}|d         |k    r|d         dk    c S dS )Nr3   r4   r   F)r"   )r'   r8   r9   s      r)   isIdzElementInfo.isIde   sA    O 	( 	(DAw%Bx4''''  ur+   c                 0    |                      ||f          S r&   )rJ   )r'   eurienameaurir8   s        r)   isIdNSzElementInfo.isIdNSk   s    yy$'''r+   r&   )__name__
__module____qualname__	__slots__r*   r.   r1   r;   r?   rE   rH   rJ   rO    r+   r)   r    r    <   s        1I   
: : :; ; ;                ( ( ( ( (r+   r    c                 .    |                      ||          S r&   )_intern_setdefault)builderss     r)   _internrY   o   s    %%a+++r+   c                 p   d|v sJ |                     d          }| j        }t          |          dk    r2|\  }}} |||          }|d|} |||          } |||          }n@t          |          dk    r|\  }}t          } |||          x}}nt	          d|z             |||          |||fS )N    :   z4Unsupported syntax: spaces in URIs not supported: %r)splitrV   lenr   
ValueError)rW   namepartsinternuri	localnameprefixqnames           r)   _parse_ns_nameri   r   s    $;;;;JJsOOE'F
5zzQ!&Y''!6699-ue$$F9i00			UqY"F9i888		ORVVWWW6#sY55r+   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS ) ExpatBuilderzPDocument builder that uses Expat to build a ParsedXML.DOM document
    instance.Nc                     |t          j                    }|| _        | j        j        t	          | j        j                  | _        nd | _        t          | _        d | _        | 	                                 d S r&   )
r   Options_optionsfilterFilterVisibilityController_filterr   _finish_start_element_parserreset)r'   optionss     r)   r*   zExpatBuilder.__init__   sf    ? (**G=+5dm6JKKDLLDL *,D&

r+   c                 (    t          j                    S )zCreate a new parser object.)r	   ParserCreater-   s    r)   createParserzExpatBuilder.createParser   s    !###r+   c                     | j         sm|                                 | _         | j         j        j        | _        d| j         _        d| j         _        d| j         _        |                     | j                    | j         S )z7Return the parser object, creating a new one if needed.T)	rs   rx   rd   
setdefaultrV   buffer_textordered_attributesspecified_attributesinstallr-   s    r)   	getParserzExpatBuilder.getParser   si    | 	',,..DL&*l&9&DD#'+DL$.2DL+04DL-LL&&&|r+   c                     t                               t          dd          | _        | j        | _        | j        j        | _        d| _        dS )z6Free all data structures used during DOM construction.NF)theDOMImplementationcreateDocumentr   documentcurNode
_elem_info_cdatar-   s    r)   rt   zExpatBuilder.reset   s@    ,;;T4) )}-2r+   c                    | j         |_        | j        |_        | j        |_        | j        |_        | j        j	        r| j
        |_        | j        |_        | j        j        r| j        |_        | j        j        r%| j        |_        | j        |_        | j        |_        n| j        |_        | j        |_        | j        |_        | j        |_        | j        |_         dS )z>Install the callbacks needed to build the DOM into the parser.N)!start_doctype_decl_handlerStartDoctypeDeclHandlerfirst_element_handlerStartElementHandlerend_element_handlerEndElementHandler
pi_handlerProcessingInstructionHandlerrn   r   entity_decl_handlerEntityDeclHandlernotation_decl_handlerNotationDeclHandlercommentscomment_handlerCommentHandlercdata_sectionsstart_cdata_section_handlerStartCdataSectionHandlerend_cdata_section_handlerEndCdataSectionHandlercharacter_data_handler_cdataCharacterDataHandlercharacter_data_handlerexternal_entity_ref_handlerExternalEntityRefHandlerxml_decl_handlerXmlDeclHandlerelement_decl_handlerElementDeclHandlerattlist_decl_handlerAttlistDeclHandlerr'   parsers     r)   r~   zExpatBuilder.install   s     *.)H&%)%?"#'#; .2o+=! 	@'+'?F$%)%?"=! 	9$($8F!=' 	F.2.NF+,0,JF)*.*KF''*.*EF'*.*J' $ 5$($=!$($=!!!r+   c                 p   |                                  }d}	 	 |                    d          }|sn<|                    |d           |r!| j        j        r|                     |           d}T|                    dd           n# t          $ r Y nw xY w| j        }|                                  d| _        |S )zIParse a document from a file object, returning the document
        node.Tr3   i @  Fr+   N)	r   readParser   documentElement_setup_subsetParseEscapert   rs   )r'   filer   first_bufferbufferdocs         r)   	parseFilezExpatBuilder.parseFile   s     !!	%7++ VU+++ /DM$A /&&v...$% LLd#### 	 	 	D	m


s   A+B 
BBc                     |                                  }	 |                    |d           |                     |           n# t          $ r Y nw xY w| j        }|                                  d| _        |S )z<Parse a document from a string, returning the document node.TN)r   r   r   r   r   rt   rs   )r'   stringr   r   s       r)   parseStringzExpatBuilder.parseString   s    !!	LL&&&v&&&& 	 	 	D	m


s   +A 
AAc                     | j         j        rJt                      }|                    |           |                                }|| j         j        _        dS dS )z/Load the internal subset if there might be one.N)r   doctypeInternalSubsetExtractorr   	getSubsetinternalSubset)r'   r   	extractorsubsets       r)   r   zExpatBuilder._setup_subset   s\    =  	:/11I!!&)))((**F39DM!000		: 	:r+   c                    | j         j                            |||          }| j         |_        t	          | j         |           || j         _        | j        rV| j                            |          t          k    r3d | j         _        | j         j	        d= d }d | j
        _        d | j
        _        |rE|g |j        _        g |j        _        d | j
        _        d | j
        _        | j        | j
        _        d S d S N)r   implementationcreateDocumentTypeownerDocumentr
   r   rq   
acceptNodeFILTER_REJECT
childNodesrs   r   r   r   _seq	notationsr   r   end_doctype_decl_handlerEndDoctypeDeclHandler)r'   doctypeNamesystemIdpublicIdhas_internal_subsetr   s         r)   r   z'ExpatBuilder.start_doctype_decl_handler   s    -.AA8- - $dmW--- '< 	4DL33G<<MM$(DM!(,G-1DL*/3DL, 	O"(* %)+!&*.DL'8<DL5151NDL...	O 	Or+   c                     | j         j        r| j        | j        _        | j        | j        _        | j        s| j        st          | _
        d S d S d S r&   )rn   r   r   rs   r   r   r   r   rq   r   _finish_end_elementr-   s    r)   r   z%ExpatBuilder.end_doctype_decl_handler  s]    =! 	?*.*>DL'48O1 	*4< 	*')D$$$	* 	* 	* 	*r+   c                     | j                             ||          }t          | j        |           | j        r?| j                            |          t          k    r| j                            |           d S d S d S r&   )r   createProcessingInstructionr
   r   rq   r   r   removeChild)r'   targetdatanodes       r)   r   zExpatBuilder.pi_handler  s{    }88FFdlD)))< 	+DL33D99]JJL$$T*****	+ 	+JJr+   c                    | j         j        }| j        r\| j        r3|d         j        t
          k    r|d                             |           d S | j                            |          }d| _        nY|r1|d         j        t          k    r|d         }|j
        |z   }||_
        d S t          j                    }||_
        | j        |_        t          | j         |           d S )Nr   T)r   r   r   _cdata_continuenodeTypeCDATA_SECTION_NODE
appendDatar   createCDATASection	TEXT_NODEr   r   Textr   r
   )r'   r   r   r   values        r)   r   z)ExpatBuilder.character_data_handler_cdata  s    \,
; 	/&  n-1CCC2))$///=33D99D#'D   	/JrN3y@@b>DI$EDIF<>>DDI!%DdlD)))))r+   c                    | j         j        }|r/|d         j        t          k    r|d         }|j        |z   |_        d S t          j                    }|j        |z   |_        | j        |_        t          | j         |           d S r   )
r   r   r   r   r   r   r   r   r   r
   )r'   r   r   r   s       r)   r   z#ExpatBuilder.character_data_handler&  s|    \,
 	*R.1Y>>b>D	D(DIF|~~I$	!]dlD)))))r+   c                    |rd S | j         j        sd S | j                            ||||          }|4| j                            |          }	|j                            |	           | j        j        j        j                            |           | j	        r<| j	        
                    |          t          k    r| j        j        j        j        d= d S d S d S r   )rn   r   r   _create_entitycreateTextNoder   appendr   r   rq   r   r   )
r'   
entityNameis_parameter_entityr   baser   r   notationNamer   childs
             r)   r   z ExpatBuilder.entity_decl_handler1  s     	F}% 	F}++J,4lD D M0077EO""5)))&+224888< 	8DL33D99]JJ%.3B777	8 	8JJr+   c                    | j                             |||          }| j         j        j        j                            |           | j        r<| j                            |          t          k    r| j         j        j        j        d= d S d S d S r   )	r   _create_notationr   r   r   r   rq   r   FILTER_ACCEPT)r'   r   r   r   r   r   s         r)   r   z"ExpatBuilder.notation_decl_handlerC  s    }--lHhOO',33D999< 	9DL33D99]JJ%/4R888	9 	9JJr+   c                     | j                             |          }t          | j        |           | j        r?| j                            |          t          k    r| j                            |           d S d S d S r&   )r   createCommentr
   r   rq   r   r   r   )r'   r   r   s      r)   r   zExpatBuilder.comment_handlerI  sy    }**400dlD)))< 	+DL33D99]JJL$$T*****	+ 	+JJr+   c                 "    d| _         d| _        d S )NTFr   r   r-   s    r)   r   z(ExpatBuilder.start_cdata_section_handlerO  s    $r+   c                 "    d| _         d| _        d S )NFr   r-   s    r)   r   z&ExpatBuilder.end_cdata_section_handlerS  s    $r+   c                     dS Nr3   rT   )r'   contextr   r   r   s        r)   r   z(ExpatBuilder.external_entity_ref_handlerW  s    qr+   c                     | j         | j        st          | _        | j        |                                 _        |                     ||           d S r&   )rq   r   r   r   start_element_handlerr   r   )r'   rb   
attributess      r)   r   z"ExpatBuilder.first_element_handlerZ  sJ    <')D$/3/I,""444444r+   c                    | j                             |          }t          | j        |           || _        |rvt	          dt          |          d          D ]W}t          j        ||         t          d t                    }||dz            }||_
        | j         |_        t          ||           X|| j         j        ur|                     |           d S d S )Nr   r^   r3   )r   createElementr
   r   ranger`   r   Attrr   r   r   r   r   r   rr   )r'   rb   r   r   iar   s          r)   r   z"ExpatBuilder.start_element_handler`  s    }**400dlD))) 	-1c*ooq11 - -LA!%|5 5"1Q3"&-#D!,,,,t}444&&t,,,,, 54r+   c                 P   | j         r|| j        j        u rd S | j                             |          }|t          k    rt          |            n|t          k    rt          |            nd S |j        | _	        |j        
                    |           |                                 d S d S r&   )rq   r   r   startContainerr   RejecterFILTER_SKIPSkipper
parentNoder   r   unlink)r'   r   filts      r)   rr   z"ExpatBuilder._finish_start_elementq  s    < 	 t}444<..t44D}$$$$ ?DLO''---KKMMMMM#	 	r+   c                 V    | j         }|j        | _         |                     |           d S r&   )r   r  r   )r'   rb   r   s      r)   r   z ExpatBuilder.end_element_handler  s-    ,)  )))))r+   c                 L   | j                             |j                  }|r|                     ||           | j        rc|| j        j        u rd S | j                            |          t          k    r2| j	        
                    |           |                                 d S d S d S r&   )r   getr$   _handle_white_text_nodesrq   r   r   r   r   r   r   r  )r'   r   r9   s      r)   r   z ExpatBuilder._finish_end_element  s    ""7?33 	9))'4888< 	!$-777|&&w//=@@((111     	! 	! A@r+   c                    | j         j        s|                                sd S g }|j        D ]@}|j        t
          k    r.|j                                        s|                    |           A|D ]}|	                    |           d S r&   )
rn   whitespace_in_element_contentrE   r   r   r   r   stripr   r   )r'   r   r9   Lr   s        r)   r	  z%ExpatBuilder._handle_white_text_nodes  s    M7 	((**	F
 _ 	  	 E~**5:3C3C3E3E*  	$ 	$EU####	$ 	$r+   c                     | j                             |          }|t          ||          | j         |<   d S |j        J ||_        d S r&   )r   r  r    r#   )r'   rb   r(   r9   s       r)   r   z!ExpatBuilder.element_decl_handler  sQ    ""4((<$/e$<$<DOD!!!;&&&DKKKr+   c           
          | j                             |          }|t          |          }|| j         |<   |j                            d |d d |d||g           d S Nr   )r   r  r    r"   r   )r'   elemrb   rD   defaultrequiredr9   s          r)   r   z!ExpatBuilder.attlist_decl_handler  sr    ""4((<t$$D$(DOD!4tWax@	B 	B 	B 	B 	Br+   c                 ~    || j         _        || j         _        |dk    r|rd| j         _        d S d| j         _        d S d S )Nr   TF)r   versionencoding
standalone)r'   r  r  r  s       r)   r   zExpatBuilder.xml_decl_handler  sN     '!)?? 1+/(((+0(((	 ?r+   r&   ) rP   rQ   rR   __doc__r*   rx   r   rt   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r	  r   r   r   rT   r+   r)   rk   rk      s           $ $ $	 	 	  > > >.  ,  : : :O O O** * *+ + +* * *(	* 	* 	*8 8 8$9 9 9+ + +% % %% % %  5 5 5- - -"  .* * *
	! 	! 	!$ $ $"     B B B1 1 1 1 1r+   rk   c                   L   e Zd ZdZdZd Zd Zd Zej	        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej        e
j        ej         e
j!        iZ"dS )rp   zoWrapper around a DOMBuilderFilter which implements the checks
    to make the whatToShow filter attribute work.ro   c                     || _         d S r&   r  )r'   ro   s     r)   r*   z#FilterVisibilityController.__init__  s    r+   c                     | j         |j                 }| j        j        |z  rV| j                            |          }|t
          k    rt          |t          vrt          dt          |          z             |S t          S )Nz)startContainer() returned illegal value: )_nodetype_maskr   ro   
whatToShowr   FILTER_INTERRUPTr   _ALLOWED_FILTER_RETURNSra   reprr   )r'   r   maskvals       r)   r   z)FilterVisibilityController.startContainer  s    "4=1;!D( 		!+,,T22C&&&!!111 ADIIMO O OJ  r+   c                 ~   | j         |j                 }| j        j        |z  r| j                            |          }|t
          k    rt          |t          k    r5|j        }|j	        d d          D ]}|
                    |           t          S |t          vrt          dt          |          z             |S t          S )Nz%acceptNode() returned illegal value: )r  r   ro   r  r   r  r   r  r  r   appendChildr   r   ra   r!  r   )r'   r   r"  r#  parentr   s         r)   r   z%FilterVisibilityController.acceptNode  s    "4=1;!D( 	!+((..C&&&!!k!!!_QQQ/ . .E&&u----$$111 =S		IK K KJ  r+   N)#rP   rQ   rR   r  rS   r*   r   r   r   ELEMENT_NODEr   SHOW_ELEMENTATTRIBUTE_NODESHOW_ATTRIBUTEr   	SHOW_TEXTr   SHOW_CDATA_SECTIONENTITY_REFERENCE_NODESHOW_ENTITY_REFERENCEENTITY_NODESHOW_ENTITYPROCESSING_INSTRUCTION_NODESHOW_PROCESSING_INSTRUCTIONCOMMENT_NODESHOW_COMMENTDOCUMENT_NODESHOW_DOCUMENTDOCUMENT_TYPE_NODESHOW_DOCUMENT_TYPEDOCUMENT_FRAGMENT_NODESHOW_DOCUMENT_FRAGMENTNOTATION_NODESHOW_NOTATIONr  rT   r+   r)   rp   rp     s        5 5 I  ! ! !! ! !* 	**A**C**>**G"**J**@(**P**A**B**G#**K**B
NNNr+   rp   c                       e Zd ZdZd ZdS )FilterCrutch)_builder_level
_old_start_old_endc                     d| _         || _        |j        }|j        | _        |j        | _        | j        |_        | j        |_        d S r  )	r@  r?  rs   r   rA  r   rB  r   r   )r'   rW   r   s      r)   r*   zFilterCrutch.__init__  sG     40%)%?"#'#;   r+   N)rP   rQ   rR   rS   r*   rT   r+   r)   r>  r>    s(        >I< < < < <r+   r>  c                   $    e Zd ZdZd Zd Zd ZdS )r   rT   c                 v    t                               | |           |j        }dD ]}t          ||d            d S )N)r   r   r   r   r   r   )r>  r*   rs   setattr)r'   rW   r   rb   s       r)   r*   zRejecter.__init__  sQ    dG,,, 	( 	(D FD$''''	( 	(r+   c                 $    | j         dz   | _         d S r   )r@  r'   argss     r)   r   zRejecter.start_element_handler  s    kAor+   c                     | j         dk    r@| j        j        }| j                            |           | j        |_        | j        |_        d S | j         dz
  | _         d S Nr   r3   )r@  r?  rs   r~   rA  r   rB  r   )r'   rI  r   s      r)   r   zRejecter.end_element_handler   sZ    ;!]*FM!!&))))-F&'+}F$$$+/DKKKr+   N)rP   rQ   rR   rS   r*   r   r   rT   r+   r)   r   r     sF        I
( 
( 
(& & &* * * * *r+   r   c                       e Zd ZdZd Zd ZdS )r  rT   c                 p    | j         j        } | j        |  | j         j        |ur| j        dz   | _        d S d S r   )r?  r   rA  r@  )r'   rI  r   s      r)   r   zSkipper.start_element_handler-  sD    }$= ,,+/DKKK -,r+   c                     | j         dk    r5| j        | j        j        _        | j        | j        j        _        d | _        d S | j         dz
  | _          | j        |  d S rK  )r@  rA  r?  rs   r   rB  r   rH  s     r)   r   zSkipper.end_element_handler3  s\    ;! 9=DM!56:mDM!3 DMMM+/DKDM4    r+   N)rP   rQ   rR   rS   r   r   rT   r+   r)   r  r  *  s7        I* * *	! 	! 	! 	! 	!r+   r  z8http://xml.python.org/entities/fragment-builder/internalz<!DOCTYPE wrapper
  %%s [
  <!ENTITY fragment-builder-internal
    SYSTEM "%s">
%%s
]>
<wrapper %%s
>&fragment-builder-internal;</wrapper>c                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )FragmentBuilderzBuilder which constructs document fragments given XML source
    text and a context node.

    The context node is expected to provide information about the
    namespace declarations which are in scope at the start of the
    fragment.
    Nc                     |j         t          k    r|| _        || _        n|j        | _        || _        t
                              | |           d S r&   )r   r5  originalDocumentr   r   rk   r*   )r'   r   ru   s      r)   r*   zFragmentBuilder.__init__[  sO    },,$+D!"DLL$+$9D!"DLdG,,,,,r+   c                 H    t                               |            d | _        d S r&   )rk   rt   fragmentr-   s    r)   rt   zFragmentBuilder.resetd  s!    4   r+   c                 P    |                      |                                          S )zRParse a document fragment from a file object, returning the
        fragment node.)r   r   r'   r   s     r)   r   zFragmentBuilder.parseFileh  s      		,,,r+   c                    || _         |                                 }| j        j        }d}|rH|j        p|                                 }|j        rd|j        d|j        d}n|j        r
d|j        z  }nd}|                                 }t          |||fz  }	 |
                    |d           n#  |                                   xY w| j        }|                                  |S )zMParse a document fragment from a string, returning the
        fragment node. zPUBLIC "z" ""zSYSTEM "%s"T)_sourcer   rR  r   r   _getDeclarationsr   r   _getNSattrs_FRAGMENT_BUILDER_TEMPLATEr   rt   rT  )	r'   r   r   r   identr   nsattrsr   rT  s	            r)   r   zFragmentBuilder.parseStringm  s
    !!'/ 	+Ft/D/D/F/FF 9 9#,,,g.>.>.>@! 9%(88F""$$-0HH	LL4((((	JJLLL=

s   B/ /Cc                 b   | j         j        j        }d}|rt          |j        j                  D ]Y}|j                            |          }|r|dz   }|d|j        }|j        r|d|j        d|j	        d}L|d|j	        d}Zt          |j
        j                  D ]}|j
                            |          }|r|dz   }|d|j        }|j        r|d|j        d|j	        d	}n'|j	        r|d|j	        d	}n|d
|j        j        d	}|j        r|d|j        }|dz   }|S )zRe-create the internal subset from the DocumentType node.

        This is only needed if we don't already have the
        internalSubset as a string.
        rX  z
  z<!NOTATION z	 PUBLIC "z"
             "z">z	 SYSTEM "z	<!ENTITY rY  z "z
 NOTATION >)r   r   r   r   r   lengthitemnodeNamer   r   r   
firstChildr   r   )r'   r   rX   r   notationr   s         r)   r[  z FragmentBuilder._getDeclarations  s    ,,4 	7,344 	C 	C",11!44 #F
A)*H,=,=>$ C11h///1B1B1BDAA ./QQ0A0A0ABAA7+233   )..q11 #F
A'(qq&//:? @11fooov@AA_ @,-AAv?AA%&QQ(9(>(>(>?A& D,-AAv/B/BCAGr+   c                     dS )NrX  rT   r-   s    r)   r\  zFragmentBuilder._getNSattrs  s    rr+   c                    |t           k    r| j        }| j        }| j                            |          }| j        | _        | j                                        | _        | j        | _        	 |                    | j	        d           || _        || _        d | _	        n# || _        || _        d | _	        w xY wdS t                              | ||||          S )NTr   )$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDr   r   rs   ExternalEntityParserCreaterR  createDocumentFragmentrT  r   rZ  rk   r   )r'   r   r   r   r   old_documentold_cur_noder   s           r)   r   z+FragmentBuilder.external_entity_ref_handler  s    ;;;  =L<L\<<WEEF 1DM M@@BBDM=DL$T\4000+ ,#  , ,#####2;;gtXx9 9 9s   +B B3r&   )rP   rQ   rR   r  r*   rt   r   r   r[  r\  r   rT   r+   r)   rP  rP  R  s         - - - -  - - -
  8" " "H  9 9 9 9 9r+   rP  c                   8    e Zd ZdZd Zd Zd Zd Zd Z	 d Z	d	S )

Namespacesz7Mix-in class for builders; adds support for namespaces.c                     g | _         d S r&   )_ns_ordered_prefixesr-   s    r)   _initNamespaceszNamespaces._initNamespaces  s     %'!!!r+   c                 >    t          j        d          }d|_        |S )z'Create a new namespace-handling parser.r[   )namespace_separatorT)r	   rw   namespace_prefixesr   s     r)   rx   zNamespaces.createParser  s"    #<<<$(!r+   c                 p    t                               | |           | j        j        r| j        |_        dS dS )z.Insert the namespace-handlers onto the parser.N)rk   r~   rn   namespace_declarationsstart_namespace_decl_handlerStartNamespaceDeclHandlerr   s     r)   r~   zNamespaces.install  sC    T6***=/ 	31 ,,,	3 	3r+   c                 >    | j                             ||f           dS )z/Push this namespace declaration on our storage.N)rq  r   )r'   rg   re   s      r)   rx  z'Namespaces.start_namespace_decl_handler  s#    !((&#77777r+   c                    d|v rt          | |          \  }}}}nt          }|}d }t          }t          j        ||||          }| j        |_        t          | j        |           || _        | j	        r| j	        D ]y\  }}|r.t          j
        t          | d|z             t          |d          }n!t          j
        dt          dt                    }||_        | j        |_        t          ||           z| j	        d d = |r|                                 |j        }	|j        }
t%          dt'          |          d          D ]}||         }||dz            }d|v r9t          | |          \  }}}}t          j
        ||||          }||	|<   ||
||f<   n2t          j
        |t          |t                    }||	|<   ||
t          |f<   | j        |_        ||_        ||_        d S d S )Nr[   xmlns:xmlnsr   r^   r3   )ri   r   r   r   Elementr   r   r
   r   rq  r   rY   r   r   r   _ensure_attributes_attrs_attrsNSr   r`   ownerElement)r'   rb   r   re   rf   rg   rh   r   r   r  r  r   r8   r   s                 r)   r   z Namespaces.start_element_handler  s$   $;;,:4,F,F)CFEE!CEI!Fuc69==!]dlD)))$ 	-#8 	- 	- <WT8f3D%E%E%4fgG GAA  Wo%,l< <A"&-#D!,,,,)!!!, 	&##%%%[F}H1c*ooq11 & &"1"1Q3%<<4B44O4O1CFEUCFCCA$%F5M12Hc9-..UO%*L: :A$%F5M9:Hou56"&-!%'	& 	&& &r+   Tc                 >   | j         }d|v rAt          | |          \  }}}}|j        |k    r|j        |k    r|j        |k    s
J d            n/|j        |k    s
J d            |j        t          k    s
J d            |j        | _         |                     |           d S )Nr[   z$element stack messed up! (namespace)z&element stack messed up - bad nodeNamez*element stack messed up - bad namespaceURI)	r   ri   r=   r>   rg   rd  r   r  r   )r'   rb   r   re   rf   rg   rh   s          r)   r   zNamespaces.end_element_handler  s    lGd{{0>tT0J0J-Y,33#-::#Nf444> 5444 '4///? 0//+>>>C ?>>"-DL$$W-----r+   N)
rP   rQ   rR   r  rr  rx   r~   rx  r   r   rT   r+   r)   ro  ro    sz        AA' ' '
  3 3 38 8 8-& -& -&^.	. 	. 	. 	. 	.r+   ro  c                       e Zd ZdZd ZdS )ExpatBuilderNSz*Document builder that supports namespaces.c                 b    t                               |            |                                  d S r&   )rk   rt   rr  r-   s    r)   rt   zExpatBuilderNS.reset)  s.    4   r+   N)rP   rQ   rR   r  rt   rT   r+   r)   r  r  &  s)        44    r+   r  c                       e Zd ZdZd Zd ZdS )FragmentBuilderNSz*Fragment builder that supports namespaces.c                 b    t                               |            |                                  d S r&   )rP  rt   rr  r-   s    r)   rt   zFragmentBuilderNS.reset1  s.    d###r+   c                    d}| j         }g }|rst          |d          rZ|j                                        D ]@\  }}||v r
|                    |           |rd|z   }nd}|r|d|d|d}7d|d|d}A|j        }|s|S )	zNReturn string of namespace attributes from this element and
        ancestors.rX  _ns_prefix_urir|  r}  z
    z=''r[   )r   hasattrr  itemsr   r  )r'   attrsr   r  rg   re   declnames          r)   r\  zFragmentBuilderNS._getNSattrs5  s     , 	)w 011 =#*#9#?#?#A#A = =KFC{{ HHV$$$ +#+f#4#* =5:UUHHHccc J= /7hh <(G  	)  r+   N)rP   rQ   rR   r  rt   r\  rT   r+   r)   r  r  .  s8        44      r+   r  c                       e Zd ZdZdS )r   zEException raised to short-circuit parsing in InternalSubsetExtractor.N)rP   rQ   rR   r  rT   r+   r)   r   r   S  s        OODr+   r   c                   @    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 ZdS )
r   zBXML processor which can rip out the internal document type subset.Nc                     | j         S )z'Return the internal subset as a string.)r   r-   s    r)   r   z!InternalSubsetExtractor.getSubset\  s
    {r+   c                 `    	 t                               | |           d S # t          $ r Y d S w xY wr&   )rk   r   r   rV  s     r)   r   z!InternalSubsetExtractor.parseFile`  sE    	""4..... 	 	 	DD	    
--c                 `    	 t                               | |           d S # t          $ r Y d S w xY wr&   )rk   r   r   )r'   r   s     r)   r   z#InternalSubsetExtractor.parseStringf  sE    	$$T622222 	 	 	DD	r  c                 6    | j         |_        | j        |_        d S r&   )r   r   r   r   r   s     r)   r~   zInternalSubsetExtractor.installl  s    )-)H&%)%?"""r+   c                     |r:|                                  }g | _        | j        j        |_        | j        |_        d S t                      r&   )r   r   r   DefaultHandlerr   r   r   )r'   rb   r   r   r   r   s         r)   r   z2InternalSubsetExtractor.start_doctype_decl_handlerp  sH     	 ^^%%FDK$(K$6F!+/+HF(((--r+   c                     d                     | j                                      dd                              dd          }|| _        t                      )NrX  z

)joinr   replacer   )r'   rX   s     r)   r   z0InternalSubsetExtractor.end_doctype_decl_handlerz  sF    GGDK  ((66>>tTJJmmr+   c                     t                      r&   )r   )r'   rb   r  s      r)   r   z-InternalSubsetExtractor.start_element_handler  s    mmr+   )rP   rQ   rR   r  r   r   r   r   r~   r   r   r   rT   r+   r)   r   r   W  s        LLF      @ @ @       
    r+   r   Tc                    |rt                      }nt                      }t          | t                    r>t	          | d          5 }|                    |          }ddd           n# 1 swxY w Y   n|                    |           }|S )z{Parse a document, returning the resulting Document node.

    'file' may be either a file name or an open file object.
    rbN)r  rk   
isinstancestropenr   )r   
namespacesrW   fpresults        r)   parser    s    
  ! ""..$ )$ 	+&&r**F	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ""4((Ms   A''A+.A+c                 j    |rt                      }nt                      }|                    |           S )zOParse a document from a string, returning the resulting
    Document node.
    )r  rk   r   )r   r  rW   s      r)   r   r     s6      ! ""..v&&&r+   c                    |rt          |          }nt          |          }t          | t                    r>t	          | d          5 }|                    |          }ddd           n# 1 swxY w Y   n|                    |           }|S )zParse a fragment of a document, given the context from which it
    was originally extracted.  context should be the parent of the
    node(s) which are in the fragment.

    'file' may be either a file name or an open file object.
    r  N)r  rP  r  r  r  r   )r   r   r  rW   r  r  s         r)   parseFragmentr    s      +#G,,!'**$ )$ 	+&&r**F	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ""4((Ms   A))A-0A-c                 n    |rt          |          }nt          |          }|                    |           S )zParse a fragment of a document from a string, given the context
    from which it was originally extracted.  context should be the
    parent of the node(s) which are in the fragment.
    )r  rP  r   )r   r   r  rW   s       r)   parseFragmentStringr    s<    
  +#G,,!'**v&&&r+   c                 L    | j         rt          |           S t          |           S )z,Create a builder based on an Options object.)r  r  rk   )ru   s    r)   makeBuilderr    s)     %g&&&G$$$r+   )T)3r  xml.domr   r   r   r   r   r   xml.parsersr	   xml.dom.minidomr
   r   xml.dom.NodeFilterr   r   r   r5  DOMBuilderFilterr   r   r  r  getDOMImplementationr   TypeInfor6   objectr    rY   ri   rk   r   rp   r>  r   r  ri  r]  rP  ro  r  r  	Exceptionr   r   r  r   r  r  r  rT   r+   r)   <module>r     sZ   : . - - - - - - - - - B B B B B B B B B B       > > > > > > > > ) ) ) ) ) )N	, "+9+9)5.? 3w355  ! w//  }55  x00  z22  t,,  w//  x00  y11  z22
 
1( 1( 1( 1( 1(& 1( 1( 1(f, , ,6 6 6&|1 |1 |1 |1 |1 |1 |1 |1B
 )-E 7
 7
 7
 7
 7
 7
 7
 7
t
< 
< 
< 
< 
<6 
< 
< 
<* * * * *| * * *8! ! ! ! !l ! ! !2 ? %* +	+ r9 r9 r9 r9 r9l r9 r9 r9j\. \. \. \. \. \. \. \.~    Z   " " " " "
O " " "J	 	 	 	 	) 	 	 	) ) ) ) )l ) ) )X   $' ' ' '   (	' 	' 	' 	'% % % % %r+   