<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
a
    XC?h·‹  ã                   @   s  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 ¡ Ze dd¡e dd	¡e dd
¡e dd¡e dd¡e dd¡e dd¡e dd¡e dd¡dœ	ZG dd„ deƒZdd„ Zdd„ ZG dd„ dƒZeeefZ G dd„ deƒZ!G dd„ deƒZ"G dd„ de"ƒZ#G d d!„ d!e"ƒZ$d"Z%d#e% Z&G d$d%„ d%eƒZ'G d&d'„ d'ƒZ(G d(d)„ d)e(eƒZ)G d*d+„ d+e(e'ƒZ*G d,d-„ d-e+ƒZ,G d.d/„ d/eƒZ-d;d1d2„Z.d<d3d4„Z/d=d5d6„Z0d>d7d8„Z1d9d:„ Z2dS )?z™Facility 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)Ú
NodeFilterNZcdataÚenumerationÚentityÚentitiesÚidZidrefZidrefsZnmtokenZnmtokens)	ZCDATAÚENUMZENTITYZENTITIESÚIDZIDREFZIDREFSZNMTOKENZNMTOKENSc                   @   sZ   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚElementInfo©Ú
_attr_infoÚ_modelÚtagNameNc                 C   s   || _ g | _|| _d S ©N)r   r   r   )Úselfr   Úmodel© r   ú9/opt/alt/python39/lib64/python3.9/xml/dom/expatbuilder.pyÚ__init__?   s    zElementInfo.__init__c                 C   s   | j | j| jfS r   r   ©r   r   r   r   Ú__getstate__D   s    zElementInfo.__getstate__c                 C   s   |\| _ | _| _d S r   r   )r   Ústater   r   r   Ú__setstate__G   s    zElementInfo.__setstate__c                 C   sN   | j D ]@}|d |kr|d }|d dkr6td   S t|d    S qtjS )Né   éþÿÿÿr   ú(r   )r   Ú_typeinfo_mapr   Ú_no_type)r   ÚanameÚinfoÚtr   r   r   ÚgetAttributeTypeJ   s    
zElementInfo.getAttributeTypec                 C   s   t jS r   )r   r%   )r   ZnamespaceURIZ	localNamer   r   r   ÚgetAttributeTypeNST   s    zElementInfo.getAttributeTypeNSc                 C   s,   | j r$| j d }|tjjtjjfvS dS d S ©Nr   F)r   r   r   ZXML_CTYPE_ANYZXML_CTYPE_MIXED)r   Útyper   r   r   ÚisElementContentW   s    
ÿzElementInfo.isElementContentc                 C   s    | j r| j d tjjkS dS d S r+   )r   r   r   ZXML_CTYPE_EMPTYr   r   r   r   ÚisEmpty_   s    zElementInfo.isEmptyc                 C   s,   | j D ] }|d |kr|d dk  S qdS )Nr!   r"   r   F)r   )r   r&   r'   r   r   r   ÚisIde   s    
zElementInfo.isIdc                 C   s   |   ||f¡S r   )r/   )r   ZeuriZenameZaurir&   r   r   r   ÚisIdNSk   s    zElementInfo.isIdNS)N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r    r)   r*   r-   r.   r/   r0   r   r   r   r   r   <   s   

r   c                 C   s   |   ||¡S r   )Ú_intern_setdefault)ÚbuilderÚsr   r   r   Ú_interno   s    r8   c                 C   s˜   |  d¡}| j}t|ƒdkrR|\}}}|||ƒ}d||f }|||ƒ}|||ƒ}n4t|ƒdkrz|\}}t}|||ƒ }}ntd| ƒ‚|||ƒ|||fS )Nú é   z%s:%sé   z4Unsupported syntax: spaces in URIs not supported: %r)Úsplitr5   Úlenr   Ú
ValueError)r6   ÚnameÚpartsÚinternÚuriÚ	localnameÚprefixÚqnamer   r   r   Ú_parse_ns_namer   s    



rF   c                   @   sò   e Zd ZdZd;dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ ZdS )<ÚExpatBuilderzPDocument builder that uses Expat to build a ParsedXML.DOM document
    instance.Nc                 C   sP   |d u rt  ¡ }|| _| jjd ur2t| jjƒ| _nd | _t| _d | _|  	¡  d S r   )
r   ZOptionsÚ_optionsÚfilterÚFilterVisibilityControllerÚ_filterr   Ú_finish_start_elementÚ_parserÚreset)r   Úoptionsr   r   r   r   ‰   s    zExpatBuilder.__init__c                 C   s   t  ¡ S )zCreate a new parser object.)r   ÚParserCreater   r   r   r   ÚcreateParser—   s    zExpatBuilder.createParserc                 C   sF   | j s@|  ¡ | _ | j jj| _d| j _d| j _d| j _|  | j ¡ | j S )z7Return the parser object, creating a new one if needed.T)	rM   rQ   rA   Ú
setdefaultr5   Zbuffer_textZordered_attributesZspecified_attributesÚinstallr   r   r   r   Ú	getParser›   s    
zExpatBuilder.getParserc                 C   s,   t  tdd¡| _| j| _| jj| _d| _dS )z6Free all data structures used during DOM construction.NF)ÚtheDOMImplementationZcreateDocumentr   ÚdocumentÚcurNodeÚ
_elem_infoÚ_cdatar   r   r   r   rN   ¦   s    ÿ
zExpatBuilder.resetc                 C   s–   | j |_| j|_| j|_| j|_| jj	r0| j
|_| j|_| jjrH| j|_| jjrj| 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ÚProcessingInstructionHandlerrH   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   r   rS   ®   s$    
zExpatBuilder.installc                 C   s€   |   ¡ }d}zH| d¡}|sqF| |d¡ |r@| jjr@|  |¡ d}q| dd¡ W n tyf   Y n0 | j}|  ¡  d| _|S )zIParse a document from a file object, returning the document
        node.Ti @  Fó    N)	rT   ÚreadÚParserV   ÚdocumentElementÚ_setup_subsetÚParseEscaperN   rM   )r   Úfilerv   Zfirst_bufferÚbufferÚdocr   r   r   Ú	parseFileÅ   s"    

zExpatBuilder.parseFilec                 C   sN   |   ¡ }z| |d¡ |  |¡ W n ty4   Y n0 | j}|  ¡  d| _|S )z<Parse a document from a string, returning the document node.TN)rT   ry   r{   r|   rV   rN   rM   )r   Ústringrv   r   r   r   r   ÚparseStringÛ   s    zExpatBuilder.parseStringc                 C   s.   | j jr*tƒ }| |¡ | ¡ }|| j j_dS )z/Load the internal subset if there might be one.N)rV   ÚdoctypeÚInternalSubsetExtractorr‚   Ú	getSubsetÚinternalSubset)r   r~   Z	extractorÚsubsetr   r   r   r{   è   s
    
zExpatBuilder._setup_subsetc                 C   s¤   | j j |||¡}| j |_t| j |ƒ || j _| jrj| j |¡tkrjd | j _| j j	d= d }d | j
_d | j
_|r |d ur†g |j_g |j_d | j
_d | j
_| j| j
_d S ©Néÿÿÿÿ)rV   ÚimplementationZcreateDocumentTypeÚownerDocumentr	   rƒ   rK   Ú
acceptNodeÚFILTER_REJECTÚ
childNodesrM   rc   re   r   Ú_seqÚ	notationsrh   ra   Úend_doctype_decl_handlerÚEndDoctypeDeclHandler)r   ZdoctypeNameÚsystemIdÚpublicIdÚhas_internal_subsetrƒ   r   r   r   rZ   ð   s&    ÿ
z'ExpatBuilder.start_doctype_decl_handlerc                 C   s2   | j jr| j| j_| j| j_| js.| js.t	| _
d S r   )rH   rf   rg   rM   rh   r`   ra   rX   rK   r   Ú_finish_end_elementr   r   r   r   r‘     s
    

z%ExpatBuilder.end_doctype_decl_handlerc                 C   s@   | j  ||¡}t| j|ƒ | jr<| j |¡tkr<| j |¡ d S r   )rV   ZcreateProcessingInstructionr	   rW   rK   rŒ   r   ÚremoveChild)r   ÚtargetÚdataÚnoder   r   r   r`     s    zExpatBuilder.pi_handlerc                 C   sœ   | j j}| jrH| jr4|d jtkr4|d  |¡ d S | j |¡}d| _nD|rv|d jt	krv|d }|j
| }||_
d S t ¡ }||_
| j|_t| j |ƒ d S )Nr‰   T)rW   rŽ   rY   Ú_cdata_continueÚnodeTypeÚCDATA_SECTION_NODEZ
appendDatarV   ZcreateCDATASectionÚ	TEXT_NODEr™   r   ÚTextr‹   r	   )r   r™   rŽ   rš   Úvaluer   r   r   rm     s$    ÿ
z)ExpatBuilder.character_data_handler_cdatac                 C   s^   | j j}|r2|d jtkr2|d }|j| |_d S t ¡ }|j| |_| j|_t	| j |ƒ d S rˆ   )
rW   rŽ   rœ   rž   r™   r   rŸ   rV   r‹   r	   )r   r™   rŽ   rš   r   r   r   ro   &  s    z#ExpatBuilder.character_data_handlerc           
      C   s€   |rd S | j jsd S | j ||||¡}|d urF| j |¡}	|j |	¡ | jjjj |¡ | j	r|| j	 
|¡tkr|| jjjjd= d S rˆ   )rH   r   rV   Z_create_entityZcreateTextNoderŽ   Úappendrƒ   r   rK   rŒ   r   )
r   Z
entityNameZis_parameter_entityr    Úbaser“   r”   ÚnotationNamerš   Úchildr   r   r   rb   1  s    
ÿz ExpatBuilder.entity_decl_handlerc                 C   sJ   | j  |||¡}| j jjj |¡ | jrF| j |¡tkrF| j jjjd= d S rˆ   )	rV   Z_create_notationrƒ   r   r   r¡   rK   rŒ   ÚFILTER_ACCEPT)r   r£   r¢   r“   r”   rš   r   r   r   rd   C  s    z"ExpatBuilder.notation_decl_handlerc                 C   s>   | j  |¡}t| j|ƒ | jr:| j |¡tkr:| j |¡ d S r   )rV   ZcreateCommentr	   rW   rK   rŒ   r   r—   )r   r™   rš   r   r   r   rg   I  s    zExpatBuilder.comment_handlerc                 C   s   d| _ d| _d S )NTF©rY   r›   r   r   r   r   ri   O  s    z(ExpatBuilder.start_cdata_section_handlerc                 C   s   d| _ d| _d S )NFr¦   r   r   r   r   rk   S  s    z&ExpatBuilder.end_cdata_section_handlerc                 C   s   dS ©Nr!   r   )r   Úcontextr¢   r“   r”   r   r   r   rp   W  s    z(ExpatBuilder.external_entity_ref_handlerc                 C   s2   | j d u r| jst| _| j|  ¡ _|  ||¡ d S r   )rK   rX   r   r–   Ústart_element_handlerrT   r]   )r   r?   Ú
attributesr   r   r   r\   Z  s    z"ExpatBuilder.first_element_handlerc                 C   sŠ   | j  |¡}t| j|ƒ || _|rptdt|ƒdƒD ]<}t || td t	¡}||d  }||_
| j |_t||ƒ q2|| j jur†|  |¡ d S )Nr   r;   r!   )rV   ZcreateElementr	   rW   Úranger=   r   ÚAttrr   r   r    r‹   r
   rz   rL   )r   r?   rª   rš   ÚiÚar    r   r   r   r©   `  s    ÿz"ExpatBuilder.start_element_handlerc                 C   sj   | j rf|| jju rd S | j  |¡}|tkr4t| ƒ n|tkrFt| ƒ nd S |j| _	|j 
|¡ | ¡  d S r   )rK   rV   rz   ÚstartContainerr   ÚRejecterÚFILTER_SKIPÚSkipperÚ
parentNoderW   r—   Úunlink)r   rš   Zfiltr   r   r   rL   q  s    

z"ExpatBuilder._finish_start_elementc                 C   s   | j }|j| _ |  |¡ d S r   )rW   r³   r–   )r   r?   rW   r   r   r   r^   ˆ  s    z ExpatBuilder.end_element_handlerc                 C   s\   | j  |j¡}|r|  ||¡ | jrX|| jju r4d S | j |¡tkrX| j	 
|¡ | ¡  d S r   )rX   Úgetr   Ú_handle_white_text_nodesrK   rV   rz   rŒ   r   rW   r—   r´   )r   rW   r'   r   r   r   r–     s    z ExpatBuilder._finish_end_elementc                 C   sZ   | j js| ¡ sd S g }|jD ]"}|jtkr|j ¡ s| |¡ q|D ]}| 	|¡ qFd S r   )
rH   Zwhitespace_in_element_contentr-   rŽ   rœ   rž   r™   Ústripr¡   r—   )r   rš   r'   ÚLr¤   r   r   r   r¶   ˜  s    ÿ
z%ExpatBuilder._handle_white_text_nodesc                 C   s0   | j  |¡}|d u r&t||ƒ| j |< n||_d S r   )rX   rµ   r   r   )r   r?   r   r'   r   r   r   rs   ©  s    z!ExpatBuilder.element_decl_handlerc              
   C   sF   | j  |¡}|d u r&t|ƒ}|| j |< |j d |d d |d||g¡ d S ©Nr   )rX   rµ   r   r   r¡   )r   Úelemr?   r,   ÚdefaultZrequiredr'   r   r   r   rt   ±  s    
ÿz!ExpatBuilder.attlist_decl_handlerc                 C   s2   || j _|| j _|dkr.|r&d| j _nd| j _d S )Nr   TF)rV   ÚversionÚencodingÚ
standalone)r   r¼   r½   r¾   r   r   r   rr   ¹  s    
zExpatBuilder.xml_decl_handler)N) r1   r2   r3   Ú__doc__r   rQ   rT   rN   rS   r€   r‚   r{   rZ   r‘   r`   rm   ro   rb   rd   rg   ri   rk   rp   r\   r©   rL   r^   r–   r¶   rs   rt   rr   r   r   r   r   rG   …   s:   
rG   c                   @   s   e Zd ZdZdZdd„ Zdd„ Zd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 )
rJ   zoWrapper around a DOMBuilderFilter which implements the checks
    to make the whatToShow filter attribute work.©rI   c                 C   s
   || _ d S r   rÀ   )r   rI   r   r   r   r   Î  s    z#FilterVisibilityController.__init__c                 C   sT   | j |j }| jj|@ rL| j |¡}|tkr0t‚|tvrHtdt	|ƒ ƒ‚|S t
S d S )Nz)startContainer() returned illegal value: )Ú_nodetype_maskrœ   rI   Ú
whatToShowr¯   ÚFILTER_INTERRUPTr|   Ú_ALLOWED_FILTER_RETURNSr>   Úreprr¥   )r   rš   ÚmaskÚvalr   r   r   r¯   Ñ  s    
ÿz)FilterVisibilityController.startContainerc                 C   s„   | j |j }| jj|@ r|| j |¡}|tkr0t‚|tkr`|j}|j	d d … D ]}| 
|¡ qLtS |tvrxtdt|ƒ ƒ‚|S tS d S )Nz%acceptNode() returned illegal value: )rÁ   rœ   rI   rÂ   rŒ   rÃ   r|   r±   r³   rŽ   ZappendChildr   rÄ   r>   rÅ   r¥   )r   rš   rÆ   rÇ   Úparentr¤   r   r   r   rŒ   Þ  s     
ÿz%FilterVisibilityController.acceptNodeN)#r1   r2   r3   r¿   r4   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Á   r   r   r   r   rJ   È  s$   ôrJ   c                   @   s   e Zd ZdZdd„ ZdS )ÚFilterCrutch)Ú_builderÚ_levelÚ
_old_startÚ_old_endc                 C   s6   d| _ || _|j}|j| _|j| _| j|_| j|_d S r¹   )	rÌ   rË   rM   r]   rÍ   r_   rÎ   r©   r^   )r   r6   rv   r   r   r   r     s    zFilterCrutch.__init__N)r1   r2   r3   r4   r   r   r   r   r   rÊ     s   rÊ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r°   r   c                 C   s,   t  | |¡ |j}dD ]}t||d ƒ qd S )N)ra   rh   rn   rj   rl   rq   )rÊ   r   rM   Úsetattr)r   r6   rv   r?   r   r   r   r     s    zRejecter.__init__c                 G   s   | j d | _ d S r§   )rÌ   ©r   Úargsr   r   r   r©     s    zRejecter.start_element_handlerc                 G   s@   | j dkr0| jj}| j |¡ | j|_| j|_n| j d | _ d S ©Nr   r!   )rÌ   rË   rM   rS   rÍ   r]   rÎ   r_   )r   rÑ   rv   r   r   r   r^      s    

zRejecter.end_element_handlerN)r1   r2   r3   r4   r   r©   r^   r   r   r   r   r°     s   r°   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r²   r   c                 G   s.   | j j}| j|Ž  | j j|ur*| jd | _d S r§   )rË   rW   rÍ   rÌ   )r   rÑ   rš   r   r   r   r©   -  s    
zSkipper.start_element_handlerc                 G   sD   | j dkr*| j| jj_| j| jj_d | _n| j d | _ | j|Ž  d S rÒ   )rÌ   rÍ   rË   rM   r]   rÎ   r_   rÐ   r   r   r   r^   3  s    
zSkipper.end_element_handlerN)r1   r2   r3   r4   r©   r^   r   r   r   r   r²   *  s   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                   @   sJ   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚFragmentBuilderzñBuilder 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                 C   s6   |j tkr|| _|| _n|j| _|| _t | |¡ d S r   )rœ   rÉ   ÚoriginalDocumentr¨   r‹   rG   r   )r   r¨   rO   r   r   r   r   [  s    
zFragmentBuilder.__init__c                 C   s   t  | ¡ d | _d S r   )rG   rN   Úfragmentr   r   r   r   rN   d  s    
zFragmentBuilder.resetc                 C   s   |   | ¡ ¡S )zRParse a document fragment from a file object, returning the
        fragment node.)r‚   rx   ©r   r}   r   r   r   r€   h  s    zFragmentBuilder.parseFilec           	      C   sª   || _ |  ¡ }| jj}d}|rV|jp*|  ¡ }|jrDd|j|jf }qZ|jrZd|j }nd}|  ¡ }t	|||f }z| 
|d¡ W n   |  ¡  ‚ Y n0 | j}|  ¡  |S )zMParse a document fragment from a string, returning the
        fragment node.Ú zPUBLIC "%s" "%s"zSYSTEM "%s"T)Ú_sourcerT   rÔ   rƒ   r†   Ú_getDeclarationsr”   r“   Ú_getNSattrsÚ_FRAGMENT_BUILDER_TEMPLATEry   rN   rÕ   )	r   r   rv   rƒ   Zidentr‡   ZnsattrsrV   rÕ   r   r   r   r‚   m  s.    
ÿzFragmentBuilder.parseStringc                 C   s  | j jj}d}|rt|jjƒD ]R}|j |¡}|r<|d }d||jf }|jrdd||j|j	f }q d||j	f }q t|j
jƒD ]†}|j
 |¡}|rœ|d }d||jf }|jrÄd||j|j	f }n&|j	rÚd||j	f }nd	||jjf }|jrþd
||jf }|d }q€|S )z Re-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%s<!NOTATION %sz!%s PUBLIC "%s"
             "%s">z%s SYSTEM "%s">z%s<!ENTITY %sz %s PUBLIC "%s"
             "%s"z%s SYSTEM "%s"z%s "%s"z%s NOTATION %sú>)r¨   r‹   rƒ   r«   r   ZlengthÚitemZnodeNamer”   r“   r   Z
firstChildr™   r£   )r   rƒ   r7   r­   Znotationr   r   r   r   rÙ   ‰  s:    
ÿÿ
z FragmentBuilder._getDeclarationsc                 C   s   dS )Nr×   r   r   r   r   r   rÚ   ­  s    zFragmentBuilder._getNSattrsc                 C   s   |t krz| j}| j}| j |¡}| j| _| j ¡ | _| j| _z$| | j	d¡ W || _|| _d | _	n|| _|| _d | _	0 dS t
 | ||||¡S d S )NTr‰   )Ú$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDrV   rW   rM   ZExternalEntityParserCreaterÔ   ZcreateDocumentFragmentrÕ   ry   rØ   rG   rp   )r   r¨   r¢   r“   r”   Zold_documentZold_cur_noderv   r   r   r   rp   °  s&    þ
ÿz+FragmentBuilder.external_entity_ref_handler)N)r1   r2   r3   r¿   r   rN   r€   r‚   rÙ   rÚ   rp   r   r   r   r   rÓ   R  s   
	$rÓ   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú
Namespacesz7Mix-in class for builders; adds support for namespaces.c                 C   s
   g | _ d S r   )Ú_ns_ordered_prefixesr   r   r   r   Ú_initNamespacesÊ  s    zNamespaces._initNamespacesc                 C   s   t jdd}d|_|S )z'Create a new namespace-handling parser.r9   )Znamespace_separatorT)r   rP   Znamespace_prefixesru   r   r   r   rQ   Ï  s    zNamespaces.createParserc                 C   s    t  | |¡ | jjr| j|_dS )z.Insert the namespace-handlers onto the parser.N)rG   rS   rH   Znamespace_declarationsÚstart_namespace_decl_handlerZStartNamespaceDeclHandlerru   r   r   r   rS   Õ  s    ÿzNamespaces.installc                 C   s   | j  ||f¡ dS )z/Push this namespace declaration on our storage.N)rà   r¡   )r   rD   rB   r   r   r   râ   Ü  s    z'Namespaces.start_namespace_decl_handlerc                 C   s‚  d|v rt | |ƒ\}}}}nt}|}d }t}t ||||¡}| j|_t| j|ƒ || _| j	rÀ| j	D ]P\}}|rŠt 
t| d| ƒt|d¡}nt 
dtdt¡}||_| j|_t||ƒ qb| j	d d …= |r~| ¡  |j}	|j}
tdt|ƒdƒD ]’}|| }||d  }d|v rDt | |ƒ\}}}}t 
||||¡}||	|< ||
||f< n$t 
|t|t¡}||	|< ||
t|f< | j|_||_||_qêd S )Nr9   úxmlns:Úxmlnsr   r;   r!   )rF   r   r   r   ZElementrV   r‹   r	   rW   rà   r¬   r8   r   r    r
   Z_ensure_attributesÚ_attrsÚ_attrsNSr«   r=   ZownerElement)r   r?   rª   rB   rC   rD   rE   rš   r®   rå   ræ   r­   r&   r    r   r   r   r©   à  sV    ÿÿ
ÿz Namespaces.start_element_handlerN)
r1   r2   r3   r¿   rá   rQ   rS   râ   r©   r^   r   r   r   r   rß   Ç  s   5rß   c                   @   s   e Zd ZdZdd„ ZdS )ÚExpatBuilderNSz*Document builder that supports namespaces.c                 C   s   t  | ¡ |  ¡  d S r   )rG   rN   rá   r   r   r   r   rN   )  s    
zExpatBuilderNS.resetN)r1   r2   r3   r¿   rN   r   r   r   r   rç   &  s   rç   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚFragmentBuilderNSz*Fragment builder that supports namespaces.c                 C   s   t  | ¡ |  ¡  d S r   )rÓ   rN   rá   r   r   r   r   rN   1  s    
zFragmentBuilderNS.resetc                 C   s‚   d}| j }g }|r~t|dƒrv|j ¡ D ]N\}}||v r8q&| |¡ |rPd| }nd}|rhd|||f }q&d||f }q&|j}q|S )zNReturn string of namespace attributes from this element and
        ancestors.r×   Ú_ns_prefix_urirã   rä   z%s
    %s='%s'z %s='%s')r¨   Úhasattrré   Úitemsr¡   r³   )r   Úattrsr¨   r¸   rD   rB   Zdeclnamer   r   r   rÚ   5  s"    


zFragmentBuilderNS._getNSattrsN)r1   r2   r3   r¿   rN   rÚ   r   r   r   r   rè   .  s   rè   c                   @   s   e Zd ZdZdS )r|   zEException raised to short-circuit parsing in InternalSubsetExtractor.N)r1   r2   r3   r¿   r   r   r   r   r|   S  s   r|   c                   @   sL   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )r„   zBXML processor which can rip out the internal document type subset.Nc                 C   s   | j S )z'Return the internal subset as a string.)r‡   r   r   r   r   r…   \  s    z!InternalSubsetExtractor.getSubsetc                 C   s(   zt  | |¡ W n ty"   Y n0 d S r   )rG   r€   r|   rÖ   r   r   r   r€   `  s    z!InternalSubsetExtractor.parseFilec                 C   s(   zt  | |¡ W n ty"   Y n0 d S r   )rG   r‚   r|   )r   r   r   r   r   r‚   f  s    z#InternalSubsetExtractor.parseStringc                 C   s   | j |_| j|_d S r   )rZ   r[   r©   r]   ru   r   r   r   rS   l  s    zInternalSubsetExtractor.installc                 C   s0   |r&|   ¡ }g | _| jj|_| j|_ntƒ ‚d S r   )rT   r‡   r¡   ZDefaultHandlerr‘   r’   r|   )r   r?   r”   r“   r•   rv   r   r   r   rZ   p  s    

z2InternalSubsetExtractor.start_doctype_decl_handlerc                 C   s,   d  | j¡ dd¡ dd¡}|| _tƒ ‚d S )Nr×   z
Ú
ú)Újoinr‡   Úreplacer|   )r   r7   r   r   r   r‘   z  s    z0InternalSubsetExtractor.end_doctype_decl_handlerc                 C   s
   t ƒ ‚d S r   )r|   )r   r?   rì   r   r   r   r©     s    z-InternalSubsetExtractor.start_element_handler)r1   r2   r3   r¿   r‡   r…   r€   r‚   rS   rZ   r‘   r©   r   r   r   r   r„   W  s   
r„   Tc                 C   s`   |rt ƒ }ntƒ }t| tƒrRt| dƒ}| |¡}W d  ƒ q\1 sF0    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ç   rG   Ú
isinstanceÚstrÚopenr€   )r}   Ú
namespacesr6   ÚfpÚresultr   r   r   Úparseƒ  s    
*
rø   c                 C   s   |rt ƒ }ntƒ }| | ¡S )zOParse a document from a string, returning the resulting
    Document node.
    )rç   rG   r‚   )r   rõ   r6   r   r   r   r‚   •  s    r‚   c                 C   sd   |rt |ƒ}nt|ƒ}t| tƒrVt| dƒ}| |¡}W d  ƒ q`1 sJ0    Y  n
| | ¡}|S )zìParse 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õ   r6   rö   r÷   r   r   r   ÚparseFragment   s    

*
rù   c                 C   s    |rt |ƒ}nt|ƒ}| | ¡S )z¼Parse 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õ   r6   r   r   r   ÚparseFragmentString´  s    
rú   c                 C   s   | j rt| ƒS t| ƒS dS )z,Create a builder based on an Options object.N)rõ   rç   rG   )rO   r   r   r   ÚmakeBuilderÀ  s    rû   )T)T)T)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getDOMImplementationrU   ZTypeInfor$   Úobjectr   r8   rF   rG   rÄ   rJ   rÊ   r°   r²   rÞ   rÛ   rÓ   rß   rç   rè   Ú	Exceptionr|   r„   rø   r‚   rù   rú   rû   r   r   r   r   Ú<module>   sf   








÷3  C
:ÿ	÷ÿu_%,



