
    V=^"                         d dl mZmZmZ 	 d dlmZ d dlm	Z	m
Z
 d dlZddlmZ ddlmZ dd	lmZ dd
lmZ d Z ee      Zy# e$ r	 d dlmZ Y =w xY w)    )absolute_importdivisionunicode_literals)MutableMapping)minidomNodeN   )base   )	constants)
namespaces)moduleFactoryFactoryc                        G d dt                G fddt        j                         G  fddt        j                        }d t	               S )Nc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
getDomBuilder.<locals>.AttrListc                     || _         y Nelementselfr   s     ;/usr/lib/python3/dist-packages/html5lib/treebuilders/dom.py__init__z(getDomBuilder.<locals>.AttrList.__init__   s	    "DL    c                 \    t        | j                  j                  j                               S r   )iterr   
attributeskeysr   s    r   __iter__z(getDomBuilder.<locals>.AttrList.__iter__   s     //44677r   c                     t        |t              rt        | j                  j                  j                  |      }||_        || j                  j                  |<   y r   )
isinstancetupleNotImplementedErrorr   ownerDocumentcreateAttributevaluer   )r   namer'   attrs       r   __setitem__z+getDomBuilder.<locals>.AttrList.__setitem__   sG    $&))||11AA$G"
04''-r   c                 @    t        | j                  j                        S r   )lenr   r   r   s    r   __len__z'getDomBuilder.<locals>.AttrList.__len__#   s    t||..//r   c                 \    t        | j                  j                  j                               S r   )listr   r   itemsr   s    r   r0   z%getDomBuilder.<locals>.AttrList.items&   s     //55788r   c                 \    t        | j                  j                  j                               S r   )r/   r   r   valuesr   s    r   r2   z&getDomBuilder.<locals>.AttrList.values)   s     //66899r   c                 t    t        |t              rt        | j                  j                  |   j
                  S r   )r"   r#   r$   r   r   r'   r   r(   s     r   __getitem__z+getDomBuilder.<locals>.AttrList.__getitem__,   s-    $&))||..t4:::r   c                 ^    t        |t              rt        | j                  j                  |= y r   )r"   r#   r$   r   r   r4   s     r   __delitem__z+getDomBuilder.<locals>.AttrList.__delitem__2   s$    $&))LL++D1r   N)__name__
__module____qualname__r   r    r*   r-   r0   r2   r5   r7    r   r   AttrListr      s*    	#	8	5	0	9	:	;	2r   r<   c                       e Zd Zd Z ed       Zd ZddZd Zd Z	d Z
 fd	Zd
 Z eee      ZfdZd Zd Z ee      Zy)"getDomBuilder.<locals>.NodeBuilderc                 f    t         j                  j                  | |j                         || _        y r   )r
   r   r   nodeNamer   r   s     r   r   z+getDomBuilder.<locals>.NodeBuilder.__init__9   s#    IItW%5%56"DLr   c                 f    t        | j                  d      xr | j                  j                  xs d S )NnamespaceURI)hasattrr   rB   r   s    r   <lambda>z+getDomBuilder.<locals>.NodeBuilder.<lambda>=   s.    '$,,*O +7!\\66+?:> r   c                 \    | |_         | j                  j                  |j                         y r   )parentr   appendChildr   nodes     r   rG   z.getDomBuilder.<locals>.NodeBuilder.appendChild@   s    DKLL$$T\\2r   Nc                     | j                   j                  j                  |      }|r'| j                   j                  ||j                          y | j                   j	                  |       y r   )r   r%   createTextNodeinsertBeforerG   )r   datarL   texts       r   
insertTextz-getDomBuilder.<locals>.NodeBuilder.insertTextD   sK    <<--<<TBD))$0D0DE((.r   c                 r    | j                   j                  |j                   |j                          | |_        y r   )r   rL   rF   )r   rI   refNodes      r   rL   z/getDomBuilder.<locals>.NodeBuilder.insertBeforeK   s%    LL%%dllGOODDKr   c                     |j                   j                  | j                   k(  r%| j                   j                  |j                          d |_        y r   )r   
parentNoderemoveChildrF   rH   s     r   rT   z.getDomBuilder.<locals>.NodeBuilder.removeChildO   s5    ||&&$,,6((6DKr   c                    | j                   j                         rg| j                   j                  }| j                   j                  |       |j                   j	                  |       | j                   j                         rgg | _        y r   )r   hasChildNodes
firstChildrT   rG   
childNodes)r   	newParentchilds      r   reparentChildrenz3getDomBuilder.<locals>.NodeBuilder.reparentChildrenT   sb    ,,,,.//((/!!--e4 ,,,,. !DOr   c                 (     | j                         S r   r   )r   r<   s    r   getAttributesz0getDomBuilder.<locals>.NodeBuilder.getAttributes[   s    DLL))r   c                    |rt        |j                               D ]k  \  }}t        |t              r:|d   |d   dz   |d   z   }n|d   }| j                  j                  |d   ||       P| j                  j                  ||       m y y )Nr   :r	   r   )r/   r0   r"   r#   r   setAttributeNSsetAttribute)r   r   r(   r'   qualifiedNames        r   setAttributesz0getDomBuilder.<locals>.NodeBuilder.setAttributes^   s    #'
(8(8(:#; 
)KD%!$.7.-1!Ws]T!W-DM,0GM33DG]49; 11 %)
) r   c                 F     | j                   j                  d            S )NF)r   	cloneNoder   NodeBuilders    r   re   z,getDomBuilder.<locals>.NodeBuilder.cloneNodem   s    t||55e<==r   c                 6    | j                   j                         S r   )r   rV   r   s    r   
hasContentz-getDomBuilder.<locals>.NodeBuilder.hasContentp   s    <<--//r   c                 t    | j                   t        d   | j                  fS | j                   | j                  fS )Nhtml)	namespacer   r(   r   s    r   getNameTuplez/getDomBuilder.<locals>.NodeBuilder.getNameTuples   s3    ~~%!&)49944~~tyy00r   r   )r8   r9   r:   r   propertyrl   rG   rO   rL   rT   r[   r]   rc   r   re   ri   rm   	nameTuple)r<   rg   s   r   rg   r>   8   sf    	#  ? @		3	/		
	!	*	) m];
	>	0	1 \*	r   rg   c                   r    e Zd Z fdZ fdZdfd	ZfdZfdZd ZfdZ	d	 Z
d
 ZddZW ZdZy)"getDomBuilder.<locals>.TreeBuilderc                 z    j                         j                  d d d       | _        t        j                  |       S r   )getDOMImplementationcreateDocumentdomweakrefproxy)r   Doms    r   documentClassz0getDomBuilder.<locals>.TreeBuilder.documentClass|   s1    //1@@tTRDH==&&r   c                     |d   }|d   }|d   }j                         }|j                  |||      }| j                  j                   |             t        k(  r| j
                  |_        y y )Nr(   publicIdsystemId)rs   createDocumentTypedocumentrG   r   ru   r%   )	r   tokenr(   r{   r|   domimpldoctyperx   rg   s	          r   insertDoctypez0getDomBuilder.<locals>.TreeBuilder.insertDoctype   sq    =DZ(HZ(H..0G00xJGMM%%k'&:;g~(,% r   Nc                     |(| j                   | j                  j                  |      }n| j                  j                  ||      } |      S r   )defaultNamespaceru   createElementcreateElementNS)r   r(   rl   rI   rg   s       r   elementClassz/getDomBuilder.<locals>.TreeBuilder.elementClass   sI     T%:%:%Bxx--d3xx//	4@t$$r   c                 F     | j                   j                  |            S r   )ru   createComment)r   rM   rg   s     r   commentClassz/getDomBuilder.<locals>.TreeBuilder.commentClass   s    txx55d;<<r   c                 D     | j                   j                               S r   )ru   createDocumentFragmentrf   s    r   fragmentClassz0getDomBuilder.<locals>.TreeBuilder.fragmentClass   s    txx>>@AAr   c                 N    | j                   j                  |j                         y r   )ru   rG   r   rH   s     r   rG   z.getDomBuilder.<locals>.TreeBuilder.appendChild   s    HH  .r   c                      |      S r   r;   )r   r   testSerializers     r   r   z1getDomBuilder.<locals>.TreeBuilder.testSerializer   s    !'**r   c                     | j                   S r   )ru   r   s    r   getDocumentz.getDomBuilder.<locals>.TreeBuilder.getDocument   s    88Or   c                 T    t         j                  j                  |       j                  S r   )r
   TreeBuildergetFragmentr   r   s    r   r   z.getDomBuilder.<locals>.TreeBuilder.getFragment   s    ##//5===r   c                    |}|| k7  r"t         j                  j                  | ||       y t        | j                  d      rt
        j                  | j                  j                  vrat        | j                  j                        | j                  _        | j                  j                  j                  t
        j                         | j                  j                  | j                  j                  |             y )N_child_node_types)r
   r   rO   rC   ru   r   	TEXT_NODEr   r/   appendrG   rK   )r   rM   rF   s      r   rO   z-getDomBuilder.<locals>.TreeBuilder.insertText   s    D~  ++D$? 488%89~~TXX-G-GG59$((:T:T5U22299$..I$$TXX%<%<T%BCr   r   )r8   r9   r:   ry   r   r   r   r   rG   r   r   r   rO   implementationr(   )rx   DomImplementationrg   r   s   r   r   rq   {   sC    	'		1	%	=	B	/	+		>	D +r   r   c                 l    | j                          g dfd	 | d       dj                        S )Nr   c                 `   | j                   t        j                  k(  r| j                  r| j                  s| j
                  rM| j                  xs d}| j
                  xs d}j                  dd|z  d| j                  d|d|d	       nj                  dd|z  d| j                  d       nYj                  dd|z  d	       n?| j                   t        j                  k(  rj                  d
       n| j                   t        j                  k(  rj                  d       n| j                   t        j                  k(  r'j                  dd|z  d| j                  d       n| j                   t        j                  k(  r'j                  dd|z  d| j                  d       nWt        | d      r9| j                  -t        j                  | j                     d| j                   }n| j                   }j                  dd|z  d|d       | j#                         rg }t%        t'        | j(                              D ]  }| j(                  j+                  |      }|j                   }|j,                  }|j                  }	|	r#t        j                  |	   d|j.                  }n|j                   }|j                  ||f        t1        |      D ]%  \  }}j                  dd|dz   z  |d|d       ' |dz  }| j2                  D ]  }
 |
|        y )N | z
<!DOCTYPE z "z" "z">>z<!DOCTYPE >z	#documentz#document-fragmentz<!-- z -->"rB   <r   z=")nodeTyper   DOCUMENT_TYPE_NODEr(   r{   r|   r   DOCUMENT_NODEDOCUMENT_FRAGMENT_NODECOMMENT_NODE	nodeValuer   rC   rB   r   prefixesr@   hasAttributesranger,   r   itemr'   	localNamesortedrX   )r   indentr{   r|   r(   r   ir)   r'   nsrZ   rvserializeElements              r   r   z?getDomBuilder.<locals>.testSerializer.<locals>.serializeElement   s   4#:#::<<''7+;+;#*#3#3#9r#*#3#3#9r		#&<x#S T 		fgll"STII#,@A!!T%7%77		+&!!T%@%@@		./!!T%6%66		cFlG<M<MNO!!T^^3		vw7H7HIJG^4,,8&/&8&89M9M&N&-&6&68D #++D		sV|T:;((*!#J"3w'9'9#:; 	9&1166q9#}} $

!...7.@.@.Ddnn#UD#'==D"))4-8	9 (.j'9 Te		#!2DdE"RSTaKF ++ 0 /0r   
)r   )	normalizejoin)r   r   r   s    @@r   r   z%getDomBuilder.<locals>.testSerializer   s4    -	0\ 	!$yy}r   )r   r
   r   r   locals)r   r   r<   rx   rg   r   s   ` @@@@r   getDomBuilderr      sO    
C"2> "2HA+dii A+F8 8d&& 8t4l 8Or   )
__future__r   r   r   collections.abcr   ImportErrorcollectionsxml.domr   r   rv   r   r
   r   r   _utilsr   r   getDomModuler;   r   r   <module>r      sO    B B+. "    " )Z| $M2S  +*+s   A AA