3 �PfK� @s�ddlmZmZmZddlmZddlmZmZm Z ddddd d d d d g Z ej Z ej ZejZejZejZejZdZdje �Z Gdd �d e�ZGdd �d e�ZdS)�)�absolute_import�division�unicode_literals)�Node�)� namespaces� voidElements�spaceCharacters�DOCUMENT�DOCTYPE�TEXT�ELEMENT�COMMENT�ENTITY�UNKNOWN� TreeWalker�NonRecursiveTreeWalkerz <#UNKNOWN#>�c@sheZdZdd�Zdd�Zdd�Zddd �Zd d �Zd d �Zdd�Z dd�Z ddd�Z dd�Z dd�Z dS)rcCs ||_dS)N)�tree)�selfr�r�/usr/lib/python3.6/base.py�__init__szTreeWalker.__init__cCst�dS)N)�NotImplementedError)rrrr�__iter__szTreeWalker.__iter__cCs d|d�S)NZSerializeError)�type�datar)r�msgrrr�errorszTreeWalker.errorFccs$d|||d�V|r |jd�VdS)NZEmptyTag)r�name� namespacerzVoid element has children)r)rr r�attrs� hasChildrenrrr�emptyTags  zTreeWalker.emptyTagcCsd|||d�S)NZStartTag)rrr rr)rr rr!rrr�startTag%szTreeWalker.startTagcCs d||d�S)NZEndTag)rrr r)rr rrrr�endTag+szTreeWalker.endTagccsx|}|jt�}|dt|�t|��}|r6d|d�V|}|jt�}|t|�d�}|rdd|d�V|rtd|d�VdS)NZSpaceCharacters)rrZ Characters)�lstripr �len�rstrip)rrZmiddle�left�rightrrr�text0s    zTreeWalker.textcCs d|d�S)N�Comment)rrr)rrrrr�comment>szTreeWalker.commentNcCsd|||d�S)NZDoctype)rr�publicId�systemIdr)rrr.r/rrr�doctypeAszTreeWalker.doctypecCs d|d�S)NZEntity)rrr)rrrrr�entityGszTreeWalker.entitycCs|jd|�S)NzUnknown node type: )r)rZnodeTyperrr�unknownJszTreeWalker.unknown)F)NN)�__name__� __module__� __qualname__rrrr#r$r%r+r-r0r1r2rrrrrs  c@s4eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd S) rcCst�dS)N)r)r�noderrr�getNodeDetailsOsz%NonRecursiveTreeWalker.getNodeDetailscCst�dS)N)r)rr6rrr� getFirstChildRsz$NonRecursiveTreeWalker.getFirstChildcCst�dS)N)r)rr6rrr�getNextSiblingUsz%NonRecursiveTreeWalker.getNextSiblingcCst�dS)N)r)rr6rrr� getParentNodeXsz$NonRecursiveTreeWalker.getParentNodec cs|j}�x�|dk �r|j|�}|d|dd�}}d}|tkrN|j|�Vn�|tkrrx�|j|�D] }|VqbWn�|tkr�|\}}}}| s�|tdkr�|tkr�x|j ||||�D] }|Vq�Wd}n|j |||�VnV|t kr�|j |d�Vn<|t k�r|j|d�Vn |tk�rd}n|j|d�V|�r@|j|�} nd} | dk �rT| }q x�|dk �r�|j|�}|d|dd�}}|tk�r�|\}}}}|�r�|tdk�s�|tk�r�|j||�V|j|k�r�d}P|j|�} | dk �r�| }Pn |j|�}�qVWq WdS)Nr�FZhtmlT)rr7r r0r r+r rrr#r$rr-rr1r r2r8r%r9r:) rZ currentNodeZdetailsrr"�tokenr rZ attributesZ firstChildZ nextSiblingrrrr[sZ                 zNonRecursiveTreeWalker.__iter__N)r3r4r5r7r8r9r:rrrrrrNs N)Z __future__rrrZxml.domrZ constantsrrr �__all__Z DOCUMENT_NODEr ZDOCUMENT_TYPE_NODEr Z TEXT_NODEr Z ELEMENT_NODEr Z COMMENT_NODErZ ENTITY_NODErr�join�objectrrrrrr�s  :