U o a*7@sdZddlmZmZmZddlZddlZddlZddlm Z ddl m Z ddlm Z dd lm Z dd lmZddlm Z d Zed Ze d jZGdddeZGdddeZddZddZGddde jZdS)aModule 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)base)DataLossWarning) constants)etree) _ihatexmlTz {([^}]*)}(.*)Zasdc@seZdZddZdS) DocumentTypecCs||_||_||_dSN)namepublicIdsystemId)selfrrrrmC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-6mt8ur68\pip\_vendor\html5lib\treebuilders\etree_lxml.py__init__#szDocumentType.__init__N)__name__ __module__ __qualname__rrrrrr "sr c@s,eZdZddZddZddZeeZdS)DocumentcCsd|_g|_dSr ) _elementTree _childNodesrrrrr*szDocument.__init__cCs|j|jdSr )rgetrootZaddnext_elementrelementrrr appendChild.szDocument.appendChildcCs|jSr )rrrrr_getChildNodes1szDocument._getChildNodesN)rrrrr r!property childNodesrrrrr)srcs6gtjdddfdd |ddS)NTZpreventDoubleDashCommentsrc s,t|ds,t|drd|jjrz|jjsF|jjsFd|jj}nd|jj|jj|jjf}dd|d|f|}|dk r|}q|dk r||d| }qnnt |t st |t rt |t st jd dkstd d||fn$d |D]}||dqn|jtkrd d||jft|d r(|jr(d d||jfnt |tjsttj|j}|dk r|d}|d}tj|}dd|||fndd||jft|drg}|jD]d\} } t| }|dk rj|\}} | } tj|}d|| f} n | } || | fq t |D]&\} } dd|d| | fq|jrڈd d|d|jf|d7}|D]} | |qt|d r(|jr(d d|d|jfdS)Ntagrz #document zz|%s%s rrz|%s"%s"z#document-fragmentz|%stailrz |%s<%s %s>z|%s<%s>attribz%s %sz |%s%s="%s")!hasattrappenddocinfo internalDTD public_idZ system_url root_namerZ getpreviousZgetnext isinstancestrbytessys version_infoAssertionErrorr% comment_typetextr(r Z_Elementetree_builders tag_regexpmatchgroupr prefixes fromXmlNamer)itemsgroupssorted) rindentdtd_strZ next_elementZnsmatchnsr%prefix attributesrvalueZ attr_stringchild infosetFilterrvserializeElementrrrK;s|                       z(testSerializer..serializeElement )r)r InfosetFilterjoinrrrHrtestSerializer7s  F rPcs$gfdd|dS)z4Serialize an element and its child nodes to a stringcst|dsH|jjr:|jjr$|jj}n d|jj}||n|jtkrfd|j fn~|j sd|jfn.d dd|j D}d|j|f|j r|j |D] }|qĈd |jft|d r|j r|j dS) Nr%r&z z<%s>r'cSsg|]\}}d||fqS)z%s="%s"r).0rrFrrr sz6tostring..serializeElement..z<%s %s>zr()r*r,r-doctyper/r+rr%r6r7r)rNr>r()rrBattrrGrJrKrrrKs,        z"tostring..serializeElement)rNrOrrUrtostrings rWcszeZdZeZeZdZdZeZ e Z dddZ ddZ ddZd d Zd d Zd dZdddZdfdd ZddZZS) TreeBuilderNFcstjt|dtjdd|_||_GfdddtGfdddj}Gfdd d j }||_ ||_ t j ||dS) N)fullTreeTr$cs&eZdZdfdd ZfddZdS)z(TreeBuilder.__init__..AttributesNcsr|dkr i}||_t|||D]F\}}t|trTd|d|df}n |}||jjj|<q&dSN{%s}%srr)rdictrr>r0tuplecoerceAttributer))rrrFkeyrrIrrrs   z1TreeBuilder.__init__..Attributes.__init__csPt|||t|tr4d|d|df}n |}||jjj|<dSrZ)r\ __setitem__r0r]r^rr))rr_rFrr`rrras   z4TreeBuilder.__init__..Attributes.__setitem__)N)rrrrrarr`rr Attributess rbcsxeZdZfddZfddZfddZeeeZddZfd d Z eee Z dfd d Z fddZ d S)z%TreeBuilder.__init__..Elementcs*|}jj|||d||_dS)N) namespace) coerceElementElementr _attributes)rrrcrbbuilderrIrrrs z.TreeBuilder.__init__..Element.__init__cs$||_||j|j|j_dSr )rd_nameZ _getETreeTagZ _namespacerr%)rrr`rr_setNames  z.TreeBuilder.__init__..Element._setNamecs |jSr )r=rirr`rr_getNamesz.TreeBuilder.__init__..Element._getNamecSs|jSr rfrrrr_getAttributessz4TreeBuilder.__init__..Element._getAttributescs|||_dSr rl)rrE)rbrr_setAttributessz4TreeBuilder.__init__..Element._setAttributesNcs|}j|||dSr )ZcoerceCharactersre insertText)rdata insertBeforerhrIrrros z0TreeBuilder.__init__..Element.insertTextcsj||dSr )rer )rrG)rhrrr sz1TreeBuilder.__init__..Element.appendChild)N) rrrrrjrkr"rrmrnrEror rrgrrres     recs8eZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcs|}j||dSr ) coerceCommentCommentrrrprrrrrs z.TreeBuilder.__init__..Comment.__init__cs|}||j_dSr )rsrr7rur`rr_setDatas z.TreeBuilder.__init__..Comment._setDatacSs|jjSr )rr7rrrr_getDatasz.TreeBuilder.__init__..Comment._getDataN)rrrrrvrwr"rprrrrrrts rt)r8getETreeModuler r rMrInamespaceHTMLElementsr\rert elementClass commentClassrrXr)rryrYrertrrgrrszTreeBuilder.__init__cCs$tj||j|_g|_d|_dSr )rrXresetinsertCommentInitial insertCommentinitial_commentsrSrrrrr|s zTreeBuilder.resetcCst|Sr )rPrrrrrP szTreeBuilder.testSerializercCstr |jjS|jjSdSr )rYdocumentrrrrrr getDocument szTreeBuilder.getDocumentcCsFg}|jdj}|jr"||j|t||jrB||j|S)Nr) openElementsrr7r+extendlistr()rfragmentrrrr getFragments   zTreeBuilder.getFragmentcCsh|d}|d}|d}|s0tdtd|_n4|j|}||krPtdt||||}||_dS)Nrrrz#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)warningswarnrrSrIrd doctypeClass)rtokenrrrZ coercedNamerSrrr insertDoctypes   zTreeBuilder.insertDoctypecCs6|dks||jkst|jjdks&t|j|dSr )rr5rrr+rrpparentrrrr},sz TreeBuilder.insertCommentInitialcsB||jkr,|jjdjtkr,tdttt | ||dS)Nz@lxml cannot represent adjacent comments beyond the root elements) rrrr%r6rrrsuperrXr~r __class__rrinsertCommentMain1s   zTreeBuilder.insertCommentMainc Csd}|jr|jjst|d|jj7}|jjdk s>|jjdk r|d|j|jjpRd7}|jjr|jj}|ddkr|ddkrt dt | dd}|ddkr|d |7}q|d |7}n|d 7}|d 7}|jj|d krt dt |d7}t |}|jD] }||d}||jq ||_||j_|d }|d|j}|dkrj|} n d||f} | |_|||} || _|jj| |j| |j|_dS)NrVz rzGlxml cannot represent doctype with a different name to the root elementz$rprcr[)rSrr5rrrIZ coercePubidfindrrrreplacer fromstringrr{Z addpreviousr documentClassrZ getroottreergetdefaultNamespacer%rzrr+rrr~) rrZdocStrsysidroot comment_tokencommentrrcZ etree_tagZ root_elementrrr insertRoot7sP              zTreeBuilder.insertRoot)F)N)N)rrrrrr rrzr{ fragmentClassr implementationrr|rPrrrr}rr __classcell__rrrrrXs L  rX)__doc__ __future__rrrrrer3rVrr rr r8r Z lxml.etreerYcompiler9rtr%r6objectr rrPrWrXrrrrs$         O)