B
    2*™\q  ã               @   s  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:d0d1„Z-d;d2d3„Z.d<d4d5„Z/d=d6d7„Z0d8d9„ Z1dS )>é    )Ú
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   ú?C:\ALexclude\prg\programme\Python37\Lib\xml\dom\expatbuilder.pyÚ__init__?   s    zElementInfo.__init__c             C   s   | j | j| jfS )N)r   r   r   )r   r   r   r   Ú__getstate__D   s    zElementInfo.__getstate__c             C   s   |\| _ | _| _d S )N)r   r   r   )r   Ústater   r   r   Ú__setstate__G   s    zElementInfo.__setstate__c             C   sJ   xB| j D ]8}|d |kr|d }|d dkr4td S t|d  S qW 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 )N)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k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 )Nr   F)r   r   r   ZXML_CTYPE_EMPTY)r   r   r   r   ÚisEmpty_   s    zElementInfo.isEmptyc             C   s,   x&| j D ]}|d |kr|d dkS qW dS )Nr   r   r   F)r   )r   r#   r$   r   r   r   ÚisIde   s    zElementInfo.isIdc             C   s   |   ||f¡S )N)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+   r,   r   r   r   r   r   <   s   

r   c             C   s   |   ||¡S )N)Ú_intern_setdefault)ÚbuilderÚsr   r   r   Ú_interno   s    r4   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)Úsplitr1   Úlenr   Ú
ValueError)r2   ÚnameÚpartsÚinternÚuriÚ	localnameÚprefixÚqnamer   r   r   Ú_parse_ns_namer   s    



rB   c               @   sî   e 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.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ ZdS );ÚExpatBuilderNc             C   sP   |d krt  ¡ }|| _| jjd k	r2t| jjƒ| _nd | _t| _d | _|  	¡  d S )N)
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 )N)r   ÚParserCreate)r   r   r   r   ÚcreateParser—   s    zExpatBuilder.createParserc             C   sF   | j s@|  ¡ | _ | j jj| _d| j _d| j _d| j _|  | j ¡ | j S )NT)	rI   rM   r=   Ú
setdefaultr1   Zbuffer_textZordered_attributesZspecified_attributesÚinstall)r   r   r   r   Ú	getParser›   s    
zExpatBuilder.getParserc             C   s,   t  td d ¡| _| j| _| jj| _d| _d S )NF)ÚtheDOMImplementationZcreateDocumentr   ÚdocumentÚcurNodeÚ
_elem_infoÚ_cdata)r   r   r   r   rJ   ¦   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 )N)!Ústart_doctype_decl_handlerÚStartDoctypeDeclHandlerÚfirst_element_handlerÚStartElementHandlerÚend_element_handlerÚEndElementHandlerÚ
pi_handlerÚProcessingInstructionHandlerrD   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   rO   ®   s$    
zExpatBuilder.installc             C   s†   |   ¡ }d}yLx:| d¡}|s P | |d¡ |rB| jjrB|  |¡ d}qW | dd¡ W n tk
rl   Y nX | j}|  ¡  d | _|S )NTi @  r   FÚ )	rP   ÚreadÚParserR   ÚdocumentElementÚ_setup_subsetÚParseEscaperJ   rI   )r   Úfilerq   Zfirst_bufferÚbufferÚdocr   r   r   Ú	parseFileÅ   s$    

zExpatBuilder.parseFilec             C   sP   |   ¡ }y| |d¡ |  |¡ W n tk
r6   Y nX | j}|  ¡  d | _|S )NT)rP   rt   rv   rw   rR   rJ   rI   )r   Ústringrq   rz   r   r   r   ÚparseStringÛ   s    zExpatBuilder.parseStringc             C   s.   | j jr*tƒ }| |¡ | ¡ }|| j j_d S )N)rR   ÚdoctypeÚInternalSubsetExtractorr}   Ú	getSubsetÚinternalSubset)r   ry   Z	extractorÚsubsetr   r   r   rv   è   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 k	r†g |j_g |j_d | j
_d | j
_| j| j
_d S )Néÿÿÿÿ)rR   ÚimplementationZcreateDocumentTypeÚownerDocumentr	   r~   rG   Ú
acceptNodeÚFILTER_REJECTÚ
childNodesrI   r_   ra   r   Ú_seqÚ	notationsrd   r]   Úend_doctype_decl_handlerÚEndDoctypeDeclHandler)r   ZdoctypeNameÚsystemIdÚpublicIdÚhas_internal_subsetr~   r   r   r   rV   ð   s$    

z'ExpatBuilder.start_doctype_decl_handlerc             C   s2   | j jr| j| j_| j| j_| js.| js.t	| _
d S )N)rD   rb   rc   rI   rd   r\   r]   rT   rG   r   Ú_finish_end_element)r   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 )N)rR   ZcreateProcessingInstructionr	   rS   rG   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)rS   rˆ   rU   Ú_cdata_continueÚnodeTypeÚCDATA_SECTION_NODEZ
appendDatarR   ZcreateCDATASectionÚ	TEXT_NODEr“   r   ÚTextr…   r	   )r   r“   rˆ   r”   Úvaluer   r   r   ri     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 )Nrƒ   )
rS   rˆ   r–   r˜   r“   r   r™   rR   r…   r	   )r   r“   rˆ   r”   r   r   r   rk   &  s    z#ExpatBuilder.character_data_handlerc       
      C   s€   |rd S | j jsd S | j ||||¡}|d k	rF| j |¡}	|j |	¡ | jjjj |¡ | j	r|| j	 
|¡tkr|| jjjjd= d S )Nrƒ   )rD   r   rR   Z_create_entityZcreateTextNoderˆ   Úappendr~   r‰   rG   r†   r‡   )
r   Z
entityNameZis_parameter_entityrš   Úbaser   rŽ   ÚnotationNamer”   Úchildr   r   r   r^   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 )Nrƒ   )	rR   Z_create_notationr~   rŠ   r‰   r›   rG   r†   ÚFILTER_ACCEPT)r   r   rœ   r   rŽ   r”   r   r   r   r`   C  s    z"ExpatBuilder.notation_decl_handlerc             C   s>   | j  |¡}t| j|ƒ | jr:| j |¡tkr:| j |¡ d S )N)rR   ZcreateCommentr	   rS   rG   r†   r‡   r‘   )r   r“   r”   r   r   r   rc   I  s    zExpatBuilder.comment_handlerc             C   s   d| _ d| _d S )NTF)rU   r•   )r   r   r   r   re   O  s    z(ExpatBuilder.start_cdata_section_handlerc             C   s   d| _ d| _d S )NF)rU   r•   )r   r   r   r   rg   S  s    z&ExpatBuilder.end_cdata_section_handlerc             C   s   dS )Nr   r   )r   Úcontextrœ   r   rŽ   r   r   r   rl   W  s    z(ExpatBuilder.external_entity_ref_handlerc             C   s2   | j d kr| jst| _| j|  ¡ _|  ||¡ d S )N)rG   rT   r   r   Ústart_element_handlerrP   rY   )r   r;   Ú
attributesr   r   r   rX   Z  s    z"ExpatBuilder.first_element_handlerc             C   sŽ   | j  |¡}t| j|ƒ || _|rtxPtdt|ƒdƒD ]<}t || td t	¡}||d  }||_
| j |_t||ƒ q4W || j jk	rŠ|  |¡ d S )Nr   r7   r   )rR   ZcreateElementr	   rS   Úranger9   r   ÚAttrr   r   rš   r…   r
   ru   rH   )r   r;   r¢   r”   ÚiÚarš   r   r   r   r¡   `  s    z"ExpatBuilder.start_element_handlerc             C   sj   | j rf|| jjkrd S | j  |¡}|tkr4t| ƒ n|tkrFt| ƒ nd S |j| _	|j 
|¡ | ¡  d S )N)rG   rR   ru   ÚstartContainerr‡   ÚRejecterÚFILTER_SKIPÚSkipperÚ
parentNoderS   r‘   Úunlink)r   r”   Zfiltr   r   r   rH   q  s    

z"ExpatBuilder._finish_start_elementc             C   s   | j }|j| _ |  |¡ d S )N)rS   r«   r   )r   r;   rS   r   r   r   rZ   ˆ  s    z ExpatBuilder.end_element_handlerc             C   s\   | j  |j¡}|r|  ||¡ | jrX|| jjkr4d S | j |¡tkrX| j	 
|¡ | ¡  d S )N)rT   Úgetr   Ú_handle_white_text_nodesrG   rR   ru   r†   r‡   rS   r‘   r¬   )r   rS   r$   r   r   r   r     s    z ExpatBuilder._finish_end_elementc             C   sb   | j js| ¡ sd S g }x,|jD ]"}|jtkr |j ¡ s | |¡ q W x|D ]}| 	|¡ qLW d S )N)
rD   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 kr&t||ƒ| j |< n||_d S )N)rT   r­   r   r   )r   r;   r   r$   r   r   r   ro   ©  s    z!ExpatBuilder.element_decl_handlerc          
   C   sF   | j  |¡}|d kr&t|ƒ}|| j |< |j d |d d |d||g¡ d S )Nr   )rT   r­   r   r   r›   )r   Úelemr;   r(   ÚdefaultÚrequiredr$   r   r   r   rp   ±  s    
z!ExpatBuilder.attlist_decl_handlerc             C   s2   || j _|| j _|dkr.|r&d| j _nd| j _d S )Nr   TF)rR   ÚversionÚencodingÚ
standalone)r   r´   rµ   r¶   r   r   r   rn   ¹  s    
zExpatBuilder.xml_decl_handler)N)r-   r.   r/   r   rM   rP   rJ   rO   r{   r}   rv   rV   r‹   r\   ri   rk   r^   r`   rc   re   rg   rl   rX   r¡   rH   rZ   r   r®   ro   rp   rn   r   r   r   r   rC   …   s8   
rC   c               @   sŒ   e 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 )	rF   )rE   c             C   s
   || _ d S )N)rE   )r   rE   r   r   r   r   Î  s    z#FilterVisibilityController.__init__c             C   sT   | j |j }| jj|@ rL| j |¡}|tkr0t‚|tkrHtdt	|ƒ ƒ‚|S t
S d S )Nz)startContainer() returned illegal value: )Ú_nodetype_maskr–   rE   Ú
whatToShowr§   ÚFILTER_INTERRUPTrw   Ú_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rd|j}x |j	d d … D ]}| 
|¡ qNW tS |tkr|tdt|ƒ ƒ‚|S tS d S )Nz%acceptNode() returned illegal value: )r·   r–   rE   r¸   r†   r¹   rw   r©   r«   rˆ   ZappendChildr‡   rº   r:   r»   rŸ   )r   r”   r¼   r½   Úparentrž   r   r   r   r†   Þ  s    z%FilterVisibilityController.acceptNodeN)"r-   r.   r/   r0   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   rF   È  s    rF   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 )Nr   )	rÂ   rÁ   rI   rY   rÃ   r[   rÄ   r¡   rZ   )r   r2   rq   r   r   r   r     s    zFilterCrutch.__init__N)r-   r.   r/   r0   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   s0   t  | |¡ |j}xdD ]}t||d ƒ qW d S )N)r]   rd   rj   rf   rh   rm   )rÀ   r   rI   Úsetattr)r   r2   rq   r;   r   r   r   r     s    
zRejecter.__init__c             G   s   | j d | _ d S )Nr   )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Á   rI   rO   rÃ   rY   rÄ   r[   )r   rÆ   rq   r   r   r   rZ      s    

zRejecter.end_element_handlerN)r-   r.   r/   r0   r   r¡   rZ   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|k	r*| jd | _d S )Nr   )rÁ   rS   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 )Nr   r   )rÂ   rÃ   rÁ   rI   rY   rÄ   r[   )r   rÆ   r   r   r   rZ   3  s    
zSkipper.end_element_handlerN)r-   r.   r/   r0   r¡   rZ   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               @   sF   e 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 )ÚFragmentBuilderNc             C   s6   |j tkr|| _|| _n|j| _|| _t | |¡ d S )N)r–   r¿   ÚoriginalDocumentr    r…   rC   r   )r   r    rK   r   r   r   r   [  s    
zFragmentBuilder.__init__c             C   s   t  | ¡ d | _d S )N)rC   rJ   Úfragment)r   r   r   r   rJ   d  s    
zFragmentBuilder.resetc             C   s   |   | ¡ ¡S )N)r}   rs   )r   rx   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 }y| 
|d¡ W n   |  ¡  ‚ Y nX | j}|  ¡  |S )Nrr   zPUBLIC "%s" "%s"zSYSTEM "%s"r   )Ú_sourcerP   rÈ   r~   r   Ú_getDeclarationsrŽ   r   Ú_getNSattrsÚ_FRAGMENT_BUILDER_TEMPLATErt   rJ   rÉ   )	r   r|   rq   r~   Zidentr‚   ZnsattrsrR   rÉ   r   r   r   r}   m  s,    zFragmentBuilder.parseStringc             C   s  | j jj}d}|rxbt|jjƒD ]R}|j |¡}|r>|d }d||jf }|jrfd||j|j	f }q"d||j	f }q"W x˜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†W |S )Nrr   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Š   ÚlengthÚitemZnodeNamerŽ   r   r   Z
firstChildr“   r   )r   r~   r3   r¥   Znotationr   r   r   r   rË   ‰  s6    
z FragmentBuilder._getDeclarationsc             C   s   dS )Nrr   r   )r   r   r   r   rÌ   ­  s    zFragmentBuilder._getNSattrsc             C   s~   |t krh| j}| j}| j |¡}| j| _| j ¡ | _| j| _z| | j	d¡ W d || _|| _d | _	X dS t
 | ||||¡S d S )Nr   rƒ   )Ú$_FRAGMENT_BUILDER_INTERNAL_SYSTEM_IDrR   rS   rI   ZExternalEntityParserCreaterÈ   ZcreateDocumentFragmentrÉ   rt   rÊ   rC   rl   )r   r    rœ   r   rŽ   Zold_documentZold_cur_noderq   r   r   r   rl   °  s    z+FragmentBuilder.external_entity_ref_handler)N)
r-   r.   r/   r   rJ   r{   r}   rË   rÌ   rl   r   r   r   r   rÇ   R  s   	
	$rÇ   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
Namespacesc             C   s
   g | _ d S )N)Ú_ns_ordered_prefixes)r   r   r   r   Ú_initNamespacesÊ  s    zNamespaces._initNamespacesc             C   s   t jdd}d|_|S )Nr5   )Znamespace_separatorT)r   rL   Znamespace_prefixes)r   rq   r   r   r   rM   Ï  s    zNamespaces.createParserc             C   s    t  | |¡ | jjr| j|_d S )N)rC   rO   rD   Znamespace_declarationsÚstart_namespace_decl_handlerZStartNamespaceDeclHandler)r   rq   r   r   r   rO   Õ  s    zNamespaces.installc             C   s   | j  ||f¡ d S )N)rÓ   r›   )r   r@   r>   r   r   r   rÕ   Ü  s    z'Namespaces.start_namespace_decl_handlerc             C   sŠ  d|krt | |ƒ\}}}}nt}|}d }t}t ||||¡}| j|_t| j|ƒ || _| j	rÄxZ| j	D ]P\}}|rŒt 
t| d| ƒt|d¡}nt 
dtdt¡}||_| j|_t||ƒ qdW | j	d d …= |r†| ¡  |j}	|j}
x¦tdt|ƒdƒD ]’}|| }||d  }d|krJt | |ƒ\}}}}t 
||||¡}||	|< ||
||f< n$t 
|t|t¡}||	|< ||
t|f< | j|_||_||_qðW d S )Nr5   zxmlns:Úxmlnsr   r7   r   )rB   r   r   r   ZElementrR   r…   r	   rS   rÓ   r¤   r4   r   rš   r
   Z_ensure_attributesÚ_attrsÚ_attrsNSr£   r9   ZownerElement)r   r;   r¢   r>   r?   r@   rA   r”   r¦   r×   rØ   r¥   r#   rš   r   r   r   r¡   à  sP    
z Namespaces.start_element_handlerN)r-   r.   r/   rÔ   rM   rO   rÕ   r¡   r   r   r   r   rÒ   Ç  s   /rÒ   c               @   s   e Zd Zdd„ ZdS )ÚExpatBuilderNSc             C   s   t  | ¡ |  ¡  d S )N)rC   rJ   rÔ   )r   r   r   r   rJ   )  s    
zExpatBuilderNS.resetN)r-   r.   r/   rJ   r   r   r   r   rÙ   &  s   rÙ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚFragmentBuilderNSc             C   s   t  | ¡ |  ¡  d S )N)rÇ   rJ   rÔ   )r   r   r   r   rJ   1  s    
zFragmentBuilderNS.resetc             C   sŠ   d}| j }g }xv|r„t|dƒr|x\|j ¡ D ]N\}}||kr<q*| |¡ |rTd| }nd}|rld|||f }q*d||f }q*W |j}qW |S )Nrr   Ú_ns_prefix_urizxmlns:rÖ   z%s
    %s='%s'z %s='%s')r    ÚhasattrrÛ   Úitemsr›   r«   )r   Úattrsr    r°   r@   r>   Zdeclnamer   r   r   rÌ   5  s"    



zFragmentBuilderNS._getNSattrsN)r-   r.   r/   rJ   rÌ   r   r   r   r   rÚ   .  s   rÚ   c               @   s   e Zd ZdS )rw   N)r-   r.   r/   r   r   r   r   rw   S  s   rw   c               @   sH   e 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   Nc             C   s   | j S )N)r‚   )r   r   r   r   r€   \  s    z!InternalSubsetExtractor.getSubsetc             C   s*   yt  | |¡ W n tk
r$   Y nX d S )N)rC   r{   rw   )r   rx   r   r   r   r{   `  s    z!InternalSubsetExtractor.parseFilec             C   s*   yt  | |¡ W n tk
r$   Y nX d S )N)rC   r}   rw   )r   r|   r   r   r   r}   f  s    z#InternalSubsetExtractor.parseStringc             C   s   | j |_| j|_d S )N)rV   rW   r¡   rY   )r   rq   r   r   r   rO   l  s    zInternalSubsetExtractor.installc             C   s0   |r&|   ¡ }g | _| jj|_| j|_ntƒ ‚d S )N)rP   r‚   r›   ZDefaultHandlerr‹   rŒ   rw   )r   r;   rŽ   r   r   rq   r   r   r   rV   p  s    

z2InternalSubsetExtractor.start_doctype_decl_handlerc             C   s,   d  | j¡ dd¡ dd¡}|| _tƒ ‚d S )Nrr   z
Ú
ú)Újoinr‚   Úreplacerw   )r   r3   r   r   r   r‹   z  s    z0InternalSubsetExtractor.end_doctype_decl_handlerc             C   s
   t ƒ ‚d S )N)rw   )r   r;   rÞ   r   r   r   r¡     s    z-InternalSubsetExtractor.start_element_handler)r-   r.   r/   r‚   r€   r{   r}   rO   rV   r‹   r¡   r   r   r   r   r   W  s   
r   Tc          	   C   sL   |rt ƒ }ntƒ }t| tƒr>t| dƒ}| |¡}W d Q R X n
| | ¡}|S )NÚrb)rÙ   rC   Ú
isinstanceÚstrÚopenr{   )rx   Ú
namespacesr2   ÚfpÚresultr   r   r   Úparseƒ  s    

rê   c             C   s   |rt ƒ }ntƒ }| | ¡S )N)rÙ   rC   r}   )r|   rç   r2   r   r   r   r}   •  s    r}   c          	   C   sP   |rt |ƒ}nt|ƒ}t| tƒrBt| dƒ}| |¡}W d Q R X n
| | ¡}|S )Nrã   )rÚ   rÇ   rä   rå   ræ   r{   )rx   r    rç   r2   rè   ré   r   r   r   ÚparseFragment   s    


rë   c             C   s    |rt |ƒ}nt|ƒ}| | ¡S )N)rÚ   rÇ   r}   )r|   r    rç   r2   r   r   r   ÚparseFragmentString´  s    
rì   c             C   s   | j rt| ƒS t| ƒS d S )N)rç   rÙ   rC   )rK   r   r   r   ÚmakeBuilderÀ  s    rí   )T)T)T)T)2Z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getDOMImplementationrQ   ZTypeInfor!   Úobjectr   r4   rB   rC   rº   rF   rÀ   r¨   rª   rÑ   rÍ   rÇ   rÒ   rÙ   rÚ   Ú	Exceptionrw   r   rê   r}   rë   rì   rí   r   r   r   r   Ú<module>   s\   







3  C
:u_%,



