a
    [Ùf®9  ã                   @   s  d Z ddlmZmZmZ ddlZddlZddlZzddlm	Z	 W n e
y^   ddlm	Z	 Y n0 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 d¡Ze d¡jZG dd„ deƒZG dd„ deƒZdd„ Z dd„ Z!G dd„ dej"ƒZ"dS )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{([^}]*)}(.*)Zasdc                   @   s   e Zd Zdd„ ZdS )ÚDocumentTypec                 C   s   || _ || _|| _d S ©N)ÚnameÚpublicIdÚsystemId)Úselfr   r   r   © r   ú~C:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\pip/_vendor/html5lib/treebuilders/etree_lxml.pyÚ__init__)   s    zDocumentType.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   (   s   r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ ZeeƒZdS )ÚDocumentc                 C   s   d | _ g | _d S r   )Ú_elementTreeÚ_childNodes©r   r   r   r   r   0   s    zDocument.__init__c                 C   s.   | j  ¡ }| j  ¡  ¡ D ]}q| |j¡ d S r   )r   ÚgetrootZitersiblingsZaddnextÚ_element)r   ÚelementÚlastr   r   r   ÚappendChild4   s    
zDocument.appendChildc                 C   s   | j S r   )r   r   r   r   r   Ú_getChildNodes;   s    zDocument._getChildNodesN)r   r   r   r   r#   r$   ÚpropertyÚ
childNodesr   r   r   r   r   /   s   r   c                    s6   g ‰t jdd‰ d‡ ‡‡fdd„	‰ˆ| dƒ d ˆ¡S )NT©ZpreventDoubleDashCommentsr   c                    s,  t | dƒs,t | dƒrºˆ d¡ | jjrz| jjsF| jjsFd| jj }nd| jj| jj| jjf }ˆ dd|d  |f ¡ |  ¡ }| ¡ d ur˜| ¡ }q‚|d ur¸ˆ||d ƒ | 	¡ }q˜nnt
| tƒsÐt
| tƒrt
| tƒsìtjd	 dksìJ ‚ˆ d
d| | f ¡ n$ˆ d¡ | D ]}ˆ||d ƒ qnü| jtkr€ˆ dd| | jf ¡ t | dƒr(| jr(ˆ d
d| | jf ¡ n¨t
| tjƒs’J ‚tj | j¡}|d urè| d¡}| d¡}tj| }ˆ dd| |ˆ  |¡f ¡ nˆ dd| ˆ  | j¡f ¡ t | dƒr¶g }| j ¡ D ]d\}	}
t |	¡}|d urj| ¡ \}}	ˆ  |	¡}	tj| }d||	f }n
ˆ  |	¡}| ||
f¡ q t|ƒD ]&\}	}
ˆ dd|d  |	|
f ¡ qŽ| jrÚˆ d
d|d  | jf ¡ |d7 }| D ]}ˆ||ƒ qæt | dƒr(| jr(ˆ d
d|d  | jf ¡ d S )NÚtagr   z	#documentú<!DOCTYPE %s>z<!DOCTYPE %s "%s" "%s">z|%s%sú r   r   z|%s"%s"z#document-fragmentz|%s<!-- %s -->Útailr   z
|%s<%s %s>z|%s<%s>Úattribz%s %sz
|%s%s="%s") ÚhasattrÚappendÚdocinfoÚinternalDTDÚ	public_idZ
system_urlÚ	root_namer   ZgetpreviousZgetnextÚ
isinstanceÚstrÚbytesÚsysÚversion_infor(   Úcomment_typeÚtextr+   r   Z_ElementÚetree_buildersÚ
tag_regexpÚmatchÚgroupr
   ÚprefixesÚfromXmlNamer,   ÚitemsÚgroupsÚsorted)r!   ÚindentÚdtd_strZnext_elementZnsmatchÚnsr(   ÚprefixÚ
attributesr   ÚvalueZattr_stringÚchild©ÚinfosetFilterÚrvÚserializeElementr   r   rM   E   s|    

ÿý





ÿ

ÿ




 z(testSerializer.<locals>.serializeElementÚ
)r   )r   ÚInfosetFilterÚjoin©r!   r   rJ   r   ÚtestSerializerA   s
    F
rR   c                    s$   g ‰ ‡ ‡fdd„‰ˆ| ƒ d  ˆ ¡S )z4Serialize an element and its child nodes to a stringc                    s  t | dƒsH| jjr:| jjr$| jj}nd| jj }ˆ  |¡ ˆ|  ¡ ƒ nœ| jtkrfˆ  d| j	f ¡ n~| j
s€ˆ  d| jf ¡ n.d dd„ | j
 ¡ D ƒ¡}ˆ  d| j|f ¡ | j	rÀˆ  | j	¡ | D ]}ˆ|ƒ qÄˆ  d	| jf ¡ t | d
ƒr| jrˆ  | j¡ d S )Nr(   r)   z	<!--%s-->z<%s>r*   c                 S   s   g | ]\}}d ||f ‘qS )z%s="%s"r   )Ú.0r   rH   r   r   r   Ú
<listcomp>¦   s   ÿz6tostring.<locals>.serializeElement.<locals>.<listcomp>z<%s %s>z</%s>r+   )r-   r/   r0   Údoctyper2   r.   r   r(   r8   r9   r,   rP   r@   r+   )r!   rD   ÚattrrI   ©rL   rM   r   r   rM   ”   s,    




ÿ
z"tostring.<locals>.serializeElementÚ )rP   rQ   r   rW   r   Útostring   s     rY   c                       sz   e Zd ZeZeZdZdZeZ	e
Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zddd„Zd‡ fdd„	Zdd„ Z‡  ZS )ÚTreeBuilderNFc                    sŠ   t jt|d‰tjdd ‰| _|| _G ‡fdd„dtƒ‰ G ‡ ‡‡fdd„dˆjƒ}G ‡‡fdd	„d	ˆj	ƒ}|| _
|| _tj | |¡ d S )
N)ÚfullTreeTr'   c                       sP   e Zd Zdd„ Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z(TreeBuilder.__init__.<locals>.Attributesc                 S   s
   || _ d S r   )r    ©r   r!   r   r   r   r   Ç   s    z1TreeBuilder.__init__.<locals>.Attributes.__init__c                    s4   t |tƒr&d|d ˆ  |d ¡f }n
ˆ  |¡}|S )Nú{%s}%sr   r   )r3   ÚtupleZcoerceAttribute)r   Úkeyr   ©rK   r   r   Ú
_coerceKeyÊ   s    

z3TreeBuilder.__init__.<locals>.Attributes._coerceKeyc                 S   s0   | j j j|  |¡ }ts,t|tƒr,| d¡}|S )NÚascii)r    r,   ra   r   r3   r   Údecode©r   r_   rH   r   r   r   Ú__getitem__Ñ   s    
z4TreeBuilder.__init__.<locals>.Attributes.__getitem__c                 S   s   || j j j|  |¡< d S r   ©r    r,   ra   rd   r   r   r   Ú__setitem__×   s    z4TreeBuilder.__init__.<locals>.Attributes.__setitem__c                 S   s   | j j j|  |¡= d S r   rf   )r   r_   r   r   r   Ú__delitem__Ú   s    z4TreeBuilder.__init__.<locals>.Attributes.__delitem__c                 S   s   t | jjjƒS r   )Úiterr    r,   r   r   r   r   Ú__iter__Ý   s    z1TreeBuilder.__init__.<locals>.Attributes.__iter__c                 S   s   t | jjjƒS r   )Úlenr    r,   r   r   r   r   Ú__len__à   s    z0TreeBuilder.__init__.<locals>.Attributes.__len__c                 S   s   | j j j ¡ S r   )r    r,   Úclearr   r   r   r   rm   ã   s    z.TreeBuilder.__init__.<locals>.Attributes.clearN)r   r   r   r   ra   re   rg   rh   rj   rl   rm   r   r`   r   r   Ú
AttributesÆ   s   rn   c                       sp   e Zd Z‡ ‡‡fdd„Z‡fdd„Z‡fdd„ZeeeƒZdd„ Zd	d
„ Z	eee	ƒZ
d‡‡fdd„	Zdd„ ZdS )z%TreeBuilder.__init__.<locals>.Elementc                    s*   ˆ  |¡}ˆjj| ||d ˆ | ƒ| _d S )N)Ú	namespace)ÚcoerceElementÚElementr   Ú_attributes)r   r   ro   ©rn   ÚbuilderrK   r   r   r   ç   s    
z.TreeBuilder.__init__.<locals>.Element.__init__c                    s$   ˆ   |¡| _|  | j| j¡| j_d S r   )rp   Ú_nameZ_getETreeTagZ
_namespacer    r(   )r   r   r`   r   r   Ú_setNameì   s    ÿz.TreeBuilder.__init__.<locals>.Element._setNamec                    s   ˆ   | j¡S r   )r?   ru   r   r`   r   r   Ú_getNameñ   s    z.TreeBuilder.__init__.<locals>.Element._getNamec                 S   s   | j S r   )rr   r   r   r   r   Ú_getAttributesö   s    z4TreeBuilder.__init__.<locals>.Element._getAttributesc                 S   s   | j }| ¡  | |¡ d S r   )rG   rm   Úupdate)r   rH   rG   r   r   r   Ú_setAttributesù   s    z4TreeBuilder.__init__.<locals>.Element._setAttributesNc                    s   ˆ  |¡}ˆ j | ||¡ d S r   )ZcoerceCharactersrq   Ú
insertText)r   ÚdataÚinsertBefore©rt   rK   r   r   r{      s    
z0TreeBuilder.__init__.<locals>.Element.insertTextc                 S   s0   t | ƒ| j| jƒ}| jjr,|jj | jj¡ |S r   )Útyper   ro   r    r,   ry   r\   r   r   r   Ú	cloneNode  s    z/TreeBuilder.__init__.<locals>.Element.cloneNode)N)r   r   r   r   rv   rw   r%   r   rx   rz   rG   r{   r€   r   rs   r   r   rq   æ   s   

rq   c                       s8   e Zd Z‡ ‡fdd„Z‡fdd„Zdd„ ZeeeƒZdS )z%TreeBuilder.__init__.<locals>.Commentc                    s   ˆ  |¡}ˆ j | |¡ d S r   )ÚcoerceCommentÚCommentr   ©r   r|   r~   r   r   r     s    
z.TreeBuilder.__init__.<locals>.Comment.__init__c                    s   ˆ   |¡}|| j_d S r   )r   r    r9   rƒ   r`   r   r   Ú_setData  s    
z.TreeBuilder.__init__.<locals>.Comment._setDatac                 S   s   | j jS r   )r    r9   r   r   r   r   Ú_getData  s    z.TreeBuilder.__init__.<locals>.Comment._getDataN)r   r   r   r   r„   r…   r%   r|   r   r~   r   r   r‚   
  s   r‚   )r:   ÚgetETreeModuler   r   rO   rK   ÚnamespaceHTMLElementsr   rq   r‚   ÚelementClassÚcommentClassr   rZ   r   )r   r‡   r[   rq   r‚   r   rs   r   r   Á   s     $zTreeBuilder.__init__c                 C   s$   t j | ¡ | j| _g | _d | _d S r   )r   rZ   ÚresetÚinsertCommentInitialÚinsertCommentÚinitial_commentsrU   r   r   r   r   rŠ     s    zTreeBuilder.resetc                 C   s   t |ƒS r   )rR   r\   r   r   r   rR   #  s    zTreeBuilder.testSerializerc                 C   s   t r| jjS | jj ¡ S d S r   )r[   Údocumentr   r   r   r   r   r   ÚgetDocument&  s    zTreeBuilder.getDocumentc                 C   sF   g }| j d j}|jr"| |j¡ | t|ƒ¡ |jrB| |j¡ |S )Nr   )ÚopenElementsr    r9   r.   ÚextendÚlistr+   )r   Úfragmentr!   r   r   r   ÚgetFragment,  s    zTreeBuilder.getFragmentc                 C   sh   |d }|d }|d }|s0t  dt¡ d | _n4| j |¡}||krPt  dt¡ |  |||¡}|| _d S )Nr   r   r   z#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)ÚwarningsÚwarnr	   rU   rK   rp   ÚdoctypeClass)r   Útokenr   r   r   ZcoercedNamerU   r   r   r   ÚinsertDoctype6  s    zTreeBuilder.insertDoctypec                 C   s6   |d u s|| j u sJ ‚| j jd u s&J ‚| j |¡ d S r   )rŽ   r   r   r.   ©r   r|   Úparentr   r   r   r‹   F  s    z TreeBuilder.insertCommentInitialc                    sB   || j kr,| j j ¡ d jtkr,t dt¡ tt	| ƒ 
||¡ d S )Néÿÿÿÿz@lxml cannot represent adjacent comments beyond the root elements)rŽ   r   r   r(   r8   r•   r–   r	   ÚsuperrZ   rŒ   rš   ©Ú	__class__r   r   ÚinsertCommentMainK  s
    
ÿzTreeBuilder.insertCommentMainc                 C   s´  d}| j rô| j jsJ ‚|d| j j 7 }| j jd us>| j jd urÐ|d| j | j jpRd¡ 7 }| j jrÈ| j j}| d¡dkrž| d¡dkržt dt	¡ | 
dd¡}| d¡dkrº|d	| 7 }qÐ|d
| 7 }n|d7 }|d7 }| j j|d krôt dt	¡ |d7 }t |¡}| jD ] }|  |d ¡}| |j¡ q|  ¡ | _| ¡ | j_|d }| d| j¡}|d u rj|}	nd||f }	|	|_|  ||¡}
||
_| jj |
¡ | j |
¡ | j| _d S )NrX   z<!DOCTYPE %sz PUBLIC "%s" ú'r   ú"z6DOCTYPE system cannot contain single and double quotesZU00027z"%s"z'%s'z''ú>r   zGlxml cannot represent doctype with a different name to the root elementz$<THIS_SHOULD_NEVER_APPEAR_PUBLICLY/>r|   ro   r]   )rU   r   r   r   rK   ZcoercePubidÚfindr•   r–   r	   Úreplacer   Ú
fromstringr   r‰   Zaddpreviousr    ÚdocumentClassrŽ   Zgetroottreer   ÚgetÚdefaultNamespacer(   rˆ   r   r.   r   r    rŒ   )r   r˜   ZdocStrÚsysidÚrootÚcomment_tokenÚcommentr   ro   Z	etree_tagZroot_elementr   r   r   Ú
insertRootQ  sP    
ÿÿ



zTreeBuilder.insertRoot)F)N)N)r   r   r   r   r§   r   r—   rˆ   r‰   ÚfragmentClassr   Úimplementationr   rŠ   rR   r   r”   r™   r‹   r    r®   Ú__classcell__r   r   rž   r   rZ   ¹   s   
\

rZ   )#Ú__doc__Ú
__future__r   r   r   r•   Úrer6   Úcollections.abcr   ÚImportErrorÚcollectionsrX   r   r
   r	   r   r:   r   Z
lxml.etreeÚpip._vendor.sixr   r   r[   Úcompiler;   r‚   r(   r8   Úobjectr   r   rR   rY   rZ   r   r   r   r   Ú<module>   s.   
O)