
    hW$                         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\R                  5      rS r " S	 S
\5      r " S S5      rS rg)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ProcessingInstructionc                       \ rS rSrSrSrg)SaxError   zGeneral SAX error.
     N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       :/var/www/html/env/lib/python3.13/site-packages/lxml/sax.pyr
   r
      s    r   r
   c                 X    U S   S:X  a  [        U SS  R                  SS5      5      $ S U 4$ )Nr   {   })tuplesplit)tags    r   	_getNsTagr      s3    
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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#   r+   s    r   
_get_etree$ElementTreeContentHandler._get_etree1   s    4::&&r   )docc                     g r!   r   )r+   locators     r   setDocumentLocator,ElementTreeContentHandler.setDocumentLocator7       r   c                     g r!   r   r/   s    r   startDocument'ElementTreeContentHandler.startDocument:   r7   r   c                     g r!   r   r/   s    r   endDocument%ElementTreeContentHandler.endDocument=   r7   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!   )r(   r'   appendKeyErrorr&   )r+   prefixuris      r   startPrefixMapping,ElementTreeContentHandler.startPrefixMapping@   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&   )r+   rA   ns_uri_lists      r   endPrefixMapping*ElementTreeContentHandler.endPrefixMappingI   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&   )r+   ns_name_tuplens_uri
local_nameel_tags        r   	_buildTag#ElementTreeContentHandler._buildTagO   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   rM   r   addpreviousrG   )rR   	iteritemsAttributeErroritemsr%   r#   r*   r(   r$   hasattrrU   r   r?   clear)r+   ns_nameqname
attributesel_nameattrsiter_attributes
name_tuplevalue	attr_nameelement_stackelementsiblings                r   startElementNS(ElementTreeContentHandler.startElementNSY   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 rF   )r   r#   r$   r?   r%   )r+   targetdatapis       r   processingInstruction/ElementTreeContentHandler.processingInstructionz   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%   rH   rR   r   r
   )r+   r[   r\   re   rQ   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!   )rX   rg   )r+   namer]   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!   )rp   )r+   rs   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)NrG    )r%   tail
IndexErrortext)r+   rk   last_elements      r   
characters$ElementTreeContentHandler.characters   sc    **2.	A'+L!-!2!2!8bD @L 	A!-!2!2!8bD @L	As   "4 'AA)r&   r%   r*   r(   r'   r#   r$   r!   )r   r   r   r   r   r"   r0   propertyr   r5   r9   r<   rC   rJ   rR   rg   rm   rp   rv   ry   r   ignorableWhitespacer   r   r   r   r   r   "   sl    
(' 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)getrootrW   _element_content_handlerxml.sax.xmlreaderr   _attr_class_empty_attributes)r+   element_or_treecontent_handlerre   
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   rG   getnext)r   r9   r   rY   r   getattrr   r?   _recursive_saxifyr   r<   )r+   re   siblingsrf   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   rm   rj   r   r}   r   nsmaprX   getr?   r   _build_qnamer   r   rA   rC   rg   r   rp   rJ   )r+   re   parent_nsmapr   r   r}   element_nsmapnew_prefixesrA   rO   attribsattr_valuesattr_qnamesattr_ns_namerb   attr_ns_tuplesax_attributesrP   r\   rB   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   rX   lenmin)
r+   rO   rP   r   r   r   rA   pfxrB   
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   	LxmlErrorr
   r   r   r   r   r   r   r   <module>r      sO   
 +  . 5u 
w% w%tp) p)fJr   