o [d.@sddlZddlZdZdZdZdZdZdZdZ d Z Gd d d ej j Z Gd d d ZGdddZGddde ZdZdddZdddZdS)N START_ELEMENT END_ELEMENTCOMMENTSTART_DOCUMENT END_DOCUMENTPROCESSING_INSTRUCTIONIGNORABLE_WHITESPACE CHARACTERSc@seZdZdZdZd$ddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZd d!Zd"d#ZdS)%PullDOMNcCsxddlm}||_ddg|_|j|_g|_|jj|_z|jj|_Wn t y*Ynw|dig|_ |j d|_ g|_ dS)Nr) XML_NAMESPACExml) xml.domr documentFactory firstEvent lastEvent elementStackappendpushpopAttributeError _ns_contexts_current_contextpending_events)selfrr r&/usr/lib/python3.10/xml/dom/pulldom.py__init__s       zPullDOM.__init__cCs|jd}|jd=|SNr )r)rresultrrrr!s z PullDOM.popcCs ||_dSN)_locator)rlocatorrrrsetDocumentLocator&s zPullDOM.setDocumentLocatorcCsHt|dsg|_|j|pd|f|j|j|pd|j|<dS)N _xmlns_attrsxmlns)hasattrr$rrrcopy)rprefixurirrrstartPrefixMapping)s zPullDOM.startPrefixMappingcCs|j|_dSr )rrr)rr(rrrendPrefixMapping0szPullDOM.endPrefixMappingcCsd}t|dd}|dur|D] \}}||j||f<qg|_|\}} |rI|dur7|j|} | r5| d| }n| }|jrB|j||} n|||} n|jrS|j| } n|d| } |D]Q\}}|\} } | |kr| dkrp| }nd| }|j | |}| |n*| r|j| } | r| d| }n| }|j | |}| |n |j | }| |||_ q]t| fdg|jd<|jd|_|| dS)Nzhttp://www.w3.org/2000/xmlns/r$:r%zxmlns:)getattr_attrsr$rdocumentcreateElementNS buildDocument createElementitemscreateAttributeNSsetAttributeNodeNScreateAttributesetAttributeNodevaluerrr)rnametagNameattrs xmlns_uri xmlns_attrsanamer9r) localnamer(nodea_uri a_localnameqnameattrrrrstartElementNS3sP          zPullDOM.startElementNScC&t|fdg|jd<|jd|_dSNr-rrr)rr:r;rrr endElementNSlzPullDOM.endElementNScCsz|jr |j|}n|d|}|D]\}}|j|}||_||qt|fdg|jd<|jd|_| |dSrH) r0r3r2r4r7r9r8rrr)rr:r<rAr?r9rErrr startElementps    zPullDOM.startElementcCrGrHrI)rr:rrr endElementrKzPullDOM.endElementcCsP|jr|j|}t|fdg|jd<|jd|_dSt|fdg}|j|dSrH)r0 createCommentrrrr)rsrAeventrrrcomments   zPullDOM.commentcCsT|jr|j||}t|fdg|jd<|jd|_dSt||fdg}|j|dSrH)r0createProcessingInstructionrrrr)rtargetdatarArPrrrprocessingInstructions zPullDOM.processingInstructioncC.|j|}t|fdg|jd<|jd|_dSrH)r0createTextNoderrrcharsrArrrignorableWhitespace zPullDOM.ignorableWhitespacecCrVrH)r0rWr rrXrrr charactersr[zPullDOM.characterscCs(|jdurddl}|jjjj|_dSdS)Nr)rxml.dom.minidomdomminidomDocumentimplementation)rr rrr startDocuments zPullDOM.startDocumentc Cs|j||d}||_t|fdg|jd<|jd|_|||jD]I}|ddtkrA|d\}}}|j||}t|f|d<n"|ddt krZ|j |dd}t |f|d<n t d|dd||jd<||_q"d|_|j S)Nr-rzUnknown pending event ) rcreateDocumentr0rrrrrrRrrNAssertionError firstChild) rr)tagnamerAe_rSrTnrrrr2s$    zPullDOM.buildDocumentcCs t|jfdg|jd<|dSrH)rr0rrrrrr endDocuments zPullDOM.endDocumentcCs d|_dS)z.clear(): Explicitly release parsing structuresN)r0rjrrrclears z PullDOM.clearr )__name__ __module__ __qualname__r!r0rrr#r*r+rFrJrLrMrQrUrZr\rbr2rkrlrrrrr s( 9   r c@s$eZdZddZddZddZdS) ErrorHandlercCs t|dSr )printr exceptionrrrwarnings zErrorHandler.warningcC|r rrrrrrerrorzErrorHandler.errorcCrur rrrrrr fatalErrorrwzErrorHandler.fatalErrorN)rmrnrortrvrxrrrrrps rpc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)DOMEventStreamcCs2||_||_||_t|jds|j|_|dS)Nfeed)streamparserbufsizer&_slurpgetEventreset)rr{r|r}rrrrs   zDOMEventStream.__init__cCs.t|_|jtjjjd|j|jdSrH) r pulldomr| setFeaturer saxhandlerfeature_namespacessetContentHandlerrjrrrrszDOMEventStream.resetcCs,ddl}|jdtdd|}|r|St)Nrz[DOMEventStream's __getitem__ method ignores 'pos' parameter. Use iterator protocol instead.) stacklevel)warningswarnDeprecationWarningr IndexError)rposrrcrrr __getitem__szDOMEventStream.__getitem__cCs|}|r|Str )r StopIterationrrrrr__next__szDOMEventStream.__next__cCs|Sr rrjrrr__iter__rwzDOMEventStream.__iter__cCsr|}|g}|r7|\}}||urdS|tkr|d||tkr(||n|tkr/|d=|}|s dSdSr)rr appendChildrr)rrArPparentstokencur_noderrr expandNodes  zDOMEventStream.expandNodecCs|jjds |jj|j_|jjds.|j|j}|s"|jdS|j||jjdr|jjdd}|jjdd|jjd<|S)Nr-r) rrrr{readr}r|closerz)rbufrrrrrs      zDOMEventStream.getEventcCs|j|j|j|_|S)z Fallback replacement for getEvent() using the standard SAX2 interface, which means we slurp the SAX events into memory (no performance gain, but we are compatible to all SAX parsers). )r|parser{_emitrrjrrrr~szDOMEventStream._slurpcCs,|jjdd}|jjdd|jjd<|S)zn Fallback replacement for getEvent() that emits the events that _slurp() read previously. r-r)rrrrrrrszDOMEventStream._emitcCs|j|`d|_d|_dS)z+clear(): Explicitly release parsing objectsN)rrlr|r{rjrrrrl!s  zDOMEventStream.clearN) rmrnrorrrrrrrr~rrlrrrrrys  ryc@s4eZdZddZddZddZddZd d Zd S) SAX2DOMcCs2t|||||jd}|jd}||dSNr )r rFrr)rr:r;r<curNode parentNoderrrrF*s  zSAX2DOM.startElementNScCs0t||||jd}|jd}||dSr)r rLrr)rr:r<rrrrrrL0s  zSAX2DOM.startElementcCs4t||||jdd}|jd}||dSNrr-r )r rUrrr)rrSrTrArrrrrU6s zSAX2DOM.processingInstructioncC2t|||jdd}|jd}||dSr)r rZrrrrrYrArrrrrZ<  zSAX2DOM.ignorableWhitespacecCrr)r r\rrrrrrrr\BrzSAX2DOM.charactersN)rmrnrorFrLrUrZr\rrrrr(s  ri?cCs@|durt}t|trt|d}n|}|stj}t|||S)Nrb)default_bufsize isinstancestropenr r make_parserry)stream_or_stringr|r}r{rrrrKs    rcCs6ddlm}t|}||}|stj}t|||S)Nr)StringIO)iorlenr rrry)stringr|rr}rrrr parseStringVs   r)NNr )xml.saxr xml.sax.handlerrrrrrrrr rContentHandlerr rpryrrrrrrrrs$8\!