<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    |/\$                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddlm
Z
mZ G dd dejZd	d
 ZG dd deZG dd deZdd ZdS )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)CommentProcessingInstructionc               @   s   e Zd ZdZdS )SaxErrorzGeneral SAX error.
    N)__name__
__module____qualname____doc__ r   r   ;/opt/alt/python37/lib64/python3.7/site-packages/lxml/sax.pyr	      s   r	   c             C   s0   | d dkr$t | dd  ddS d | fS d S )Nr   {   })tuplesplit)tagr   r   r   	_getNsTag   s    r   c               @   s   e Zd ZdZd ddZdd ZeeejdZdd	 Zd
d Z	dd Z
dd Zdd Zdd Zd!ddZdd Zdd Zd"ddZdd Zdd ZeZdS )#ElementTreeContentHandlerz/Build an lxml ElementTree from SAX events.
    Nc             C   sL   t |  d | _g | _g | _d | _d d gi| _i | _|d krBtj	}|| _
d S )N)r   __init___root_root_siblings_element_stack_default_ns_ns_mapping_new_mappingsr   ZElement_makeelement)selfZmakeelementr   r   r   r   &   s    
z"ElementTreeContentHandler.__init__c             C   s
   t | jS )z=Contains the generated ElementTree after parsing is finished.)r   r   )r    r   r   r   
_get_etree2   s    z$ElementTreeContentHandler._get_etree)docc             C   s   d S )Nr   )r    Zlocatorr   r   r   setDocumentLocator8   s    z,ElementTreeContentHandler.setDocumentLocatorc             C   s   d S )Nr   )r    r   r   r   startDocument;   s    z'ElementTreeContentHandler.startDocumentc             C   s   d S )Nr   )r    r   r   r   endDocument>   s    z%ElementTreeContentHandler.endDocumentc             C   sR   || j |< y| j| | W n  tk
r>   |g| j|< Y nX |d krN|| _d S )N)r   r   appendKeyErrorr   )r    prefixurir   r   r   startPrefixMappingA   s    
z,ElementTreeContentHandler.startPrefixMappingc             C   s(   | j | }|  |d kr$|d | _d S )N)r   popr   )r    r(   Zns_uri_listr   r   r   endPrefixMappingJ   s    
z*ElementTreeContentHandler.endPrefixMappingc             C   s4   |\}}|rd| }n| j r,d| j |f }n|}|S )Nz{%s}%s)r   )r    Zns_name_tuplens_uri
local_nameel_tagr   r   r   	_buildTagP   s    
z#ElementTreeContentHandler._buildTagc             C   s   |  |}|rri }y| }W n tk
r:   | }Y nX x8|D ]*\}}|d r\d| }	n|d }	|||	< qBW nd }| j}
| jd kr| ||| j }| _| jrt	|drx| jD ]}|
| qW | jd d = nt|
d ||| j}|
| | j  d S )Nr   z{%s}%sr   addpreviousr+   )r1   Z	iteritemsAttributeErroritemsr   r   r   r   r   hasattrr2   r   r&   clear)r    ns_nameqname
attributesZel_nameZattrsZiter_attributesZ
name_tuplevalueZ	attr_nameZelement_stackelementsiblingr   r   r   startElementNSZ   s0    





z(ElementTreeContentHandler.startElementNSc             C   s6   t ||}| jd kr"| j| n| jd | d S )Nr+   )r   r   r   r&   r   )r    targetdatapir   r   r   processingInstruction{   s    

z/ElementTreeContentHandler.processingInstructionc             C   s.   | j  }| |}||jkr*td| d S )NzUnexpected element closed: )r   r,   r1   r   r	   )r    r7   r8   r;   r0   r   r   r   endElementNS   s    


z&ElementTreeContentHandler.endElementNSc             C   s0   |rt dd | D }| d |f|| d S )Nc             S   s   g | ]\}}d |f|fqS )Nr   ).0kvr   r   r   
<listcomp>   s    z:ElementTreeContentHandler.startElement.<locals>.<listcomp>)dictr4   r=   )r    namer9   r   r   r   startElement   s    z&ElementTreeContentHandler.startElementc             C   s   |  d |f| d S )N)rB   )r    rH   r   r   r   
endElement   s    z$ElementTreeContentHandler.endElementc             C   sP   | j d }y|d }|jpd| |_W n$ tk
rJ   |jp>d| |_Y nX d S )Nr+    )r   tail
IndexErrortext)r    r?   Zlast_elementr   r   r   
characters   s    
z$ElementTreeContentHandler.characters)N)N)N)r
   r   r   r   r   r!   propertyr   r#   r$   r%   r*   r-   r1   r=   rA   rB   rI   rJ   rO   ZignorableWhitespacer   r   r   r   r   #   s"   
	

!

r   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ElementTreeProducerz5Produces SAX events for an element and children.
    c             C   sT   y|  }W n tk
r$   |}Y nX || _|| _ddlm} || _|i i | _d S )Nr   )AttributesNSImpl)Zgetrootr3   _element_content_handlerZxml.sax.xmlreaderrR   _attr_class_empty_attributes)r    element_or_treecontent_handlerr;   Z
attr_classr   r   r   r      s    
zElementTreeProducer.__init__c             C   s   | j   | j}t|drrg }| }x&t|dd tkrL|| | }q(W x"|d d d D ]}| |i  q^W | |i  t|dr|	 }x(t|dd tkr| |i  |	 }qW | j 
  d S )Ngetpreviousr   r+   getnext)rT   r$   rS   r5   rY   getattrr   r&   _recursive_saxifyrZ   r%   )r    r;   Zsiblingsr<   r   r   r   saxify   s"    



zElementTreeProducer.saxifyc             C   s  | j }|j}|tks|tkrL|tkr4||j|j |j}|rH|| d S |j	}g }||krx0|
 D ]$\}}	|||	krh|||	f qhW |
 }
|
ri }i }x@|
D ]8\}}t|}|||< | j|d |d |d dd||< qW | ||}n| j}t|\}	}| j|	|||jdd}x|D ]\}}||| q"W ||	|f|| |j}|rd|| x|D ]}| || qjW ||	|f| x|D ]\}}|| qW |j}|r|| d S )Nr   r   T)preferred_prefixis_attributeF)r_   )rT   r   r   r   rA   r>   rN   rL   rO   nsmapr4   getr&   r   _build_qnamerU   rV   r(   r*   r=   r\   rB   r-   )r    r;   Zparent_nsmaprX   r   rL   Zelement_nsmapZnew_prefixesr(   r.   ZattribsZattr_valuesZattr_qnamesZattr_ns_namer:   Zattr_ns_tupleZsax_attributesr/   r8   r)   rN   Zchildr   r   r   r\      s\    


z%ElementTreeProducer._recursive_saxifyc                sv    d kr|S |s$| | kr$|}n: fdd| D }t|dkrN|d n|rZt|nd }|d krj|S |d | S )Nc                s$   g | ]\}}|d k	r| kr|qS )Nr   )rC   Zpfxr)   )r.   r   r   rF     s    z4ElementTreeProducer._build_qname.<locals>.<listcomp>r   r   :)ra   r4   lenmin)r    r.   r/   r`   r^   r_   r(   Z
candidatesr   )r.   r   rb      s    z ElementTreeProducer._build_qnameN)r
   r   r   r   r   r]   r\   rb   r   r   r   r   rQ      s
   6rQ   c             C   s   t | | S )zlOne-shot helper to generate SAX events from an XML tree and fire
    them against a SAX ContentHandler.
    )rQ   r]   )rW   rX   r   r   r   r]     s    r]   N)r   Z
__future__r   Zxml.sax.handlerr   Zlxmlr   Z
lxml.etreer   r   r   r   Z	LxmlErrorr	   r   r   objectrQ   r]   r   r   r   r   <module>   s   |s