JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB |/\$@sdZddlmZddlmZddlmZddlmZm Z ddlm Z m Z Gdddej Z d d ZGd d d eZGd ddeZddZdS)aI SAX-based adapter to copy trees from/to the Python standard library. Use the `ElementTreeContentHandler` class to build an ElementTree from SAX events. Use the `ElementTreeProducer` class or the `saxify()` function to fire the SAX events of an ElementTree against a SAX ContentHandler. See http://codespeak.net/lxml/sax.html )absolute_import)ContentHandler)etree) ElementTree SubElement)CommentProcessingInstructionc@seZdZdZdS)SaxErrorzGeneral SAX error. N)__name__ __module__ __qualname____doc__rr;/opt/alt/python37/lib64/python3.7/site-packages/lxml/sax.pyr sr cCs0|ddkr$t|ddddSd|fSdS)Nr{})tuplesplit)tagrrr _getNsTags rc@seZdZdZd ddZddZeeejdZdd Zd d Z d d Z ddZ ddZ ddZ d!ddZddZddZd"ddZddZddZeZdS)#ElementTreeContentHandlerz/Build an lxml ElementTree from SAX events. NcCsLt|d|_g|_g|_d|_ddgi|_i|_|dkrBtj }||_ dS)N) r__init___root_root_siblings_element_stack _default_ns _ns_mapping _new_mappingsrZElement _makeelement)selfZ makeelementrrrr&s  z"ElementTreeContentHandler.__init__cCs t|jS)z=Contains the generated ElementTree after parsing is finished.)rr)r rrr _get_etree2sz$ElementTreeContentHandler._get_etree)doccCsdS)Nr)r locatorrrrsetDocumentLocator8sz,ElementTreeContentHandler.setDocumentLocatorcCsdS)Nr)r rrr startDocument;sz'ElementTreeContentHandler.startDocumentcCsdS)Nr)r rrr endDocument>sz%ElementTreeContentHandler.endDocumentcCsR||j|<y|j||Wn tk r>|g|j|<YnX|dkrN||_dS)N)rrappendKeyErrorr)r prefixurirrrstartPrefixMappingAs z,ElementTreeContentHandler.startPrefixMappingcCs(|j|}||dkr$|d|_dS)N)rpopr)r r)Z ns_uri_listrrrendPrefixMappingJs z*ElementTreeContentHandler.endPrefixMappingcCs4|\}}|rd|}n|jr,d|j|f}n|}|S)Nz{%s}%s)r)r Z ns_name_tuplens_uri local_nameel_tagrrr _buildTagPs z#ElementTreeContentHandler._buildTagc Cs||}|rri}y |}Wntk r:|}YnXx8|D]*\}}|dr\d|} n|d} ||| <qBWnd}|j} |jdkr||||j} |_|jrt | drx|jD]} | | qW|jdd=nt | d|||j} | | |j dS)Nrz{%s}%sr addpreviousr,)r2 iteritemsAttributeErroritemsrrrrrhasattrr3rr'clear) r ns_nameqname attributesZel_nameattrsZiter_attributesZ name_tuplevalue attr_nameZ element_stackelementsiblingrrrstartElementNSZs0        z(ElementTreeContentHandler.startElementNScCs6t||}|jdkr"|j|n|jd|dS)Nr,)rrrr'r)r targetdatapirrrprocessingInstruction{s  z/ElementTreeContentHandler.processingInstructioncCs.|j}||}||jkr*td|dS)NzUnexpected element closed: )rr-r2rr )r r9r:r?r1rrr endElementNSs   z&ElementTreeContentHandler.endElementNScCs0|rtdd|D}|d|f||dS)NcSsg|]\}}d|f|fqS)Nr).0kvrrr sz:ElementTreeContentHandler.startElement..)dictr6rA)r namer;rrr startElementsz&ElementTreeContentHandler.startElementcCs|d|f|dS)N)rF)r rLrrr endElementsz$ElementTreeContentHandler.endElementcCsP|jd}y|d}|jpd||_Wn$tk rJ|jp>d||_YnXdS)Nr,)rtail IndexErrortext)r rCZ last_elementrrr characterss  z$ElementTreeContentHandler.characters)N)N)N)r r r r rr!propertyrr$r%r&r+r.r2rArErFrMrNrSZignorableWhitespacerrrrr#s"   !  rc@s0eZdZdZddZddZddZdd Zd S) ElementTreeProducerz5Produces SAX events for an element and children. cCsTy |}Wntk r$|}YnX||_||_ddlm}||_|ii|_dS)Nr)AttributesNSImpl)Zgetrootr5_element_content_handlerZxml.sax.xmlreaderrV _attr_class_empty_attributes)r element_or_treecontent_handlerr?Z attr_classrrrrs   zElementTreeProducer.__init__cCs|j|j}t|drrg}|}x&t|ddtkrL|||}q(Wx"|dddD]}||iq^W||it|dr| }x(t|ddtkr||i| }qW|j dS)N getpreviousrr,getnext) rXr%rWr7r]getattrrr'_recursive_saxifyr^r&)r r?Zsiblingsr@rrrsaxifys"        zElementTreeProducer.saxifycCs|j}|j}|tks|tkrL|tkr4||j|j|j}|rH||dS|j }g}||krx0| D]$\}} | || krh| || fqhW| } | ri} i} x@| D]8\} }t | }|| |<|j|d|d|ddd| |<qW|| | }n|j}t |\} }|j| |||jdd}x|D]\}}|||q"W|| |f|||j}|rd||x|D]}|||qjW|| |f|x|D]\}}||qW|j}|r||dS)NrrT)preferred_prefix is_attributeF)rc)rXrrrrErBrRrPrSnsmapr6getr'r _build_qnamerYrZr)r+rAr`rFr.)r r?Z parent_nsmapr\rrPZ element_nsmapZ new_prefixesr)r/ZattribsZ attr_valuesZ attr_qnamesZ attr_ns_namer=Z attr_ns_tupleZsax_attributesr0r:r*rRchildrrrr`s\     z%ElementTreeProducer._recursive_saxifycsvdkr |S|s$||kr$|}n:fdd|D}t|dkrN|dn|rZt|nd}|dkrj|S|d|S)Ncs$g|]\}}|dk r|kr|qS)Nr)rGpfxr*)r/rrrJsz4ElementTreeProducer._build_qname..rr:)rer6lenmin)r r/r0rdrbrcr) candidatesr)r/rrfs z ElementTreeProducer._build_qnameN)r r r r rrar`rfrrrrrUs  6rUcCst||S)zlOne-shot helper to generate SAX events from an XML tree and fire them against a SAX ContentHandler. )rUra)r[r\rrrrasraN)r __future__rZxml.sax.handlerrlxmlrZ lxml.etreerrrrZ LxmlErrorr rrobjectrUrarrrr s   |s