B
    @)H[0  ã            	   @   s    d dl mZmZmZ d dlmZ ddlmZmZm	Z	 ddddd	d
dddg	Z
ejZejZejZejZejZejZdZd e	¡Z	G dd„ deƒZG dd„ deƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)ÚNodeé   )Ú
namespacesÚvoidElementsÚspaceCharactersÚDOCUMENTÚDOCTYPEÚTEXTÚELEMENTÚCOMMENTÚENTITYÚUNKNOWNÚ
TreeWalkerÚNonRecursiveTreeWalkerz<#UNKNOWN#>Ú c               @   sl   e Zd ZdZdd„ Zdd„ Zdd„ Zd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S )r   z}Walks a tree yielding tokens

    Tokens are dicts that all have a ``type`` field specifying the type of the
    token.

    c             C   s
   || _ dS )zCCreates a TreeWalker

        :arg tree: the tree to walk

        N)Útree)Úselfr   © r   úfC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_vendor\html5lib\treewalkers\base.pyÚ__init__   s    zTreeWalker.__init__c             C   s   t ‚d S )N)ÚNotImplementedError)r   r   r   r   Ú__iter__#   s    zTreeWalker.__iter__c             C   s
   d|dœS )z†Generates an error token with the given message

        :arg msg: the error message

        :returns: SerializeError token

        ÚSerializeError)ÚtypeÚdatar   )r   Úmsgr   r   r   Úerror&   s    zTreeWalker.errorFc             c   s$   d|||dœV  |r |   d¡V  dS )ar  Generates an EmptyTag token

        :arg namespace: the namespace of the token--can be ``None``

        :arg name: the name of the element

        :arg attrs: the attributes of the element as a dict

        :arg hasChildren: whether or not to yield a SerializationError because
            this tag shouldn't have children

        :returns: EmptyTag token

        ÚEmptyTag)r   ÚnameÚ	namespacer   zVoid element has childrenN)r   )r   r"   r!   ÚattrsÚhasChildrenr   r   r   ÚemptyTag0   s
    
zTreeWalker.emptyTagc             C   s   d|||dœS )zôGenerates a StartTag token

        :arg namespace: the namespace of the token--can be ``None``

        :arg name: the name of the element

        :arg attrs: the attributes of the element as a dict

        :returns: StartTag token

        ÚStartTag)r   r!   r"   r   r   )r   r"   r!   r#   r   r   r   ÚstartTagE   s    zTreeWalker.startTagc             C   s   d||dœS )z´Generates an EndTag token

        :arg namespace: the namespace of the token--can be ``None``

        :arg name: the name of the element

        :returns: EndTag token

        ÚEndTag)r   r!   r"   r   )r   r"   r!   r   r   r   ÚendTagV   s    
zTreeWalker.endTagc             c   sx   |}|  t¡}|dt|ƒt|ƒ … }|r6d|dœV  |}| t¡}|t|ƒd… }|rdd|dœV  |rtd|dœV  dS )at  Generates SpaceCharacters and Characters tokens

        Depending on what's in the data, this generates one or more
        ``SpaceCharacters`` and ``Characters`` tokens.

        For example:

            >>> from html5lib.treewalkers.base import TreeWalker
            >>> # Give it an empty tree just so it instantiates
            >>> walker = TreeWalker([])
            >>> list(walker.text(''))
            []
            >>> list(walker.text('  '))
            [{u'data': '  ', u'type': u'SpaceCharacters'}]
            >>> list(walker.text(' abc '))  # doctest: +NORMALIZE_WHITESPACE
            [{u'data': ' ', u'type': u'SpaceCharacters'},
            {u'data': u'abc', u'type': u'Characters'},
            {u'data': u' ', u'type': u'SpaceCharacters'}]

        :arg data: the text data

        :returns: one or more ``SpaceCharacters`` and ``Characters`` tokens

        NÚSpaceCharacters)r   r   Ú
Characters)Úlstripr	   ÚlenÚrstrip)r   r   ZmiddleÚleftÚrightr   r   r   Útextd   s    

zTreeWalker.textc             C   s
   d|dœS )zdGenerates a Comment token

        :arg data: the comment

        :returns: Comment token

        ÚComment)r   r   r   )r   r   r   r   r   ÚcommentŠ   s    zTreeWalker.commentNc             C   s   d|||dœS )zŒGenerates a Doctype token

        :arg name:

        :arg publicId:

        :arg systemId:

        :returns: the Doctype token

        ÚDoctype)r   r!   ÚpublicIdÚsystemIdr   )r   r!   r5   r6   r   r   r   Údoctype”   s    zTreeWalker.doctypec             C   s
   d|dœS )zjGenerates an Entity token

        :arg name: the entity name

        :returns: an Entity token

        ÚEntity)r   r!   r   )r   r!   r   r   r   Úentity¥   s    zTreeWalker.entityc             C   s   |   d| ¡S )zHandles unknown node typeszUnknown node type: )r   )r   ZnodeTyper   r   r   Úunknown¯   s    zTreeWalker.unknown)F)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r%   r'   r)   r1   r3   r7   r9   r:   r   r   r   r   r      s   

&


c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   c             C   s   t ‚d S )N)r   )r   Únoder   r   r   ÚgetNodeDetailsµ   s    z%NonRecursiveTreeWalker.getNodeDetailsc             C   s   t ‚d S )N)r   )r   r?   r   r   r   ÚgetFirstChild¸   s    z$NonRecursiveTreeWalker.getFirstChildc             C   s   t ‚d S )N)r   )r   r?   r   r   r   ÚgetNextSibling»   s    z%NonRecursiveTreeWalker.getNextSiblingc             C   s   t ‚d S )N)r   )r   r?   r   r   r   ÚgetParentNode¾   s    z$NonRecursiveTreeWalker.getParentNodec             c   s  | j }�xø|d k	�r |  |¡}|d |dd …  }}d}|tkrN| j|Ž V  nÞ|tkrrxÔ| j|Ž D ]
}|V  qbW nº|tkrÖ|\}}}}|r–|td krÄ|tkrÄx|  	||||¡D ]
}|V  q°W d}n|  
|||¡V  nV|tkrð|  |d ¡V  n<|tk�r|  |d ¡V  n |tk�rd}n|  |d ¡V  |�r>|  |¡}	nd }	|	d k	�rR|	}q
xª|d k	�rü|  |¡}|d |dd …  }}|tk�rÀ|\}}}}|�r¨|td k�s²|tk�rÀ|  ||¡V  | j |k�rÒd }P |  |¡}
|
d k	�rî|
}P n
|  |¡}�qTW q
W d S )Nr   é   FÚhtmlT)r   r@   r   r7   r   r1   r   r   r   r%   r'   r   r3   r   r9   r
   r:   rA   r)   rB   rC   )r   ÚcurrentNodeÚdetailsr   r$   Útokenr"   r!   Ú
attributesZ
firstChildZnextSiblingr   r   r   r   Á   sZ    









zNonRecursiveTreeWalker.__iter__N)r;   r<   r=   r@   rA   rB   rC   r   r   r   r   r   r   ´   s
   N)Ú
__future__r   r   r   Úxml.domr   Ú	constantsr   r   r	   Ú__all__ZDOCUMENT_NODEr
   ZDOCUMENT_TYPE_NODEr   Z	TEXT_NODEr   ZELEMENT_NODEr   ZCOMMENT_NODEr   ZENTITY_NODEr   r   ÚjoinÚobjectr   r   r   r   r   r   Ú<module>   s   
 !