
    Mwg9                     ~   d Z ddlmZmZmZ ddlZddl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 ddlmZ ddlmZmZ dZ ej0                  d      Z ej4                  d      j6                  Z G d de      Z G d de      Zd Z d Z! G d dejD                        Z"y# e
$ r	 ddlm	Z	 Y w xY w)a  Module for supporting the lxml.etree library. The idea here is to use as much
of the native library as possible, without using fragile hacks like custom element
names that break between releases. The downside of this is that we cannot represent
all possible trees; specifically the following are known to cause problems:

Text or comments as siblings of the root element
Docypes with no name

When any of these things occur, we emit a DataLossWarning
    )absolute_importdivisionunicode_literalsN)MutableMapping   )base   )DataLossWarning)	constants)etree)	_ihatexml)PY3binary_typeTz{([^}]*)}(.*)asdc                       e Zd Zd Zy)DocumentTypec                 .    || _         || _        || _        y N)namepublicIdsystemId)selfr   r   r   s       W/var/www/horilla/myenv/lib/python3.12/site-packages/html5lib/treebuilders/etree_lxml.py__init__zDocumentType.__init__)   s    	      N)__name__
__module____qualname__r    r   r   r   r   (   s    !r   r   c                   .    e Zd Zd Zd Zd Z ee      Zy)Documentc                      d | _         g | _        y r   )_elementTree_childNodesr   s    r   r   zDocument.__init__0   s     r   c                     | j                   j                         }| j                   j                         j                         D ]  } |j                  |j                         y r   )r#   getrootitersiblingsaddnext_element)r   elementlasts      r   appendChildzDocument.appendChild4   sT      ((*%%--/<<> 	D	 	W%%&r   c                     | j                   S r   )r$   r%   s    r   _getChildNodeszDocument._getChildNodes;   s    r   N)r   r   r   r   r-   r/   property
childNodesr   r   r   r!   r!   /   s    '  .)Jr   r!   c                 |    g t        j                  d      dfd	 | d       dj                        S )NTpreventDoubleDashCommentsr   c           
      2	   t        | d      st        | d      r4j                  d       | j                  j                  r| j                  j                  s0| j                  j
                  sd| j                  j                  z  }nHd| j                  j                  d| j                  j                  d| j                  j
                  d}j                  d	d
|dz   z  |       | j                         }|j                         !|j                         }|j                         !| ||dz          |j                         }|y t        | t              st        | t              rDt        | t              st        j                  d   dk(  sJ j                  d	d
|z  d| d       y j                  d       | D ]  } ||dz           y y | j                  t         k(  rej                  d	d
|z  d| j"                  d       t        | d      r3| j$                  r&j                  d	d
|z  d| j$                  d       y y y t        | t&        j(                        sJ t*        j,                  j/                  | j                        }|c|j1                  d      }|j1                  d      }t2        j4                  |   }j                  d	d
|z  d|d
j7                  |      d       n4j                  d	d
|z  dj7                  | j                        d       t        | d      rg }| j8                  j;                         D ]  \  }	}
t,        j/                  |	      }|?|j=                         \  }}	j7                  |	      }	t2        j4                  |   }|d
|	}nj7                  |	      }|j                  ||
f        t?        |      D ]%  \  }	}
j                  d	d
|dz   z  |	d|
d       ' | j"                  r(j                  d	d
|dz   z  d| j"                  d       |dz  }| D ]  } ||        t        | d      r6| j$                  r)j                  d	d
|dz
  z  d| j$                  d       y y y )Ntagr'   z	#document<!DOCTYPE %s>z
<!DOCTYPE z "z" "z">| r	   r   "z#document-fragmentz<!-- z -->tailr   <>attrib=") hasattrappenddocinfointernalDTD	public_id
system_url	root_namer'   getpreviousgetnext
isinstancestrbytessysversion_infor6   comment_typetextr;   r   _Elementetree_builders
tag_regexpmatchgroupr   prefixesfromXmlNamer>   itemsgroupssorted)r+   indentdtd_strnext_elementnsmatchnsr6   prefix
attributesr   valueattr_stringchildinfosetFilterrvserializeElements                r   rf   z(testSerializer.<locals>.serializeElementE   s   w&w	*		+&??..#OO55#OO66"1GOO4M4M"M $OO55#OO55#OO66#8 II
);WEF&0"..0<#/#;#;#=L #..0<".$\6A:>#/#7#7#9L #. GS)Z-G!'3/33C3CA3F!3KKK		vw?@ 		./$+ ?L$\6A:>? / [[L(II#,EFw'GLL		vw||DE -9' gu~~666$//55gkkBG"]]1%mmA&"++B/		#,*7*C*CC*HJ K 		sV|'4'@'@'MO P w)
#*>>#7#7#9 	<KD%(..t4G*#*>>#3D,88>!*!3!3B!717&>&3&?&?&E%%{E&:;	< $**#5 PKD%IIcVaZ.@$NOP ||		
);W\\JKaKF  0 /0w'GLL		
);W\\JK -9'r   
)r   )r   InfosetFilterjoin)r+   rd   re   rf   s    @@@r   testSerializerrj   A   s:    	B++dKMELL Wa 99R=r   c                 H    g fd |        dj                        S )z4Serialize an element and its child nodes to a stringc           
         t        | d      s| j                  j                  rW| j                  j                  r| j                  j                  }nd| j                  j                  z  }j                  |        | j                                n| j                  t        k(  r j                  d| j                  d       n| j                  s j                  d| j                  d       nddj                  | j                  j                         D cg c]  \  }}|d|d	 c}}      }j                  d| j                  d|d       | j                  rj                  | j                         | D ]
  } |        j                  d
| j                  d       t        | d      r)| j                  rj                  | j                         y y y c c}}w )Nr6   r7   z<!--z-->r<   r=   r9   r?   r:   z</r;   )r@   rB   rC   doctyperF   rA   r'   r6   rN   rO   r>   ri   rW   r;   )r+   r[   r   ra   attrrc   re   rf   s         r   rf   z"tostring.<locals>.serializeElement   sc   w&**??**%oo55G-0I0IIG		'"W__./[[L(IIW\\34 >>		GKK12xx4;NN4H4H4J!L%0T5 15e!< !L M		w{{D9:||		',,'  ( '( II./7F#IIgll# )5#!Ls   G!
 )ri   )r+   re   rf   s    @@r   tostringrp      s&    	B$@ W772;r   c                   l     e Zd ZeZeZdZdZeZ	e
ZddZd Zd Zd Zd Zd ZddZd fd		Zd
 Z xZS )TreeBuilderNc                 h   t        j                  t        |      t        j                  d      x| _        || _         G fddt               G fddj                        } G fdd	j                        }|| _
        || _        t        j                  j                  | |       y )
N)fullTreeTr3   c                   B    e Zd Zd Z fdZd Zd Zd Zd Zd Z	d Z
y	)
(TreeBuilder.__init__.<locals>.Attributesc                     || _         y r   )r*   r   r+   s     r   r   z1TreeBuilder.__init__.<locals>.Attributes.__init__   s	     'r   c                     t        |t              rd|d   dj                  |d         }|S j                  |      }|S )N{r	   }r   )rI   tuplecoerceAttribute)r   keyr   rd   s      r   
_coerceKeyz3TreeBuilder.__init__.<locals>.Attributes._coerceKey   sI    c5)'*1v}/L/LSQRV/TUD  )88=Dr   c                     | j                   j                   j                  | j                  |         }t        s!t	        |t
              r|j                  d      }|S )Nascii)r*   r>   r   r   rI   r   decoder   r~   ra   s      r   __getitem__z4TreeBuilder.__init__.<locals>.Attributes.__getitem__   sD    ..55dooc6JKz%=!LL1Er   c                 h    || j                   j                   j                  | j                  |      <   y r   r*   r>   r   r   s      r   __setitem__z4TreeBuilder.__init__.<locals>.Attributes.__setitem__   s%    FK&&--dooc.BCr   c                 d    | j                   j                   j                  | j                  |      = y r   r   )r   r~   s     r   __delitem__z4TreeBuilder.__init__.<locals>.Attributes.__delitem__   s#    MM**11$//#2FGr   c                 T    t        | j                  j                  j                        S r   )iterr*   r>   r%   s    r   __iter__z1TreeBuilder.__init__.<locals>.Attributes.__iter__   s    DMM2299::r   c                 T    t        | j                  j                  j                        S r   )lenr*   r>   r%   s    r   __len__z0TreeBuilder.__init__.<locals>.Attributes.__len__   s    4==118899r   c                 ^    | j                   j                   j                  j                         S r   )r*   r>   clearr%   s    r   r   z.TreeBuilder.__init__.<locals>.Attributes.clear   s!    }}--44::<<r   N)r   r   r   r   r   r   r   r   r   r   r   )rd   s   r   
Attributesrv      s-    (LH;:=r   r   c                   t    e Zd Z fdZfdZfdZ eee      Zd Zd Z	 eee	      Z
d	fd	Zd Zy)
%TreeBuilder.__init__.<locals>.Elementc                 ~    j                  |      }j                  j                  | ||        |       | _        y )N)	namespace)coerceElementElementr   _attributes)r   r   r   r   builderrd   s      r   r   z.TreeBuilder.__init__.<locals>.Element.__init__   s9    $2248((ty(I#-d#3 r   c                     j                  |      | _        | j                  | j                  | j                        | j                  _        y r   )r   _name_getETreeTag
_namespacer*   r6   )r   r   rd   s     r   _setNamez.TreeBuilder.__init__.<locals>.Element._setName   s9    *88>
$($5$5JJ%1!r   c                 :    j                  | j                        S r   )rV   r   )r   rd   s    r   _getNamez.TreeBuilder.__init__.<locals>.Element._getName   s    $00<<r   c                     | j                   S r   )r   r%   s    r   _getAttributesz4TreeBuilder.__init__.<locals>.Element._getAttributes   s    '''r   c                 ^    | j                   }|j                          |j                  |       y r   )r`   r   update)r   ra   r`   s      r   _setAttributesz4TreeBuilder.__init__.<locals>.Element._setAttributes   s%    !__
  "!!%(r   Nc                 b    j                  |      }j                  j                  | ||       y r   )coerceCharactersr   
insertText)r   datainsertBeforer   rd   s      r   r   z0TreeBuilder.__init__.<locals>.Element.insertText   s)    $55d;**4|Dr   c                      t        |       | j                  | j                        }| j                  j                  r9|j                  j                  j                  | j                  j                         |S r   )typer   r   r*   r>   r   rx   s     r   	cloneNodez/TreeBuilder.__init__.<locals>.Element.cloneNode  sR    $$t*TYY?==''$$++224==3G3GHr   r   )r   r   r   r   r   r   r0   r   r   r   r`   r   r   )r   r   rd   s   r   r   r      sC    4
1
= Hh/D()
 "..AJEr   r   c                   <    e Zd Z fdZfdZd Z eee      Zy)%TreeBuilder.__init__.<locals>.Commentc                 `    j                  |      }j                  j                  | |       y r   )coerceCommentCommentr   )r   r   r   rd   s     r   r   z.TreeBuilder.__init__.<locals>.Comment.__init__  s'    $2248((t4r   c                 J    j                  |      }|| j                  _        y r   )r   r*   rO   )r   r   rd   s     r   _setDataz.TreeBuilder.__init__.<locals>.Comment._setData  s    $2248%)"r   c                 .    | j                   j                  S r   )r*   rO   r%   s    r   _getDataz.TreeBuilder.__init__.<locals>.Comment._getData  s    }})))r   N)r   r   r   r   r   r   r0   r   )r   rd   s   r   r   r   
  s     5** Hh/Dr   r   )rQ   getETreeModuler   r   rh   rd   namespaceHTMLElementsr   r   r   elementClasscommentClassr   rr   r   )r   r   rt   r   r   r   r   rd   s        @@@r   r   zTreeBuilder.__init__   s     //I-6-D-D_c-dd*%:"	= 	=@"	 "	goo "	H	0goo 	0 $#!!$(=>r   c                     t         j                  j                  |        | j                  | _        g | _        d | _        y r   )r   rr   resetinsertCommentInitialinsertCommentinitial_commentsrm   r%   s    r   r   zTreeBuilder.reset  s3    t$!66 "r   c                     t        |      S r   )rj   rx   s     r   rj   zTreeBuilder.testSerializer#  s    g&&r   c                     t         r| j                  j                  S | j                  j                  j                         S r   )rt   documentr#   r'   r%   s    r   getDocumentzTreeBuilder.getDocument&  s.    ==---==--5577r   c                    g }| j                   d   j                  }|j                  r|j                  |j                         |j	                  t        |             |j                  r|j                  |j                         |S )Nr   )openElementsr*   rO   rA   extendlistr;   )r   fragmentr+   s      r   getFragmentzTreeBuilder.getFragment,  s`    ##A&//<<OOGLL)W&<<OOGLL)r   c                    |d   }|d   }|d   }|s"t        j                  dt               d | _        y | j                  j                  |      }||k7  rt        j                  dt               | j                  |||      }|| _        y )Nr   r   r   z#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)warningswarnr
   rm   rd   r   doctypeClass)r   tokenr   r   r   coercedNamerm   s          r   insertDoctypezTreeBuilder.insertDoctype6  s    V}$$MM?QDL,,::4@Kd"EW''XxHG"DLr   c                     ||| j                   u sJ | j                   j                  J | j                  j                  |       y r   )r   r#   r   rA   )r   r   parents      r   r   z TreeBuilder.insertCommentInitialF  sB    ~4==!888}}))111$$T*r   c                     || j                   k(  rR| j                   j                  j                         d   j                  t        k(  rt        j                  dt               t        t        | +  ||       y )Nz@lxml cannot represent adjacent comments beyond the root elements)r   r#   r'   r6   rN   r   r   r
   superrr   r   )r   r   r   	__class__s      r   insertCommentMainzTreeBuilder.insertCommentMainK  sV    dmm#**224R8<<LMM\^mnk4.tV<r   c                 z   d}| j                   r| j                   j                  sJ |d| j                   j                  z  z  }| j                   j                  | j                   j                  |d| j                  j                  | j                   j                  xs d      z  z  }| j                   j                  r| j                   j                  }|j                  d      dk\  r@|j                  d      dk\  r,t        j                  dt               |j                  dd      }|j                  d      dk\  r	|d	|z  z  }n|d
|z  z  }n|dz  }|dz  }| j                   j                  |d   k7  rt        j                  dt               |dz  }t        j                  |      }| j                  D ]1  }| j                  |d         }|j                  |j                          3 | j#                         | _        |j'                         | j$                  _        |d   }|j+                  d| j,                        }||}	nd|d|}	|	|_        | j1                  ||      }
||
_        | j$                  j2                  j5                  |
       | j6                  j5                  |
       | j8                  | _        y )Nro   z<!DOCTYPE %sz PUBLIC "%s" 'r   r:   z6DOCTYPE system cannot contain single and double quotesU00027z"%s"z'%s'z''r=   r   zGlxml cannot represent doctype with a different name to the root elementz$<THIS_SHOULD_NEVER_APPEAR_PUBLICLY/>r   r   rz   r{   )rm   r   r   r   rd   coercePubidfindr   r   r
   replacer   
fromstringr   r   addpreviousr*   documentClassr   getroottreer#   getdefaultNamespacer6   r   r$   rA   r   r   r   )r   r   docStrsysidrootcomment_tokencommentr   r   	etree_tagroot_elements              r   
insertRootzTreeBuilder.insertRootQ  sp   
 <<<<$$$$nt||'8'888F%%1LL))5? ..::4<<;P;P;VTVWY Z<<(( LL11Ezz#!+

310D &^`op %c8 <zz#!+&5.0&5.0dNFcMF||  E&M1gixy88' "22 	/M''f(=>GW--.	/
 **,%)%5%5%7" V}IIk4+@+@A	I  %.t4I ((y9 $!!((6  . "33r   )Fr   )r   r   r   r!   r   r   r   r   r   fragmentClassr   implementationr   r   rj   r   r   r   r   r   r   __classcell__)r   s   @r   rr   rr      sP    MLLLMNZ?x'8# +
=74r   rr   )#__doc__
__future__r   r   r   r   rerL   collections.abcr   ImportErrorcollectionsro   r   r   r
   r   rQ   r   
lxml.etreesixr   r   rt   compilerR   r   r6   rN   objectr   r!   rj   rp   rr   r   r   r   <module>r      s   	 C B  	 
+.  '  %     RZZ(
u}}U#''!6 !*v *$L^&RO4$"" O4I  +*+s   B. .B<;B<