+
    im  c                   s0   R t ^ RIHtHtHt ^ RIHtHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHt ]P                  t]P                   t]P"                  t]P$                  P&                  t]P$                  P(                  t]P$                  P*                  t]P$                  P,                  t]P.                  ! 4       tR]P2                  ! RR4      R	]P2                  ! RR
4      R]P2                  ! RR4      R]P2                  ! RR4      R]P2                  ! RR4      R]P2                  ! RR4      R]P2                  ! RR4      R]P2                  ! RR4      R]P2                  ! RR4      /	t ! R R]4      tR tR t ! R R4      t]]]3t  ! R R ]4      t! ! R! R"]4      t" ! R# R$]"4      t# ! R% R&]"4      t$R't%R(]%,          t& ! R) R*]4      t' ! R+ R,4      t( ! R- R.](]4      t) ! R/ R0](]'4      t* ! R1 R2]+4      t, ! R3 R4]4      t-R:R5 lt.R:R6 lt/R:R7 lt0R:R8 lt1R9 t2R# );zFacility 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)
NodeFilterZCDATANZcdataENUMZenumerationZENTITYentityZENTITIESentitiesIDidZIDREFZidrefZIDREFSZidrefsZNMTOKENZnmtokenZNMTOKENSZnmtokensc                   s^   a  ] tR t^<t o RtRR ltR tR tR tR t	R t
R tR	 tR
 tRtV tR# )ElementInfoNc                s,    Wn         . V n        W n        R # N)tagName
_attr_info_model)selfr   model   &&&-/usr/lib64/python3.14/xml/dom/expatbuilder.py__init__ZElementInfo.__init__?   s        c                sH    V P                   V P                  V P                  3# r   r   r   r   r      &r   __getstate__ZElementInfo.__getstate__D   s    T\\99r   c                s0    Vw  V n         V n        V n        R # r   r   )r   Zstate   &&r   __setstate__ZElementInfo.__setstate__G   s    5:2dlr   c                s    V P                    FM  pV^,          V8X  g   K  VR,          pV^ ,          R8X  d   \        R,          u # \        VR,          ,          u # 	  \        P                  # )   Z(r
   )r   _typeinfo_mapr   _no_type)r   anameinfoZt   &&  r   getAttributeTypeZElementInfo.getAttributeTypeJ   sX    OODAw%HQ43;(00(b22 $ r   c                s"    \         P                  # r   )r   r#   )r   ZnamespaceURIZ	localNamer   r   getAttributeTypeNSZElementInfo.getAttributeTypeNST   s    r   c                s    V P                   '       dK   V P                   ^ ,          pV\        P                  P                  \        P                  P                  39  # R#     F)r   r   r   ZXML_CTYPE_ANYZXML_CTYPE_MIXED)r   type   & r   isElementContentZElementInfo.isElementContentW   sH    ;;;;;q>D 9 9 % ; ; = = = r   c                s    V P                   '       d/   V P                   ^ ,          \        P                  P                  8H  # R# r)   )r   r   r   ZXML_CTYPE_EMPTYr   r   r   isEmptyZElementInfo.isEmpty_   s+    ;;;;;q>U[[%@%@@@r   c                sd    V P                    F  pV^,          V8X  g   K  VR,          R8H  u # 	  R# )r    r   Fr!   )r   )r   r$   r%      && r   isIdZElementInfo.isIde   s0    OODAw%Bx4'' $ r   c                s&    V P                  W434      # r   )r0   )r   ZeuriZenameZaurir$      &&&&&r   isIdNSZElementInfo.isIdNSk   s    yy$''r   r   r   )__name__
__module____qualname____firstlineno__	__slots__r   r   r   r'   r(   r-   r.   r0   r2   __static_attributes____classdictcell__Z__classdict__   @r   r   r   <   s<     1I
:;  ( (r   r   c                 s$    V P                  W4      # r   )_intern_setdefault)buildersr   r   _internr?   o   s    %%a++r   c                 s,   VP                  R 4      pV P                  p\        V4      ^8X  d(   Vw  rEpV! Wf4      pV: RV: 2pV! Ww4      pV! WU4      pM6\        V4      ^8X  d   Vw  rE\        pV! WU4      ;ruM\	        RV,          4      hV! WD4      WVV3# ) Z:z4Unsupported syntax: spaces in URIs not supported: %r)Zsplitr<   lenr   
ValueError)r=   nameZpartsinternuri	localnameprefixqnames   &&      r   _parse_ns_namerI   r   s    JJsOE''F
5zQ!&'!9-u$90		Uq"988	ORVVWW#Y55r   c                   s   a  ] tR t^t o RtR R ltR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t Rt!V t"R# )!ExpatBuilderzLDocument builder that uses Expat to build a ParsedXML.DOM document
instance.Nc                s   Vf   \         P                  ! 4       pWn        V P                  P                  e&   \	        V P                  P                  4      V n        MR V n        \        V n        R V n        V P                  4        R # r   )
r    ZOptions_optionsfilterFilterVisibilityController_filterr   _finish_start_element_parserreset)r   optionsr   r   r   ZExpatBuilder.__init__   sa    ? ((*G==+5dmm6J6JKDLDL *,D&

r   c                s,    \         P                  ! 4       # )zCreate a new parser object.)r   ParserCreater   r   r   createParserZExpatBuilder.createParser   s    !!##r   c                sN   V P                   '       g   V P                  4       V n         V P                   P                  P                  V n        RV P                   n        RV P                   n        RV P                   n        V P                  V P                   4       V P                   # )z7Return the parser object, creating a new one if needed.T)	rP   rT   rD   Z
setdefaultr<   Zbuffer_textZordered_attributesZspecified_attributesinstallr   r   r   	getParserZExpatBuilder.getParser   sq    |||,,.DL&*ll&9&9&D&DD#'+DLL$.2DLL+04DLL-LL&||r   c                s    \         P                  \        RR4      V n        V P                  V n        V P                  P
                  V n        RV n        R# )z6Free all data structures used during DOM construction.NF)theDOMImplementationZcreateDocumentr   documentcurNode
_elem_info_cdatar   r   r   rQ   ZExpatBuilder.reset   s>    ,;;T4)}}--22r   c                s   V P                   Vn        V P                  Vn        V P                  Vn        V P                  Vn        V P                  P                  '       d   V P                  Vn        V P                  Vn        V P                  P                  '       d   V P                  Vn        V P                  P"                  '       d5   V P$                  Vn        V P(                  Vn        V P,                  Vn        MV P0                  Vn        V P2                  Vn        V P6                  Vn        V P:                  Vn        V P>                  Vn         R# )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ProcessingInstructionHandlerrK   r   entity_decl_handlerEntityDeclHandlernotation_decl_handlerNotationDeclHandlercommentscomment_handlerCommentHandlerZ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_handlerZXmlDeclHandlerelement_decl_handlerZElementDeclHandlerattlist_decl_handlerZAttlistDeclHandlerr   parserr   r   rU   Z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                s   V P                  4       pRp VP                  R4      ;p'       dL   VP                  VR4       V'       d.   V P                  P                  '       d   V P                  V4       RpKd  VP                  RR4       V P                  pV P                  4        RV n        V#   \         d     L2i ; i)zAParse a document from a file object, returning the document
node.TFr   Ni @  )	rV   readParserX   documentElement_setup_subsetParseEscaperQ   rP   )r   filerx   Zfirst_bufferbufferdoc   &&    r   	parseFileZExpatBuilder.parseFile   s     !	 IIg..&.VU+DMM$A$A$A&&v.$LLd# mm


  		s   2B/ B/ #'B/ /B=<B=c                s    V P                  4       p VP                  VR4       V P                  V4       V P                  pV P                  4        RV n        V#   \         d     L2i ; i)z<Parse a document from a string, returning the document node.TN)rV   rz   r|   r}   rX   rQ   rP   )r   stringrx   r   r&   r   parseStringZExpatBuilder.parseString   sc    !	LL&v& mm


  		s   #A A('A(c                s    V P                   P                  '       dH   \        4       pVP                  V4       VP	                  4       pW0P                   P                  n        R# R# )z/Load the internal subset if there might be one.N)rX   doctypeInternalSubsetExtractorr   	getSubsetinternalSubset)r   r   Z	extractorsubsetr&   r   r|   ZExpatBuilder._setup_subset   sK    ==   /1I!!&)((*F39MM!!0	 !r   c                s   V P                   P                  P                  WV4      pV P                   Vn        \	        V P                   V4       WPP                   n        V P                  '       dq   V P                  P                  V4      \        8X  dM   R V P                   n        V P                   P                  R R pR V P                  n        R V P                  n        V'       df   Ve#   . VP                  n        . VP                  n        R V P                  n        R V P                  n        V P$                  V P                  n        R # R # N)rX   ZimplementationZcreateDocumentTypeownerDocumentr   r   rN   
acceptNodeFILTER_REJECT
childNodesrP   re   rg   r   _seq	notationsrj   rc   end_doctype_decl_handlerEndDoctypeDeclHandler)r   ZdoctypeNamesystemIdpublicIdhas_internal_subsetr      &&&&& r   r\   Z'ExpatBuilder.start_doctype_decl_handler   s    --..AA8- $dmmW- '<<<DLL33G<M$(DMM!((,G-1DLL*/3DLL,"(*  %)+!!&*.DLL'8<DLL5151N1NDLL. r   c                s   V P                   P                  '       d   V P                  V P                  n        V P
                  V P                  n        V P                  '       g"   V P                  '       g   \        V n
        R # R # R # r   )rK   rh   ri   rP   rj   rb   rc   rZ   rN   r   _finish_end_elementr   r   r   r   Z%ExpatBuilder.end_doctype_decl_handler  sT    ==!!!*.*>*>DLL'48OO14<<<')D$ $0r   c                s   V P                   P                  W4      p\        V P                  V4       V P                  '       dD   V P                  P                  V4      \        8X  d   V P                  P                  V4       R # R # R # r   )rX   ZcreateProcessingInstructionr   rY   rN   r   r   removeChild)r   Ztargetdatanode   &&& r   rb   ZExpatBuilder.pi_handler	  s]    }}88FdllD)<<<DLL33D9]JLL$$T* K<r   c                s@   V P                   P                  pV P                  '       dl   V P                  '       d7   VR,          P                  \
        8X  d   VR,          P                  V4       R# V P                  P                  V4      pRV n        MtV'       dA   VR,          P                  \        8X  d%   VR,          pVP                  V,           pWCn
        R# \        P                  ! 4       pWn
        V P                  Vn        \        V P                   V4       R# )r    NTr   )rY   r   r[   _cdata_continuenodeTypeCDATA_SECTION_NODEZ
appendDatarX   ZcreateCDATASection	TEXT_NODEr   r   Textr   r   )r   r   r   r   value   &&   r   ro   Z)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                sh   V P                   P                  pV'       d@   VR,          P                  \        8X  d$   VR,          pVP                  V,           Vn        R# \
        P                  ! 4       pVP                  V,           Vn        V P                  Vn        \        V P                   V4       R# r    Nr   )
rY   r   r   r   r   r   r   rX   r   r   )r   r   r   r   r&   r   rq   Z#ExpatBuilder.character_data_handler#  sv    \\,,
*R.11Y>b>D		D(DI||~II$	!]]dllD)r   c                s>   V'       d   R # V P                   P                  '       g   R # V P                  P                  WWW4      pVe7   V P                  P	                  V4      p	VP
                  P                  V	4       V P                  P                  P                  P                  P                  V4       V P                  '       dT   V P                  P                  V4      \        8X  d.   V P                  P                  P                  P                  R R # R # R # r   )rK   r   rX   Z_create_entityZcreateTextNoder   appendr   r   rN   r   r   )
r   Z
entityNameZis_parameter_entityr   baser   r   notationNamer   childs
   &&&&&&&&  r   rd   Z 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                sz   V P                   P                  WV4      pV P                   P                  P                  P                  P                  V4       V P                  '       dT   V P                  P                  V4      \        8X  d.   V P                   P                  P                  P                  R R# R# R# r   )	rX   Z_create_notationr   r   r   r   rN   r   FILTER_ACCEPT)r   r   r   r   r   r   r   r   rf   Z"ExpatBuilder.notation_decl_handler@  s    }}--lhO'',,33D9<<<DLL33D9]J%%//44R8 K<r   c                s   V P                   P                  V4      p\        V P                  V4       V P                  '       dD   V P                  P                  V4      \        8X  d   V P                  P                  V4       R # R # R # r   )rX   ZcreateCommentr   rY   rN   r   r   r   )r   r   r   r/   r   ri   ZExpatBuilder.comment_handlerF  s]    }}**40dllD)<<<DLL33D9]JLL$$T* K<r   c                s"    R V n         RV n        R# )TFNr[   r   r   r   r   rk   Z(ExpatBuilder.start_cdata_section_handlerL  s    $r   c                s"    R V n         R V n        R# )FNr   r   r   r   rm   Z&ExpatBuilder.end_cdata_section_handlerP  s    $r   c                s    ^# )r     )r   contextr   r   r   r1   r   rr   Z(ExpatBuilder.external_entity_ref_handlerT  s    r   c                s    V P                   f   V P                  '       g   \        V n        V P                  V P                  4       n        V P	                  W4       R # r   )rN   rZ   r   r   start_element_handlerrV   r_   )r   rC   
attributesr   r   r^   Z"ExpatBuilder.first_element_handlerW  s?    <<')D$/3/I/I,""44r   c                s   V P                   P                  V4      p\        V P                  V4       W0n        V'       dv   \	        ^ \        V4      ^4       F[  p\        P                  ! W$,          \        R\        4      pW$^,           ,          pWen
        V P                   Vn        \        W54       K]  	  W0P                   P                  Jd   V P                  V4       R# R# r*   N)rX   ZcreateElementr   rY   rangerA   r   Attrr   r   r   r   r   r{   rO   )r   rC   r   r   iar   s   &&&    r   r   Z"ExpatBuilder.start_element_handler]  s    }}**40dllD)1c*oq1LL!%|5"Q3"&--#D, 2 }}444&&t, 5r   c                sr   V P                   '       d   WP                  P                  J d   R # V P                   P                  V4      pV\        8X  d   \        V 4       MV\        8X  d   \        V 4       MR # VP                  V n	        VP                  P                  V4       VP                  4        R # R # r   )rN   rX   r{   startContainerr   RejecterFILTER_SKIPSkipper
parentNoderY   r   unlink)r   r   Zfiltr/   r   rO   Z"ExpatBuilder._finish_start_elementn  s    <<< }}444<<..t4D}$$ ??DLOO''-KKM# r   c                sb    V P                   pVP                  V n         V P                  V4       R # r   )rY   r   r   )r   rC   rY   r/   r   r`   Z ExpatBuilder.end_element_handler  s&    ,,))  )r   c                s   V P                   P                  VP                  4      pV'       d   V P                  W4       V P                  '       do   WP
                  P                  J d   R # V P                  P                  V4      \        8X  d.   V P                  P                  V4       VP                  4        R # R # R # r   )rZ   getr   _handle_white_text_nodesrN   rX   r{   r   r   rY   r   r   )r   rY   r%   r/   r   r   Z ExpatBuilder._finish_end_element  s    ""7??3))'8<<<--777||&&w/=@((1  A r   c                s`   V P                   P                  '       g   VP                  4       '       g   R # . pVP                   FM  pVP                  \
        8X  g   K  VP                  P                  4       '       d   K<  VP                  V4       KO  	  V F  pVP                  V4       K  	  R # r   )
rK   Zwhitespace_in_element_contentr-   r   r   r   r   Zstripr   r   )r   r   r%   Lr   s   &&&  r   r   Z%ExpatBuilder._handle_white_text_nodes  s|    MM777((**
 __E~~*5::3C3C3E3E %
 EU# r   c                s    V P                   P                  V4      pVf   \        W4      V P                   V&   R # W#n        R # r   )rZ   r   r   r   )r   rC   r   r%   r   r   ru   Z!ExpatBuilder.element_decl_handler  s5    ""4(<$/$<DOOD!  Kr   c           
     s    V P                   P                  V4      pVf   \        V4      pW`P                   V&   VP                  P	                  R VR R V^ W5.4       R # r   )rZ   r   r   r   r   )r   ZelemrC   r+   ZdefaultZrequiredr%   s   &&&&&& r   rv   Z!ExpatBuilder.attlist_decl_handler  sV    ""4(<t$D$(OOD!4tWa@	Br   c                s    WP                   n        W P                   n        V^ 8  d/   V'       d   RV P                   n        R# RV P                   n        R# R# )r*   TFN)rX   versionencoding
standalone)r   r   r   r   s   &&&&r   rt   ZExpatBuilder.xml_decl_handler  s=     '!)?+/(+0(	 r   )r[   r   rZ   rN   r   rO   r<   rK   rP   rY   rX   r   )#r3   r4   r5   r6   __doc__r   rT   rV   rQ   rU   r   r   r|   r\   r   rb   ro   rq   rd   rf   ri   rk   rm   rr   r^   r   rO   r`   r   r   ru   rv   rt   r8   r9   r:   r;   r   rJ   rJ      s     $	>.&:O**+*(	*8$9+%%5-".*
	!$" B1 1r   rJ   c                   sN  a  ] tR tRt o RtRtR tR tR t]	P                  ]P                  ]	P                  ]P                  ]	P                  ]P                   ]	P"                  ]P$                  ]	P&                  ]P(                  ]	P*                  ]P,                  ]	P.                  ]P0                  ]	P2                  ]P4                  ]	P6                  ]P8                  ]	P:                  ]P<                  ]	P>                  ]P@                  ]	PB                  ]PD                  /t#Rt$V t%R# )rM   i  zkWrapper around a DOMBuilderFilter which implements the checks
to make the whatToShow filter attribute work.c                s    Wn         R # r   rL   )r   rL   r   r   r   Z#FilterVisibilityController.__init__  s    r   c                s6   V P                   VP                  ,          pV P                  P                  V,          '       dU   V P                  P	                  V4      pV\
        8X  d   \        hV\        9  d   \        R \        V4      ,           4      hV# \        # )z)startContainer() returned illegal value: )_nodetype_maskr   rL   
whatToShowr   FILTER_INTERRUPTr}   _ALLOWED_FILTER_RETURNSrB   reprr   )r   r   maskvalr&   r   r   Z)FilterVisibilityController.startContainer  s}    ""4==1;;!!D((++,,T2C&&!!11 ADIMO OJ  r   c                s   V P                   VP                  ,          pV P                  P                  V,          '       d   V P                  P	                  V4      pV\
        8X  d   \        hV\        8X  d>   VP                  pVP                  R ,           F  pVP                  V4       K  	  \        # V\        9  d   \        R\        V4      ,           4      hV# \        # )NNNz%acceptNode() returned illegal value: )r   r   rL   r   r   r   r}   r   r   r   ZappendChildr   r   rB   r   r   )r   r   r   r   Zparentr   r   r   r   Z%FilterVisibilityController.acceptNode  s    ""4==1;;!!D((++((.C&&!!k!!__Q//E&&u- 0 %$11 =S	IK KJ  r   r   N)&r3   r4   r5   r6   r   r7   r   r   r   r   ZELEMENT_NODEr	   ZSHOW_ELEMENTZATTRIBUTE_NODEZSHOW_ATTRIBUTEr   Z	SHOW_TEXTr   ZSHOW_CDATA_SECTIONZENTITY_REFERENCE_NODEZSHOW_ENTITY_REFERENCEZENTITY_NODEZSHOW_ENTITYZPROCESSING_INSTRUCTION_NODEZSHOW_PROCESSING_INSTRUCTIONZCOMMENT_NODEZSHOW_COMMENTDOCUMENT_NODEZSHOW_DOCUMENTZDOCUMENT_TYPE_NODEZSHOW_DOCUMENT_TYPEZDOCUMENT_FRAGMENT_NODEZSHOW_DOCUMENT_FRAGMENTZNOTATION_NODEZSHOW_NOTATIONr   r8   r9   r:   r;   r   rM   rM     s     5 I!!* 	**A*A**C*C**>*>**G*G""**J*J**@*@((**P*P**A*A**B*B**G*G##**K*K**B*B
Nr   rM   c                   s*   a  ] tR tRt o RtR tRtV tR# )FilterCrutchi  c                s    ^ V n         Wn        VP                  pVP                  V n        VP
                  V n        V P                  Vn        V P                  Vn        R# r   )	_level_builderrP   r_   
_old_startra   _old_endr   r`   )r   r=   rx   r/   r   r   ZFilterCrutch.__init__  sM     4400%)%?%?"#'#;#; r   )r   r   r   r   N)r   r   r   r   )r3   r4   r5   r6   r7   r   r8   r9   r:   r;   r   r   r     s     >I< <r   r   c                   s6   a  ] tR tRt o RtR tR tR tRtV t	R# )r   i  c                sr    \         P                  W4       VP                  pR F  p\        W#R4       K  	  R# )rc   N)rc   rj   rp   rl   rn   rs   )r   r   rP   Zsetattr)r   r=   rx   rC   r&   r   r   ZRejecter.__init__  s1    d,D F$'r   c                s6    V P                   ^,           V n         R# r    Nr   r   args   &*r   r   ZRejecter.start_element_handler  s    kkAor   c                s   V P                   ^ 8X  dV   V P                  P                  pV P                  P                  V4       V P                  Vn        V P                  Vn        R# V P                   ^,
          V n         R# r   )r   r   rP   rU   r   r_   r   ra   )r   r   rx      &* r   r`   ZRejecter.end_element_handler  sV    ;;!]]**FMM!!&))-F&'+}}F$++/DKr   r   Nr   )
r3   r4   r5   r6   r7   r   r   r`   r8   r9   r:   r;   r   r   r     s     I
(&* *r   r   c                   s0   a  ] tR tRt o RtR tR tRtV tR# )r   i'  c                s    V P                   P                  pV P                  ! V!   V P                   P                  VJd   V P                  ^,           V n        R# R# r   )r   rY   r   r   )r   r   r   r   r   r   ZSkipper.start_element_handler*  sC    }}$$==  ,++/DK -r   c                s   V P                   ^ 8X  dT   V P                  V P                  P                  n        V P
                  V P                  P                  n        RV n        R# V P                   ^,
          V n         V P
                  ! V!   R# r   )r   r   r   rP   r_   r   ra   r   r   r   r`   ZSkipper.end_element_handler0  s^    ;;! 9=DMM!!56:mmDMM!!3 DM++/DKMM4 r   )r   r   Nr   )	r3   r4   r5   r6   r7   r   r`   r8   r9   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                   sR   a  ] tR tRt o RtRR ltR tR tR tR t	R	 t
R
 tRtV tR# )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                s    VP                   \        8X  d   Wn        Wn        MVP                  V n        Wn        \
        P                  W4       R # r   )r   r   originalDocumentr   r   rJ   r   )r   r   rR   r   r   r   ZFragmentBuilder.__init__X  s<    },$+!"L$+$9$9D!"Ld,r   c                s>    \         P                  V 4       R V n        R # r   )rJ   rQ   fragmentr   r   r   rQ   ZFragmentBuilder.reseta  s    4 r   c                s@    V P                  VP                  4       4      # )zJParse a document fragment from a file object, returning the
fragment node.)r   ry   r   r~   r   r   r   ZFragmentBuilder.parseFilee  s     		,,r   c                s6   Wn         V P                  4       pV P                  P                  pRpV'       d}   VP                  ;'       g    V P                  4       pVP                  '       d!   RVP                  : RVP                  : R2pM(VP                  '       d   RVP                  ,          pMRpV P                  4       p\        WEV3,          p VP                  VR4       T P                  pT P                  4        T#    T P                  4        h ; i)zEParse a document fragment from a string, returning the
fragment node. zPUBLIC "z" ""zSYSTEM "%s"T)_sourcerV   r   r   r   _getDeclarationsr   r   _getNSattrs_FRAGMENT_BUILDER_TEMPLATErz   rQ   r   )	r   r   rx   r   Zidentr   ZnsattrsrX   r   s	   &&       r   r   ZFragmentBuilder.parseStringj  s     !''//++FFt/D/D/FF#,,g.>.>@!!!%(8(88F""$-0HH	LL4( ==

	JJLs   D Dc                s   V P                   P                  P                  pRpV'       Ed   \        VP                  P
                  4       F  pVP                  P                  V4      pV'       d
   VR,           pV: RVP                  : 2pVP                  '       d%   V: RVP                  : RVP                  : R2pKx  V: RVP                  : R2pK  	  \        VP                  P
                  4       F  pVP                  P                  V4      pV'       d
   VR,           pV: RVP                  : 2pVP                  '       d$   V: RVP                  : RVP                  : R	2pMEVP                  '       d   V: RVP                  : R	2pMV: R
VP                  P                  : R	2pVP                  '       d   V: RVP                  : 2pVR,           pK  	  V# )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 Z>)r   r   r   r   r   ZlengthZitemZnodeNamer   r   r   Z
firstChildr   r   )r   r   r>   r   Znotationr   s   &     r   r   Z FragmentBuilder._getDeclarations  so    ,,,,447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                s    R # )r   r   r   r   r   r   ZFragmentBuilder._getNSattrs  s    r   c                s   V\         8X  d   V P                  pV P                  pV P                  P	                  V4      pV P
                  V n        V P                  P                  4       V n        V P                  V n         VP                  V P                  R 4       W`n        WPn        RV n	        R# \        P                  WW#V4      #   Y`n        YPn        RT n	        i ; i)TNr   )$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDrX   rY   rP   ZExternalEntityParserCreater   ZcreateDocumentFragmentr   rz   r   rJ   rr   )r   r   r   r   r   Zold_documentZold_cur_noderx   s   &&&&&   r   rr   Z+FragmentBuilder.external_entity_ref_handler  s    ;;  ==L<<L\\<<WEF 11DM MM@@BDM==DL$T\\40+ ,#I;;tx9 9  , ,#s   C	 	C)r   r   rY   rX   r   r   r   )r3   r4   r5   r6   r   r   rQ   r   r   r   r   rr   r8   r9   r:   r;   r   r   r   O  s3     --
8"H9 9r   r   c                   sB   a  ] tR tRt o RtR tR tR tR tR t	RtT tR	# )

Namespacesi  z7Mix-in class for builders; adds support for namespaces.c                s    . V n         R # r   )_ns_ordered_prefixesr   r   r   _initNamespacesZNamespaces._initNamespaces  s     %'!r   c                sB    \         P                  ! RR7      pRVn        V# )z'Create a new namespace-handling parser.r@   )Znamespace_separatorT)r   rS   Znamespace_prefixesrw   r,   r   rT   ZNamespaces.createParser  s    ##<$(!r   c                s    \         P                  W4       V P                  P                  '       d   V P                  Vn        R# R# )z.Insert the namespace-handlers onto the parser.N)rJ   rU   rK   Znamespace_declarationsstart_namespace_decl_handlerZStartNamespaceDeclHandlerrw   r   r   rU   ZNamespaces.install  s6    T*==///11 , 0r   c                s>    V P                   P                  W34       R# )z/Push this namespace declaration on our storage.N)r   r   )r   rG   rE   r   r   r   Z'Namespaces.start_namespace_decl_handler  s    !!((&7r   c                s   R V9   d   \        W4      w  r4rVM\        pTpRp\        p\        P                  ! WcWT4      pV P
                  Vn        \        V P                  V4       Wpn        V P                  '       d   V P                   F  w  rSV'       d0   \        P                  ! \        V RV,           4      \        VR4      pM!\        P                  ! R\        R\        4      pW8n        V P
                  Vn        \        Wx4       K  	  V P                  R V'       d   VP                  4        VP                   p	VP"                  p
\%        ^ \'        V4      ^4       F  pW+,          pW+^,           ,          pR V9   d0   \        W4      w  r4rV\        P                  ! WcWE4      pWV&   WW43&   M/\        P                  ! V\        V\        4      pWV&   W\        V3&   V P
                  Vn        Wn        Wxn        K  	  R# R# )r@   Nxmlns:xmlnsr   )rI   r   r   r   ZElementrX   r   r   rY   r   r   r?   r   r   r   Z_ensure_attributes_attrs_attrsNSr   rA   ZownerElement)r   rC   r   rE   rF   rG   rH   r   r   r   r   r   r$   r   s   &&&           r   r   Z 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   )r   rY   N)r3   r4   r5   r6   r   r   rT   rU   r   r   r`   r8   r9   r:   r;   r   r   r     s'     A'
38-&^ r   r   c                   s*   a  ] tR tRt o RtR tRtV tR# )ExpatBuilderNSi#  z*Document builder that supports namespaces.c                P    \         P                  V 4       V P                  4        R # r   )rJ   rQ   r   r   r   r   rQ   ZExpatBuilderNS.reset&  s    4 r   r   N)r3   r4   r5   r6   r   rQ   r8   r9   r:   r;   r   r   r   #  s     4 r   r   c                   s0   a  ] tR tRt o RtR tR tRtV tR# )FragmentBuilderNSi+  z*Fragment builder that supports namespaces.c                r   r   )r   rQ   r   r   r   r   rQ   ZFragmentBuilderNS.reset.  s    d#r   c                s\   RpV P                   p. pV'       d   \        VR4      '       dt   VP                  P                  4        FU  w  rEWC9   d   K  VP	                  V4       V'       d   RV,           pMRpV'       d   V: RV: RV: R2pKJ  RV: RV: R2pKW  	  VP
                  pK  V# )	zFReturn string of namespace attributes from this element and
ancestors.r   _ns_prefix_urir   r   z
    z='Z'r@   )r   Zhasattrr   Zitemsr   r   )r   attrsr   r   rG   rE   Zdeclnames   &      r   r   ZFragmentBuilderNS._getNSattrs2  s     ,,w 011#*#9#9#?#?#AKF{ HHV$#+f#4#*5:Hc J  /7 < $B ((Gr   r   N)	r3   r4   r5   r6   r   rQ   r   r8   r9   r:   r;   r   r   r   +  s     4 r   r   c                   s    ] tR tRtRtRtR# )r}   iP  zEException raised to short-circuit parsing in InternalSubsetExtractor.r   N)r3   r4   r5   r6   r   r8   r   r   r   r}   r}   P  s    Or   r}   c                   sR   a  ] tR tRt o RtRtR tR tR tR t	R t
R	 tR
 tRtV tR# )r   iT  zBXML processor which can rip out the internal document type subset.Nc                s    V P                   # )z'Return the internal subset as a string.r   r   r   r   r   Z!InternalSubsetExtractor.getSubsetY  s    {{r   c                V     \         P                  W4       R #   \         d     R # i ; ir   )rJ   r   r}   r   r   r   r   Z!InternalSubsetExtractor.parseFile]  s'    	""4. 		    ((c                r   r   )rJ   r   r}   )r   r   r   r   r   Z#InternalSubsetExtractor.parseStringc  s'    	$$T2 		r   c                sJ    V P                   Vn        V P                  Vn        R # r   )r\   r]   r   r_   rw   r   r   rU   ZInternalSubsetExtractor.installi  s    )-)H)H&%)%?%?"r   c                s    V'       dF   V P                  4       p. V n        V P                  P                  Vn        V P                  Vn        R # \        4       hr   )rV   r   r   ZDefaultHandlerr   r   r}   )r   rC   r   r   r   rx   r   r   r\   Z2InternalSubsetExtractor.start_doctype_decl_handlerm  s@    ^^%FDK$(KK$6$6F!+/+H+HF(-r   c                s    R P                  V P                  4      P                  RR4      P                  RR4      pWn        \        4       h)r   z
Z
Z)Zjoinr   Zreplacer}   )r   r>   r,   r   r   Z0InternalSubsetExtractor.end_doctype_decl_handlerw  s;    GGDKK ((6>>tTJmr   c                s    \        4       hr   )r}   )r   rC   r   r   r   r   Z-InternalSubsetExtractor.start_element_handler|  s
    mr   r   )r3   r4   r5   r6   r   r   r   r   r   rU   r\   r   r   r8   r9   r:   r;   r   r   r   T  s6     LF@ 
 r   r   c                s   V'       d   \        4       pM
\        4       p\        V \        4      '       d1   \	        V R4      ;_uu_ 4       pVP                  V4      pRRR4       V# VP                  V 4      pV#   + '       g   i     X# ; i)zsParse a document, returning the resulting Document node.

'file' may be either a file name or an open file object.
rbN)r   rJ   
isinstancestropenr   )r~   
namespacesr=   fpresultr   r   parser     su    
  ".$$&&r*F  M ""4(M	  Ms   A77B	c                s^    V'       d   \        4       pM
\        4       pVP                  V 4      # )zGParse a document from a string, returning the resulting
Document node.
)r   rJ   r   )r   r   r=   r/   r   r   r     s'      ".v&&r   c                s   V'       d   \        V4      pM\        V4      p\        V \        4      '       d1   \	        V R4      ;_uu_ 4       pVP                  V4      pRRR4       V# VP                  V 4      pV#   + '       g   i     X# ; i)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   r=   r   r   s   &&&   r   parseFragmentr     sz     #G,!'*$$&&r*F  M ""4(M	  Ms   
A99B
	c                sb    V'       d   \        V4      pM\        V4      pVP                  V 4      # )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   r=   r   r   parseFragmentStringr     s,    
 #G,!'*v&&r   c                sR    V P                   '       d   \        V 4      # \        V 4      # )z,Create a builder based on an Options object.)r   r   rJ   )rR   r   r   makeBuilderr     s$    g&&G$$r   )T)3r   Zxml.domr    r   r   r   r   r   Zxml.parsersr   Zxml.dom.minidomr   r   Zxml.dom.NodeFilterr	   r   r   r   ZDOMBuilderFilterr   r   r   r   ZgetDOMImplementationrW   ZTypeInfor"   Zobjectr   r?   rI   rJ   r   rM   r   r   r   r   r   r   r   r   r   Z	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   