
    V=^2                         d dl mZmZmZ d dl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d
lmZ ddlmZ  ej                  d      ZddZ ee      Zy)    )absolute_importdivisionunicode_literals)	text_typeN)copy   )base   )	_ihatexml)	constants)
namespaces)moduleFactoryFactoryz{([^}]*)}(.*)c           
      \   	
  		j                  d      j                  
 G 	fddt        j                         G 	fdd       G fdd       G fdd	       G fd
d      
fd	
fd} G  fddt        j                        }t               S )Nasdc                       e Zd Zd fd	Zd Zd Zd Z eee      Zd Z	d Z
 ee
e	      Zd Zd	 Z eee      Zd
 Zd Z eee      Zd Zd Zd Zd ZddZd Zd Zy) getETreeBuilder.<locals>.ElementNc                    || _         || _        j                  | j                  ||            | _        |t
        d   | j                   f| _        n| j                  | j                   f| _        d | _        g | _        g | _	        y )Nhtml)
_name
_namespaceElement_getETreeTag_elementr   	nameTupleparent_childNodes_flags)selfname	namespaceElementTrees      =/usr/lib/python3/dist-packages/html5lib/treebuilders/etree.py__init__z)getETreeBuilder.<locals>.Element.__init__   s|    DJ'DO'//0A0A$BK1M NDM !+F!3TZZ!?!%$**!<DK!DDK    c                 "    ||}|S d|d|}|S )N{} )r   r   r    	etree_tags       r"   r   z-getETreeBuilder.<locals>.Element._getETreeTag%   s,      	 	 ! )248	r$   c                 |    || _         | j                  | j                   | j                        | j                  _        y N)r   r   r   r   tag)r   r   s     r"   _setNamez)getETreeBuilder.<locals>.Element._setName,   s*    DJ $ 1 1$**doo NDMMr$   c                     | j                   S r+   )r   r   s    r"   _getNamez)getETreeBuilder.<locals>.Element._getName0   s    ::r$   c                 |    || _         | j                  | j                  | j                         | j                  _        y r+   )r   r   r   r   r,   )r   r    s     r"   _setNamespacez.getETreeBuilder.<locals>.Element._setNamespace5   s*    'DO $ 1 1$**doo NDMMr$   c                     | j                   S r+   )r   r/   s    r"   _getNamespacez.getETreeBuilder.<locals>.Element._getNamespace9   s    ??"r$   c                 .    | j                   j                  S r+   )r   attribr/   s    r"   _getAttributesz/getETreeBuilder.<locals>.Element._getAttributes>   s    =='''r$   c                     | j                   j                  }|j                          |r?|j                         D ]+  \  }}t	        |t
              rd|d   d|d   }n|}|||<   - y y )Nr&   r
   r'   r   )r   r6   clearitems
isinstancetuple)r   
attributes	el_attribkeyvaluer   s         r"   _setAttributesz/getETreeBuilder.<locals>.Element._setAttributesA   sk    ,,IOO #-"2"2"4 ,JC!#u-+.q63q6:"&+IdO, r$   c                     | j                   S r+   )r   r/   s    r"   _getChildNodesz/getETreeBuilder.<locals>.Element._getChildNodesP   s    ###r$   c                 `    | j                   d d = g | _        |D ]  }| j                  |        y r+   )r   r   insertChild)r   r@   elements      r"   _setChildNodesz/getETreeBuilder.<locals>.Element._setChildNodesS   s3    a !D  *  )*r$   c                 n    t        | j                  j                  xs t        | j                              S )z,Return true if the node has children or text)boolr   textlenr/   s    r"   
hasContentz+getETreeBuilder.<locals>.Element.hasContent[   s%    **@c$--.@AAr$   c                     | j                   j                  |       | j                  j                  |j                         | |_        y r+   )r   appendr   r   r   nodes     r"   appendChildz,getETreeBuilder.<locals>.Element.appendChild_   3    ##D)MM  /DKr$   c                     t        | j                        j                  |j                        }| j                  j                  ||j                         | |_        y r+   )listr   indexinsertr   )r   rP   refNoderU   s       r"   insertBeforez-getETreeBuilder.<locals>.Element.insertBefored   s@    '--g.>.>?EMM  6DKr$   c                     | j                   j                  |       | j                  j                  |j                         d |_        y r+   )r   remover   r   rO   s     r"   removeChildz,getETreeBuilder.<locals>.Element.removeChildi   rR   r$   c                    t        | j                        sG| j                  j                  sd| j                  _        | j                  xj                  |z  c_        y |P| j                  d   j                  sd| j                  d   _        | j                  d   xj                  |z  c_        y t	        | j                        }|j                  |j                        }|dkD  rY| j                  |dz
     j                  sd| j                  |dz
     _        | j                  |dz
     xj                  |z  c_        y | j                  j                  sd| j                  _        | j                  xj                  |z  c_        y )N r   r   )rK   r   rJ   tailrT   rU   )r   datarX   childrenrU   s        r"   
insertTextz+getETreeBuilder.<locals>.Element.insertTextn   s!   t}}%}})))+DMM&""d*"%}}R(---/DMM"%*b!&&$.&  . |'<'<=19==3888:eai05MM%!),11T91==---/*MM&&$.&r$   c                      t        |       | j                  | j                        }| j                  j                  r.t        | j                  j                        |j                  _        |S r+   )typer   r    r   r6   r   )r   rF   s     r"   	cloneNodez*getETreeBuilder.<locals>.Element.cloneNode   sK     d4jDNN;G}}##*.t}}/C/C*D  'Nr$   c                    |j                   rA|j                   d   j                  xj                  | j                  j                  z  c_        np|j                  j                  sd|j                  _        | j                  j                  3|j                  xj                  | j                  j                  z  c_        d| j                  _        t        j
                  j                  | |       y )Nr^   r]   )
childNodesr   r_   rJ   r	   NodereparentChildren)r   	newParents     r"   ri   z1getETreeBuilder.<locals>.Element.reparentChildren   s    ##$$R(1166$--:L:LL6 ))...0I&&+==%%1&&++t}}/A/AA+!#DMMII&&tY7r$   r+   )__name__
__module____qualname__r#   r   r-   r0   propertyr   r2   r4   r    r7   rA   r=   rC   rG   rg   rL   rQ   rX   r[   rb   re   ri   r!   s   r"   r   r      s    			O	 (+	O	# ]M:		(	, nn=
	$	* nn=
	B	
	
	
	/.			8r$   r   c                   6    e Zd Z fdZd Zd Z eee      Zy) getETreeBuilder.<locals>.Commentc                 \    j                  |      | _        d | _        g | _        g | _        y r+   )Commentr   r   r   r   )r   r`   r!   s     r"   r#   z)getETreeBuilder.<locals>.Comment.__init__   s-     (//5DMDK!DDKr$   c                 .    | j                   j                  S r+   r   rJ   r/   s    r"   _getDataz)getETreeBuilder.<locals>.Comment._getData   s    ==%%%r$   c                 &    || j                   _        y r+   ru   r   r@   s     r"   _setDataz)getETreeBuilder.<locals>.Comment._setData   s    !&DMMr$   N)rk   rl   rm   r#   rv   ry   rn   r`   ro   s   r"   rs   rq      s     		&	' (+r$   rs   c                   T    e Zd Z fdZd Zd Z eee      Zd Zd Z	 eee	      Z
y)%getETreeBuilder.<locals>.DocumentTypec                 h    j                  | d       || j                  _        || _        || _        y )N
<!DOCTYPE>)r#   r   rJ   publicIdsystemId)r   r   r~   r   r   s       r"   r#   z.getETreeBuilder.<locals>.DocumentType.__init__   s-    T<0!%DMM$DM$DMr$   c                 :    | j                   j                  dd      S )Nr~   r]   r   getr/   s    r"   _getPublicIdz2getETreeBuilder.<locals>.DocumentType._getPublicId       ==$$Z44r$   c                 B    || j                   j                  d|       y y )Nr~   r   setrx   s     r"   _setPublicIdz2getETreeBuilder.<locals>.DocumentType._setPublicId   !     !!*e4 !r$   c                 :    | j                   j                  dd      S )Nr   r]   r   r/   s    r"   _getSystemIdz2getETreeBuilder.<locals>.DocumentType._getSystemId   r   r$   c                 B    || j                   j                  d|       y y )Nr   r   rx   s     r"   _setSystemIdz2getETreeBuilder.<locals>.DocumentType._setSystemId   r   r$   N)rk   rl   rm   r#   r   r   rn   r~   r   r   r   r   s   r"   DocumentTyper{      s8    	%	5	5 L,7	5	5 L,7r$   r   c                       e Zd Z fdZy)!getETreeBuilder.<locals>.Documentc                 *    j                  | d       y )NDOCUMENT_ROOTr#   r   r   s    r"   r#   z*getETreeBuilder.<locals>.Document.__init__   s    T?3r$   Nrk   rl   rm   r#   r   s   r"   Documentr      s    	4r$   r   c                       e Zd Z fdZy))getETreeBuilder.<locals>.DocumentFragmentc                 *    j                  | d       y )NDOCUMENT_FRAGMENTr   r   s    r"   r#   z2getETreeBuilder.<locals>.DocumentFragment.__init__   s    T#67r$   Nr   r   s   r"   DocumentFragmentr      s    	8r$   r   c                 P    g dfd	 | d       dj                        S )Nr   c           	         t        | d      s| j                         } | j                  dk(  r| j                  d      s| j                  d      rQ| j                  d      xs d}| j                  d      xs d}j	                  d| j
                  d|d|d	       nj	                  d| j
                  d
       nz| j                  dk(  rj	                  d       | j
                  (j	                  dd|dz   z  d| j
                  d       | j                  t        d      t        | d      rt        | j                        rt        d      | j                  k(  r'j	                  dd|z  d| j
                  d       nt        | j                  t              s*J dt        | j                        d| j                         t        j                  | j                        }|| j                  }n-|j                         \  }}t         j"                  |   }|d|}j	                  dd|z  d|d
       t        | d      rg }| j                  j%                         D ]_  \  }}	t        j                  |      }|.|j                         \  }}t         j"                  |   }|d|}
n|}
|j	                  |
|	f       a t'        |      D ]%  \  }}	j	                  dd|dz   z  |d|	d       ' | j
                  r(j	                  dd|dz   z  d| j
                  d       |dz  }| D ]  } ||        | j                  r)j	                  dd|dz
  z  d| j                  d       y y )Nr,   r}   r~   r   r]   
<!DOCTYPE z "" "">>r   z	#document| r
   "Document node cannot have tailr6   $Document node cannot have attributesz<!-- z -->zExpected unicode, got z, <=")hasattrgetrootr,   r   rN   rJ   r_   	TypeErrorrK   r6   r;   r   rd   
tag_regexpmatchgroupsr   prefixesr:   sorted)rF   indentr~   r   nsmatchr   nsprefixr=   r@   attr_stringchildElementTreeCommentTypervserializeElements               r"   r   zAgetETreeBuilder.<locals>.testSerializer.<locals>.serializeElement   s   7E*!//+{{l*;;z*gkk*.E&{{:6<"H&{{:6<"HII&||XxA B II?@/		+&<<+IISFQJ-?NO<<+#$DEE7H-#gnn2E#$JKK 66		cFlGLLIJ!'++y9 V6:7;;6GUV9$**7;;7?";;D&~~/HB&//3F&,d3D		sV|T:;7H-!#J'.~~';';'= @e","2"24"8".'.~~'7HB%.%7%7%;F5;T*BK*.K"));*>?@ (.j'9 Te		#!2DdE"RST<<IISFQJ-?NOaKF  0 /0||		
);W\\JK r$   
)r   )join)rF   r   r   r   s    @@r"   testSerializerz'getETreeBuilder.<locals>.testSerializer   s)    6	Ln 	!$yy}r$   c                 z    g t        j                         fd |        dj                        S )z4Serialize an element and its child nodes to a stringc           
      n   t        | j                        r| j                         } | j                  dk(  r| j	                  d      s| j	                  d      rQ| j	                  d      xs d}| j	                  d      xs d}
j                  d| j                  d|d|d       nމ
j                  d| j                  d	       n| j                  d
k(  r{| j                  
j                  | j                         | j                  t        d      t        | d      r t        | j                        rt        d      | D ]
  } |        n3| j                  k(  r!
j                  d| j                  d       n| j                  s/
j                  d	j                  | j                        d	       nsdj                  | j                  j                         D cg c]  \  }}	j                  |      d|d c}}      }
j                  d| j                  d|d	       | j                  r
j                  | j                         | D ]
  } |        
j                  d| j                  d	       | j                  r
j                  | j                         y y c c}}w )Nr}   r~   r   r]   r   z	 PUBLIC "r   r   r   r   r   r6   r   z<!--z-->r   r   r   r   z</)r;   r!   r   r,   r   rN   rJ   r_   r   r   rK   r6   fromXmlNamer   r:   )rF   r~   r   r   r   r@   attrr!   r   filterr   r   s          r"   r   z;getETreeBuilder.<locals>.tostring.<locals>.serializeElement  s   ';#:#:;!//+{{l*;;z*gkk*.E&{{:6<"H&{{:6<"HII&||XxA B II?@/<<+IIgll+<<+#$DEE7H-#gnn2E#$JKK$ ,E$U+,  66		78 ~~II(:(:7;;(GIJ88+2>>+?+?+A%C'D% **40%&9 %C DD II7;;=><<IIgll+$ ,E$U+, 		W[[23||		',,' %Cs   (!J1
r]   )r   InfosetFilterr   )rF   r   r   r   r!   r   s    @@@r"   tostringz!getETreeBuilder.<locals>.tostring  s9    ((*+	( +	(Z 	!wwr{r$   c                   L    e Zd ZW ZW ZW ZW  ZW ZW ZfdZ	fdZ
d Zy)$getETreeBuilder.<locals>.TreeBuilderc                      |      S r+   r(   )r   rF   r   s     r"   r   z3getETreeBuilder.<locals>.TreeBuilder.testSerializerD  s    !'**r$   c                     r| j                   j                  S | j                  2| j                   j                  j                  d| j                  z        S | j                   j                  j                  d      S )Nz{%s}htmlr   )documentr   defaultNamespacefind)r   fullTrees    r"   getDocumentz0getETreeBuilder.<locals>.TreeBuilder.getDocumentG  sj    }}---((4==1166"T%:%::< <  ==1166v>>r$   c                 T    t         j                  j                  |       j                  S r+   )r	   TreeBuildergetFragmentr   r/   s    r"   r   z0getETreeBuilder.<locals>.TreeBuilder.getFragmentQ  s    ##//5>>>r$   N)rk   rl   rm   documentClassdoctypeClasselementClasscommentClassfragmentClassimplementationr   r   r   )rs   r   r   r   r   ElementTreeImplementationr   r   s   r"   r   r   <  s0     #(2	+	?	?r$   r   )rs   r,   r	   rh   r   locals)r   r   r   r   rs   r   r   r   r   r!   r   r   s   ``  @@@@@@@@r"   getETreeBuilderr      s    +K(007;;}8$)) }8~,' ,"8w 8247 487 8<|4l? ?d&& ?0 8Or$   )F)
__future__r   r   r   sixr   rer   r]   r	   r   r   r   _utilsr   compiler   r   getETreeModuler(   r$   r"   <module>r      sH    B B  	     " )RZZ(
AH
 &o6r$   