a
lj9 @ s d Z ddlmZmZmZ ddlZddlZddlZzddlm Z W n e
y^ ddlm Z Y n0 ddlm
Z
ddlmZ dd lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ d
ZedZedjZG dd deZG dd deZdd Z dd Z!G dd de
j"Z"dS )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_importdivisionunicode_literalsN)MutableMapping )base )DataLossWarning) constants)etree) _ihatexml)PY3binary_typeTz
{([^}]*)}(.*)Zasdc @ s e Zd Zdd ZdS )DocumentTypec C s || _ || _|| _d S N)namepublicIdsystemId)selfr r r r P/usr/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py__init__) s zDocumentType.__init__N)__name__
__module____qualname__r r r r r r ( s r c @ s, e Zd Zdd Zdd Zdd ZeeZdS )Documentc C s d | _ g | _d S r )_elementTree_childNodesr r r r r 0 s zDocument.__init__c C s. | j }| j D ]}q||j d S r )r getrootZitersiblingsZaddnext_element)r elementlastr r r appendChild4 s
zDocument.appendChildc C s | j S r )r r r r r _getChildNodes; s zDocument._getChildNodesN)r r r r r# r$ propertyZ
childNodesr r r r r / s r c s6 g t jdd d fdd | d dS )NTZpreventDoubleDashCommentsr c
s, t | ds,t | drd | jjrz| jjsF| jjsFd| jj }nd| jj| jj| jjf }dd|d |f | }| d ur| }q|d ur||d | }qnnt
| tst
| trt
| tst
jd dksJ d
d| | f n$d | D ]}||d qn| jtkrdd| | jf t | d
r(| jr(d
d| | jf nt
| tjsJ tj| j}|d ur|d}|d}tj| }dd| | |f ndd| | jf t | drg }| j D ]d\} }
t| }|d urj| \}} | } tj| }d|| f }n
| }|||
f q t|D ]&\} }
dd|d | |
f q| jrڈd
d|d | jf |d7 }| D ]}|| qt | d
r(| jr(d
d|d | jf d S )Ntagr z #document
zz|%s%s r r z|%s"%s"z#document-fragmentz|%stailr z
|%s<%s %s>z|%s<%s>attribz%s %sz
|%s%s="%s") hasattrappenddocinfointernalDTDZ public_idZ
system_url root_namer ZgetpreviousZgetnext
isinstancestrbytessysversion_infor' comment_typetextr* r Z_Elementetree_builders
tag_regexpmatchgroupr
prefixesfromXmlNamer+ itemsgroupssorted)
r! indentdtd_strZnext_elementZnsmatchnsr' prefix
attributesr valueZattr_stringchild
infosetFilterrvserializeElementr r rK E s|
z(testSerializer.