
    F\hm                        S r SSKJrJrJr  SSKJrJrJr  SSKJ	r	  SSK
JrJr  SSKJr  \R                  r\R                   r\R"                  r\R$                  R&                  r\R$                  R(                  r\R$                  R*                  r\R$                  R,                  r\R.                  " 5       r\R2                  " SS5      \R2                  " SS	5      \R2                  " SS
5      \R2                  " SS5      \R2                  " SS5      \R2                  " SS5      \R2                  " SS5      \R2                  " SS5      \R2                  " SS5      S.	r " S S\5      rS rS r " S S5      r\\\4r  " S S\5      r! " S S\5      r" " S S\"5      r# " S S\"5      r$S r%S!\%-  r& " S" S#\5      r' " S$ S%5      r( " S& S'\(\5      r) " S( S)\(\'5      r* " S* S+\+5      r, " S, S-\5      r-S3S. jr.S3S/ jr/S3S0 jr0S3S1 jr1S2 r2g)4zFacility 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                   R    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)ElementInfo<   
_attr_info_modeltagNameNc                 *    Xl         / U l        X l        g N)r%   r#   r$   )selfr%   models      +/usr/lib/python3.13/xml/dom/expatbuilder.py__init__ElementInfo.__init__?   s        c                 H    U R                   U R                  U R                  4$ r'   r"   r(   s    r*   __getstate__ElementInfo.__getstate__D   s    T\\99r-   c                 .    Uu  U l         U l        U l        g r'   r"   )r(   states     r*   __setstate__ElementInfo.__setstate__G   s    5:2dlr-   c                     U R                    H3  nUS   U:X  d  M  US   nUS   S:X  a  [        S   s  $ [        US      s  $    [        R                  $ )N   r   (r   )r#   _typeinfo_mapr   _no_type)r(   anameinfots       r*   getAttributeTypeElementInfo.getAttributeTypeJ   sX    OODAw%HQ43;(00(b22 $ r-   c                 "    [         R                  $ r'   )r   r;   )r(   namespaceURI	localNames      r*   getAttributeTypeNSElementInfo.getAttributeTypeNST   s    r-   c                     U R                   (       aF  U R                   S   nU[        R                  R                  [        R                  R                  4;  $ gNr   F)r$   r	   r)   XML_CTYPE_ANYXML_CTYPE_MIXED)r(   types     r*   isElementContentElementInfo.isElementContentW   sF    ;;;;q>D 9 9 % ; ; = = = r-   c                 z    U R                   (       a*  U R                   S   [        R                  R                  :H  $ grG   )r$   r	   r)   XML_CTYPE_EMPTYr/   s    r*   isEmptyElementInfo.isEmpty_   s)    ;;;;q>U[[%@%@@@r-   c                 P    U R                    H  nUS   U:X  d  M  US   S:H  s  $    g)Nr7   r8   r   F)r#   )r(   r<   r=   s      r*   isIdElementInfo.isIde   s0    OODAw%Bx4'' $ r-   c                 &    U R                  X445      $ r'   )rR   )r(   eurienameaurir<   s        r*   isIdNSElementInfo.isIdNSk   s    yy$''r-   r'   )__name__
__module____qualname____firstlineno__	__slots__r+   r0   r4   r?   rD   rK   rO   rR   rX   __static_attributes__ r-   r*   r    r    <   s4    1I
:;  (r-   r    c                 $    U R                  X5      $ r'   )_intern_setdefault)builderss     r*   _internre   o   s    %%a++r-   c                 0   SU;   d   eUR                  S5      nU R                  n[        U5      S:X  a'  Uu  pEnU" Xf5      nU< SU< 3nU" Xw5      nU" XU5      nO1[        U5      S:X  a  Uu  pE[        nU" XU5      =puO[	        SU-  5      eU" XD5      XVU4$ )N    :   z4Unsupported syntax: spaces in URIs not supported: %r)splitrb   lenr   
ValueError)rc   namepartsinternuri	localnameprefixqnames           r*   _parse_ns_nameru   r   s    $;;JJsOE''F
5zQ!&'!9-u$90		Uq"988	ORVVWW#Y55r-   c                       \ rS rSrSrS!S jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!g)"ExpatBuilder   zLDocument builder that uses Expat to build a ParsedXML.DOM document
instance.Nc                 
   Uc  [         R                  " 5       nXl        U R                  R                  b%  [	        U R                  R                  5      U l        OS U l        [        U l        S U l        U R                  5         g r'   )
r   Options_optionsfilterFilterVisibilityController_filterr   _finish_start_element_parserreset)r(   optionss     r*   r+   ExpatBuilder.__init__   sa    ? ((*G==+5dmm6J6JKDLDL *,D&

r-   c                 ,    [         R                  " 5       $ )zCreate a new parser object.)r	   ParserCreater/   s    r*   createParserExpatBuilder.createParser   s    !!##r-   c                 L   U R                   (       d  U R                  5       U l         U R                   R                  R                  U l        SU R                   l        SU R                   l        SU R                   l        U R                  U R                   5        U R                   $ )z7Return the parser object, creating a new one if needed.T)	r   r   rp   
setdefaultrb   buffer_textordered_attributesspecified_attributesinstallr/   s    r*   	getParserExpatBuilder.getParser   so    ||,,.DL&*ll&9&9&D&DD#'+DLL$.2DLL+04DLL-LL&||r-   c                     [         R                  [        SS5      U l        U R                  U l        U R                  R
                  U l        SU l        g)z6Free all data structures used during DOM construction.NF)theDOMImplementationcreateDocumentr   documentcurNode
_elem_info_cdatar/   s    r*   r   ExpatBuilder.reset   s>    ,;;T4)}}--22r-   c                    U R                   Ul        U R                  Ul        U R                  Ul        U R                  Ul        U R                  R                  (       a  U R                  Ul        U R                  Ul        U R                  R                  (       a  U R                  Ul        U R                  R"                  (       a4  U R$                  Ul        U R(                  Ul        U R,                  Ul        OU R0                  Ul        U R2                  Ul        U R6                  Ul        U R:                  Ul        U R>                  Ul         g)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ProcessingInstructionHandlerr{   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   ExpatBuilder.install   s     *.)H)H&%)%?%?"#'#;#; .2oo+==!!'+'?'?F$%)%?%?"==!!$($8$8F!==''.2.N.NF+,0,J,JF)*.*K*KF'*.*E*EF'*.*J*J' $ 5 5$($=$=!$($=$=!r-   c                    U R                  5       nSn UR                  S5      =n(       aa  UR                  US5        U(       a,  U R                  R                  (       a  U R                  U5        SnUR                  S5      =n(       a  Ma  UR                  SS5        U R                  nU R                  5         SU l        U$ ! [         a     N1f = f)zAParse a document from a file object, returning the document
node.Ti @  Fr-   N)	r   readParser   documentElement_setup_subsetParseEscaper   r   )r(   filer   first_bufferbufferdocs         r*   	parseFileExpatBuilder.parseFile   s     !	 IIg..&.VU+DMM$A$A&&v.$	 !IIg..&.
 LLd# mm


  		s   A7C C 
CCc                     U R                  5       n UR                  US5        U R                  U5        U R                  nU R                  5         SU l        U$ ! [         a     N1f = f)z<Parse a document from a string, returning the document node.TN)r   r   r   r   r   r   r   )r(   stringr   r   s       r*   parseStringExpatBuilder.parseString   sc    !	LL&v& mm


  		s   #A 
A'&A'c                     U R                   R                  (       aF  [        5       nUR                  U5        UR	                  5       nX0R                   R                  l        gg)z/Load the internal subset if there might be one.N)r   doctypeInternalSubsetExtractorr   	getSubsetinternalSubset)r(   r   	extractorsubsets       r*   r   ExpatBuilder._setup_subset   sH    ==  /1I!!&)((*F39MM!!0	 !r-   c                    U R                   R                  R                  XU5      nU R                   Ul        [	        U R                   U5        XPR                   l        U R                  (       ao  U R                  R                  U5      [        :X  aL  S U R                   l        U R                   R                  S	 S nS U R                  l        S U R                  l        U(       ac  Ub"  / UR                  l        / UR                  l        S U R                  l        S U R                  l        U R$                  U R                  l        g g N)r   implementationcreateDocumentTypeownerDocumentr
   r   r~   
acceptNodeFILTER_REJECT
childNodesr   r   r   r   _seq	notationsr   r   end_doctype_decl_handlerEndDoctypeDeclHandler)r(   doctypeNamesystemIdpublicIdhas_internal_subsetr   s         r*   r   'ExpatBuilder.start_doctype_decl_handler   s    --..AA8- $dmmW- '<<DLL33G<M$(DMM!((,G-1DLL*/3DLL,"(*  %)+!!&*.DLL'8<DLL5151N1NDLL. r-   c                    U R                   R                  (       a  U R                  U R                  l        U R
                  U R                  l        U R                  (       d  U R                  (       d  [        U l
        g g g r'   )r{   r   r   r   r   r   r   r   r~   r   _finish_end_elementr/   s    r*   r   %ExpatBuilder.end_doctype_decl_handler  sM    ==!!*.*>*>DLL'48OO14<<')D$ $0r-   c                    U R                   R                  X5      n[        U R                  U5        U R                  (       a@  U R                  R                  U5      [        :X  a  U R                  R                  U5        g g g r'   )r   createProcessingInstructionr
   r   r~   r   r   removeChild)r(   targetdatanodes       r*   r   ExpatBuilder.pi_handler	  s[    }}88FdllD)<<DLL33D9]JLL$$T* K<r-   c                    U R                   R                  nU R                  (       a`  U R                  (       a,  US   R                  [
        :X  a  US   R                  U5        g U R                  R                  U5      nSU l        OeU(       a2  US   R                  [        :X  a  US   nUR                  U-   nXCl
        g [        R                  " 5       nXl
        U R                  Ul        [        U R                   U5        g )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   )ExpatBuilder.character_data_handler_cdata  s    \\,,
;;&& n--1CC2))$/==33D9D#'D JrN33y@b>DII$EI<<>DI!%DdllD)r-   c                 @   U R                   R                  nU(       a1  US   R                  [        :X  a  US   nUR                  U-   Ul        g [
        R                  " 5       nUR                  U-   Ul        U R                  Ul        [        U R                   U5        g r   )
r   r   r   r   r   r   r   r   r   r
   )r(   r   r   r   s       r*   r   #ExpatBuilder.character_data_handler#  sv    \\,,
*R.11Y>b>D		D(DI||~II$	!]]dllD)r-   c                 *   U(       a  g U R                   R                  (       d  g U R                  R                  XXW5      nUb6  U R                  R	                  U5      n	UR
                  R                  U	5        U R                  R                  R                  R                  R                  U5        U R                  (       aP  U R                  R                  U5      [        :X  a,  U R                  R                  R                  R                  S	 g g g r   )r{   r   r   _create_entitycreateTextNoder   appendr   r   r~   r   r   )
r(   
entityNameis_parameter_entityr   baser   r   notationNamer   childs
             r*   r    ExpatBuilder.entity_decl_handler.  s    }}%%}}++J,4D MM007EOO""5)&&++2248<<DLL33D9]J%%..33B7 K<r-   c                 p   U R                   R                  XU5      nU R                   R                  R                  R                  R                  U5        U R                  (       aP  U R                  R                  U5      [        :X  a,  U R                   R                  R                  R                  S	 g g g r   )	r   _create_notationr   r   r   r   r~   r   FILTER_ACCEPT)r(   r  r  r   r   r   s         r*   r   "ExpatBuilder.notation_decl_handler@  s    }}--lhO'',,33D9<<DLL33D9]J%%//44R8 K<r-   c                    U R                   R                  U5      n[        U R                  U5        U R                  (       a@  U R                  R                  U5      [        :X  a  U R                  R                  U5        g g g r'   )r   createCommentr
   r   r~   r   r   r   )r(   r   r   s      r*   r   ExpatBuilder.comment_handlerF  s[    }}**40dllD)<<DLL33D9]JLL$$T* K<r-   c                      SU l         SU l        g )NTFr   r   r/   s    r*   r   (ExpatBuilder.start_cdata_section_handlerL  s    $r-   c                      SU l         SU l        g )NFr  r/   s    r*   r   &ExpatBuilder.end_cdata_section_handlerP  s    $r-   c                     gNr7   r`   )r(   contextr  r   r   s        r*   r   (ExpatBuilder.external_entity_ref_handlerT  s    r-   c                     U R                   c  U R                  (       d  [        U l        U R                  U R                  5       l        U R	                  X5        g r'   )r~   r   r   r   start_element_handlerr   r   )r(   rn   
attributess      r*   r   "ExpatBuilder.first_element_handlerW  s=    <<')D$/3/I/I,""44r-   c                    U R                   R                  U5      n[        U R                  U5        X0l        U(       ai  [	        S[        U5      S5       HO  n[        R                  " X$   [        S [        5      nX$S-      nXel
        U R                   Ul        [        X55        MQ     X0R                   R                  La  U R                  U5        g g )Nr   rj   r7   )r   createElementr
   r   rangerl   r   Attrr   r   r   r   r   r   r   )r(   rn   r  r   iar   s          r*   r  "ExpatBuilder.start_element_handler]  s    }}**40dllD)1c*oq1LL!%|5"Q3"&--#D, 2 }}444&&t, 5r-   c                 b   U R                   (       a  XR                  R                  L a  g U R                   R                  U5      nU[        :X  a  [        U 5        OU[        :X  a  [        U 5        Og UR                  U l	        UR                  R                  U5        UR                  5         g g r'   )r~   r   r   startContainerr   RejecterFILTER_SKIPSkipper
parentNoder   r   unlink)r(   r   filts      r*   r   "ExpatBuilder._finish_start_elementn  s    << }}444<<..t4D}$$ ??DLOO''-KKM# r-   c                 `    U R                   nUR                  U l         U R                  U5        g r'   )r   r%  r   )r(   rn   r   s      r*   r    ExpatBuilder.end_element_handler  s&    ,,))  )r-   c                 r   U R                   R                  UR                  5      nU(       a  U R                  X5        U R                  (       ai  XR
                  R                  L a  g U R                  R                  U5      [        :X  a,  U R                  R                  U5        UR                  5         g g g r'   )r   getr%   _handle_white_text_nodesr~   r   r   r   r   r   r   r&  )r(   r   r=   s      r*   r    ExpatBuilder._finish_end_element  s    ""7??3))'8<<--777||&&w/=@((1  A r-   c                 T   U R                   R                  (       d  UR                  5       (       d  g / nUR                   HK  nUR                  [
        :X  d  M  UR                  R                  5       (       a  M:  UR                  U5        MM     U H  nUR                  U5        M     g r'   )
r{   whitespace_in_element_contentrK   r   r   r   r   stripr   r   )r(   r   r=   Lr  s        r*   r-  %ExpatBuilder._handle_white_text_nodes  sy    MM77((**
 __E~~*5::3C3C3E3E %
 EU# r-   c                     U R                   R                  U5      nUc  [        X5      U R                   U'   g UR                  b   eX#l        g r'   )r   r,  r    r$   )r(   rn   r)   r=   s       r*   r   !ExpatBuilder.element_decl_handler  sC    ""4(<$/$<DOOD!;;&&&Kr-   c           
          U R                   R                  U5      nUc  [        U5      nX`R                   U'   UR                  R	                  S US S USX5/5        g Nr   )r   r,  r    r#   r   )r(   elemrn   rJ   defaultrequiredr=   s          r*   r   !ExpatBuilder.attlist_decl_handler  sV    ""4(<t$D$(OOD!4tWa@	Br-   c                     XR                   l        X R                   l        US:  a+  U(       a  SU R                   l        g SU R                   l        g g )Nr   TF)r   versionencoding
standalone)r(   r=  r>  r?  s       r*   r   ExpatBuilder.xml_decl_handler  s=     '!)?+/(+0(	 r-   )r   r   r   r~   r   r   rb   r{   r   r   r   r'   )"rZ   r[   r\   r]   __doc__r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r-  r   r   r   r_   r`   r-   r*   rw   rw      s    $	>.&:O**+*(	*8$9+%%5-".*
	!$" B1r-   rw   c                   B   \ rS rSrSrSrS rS rS r\	R                  \R                  \	R                  \R                  \	R                  \R                   \	R"                  \R$                  \	R&                  \R(                  \	R*                  \R,                  \	R.                  \R0                  \	R2                  \R4                  \	R6                  \R8                  \	R:                  \R<                  \	R>                  \R@                  \	RB                  \RD                  0r#Sr$g)r}   i  zkWrapper around a DOMBuilderFilter which implements the checks
to make the whatToShow filter attribute work.r|   c                     Xl         g r'   rC  )r(   r|   s     r*   r+   #FilterVisibilityController.__init__  s    r-   c                    U R                   UR                     nU R                  R                  U-  (       aN  U R                  R	                  U5      nU[
        :X  a  [        eU[        ;  a  [        S[        U5      -   5      eU$ [        $ )Nz)startContainer() returned illegal value: )_nodetype_maskr   r|   
whatToShowr!  FILTER_INTERRUPTr   _ALLOWED_FILTER_RETURNSrm   reprr  )r(   r   maskvals       r*   r!  )FilterVisibilityController.startContainer  sz    ""4==1;;!!D(++,,T2C&&!!11 ADIMO OJ  r-   c                    U R                   UR                     nU R                  R                  U-  (       a  U R                  R	                  U5      nU[
        :X  a  [        eU[        :X  a9  UR                  nUR                  S S   H  nUR                  U5        M     [        $ U[        ;  a  [        S[        U5      -   5      eU$ [        $ )Nz%acceptNode() returned illegal value: )rG  r   r|   rH  r   rI  r   r#  r%  r   appendChildr   rJ  rm   rK  r  )r(   r   rL  rM  parentr  s         r*   r   %FilterVisibilityController.acceptNode  s    ""4==1;;!!D(++((.C&&!!k!!__Q/E&&u- 0 %$11 =S	IK KJ  r-   N)%rZ   r[   r\   r]   rA  r^   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_NOTATIONrG  r_   r`   r-   r*   r}   r}     s    5 I!!* 	**A*A**C*C**>*>**G*G""**J*J**@*@((**P*P**A*A**B*B**G*G##**K*K**B*B
Nr-   r}   c                       \ rS rSrSrS rSrg)FilterCrutchi  )_builder_level
_old_start_old_endc                     SU l         Xl        UR                  nUR                  U l        UR
                  U l        U R                  Ul        U R                  Ul        g r7  )	rl  rk  r   r   rm  r   rn  r  r   )r(   rc   r   s      r*   r+   FilterCrutch.__init__  sM     4400%)%?%?"#'#;#; r-   )rk  rl  rn  rm  N)rZ   r[   r\   r]   r^   r+   r_   r`   r-   r*   rj  rj    s    >I<r-   rj  c                   *    \ rS rSrSrS rS rS rSrg)r"  i  r`   c                 p    [         R                  X5        UR                  nS H  n[        X#S 5        M     g )N)r   r   r   r   r   r   )rj  r+   r   setattr)r(   rc   r   rn   s       r*   r+   Rejecter.__init__  s1    d,D F$'r-   c                 ,    U R                   S-   U l         g r  rl  r(   argss     r*   r  Rejecter.start_element_handler  s    kkAor-   c                     U R                   S:X  aT  U R                  R                  nU R                  R                  U5        U R                  Ul        U R                  Ul        g U R                   S-
  U l         g Nr   r7   )rl  rk  r   r   rm  r   rn  r   )r(   rx  r   s      r*   r   Rejecter.end_element_handler  sV    ;;!]]**FMM!!&))-F&'+}}F$++/DKr-   rv  N)	rZ   r[   r\   r]   r^   r+   r  r   r_   r`   r-   r*   r"  r"    s    I
(&*r-   r"  c                   $    \ rS rSrSrS rS rSrg)r$  i'  r`   c                     U R                   R                  nU R                  " U6   U R                   R                  ULa  U R                  S-   U l        g g r  )rk  r   rm  rl  )r(   rx  r   s      r*   r  Skipper.start_element_handler*  sC    }}$$==  ,++/DK -r-   c                    U R                   S:X  aR  U R                  U R                  R                  l        U R
                  U R                  R                  l        S U l        g U R                   S-
  U l         U R
                  " U6   g r{  )rl  rm  rk  r   r   rn  r   rw  s     r*   r   Skipper.end_element_handler0  s^    ;;! 9=DMM!!56:mmDMM!!3 DM++/DKMM4 r-   )rk  rl  N)rZ   r[   r\   r]   r^   r  r   r_   r`   r-   r*   r$  r$  '  s    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                   F    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rSrg)FragmentBuilderiO  zBuilder 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                     UR                   [        :X  a  Xl        Xl        OUR                  U l        Xl        [
        R                  X5        g r'   )r   ra  originalDocumentr  r   rw   r+   )r(   r  r   s      r*   r+   FragmentBuilder.__init__X  s<    },$+!"L$+$9$9D!"Ld,r-   c                 <    [         R                  U 5        S U l        g r'   )rw   r   fragmentr/   s    r*   r   FragmentBuilder.reseta  s    4 r-   c                 @    U R                  UR                  5       5      $ )zJParse a document fragment from a file object, returning the
fragment node.)r   r   r(   r   s     r*   r   FragmentBuilder.parseFilee  s     		,,r-   c                    Xl         U R                  5       nU R                  R                  nSnU(       au  UR                  =(       d    U R                  5       nUR                  (       a   SUR                  < SUR                  < S3nO#UR                  (       a  SUR                  -  nOSnU R                  5       n[        XEU4-  n UR                  US5        U R                  nU R                  5         U$ !   U R                  5         e = f)zEParse a document fragment from a string, returning the
fragment node. zPUBLIC "z" ""zSYSTEM "%s"T)_sourcer   r  r   r   _getDeclarationsr   r   _getNSattrs_FRAGMENT_BUILDER_TEMPLATEr   r   r  )	r(   r   r   r   identr   nsattrsr   r  s	            r*   r   FragmentBuilder.parseStringj  s     !''//++Ft/D/D/FF#,,g.>.>@!!%(8(88F""$-0HH	LL4( ==

	JJLs   	C9 9Dc                    U R                   R                  R                  nSnU(       Ga  [        UR                  R
                  5       H  nUR                  R                  U5      nU(       a  US-   nU< SUR                  < 3nUR                  (       a$  U< SUR                  < SUR                  < S3nMr  U< SUR                  < S3nM     [        UR                  R
                  5       H  nUR                  R                  U5      nU(       a  US-   nU< SUR                  < 3nUR                  (       a#  U< SUR                  < SUR                  < S	3nODUR                  (       a  U< SUR                  < S	3nOU< S
UR                  R                  < S	3nUR                  (       a  U< SUR                  < 3nUS-   nM     U$ )zRe-create the internal subset from the DocumentType node.

This is only needed if we don't already have the
internalSubset as a string.
r  z
  z<!NOTATION z	 PUBLIC "z"
             "z">z	 SYSTEM "z	<!ENTITY r  z "z
 NOTATION >)r  r   r   r  r   lengthitemnodeNamer   r   r   
firstChildr   r  )r(   r   rd   r  notationr   s         r*   r   FragmentBuilder._getDeclarations  sc    ,,,,447,,334",,11!4F
A)*H,=,=>$$h//1B1BDA ./0A0ABA 5 7++223 ))..q1F
A'(&//:??foov@A__,-v?A%&(9(9(>(>?A&&,-v/B/BCAG 4 r-   c                     g)Nr  r`   r/   s    r*   r  FragmentBuilder._getNSattrs  s    r-   c                    U[         :X  a  U R                  nU R                  nU R                  R	                  U5      nU R
                  U l        U R                  R                  5       U l        U R                  U l         UR                  U R                  S5        X`l        XPl        S U l	        g[        R                  XX#U5      $ ! X`l        XPl        S U l	        f = f)NTr   )$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDr   r   r   ExternalEntityParserCreater  createDocumentFragmentr  r   r  rw   r   )r(   r  r  r   r   old_documentold_cur_noder   s           r*   r   +FragmentBuilder.external_entity_ref_handler  s    ;;  ==L<<L\\<<WEF 11DM MM@@BDM==DL$T\\40+ ,#;;tx9 9  , ,#s    C C)r  r  r   r   r  r  r'   )rZ   r[   r\   r]   rA  r+   r   r   r   r  r  r   r_   r`   r-   r*   r  r  O  s+    --
8"H9r-   r  c                   >    \ rS rSrSrS rS rS rS rS r	 S r
S	rg
)
Namespacesi  z7Mix-in class for builders; adds support for namespaces.c                     / U l         g r'   )_ns_ordered_prefixesr/   s    r*   _initNamespacesNamespaces._initNamespaces  s     %'!r-   c                 <    [         R                  " SS9nSUl        U$ )z'Create a new namespace-handling parser.rg   )namespace_separatorT)r	   r   namespace_prefixesr   s     r*   r   Namespaces.createParser  s    ##<$(!r-   c                     [         R                  X5        U R                  R                  (       a  U R                  Ul        gg)z.Insert the namespace-handlers onto the parser.N)rw   r   r{   namespace_declarationsstart_namespace_decl_handlerStartNamespaceDeclHandlerr   s     r*   r   Namespaces.install  s3    T*==//11 , 0r-   c                 <    U R                   R                  X45        g)z/Push this namespace declaration on our storage.N)r  r   )r(   rs   rq   s      r*   r  'Namespaces.start_namespace_decl_handler  s    !!((&7r-   c                    SU;   a  [        X5      u  p4pVO[        nUnS n[        n[        R                  " XcXT5      nU R
                  Ul        [        U R                  U5        Xpl        U R                  (       a  U R                   Hz  u  pSU(       a+  [        R                  " [        U SU-   5      [        US5      nO![        R                  " S[        S[        5      nX8l        U R
                  Ul        [        Xx5        M|     U R                  S S 2	 U(       a  UR                  5         UR                   n	UR"                  n
[%        S['        U5      S5       H  nX+   nX+S-      nSU;   a/  [        X5      u  p4pV[        R                  " XcXE5      nXU'   XX44'   O/[        R                  " U[        U[        5      nXU'   X[        U4'   U R
                  Ul        Xl        Xxl        M     g g )Nrg   xmlns:xmlnsr   rj   r7   )ru   r   r   r   Elementr   r   r
   r   r  r  re   r   r   r   _ensure_attributes_attrs_attrsNSr  rl   ownerElement)r(   rn   r  rq   rr   rs   rt   r   r  r  r  r  r<   r   s                 r*   r   Namespaces.start_element_handler  s   $;,:4,F)CFE!CEI!Fu6=!]]dllD)$$#88WT8f3D%E%4fgGA  Wo%,l<A"&--#D,  9 ))!,##%[[F}}H1c*oq1""Q3%<4B44O1CFUCA$%5M12c-.UO%*L:A$%5M9:ou56"&--!% 2	 r-   c                 \   U R                   nSU;   aF  [        X5      u  p4pVUR                  U:X  a   UR                  U:X  a  UR                  U:X  d   S5       eO2UR
                  U:X  d   S5       eUR                  [        :X  d   S5       eUR                  U l         U R                  U5        g )Nrg   z$element stack messed up! (namespace)z&element stack messed up - bad nodeNamez*element stack messed up - bad namespaceURI)	r   ru   rB   rC   rs   r  r   r%  r   )r(   rn   r   rq   rr   rs   rt   s          r*   r   Namespaces.end_element_handler  s    llGd{0>t0J-,,3#--:#NNf4? ?? 54 ''4/ @?@/++> DCD>"--DL$$W-r-   )r  r   N)rZ   r[   r\   r]   rA  r  r   r   r  r  r   r_   r`   r-   r*   r  r    s)    A'
38-&^ 	.r-   r  c                       \ rS rSrSrS rSrg)ExpatBuilderNSi#  z*Document builder that supports namespaces.c                 N    [         R                  U 5        U R                  5         g r'   )rw   r   r  r/   s    r*   r   ExpatBuilderNS.reset&  s    4 r-   r`   N)rZ   r[   r\   r]   rA  r   r_   r`   r-   r*   r  r  #  s
    4r-   r  c                   $    \ rS rSrSrS rS rSrg)FragmentBuilderNSi+  z*Fragment builder that supports namespaces.c                 N    [         R                  U 5        U R                  5         g r'   )r  r   r  r/   s    r*   r   FragmentBuilderNS.reset.  s    d#r-   c                 X   SnU R                   n/ nU(       a  [        US5      (       al  UR                  R                  5        HN  u  pEXC;   a  M  UR	                  U5        U(       a  SU-   nOSnU(       a  U< SU< SU< S3nMC  SU< SU< S3nMP     UR
                  nU(       a  M  U$ )	zFReturn string of namespace attributes from this element and
ancestors.r  _ns_prefix_urir  r  z
    z=''rg   )r  hasattrr  itemsr   r%  )r(   attrsr  r2  rs   rq   declnames          r*   r  FragmentBuilderNS._getNSattrs2  s     ,,w 011#*#9#9#?#?#AKF{ HHV$#+f#4#*5:Hc J  /7 < $B ((G g  r-   r`   N)rZ   r[   r\   r]   rA  r   r  r_   r`   r-   r*   r  r  +  s    4r-   r  c                       \ rS rSrSrSrg)r   iP  zEException raised to short-circuit parsing in InternalSubsetExtractor.r`   N)rZ   r[   r\   r]   rA  r_   r`   r-   r*   r   r   P  s    Or-   r   c                   F    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rSrg)r   iT  zBXML processor which can rip out the internal document type subset.Nc                     U R                   $ )z'Return the internal subset as a string.r   r/   s    r*   r   !InternalSubsetExtractor.getSubsetY  s    {{r-   c                 P     [         R                  X5        g ! [         a     g f = fr'   )rw   r   r   r  s     r*   r   !InternalSubsetExtractor.parseFile]  s'    	""4. 		    
%%c                 P     [         R                  X5        g ! [         a     g f = fr'   )rw   r   r   )r(   r   s     r*   r   #InternalSubsetExtractor.parseStringc  s'    	$$T2 		r  c                 H    U R                   Ul        U R                  Ul        g r'   )r   r   r  r   r   s     r*   r   InternalSubsetExtractor.installi  s    )-)H)H&%)%?%?"r-   c                     U(       aD  U R                  5       n/ U l        U R                  R                  Ul        U R                  Ul        g [        5       er'   )r   r   r   DefaultHandlerr   r   r   )r(   rn   r   r   r   r   s         r*   r   2InternalSubsetExtractor.start_doctype_decl_handlerm  s@    ^^%FDK$(KK$6$6F!+/+H+HF(-r-   c                     SR                  U R                  5      R                  SS5      R                  SS5      nXl        [        5       e)Nr  z

)joinr   replacer   )r(   rd   s     r*   r   0InternalSubsetExtractor.end_doctype_decl_handlerw  s;    GGDKK ((6>>tTJmr-   c                     [        5       er'   )r   )r(   rn   r  s      r*   r  -InternalSubsetExtractor.start_element_handler|  s
    mr-   r  )rZ   r[   r\   r]   rA  r   r   r   r   r   r   r   r  r_   r`   r-   r*   r   r   T  s.    LF@ 
r-   r   c                     U(       a  [        5       nO
[        5       n[        U [        5      (       a(  [	        U S5       nUR                  U5      nSSS5        U$ UR                  U 5      nU$ ! , (       d  f       W$ = f)zsParse a document, returning the resulting Document node.

'file' may be either a file name or an open file object.
rbN)r  rw   
isinstancestropenr   )r   
namespacesrc   fpresults        r*   parser    sr    
  ".$$&&r*F  M ""4(M	  Ms   A--
A<c                 \    U(       a  [        5       nO
[        5       nUR                  U 5      $ )zGParse a document from a string, returning the resulting
Document node.
)r  rw   r   )r   r  rc   s      r*   r   r     s'      ".v&&r-   c                    U(       a  [        U5      nO[        U5      n[        U [        5      (       a(  [	        U S5       nUR                  U5      nSSS5        U$ UR                  U 5      nU$ ! , (       d  f       W$ = f)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  r  r  r  r  r   )r   r  r  rc   r  r  s         r*   parseFragmentr    sw     #G,!'*$$&&r*F  M ""4(M	  Ms    A//
A>c                 `    U(       a  [        U5      nO[        U5      nUR                  U 5      $ )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  r  r   )r   r  r  rc   s       r*   parseFragmentStringr    s,    
 #G,!'*v&&r-   c                 P    U R                   (       a  [        U 5      $ [        U 5      $ )z,Create a builder based on an Options object.)r  r  rw   )r   s    r*   makeBuilderr    s!    g&&G$$r-   )T)3rA  xml.domr   r   r   r   r   r   xml.parsersr	   xml.dom.minidomr
   r   xml.dom.NodeFilterr   r   r   ra  DOMBuilderFilterr  r   r#  rI  getDOMImplementationr   TypeInfor:   objectr    re   ru   rw   rJ  r}   rj  r"  r$  r  r  r  r  r  r  	Exceptionr   r   r  r   r  r  r  r`   r-   r*   <module>r     s  : . - B B  > )NN	,, ""++99++99))55..?? 335    w/  }5  x0  z2  t,  w/  x0  y1  z2
1(& 1(f,6&y1 y1|	 )-E 7
 7
t
<6 
<*| *8!l !2 ? %* +	+ r9l r9j\. \.~Z "
O "J	) 	)l )X$'(	'%r-   