
    LAi%                         S r SSKJr  SSKJr  SSKJrJr  SSKJrJ	r	   SSK
Jr   " S S	\R                  5      rS
 r " S S\5      r " S S5      rS rg! \ a    S r N<f = f)a?  
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 https://lxml.de/sax.html
    )ContentHandler)etree)ElementTree
SubElement)CommentProcessingInstruction)GenericAliasc                 :    U R                    SUR                    S3$ )N[])__name__clsitems     D/var/www/html/land-ocr/venv/lib/python3.13/site-packages/lxml/sax.py_GenericAliasr      s    ,,qq11    c                       \ rS rSrSrSrg)SaxError   zGeneral SAX error.
     N)r   
__module____qualname____firstlineno____doc____static_attributes__r   r   r   r   r      s    r   r   c                 d    U S   S:X  a$  SU ;   a  [        U SS  R                  SS5      5      $ S U 4$ )Nr   {}   )tuplesplit)tags    r   	_getNsTagr$       s9    
1v}SW]]3*++Syr   c                       \ rS rSrSrSS jrS r\" \\R                  S9rS r	S r
S	 rS
 rS rS rSS jrS rS rSS jrS rS r\rS rSrg)ElementTreeContentHandler'   z/Build an lxml ElementTree from SAX events.
    Nc                     [         R                  " U 5        S U l        / U l        / U l        S U l        S S /0U l        0 U l        Uc  [        R                  nXl
        g N)r   __init___root_root_siblings_element_stack_default_ns_ns_mapping_new_mappingsr   Element_makeelement)selfmakeelements     r   r*   "ElementTreeContentHandler.__init__*   s[    %
  !TF,--K'r   c                 ,    [        U R                  5      $ )z=Contains the generated ElementTree after parsing is finished.)r   r+   r3   s    r   
_get_etree$ElementTreeContentHandler._get_etree6   s    4::&&r   )docc                     g r)   r   )r3   locators     r   setDocumentLocator,ElementTreeContentHandler.setDocumentLocator<       r   c                     g r)   r   r7   s    r   startDocument'ElementTreeContentHandler.startDocument?   r?   r   c                     g r)   r   r7   s    r   endDocument%ElementTreeContentHandler.endDocumentB   r?   r   c                     X R                   U'    U R                  U   R                  U5        Uc  X l        g g ! [         a    U/U R                  U'    N'f = fr)   )r0   r/   appendKeyErrorr.   )r3   prefixuris      r   startPrefixMapping,ElementTreeContentHandler.startPrefixMappingE   sc    %(6"	-V$++C0 >"   	-(+uDV$	-s   9 AAc                 ^    U R                   U   nUR                  5         Uc  US   U l        g g N)r/   popr.   )r3   rI   ns_uri_lists      r   endPrefixMapping*ElementTreeContentHandler.endPrefixMappingN   s2    &&v.>*2D r   c                 |    Uu  p#U(       a  SU-  nU$ U R                   (       a  SU R                   < SU< 3nU$ UnU$ )N{%s}%sr   r   )r.   )r3   ns_name_tuplens_uri
local_nameel_tags        r   	_buildTag#ElementTreeContentHandler._buildTagT   sO    *-F
 	 !%!1!1:>F   Fr   c                    U R                  U5      nU(       a8  0 n UR                  5       nU H  u  pxUS   (       a  SU-  n	OUS   n	XU	'   M      OS nU R                  n
U R
                  cx  U R                  XEU R                  5      =ol        U R                  (       a5  [        US5      (       a$  U R                   H  nUR                  U5        M     U R                  S S 2	 O[        U
S   UXPR                  5      nU
R                  U5        U R                  R                  5         g ! [         a    UR                  5       n GNf = f)Nr   rU   r    addpreviousrO   )rZ   	iteritemsAttributeErroritemsr-   r+   r2   r0   r,   hasattrr]   r   rG   clear)r3   ns_nameqname
attributesel_nameattrsiter_attributes
name_tuplevalue	attr_nameelement_stackelementsiblings                r   startElementNS(ElementTreeContentHandler.startElementNS^   s4   ..)E5","6"6"8 &5!
a= (: 5I *1I#(i  &5 E++::''8J8JKLGj""ww'F'F#22G''0  3##A& r!2G!&(:(:<GW%  "3 " 5","2"2"45s   D* *EEc                     [        X5      nU R                  c  U R                  R                  U5        g U R                  S   R                  U5        g rN   )r   r+   r,   rG   r-   )r3   targetdatapis       r   processingInstruction/ElementTreeContentHandler.processingInstruction   sC    "60::&&r*#**2.r   c                     U R                   R                  5       nU R                  U5      nXCR                  :w  a  [	        SU-   5      eg )NzUnexpected element closed: )r-   rP   rZ   r#   r   )r3   rc   rd   rm   rY   s        r   endElementNS&ElementTreeContentHandler.endElementNS   sD    %%))+([[ 86ABB !r   c                     U(       a'  UR                  5        VVs0 s H
  u  p4S U4U_M     nnnU R                  S U4X5        g s  snnf r)   )r`   ro   )r3   namere   kvs        r   startElement&ElementTreeContentHandler.startElement   sH    3=3C3C3EF3E414)Q,3EJFT4L$; Gs   Ac                 ,    U R                  S U4U5        g r)   )rx   )r3   r{   s     r   
endElement$ElementTreeContentHandler.endElement   s    4,-r   c                     U R                   S   n US   nUR                  =(       d    SU-   Ul        g ! [         a     UR                  =(       d    SU-   Ul         g f = f)NrO    )r-   tail
IndexErrortext)r3   rs   last_elements      r   
characters$ElementTreeContentHandler.characters   sg    **2.	A'+L
 ".!2!2!8bD @L	  	A!-!2!2!8bD @L	As   4 'AAc                     [        X5      $ r)   )r   r   s     r   __class_getitem__+ElementTreeContentHandler.__class_getitem__   s    S''r   )r.   r-   r2   r0   r/   r+   r,   r)   )r   r   r   r   r   r*   r8   propertyr   r=   rA   rD   rK   rR   rZ   ro   ru   rx   r~   r   r   ignorableWhitespacer   r   r   r   r   r&   r&   '   sq    
(' ZZ%7%78E#/#B/C<
.	A %(r   r&   c                   0    \ rS rSrSrS rS rS rS rSr	g)	ElementTreeProducer   z5Produces SAX events for an element and children.
    c                      UR                  5       nX0l        X l        SSKJn  X@l        U" 0 0 5      U l        g ! [         a    Un N5f = f)Nr   )AttributesNSImpl)getrootr_   _element_content_handlerxml.sax.xmlreaderr   _attr_class_empty_attributes)r3   element_or_treecontent_handlerrm   
attr_classs        r   r*   ElementTreeProducer.__init__   sP    	&%--/G   /D%!+B!3  	&%G	&s   9 AAc                    U R                   R                  5         U R                  n[        US5      (       a~  / nUR	                  5       n[        USS 5      [        L a7  UR                  U5        UR	                  5       n[        USS 5      [        L a  M7  US S S2    H  nU R                  U0 5        M     U R                  U0 5        [        US5      (       a\  UR                  5       n[        USS 5      [        L a8  U R                  U0 5        UR                  5       n[        USS 5      [        L a  M8  U R                   R                  5         g )Ngetpreviousr#   rO   getnext)r   rA   r   ra   r   getattrr   rG   _recursive_saxifyr   rD   )r3   rm   siblingsrn   s       r   saxifyElementTreeProducer.saxify   s"   ++---7M**H))+G'5$/3HH(!--/ '5$/3HH $DbD>&&w3 * 	w+7I&&oo'G'5$/3HH&&w3!//+ '5$/3HH 	))+r   c           	      j   U R                   nUR                  nU[        L d	  U[        L aT  U[        L a&  UR	                  UR
                  UR                  5        UR                  nU(       a  UR                  U5        g UR                  n/ nXb:w  aB  UR                  5        H.  u  pUR                  U5      U	:w  d  M  UR                  X45        M0     UR                  5       n
U
(       aK  0 n0 nU
 H/  u  p[        U5      nXU'   U R                  US   US   US SS9X'   M1     U R                  X5      nOU R                   n[        U5      u  n	nU R                  U	UXaR"                  SS9nU H  u  nnUR%                  UU5        M     UR'                  U	U4UU5        UR                  nU(       a  UR                  U5        U H  nU R)                  UU5        M     UR+                  U	U4U5        U H  u  nnUR-                  U5        M     UR                  nU(       a  UR                  U5        g g )Nr   r    T)preferred_prefixis_attributeF)r   )r   r#   r   r   ru   rr   r   r   r   nsmapr`   getrG   r$   _build_qnamer   r   rI   rK   ro   r   rx   rR   )r3   rm   parent_nsmapr   r#   r   element_nsmapnew_prefixesrI   rW   attribsattr_valuesattr_qnamesattr_ns_namerj   attr_ns_tuplesax_attributesrX   rd   rJ   r   childs                         r   r   %ElementTreeProducer._recursive_saxify   s&   //kk'>S$99++55NNGLL2<<D**40("/"5"5"7##F+v5 ''&)9; #8 --/KK'.# ), 7-2M*-1->->!!$mA&6%) .? .>* (/ "--kGN!33N&s^
!!J~~E " S (KFC..vs; (&&Z %	9||&&t,E""5-8 $$fj%95A'KFC,,V4 (||&&t, r   c                     Uc  U$ U(       d  UR                  U5      U:X  a  UnOXUR                  5        VVs/ s H  u  pxUc  M
  X:X  d  M  UPM     n	nn[        U	5      S:X  a  U	S   OU	(       a  [        U	5      OS nUc  U$ US-   U-   $ s  snnf )Nr    r   :)r   r`   lenmin)
r3   rW   rX   r   r   r   rI   pfxrJ   
candidatess
             r   r    ElementTreeProducer._build_qname  s    >		*: ;v E%F ',kkm&3
 '*} m  
 "%ZA!5
1(2S_  >|j((s   	B
B
B
)r   r   r   r   N)
r   r   r   r   r   r*   r   r   r   r   r   r   r   r   r      s    	4,.4-l)r   r   c                 4    [        X5      R                  5       $ )zdOne-shot helper to generate SAX events from an XML tree and fire
them against a SAX ContentHandler.
)r   r   )r   r   s     r   r   r     s     @GGIIr   N)r   xml.sax.handlerr   lxmlr   
lxml.etreer   r   r   r   typesr	   r   ImportError	LxmlErrorr   r$   r&   r   r   r   r   r   <module>r      sn   
 +  . 523u 
|( |(~p) p)fJI  222s   A 	A#"A#