
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf¥  ã               @   s®   d dl mZmZmZ d dlmZ d dlmZ ddlm	Z	 ddl
mZ ddl
mZ d	d
„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)Ú	text_type)Úetreeé   )Ú
tag_regexpé   )Úbase)Ú	_ihatexmlc             C   s*   | d krd S t | tƒr| S | jddƒS d S )NÚasciiÚstrict)Ú
isinstancer   Údecode)Ús© r   ú /usr/lib/python3.6/etree_lxml.pyÚ
ensure_str   s
    
r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRootc             C   sÎ   || _ g | _y:|jjrD| jjt| t|jjƒt|jjƒt|jj	ƒƒƒ W n t
k
rZ   Y nX y|jƒ }W n t
k
r€   |}Y nX x|jƒ d k	rš|jƒ }q„W x |d k	r¼| jj|ƒ |jƒ }qžW d | _d | _d S )N)ZelementtreeÚchildrenZdocinfoZinternalDTDÚappendÚDoctyper   Z	root_nameÚ	public_idZ
system_urlÚAttributeErrorZgetrootZgetpreviousÚgetnextÚtextÚtail)ÚselfZetÚnoder   r   r   Ú__init__   s*    




zRoot.__init__c             C   s
   | j | S )N)r   )r   Úkeyr   r   r   Ú__getitem__1   s    zRoot.__getitem__c             C   s   d S )Nr   )r   r   r   r   r   4   s    zRoot.getnextc             C   s   dS )Nr	   r   )r   r   r   r   Ú__len__7   s    zRoot.__len__N)Ú__name__Ú
__module__Ú__qualname__r   r!   r   r"   r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s(   || _ || _|| _|| _d | _d | _d S )N)Ú	root_nodeÚnamer   Ú	system_idr   r   )r   r&   r'   r   r(   r   r   r   r   <   s    zDoctype.__init__c             C   s   | j jd S )Nr	   )r&   r   )r   r   r   r   r   E   s    zDoctype.getnextN)r#   r$   r%   r   r   r   r   r   r   r   ;   s   	r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚFragmentRootc                s$   ‡ fdd„|D ƒˆ _ d  ˆ _ˆ _d S )Nc                s   g | ]}t ˆ |ƒ‘qS r   )ÚFragmentWrapper)Ú.0Zchild)r   r   r   ú
<listcomp>K   s    z)FragmentRoot.__init__.<locals>.<listcomp>)r   r   r   )r   r   r   )r   r   r   J   s    zFragmentRoot.__init__c             C   s   d S )Nr   )r   r   r   r   r   N   s    zFragmentRoot.getnextN)r#   r$   r%   r   r   r   r   r   r   r)   I   s   r)   c               @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r*   c             C   sT   || _ || _t| jdƒr(t| jjƒ| _nd | _t| jdƒrJt| jjƒ| _nd | _d S )Nr   r   )r&   ÚobjÚhasattrr   r   r   )r   Zfragment_rootr-   r   r   r   r   S   s    zFragmentWrapper.__init__c             C   s   t | j|ƒS )N)Úgetattrr-   )r   r'   r   r   r   Ú__getattr___   s    zFragmentWrapper.__getattr__c             C   s6   | j j}|j| ƒ}|t|ƒd k r.||d  S d S d S )Nr	   )r&   r   ÚindexÚlen)r   ZsiblingsÚidxr   r   r   r   b   s
    
zFragmentWrapper.getnextc             C   s
   | j | S )N)r-   )r   r    r   r   r   r!   j   s    zFragmentWrapper.__getitem__c             C   s
   t | jƒS )N)Úboolr-   )r   r   r   r   Ú__bool__m   s    zFragmentWrapper.__bool__c             C   s   d S )Nr   )r   r   r   r   Ú	getparentp   s    zFragmentWrapper.getparentc             C   s
   t | jƒS )N)Ústrr-   )r   r   r   r   Ú__str__s   s    zFragmentWrapper.__str__c             C   s
   t | jƒS )N)r7   r-   )r   r   r   r   Ú__unicode__v   s    zFragmentWrapper.__unicode__c             C   s
   t | jƒS )N)r2   r-   )r   r   r   r   r"   y   s    zFragmentWrapper.__len__N)r#   r$   r%   r   r0   r   r!   r5   r6   r8   r9   r"   r   r   r   r   r*   R   s   r*   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TreeWalkerc             C   sJ   t |tƒrt|ƒ| _t|ƒ}ntƒ | _t|ƒ}tjj| |ƒ t	j
ƒ | _d S )N)r   ÚlistÚsetÚfragmentChildrenr)   r   r
   ÚNonRecursiveTreeWalkerr   r   ZInfosetFilterÚfilter)r   Ztreer   r   r   r   ~   s    


zTreeWalker.__init__c       	      C   s–  t |tƒr:|\}}|dks&td| ƒ‚tjtt||ƒƒfS t |tƒrLtjfS t |t	ƒrjtj
|j|j|jfS t |tƒr�t|dƒ r�tjt|jƒfS |jtjkr¬tjt|jƒfS |jtjkrÐtjt|jƒdd	… fS tjt|jƒƒ}|� rô|jƒ \}}nd }t|jƒ}i }xbt|jjƒ ƒD ]P\}}t|ƒ}t|ƒ}tj|ƒ}|�rX|||jdƒ|jdƒf< n||d |f< �qW tj|| j j!|ƒ|t"|ƒdk�pŽ|jfS d S )
Nr   r   z%Text nodes are text or tail, found %sÚtagr	   r   r   )r   r   éÿÿÿÿ)#r   ÚtupleÚAssertionErrorr
   ZTEXTr   r/   r   ZDOCUMENTr   ZDOCTYPEr'   r   r(   r*   r.   r-   r@   r   ÚCommentÚCOMMENTr   ZEntityZENTITYr   ÚmatchÚgroupsr;   ZattribÚitemsÚgroupZELEMENTr?   ZfromXmlNamer2   )	r   r   r    rF   Ú	namespacer@   Zattrsr'   Úvaluer   r   r   ÚgetNodeDetails‰   s:    




zTreeWalker.getNodeDetailsc             C   sD   t |tƒ stdƒ‚t|ƒs*|js*tdƒ‚|jr8|dfS |d S d S )NzText nodes have no childrenzNode has no childrenr   r   )r   rB   rC   r2   r   )r   r   r   r   r   ÚgetFirstChild²   s
    zTreeWalker.getFirstChildc             C   sb   t |tƒrL|\}}|dks&td| ƒ‚|dkrDt|ƒr>|d S d S n|jƒ S |jrZ|dfS |jƒ S )Nr   r   z%Text nodes are text or tail, found %sr   )r   r   )r   rB   rC   r2   r   r   )r   r   r    r   r   r   ÚgetNextSibling»   s    
zTreeWalker.getNextSiblingc             C   sJ   t |tƒr4|\}}|dks&td| ƒ‚|dkrB|S n|| jkrBd S |jƒ S )Nr   r   z%Text nodes are text or tail, found %s)r   r   )r   rB   rC   r=   r6   )r   r   r    r   r   r   ÚgetParentNodeË   s    

zTreeWalker.getParentNodeN)r#   r$   r%   r   rL   rM   rN   rO   r   r   r   r   r:   }   s
   )	r:   N)Z
__future__r   r   r   Zpip._vendor.sixr   Zlxmlr   Ztreebuilders.etreer   Ú r
   r   r   Úobjectr   r   r)   r*   r>   r:   r   r   r   r   Ú<module>   s   	&	+