
    Ng4                         d dl mZmZmZ d dlmZ ddlmZmZm	Z	 g d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	e          Z G 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                   X    e Zd ZdZd Zd Zd ZddZd Zd Z	d	 Z
d
 ZddZd Z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                     || _         dS )zCCreates a TreeWalker

        :arg tree: the tree to walk

        N)tree)selfr   s     U/var/www/html/ai-engine/env/lib/python3.11/site-packages/html5lib/treewalkers/base.py__init__zTreeWalker.__init__   s     			    c                     t           NNotImplementedError)r   s    r   __iter__zTreeWalker.__iter__#       !!r   c                     d|dS )zGenerates an error token with the given message

        :arg msg: the error message

        :returns: SerializeError token

        SerializeErrortypedata )r   msgs     r   errorzTreeWalker.error&   s     )#666r   Fc              #   R   K   d|||dV  |r|                      d          V  dS 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hasChildrens        r   emptyTagzTreeWalker.emptyTag0   s_       "4%  	 	 	  	:**89999999	: 	:r   c                     d|||dS )zGenerates 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

        StartTagr,   r'   )r   r.   r-   r0   s       r   startTagzTreeWalker.startTagE   s     #&  	r   c                     d||dS )zGenerates 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-   s      r   endTagzTreeWalker.endTagV   s     !&( ( 	(r   c              #   0  K   |}|                     t                    }|dt          |          t          |          z
           }|rd|dV  |}|                    t                    }|t          |          d         }|rd|dV  |r	d|dV  dS 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SpaceCharactersr$   
Characters)lstripr
   lenrstrip)r   r&   middleleftrights        r   textzTreeWalker.textd   s      2 _--,SYYV,,- 	<,d;;;;;_--S[[\\" 	9'88888 	=,e<<<<<<<	= 	=r   c                     d|dS )zdGenerates a Comment token

        :arg data: the comment

        :returns: Comment token

        Commentr$   r'   )r   r&   s     r   commentzTreeWalker.comment   s     "4000r   Nc                     d|||dS )zGenerates a Doctype token

        :arg name:

        :arg publicId:

        :arg systemId:

        :returns: the Doctype token

        Doctype)r%   r-   publicIdsystemIdr'   )r   r-   rH   rI   s       r   doctypezTreeWalker.doctype   s     "$$& & 	&r   c                     d|dS )zjGenerates an Entity token

        :arg name: the entity name

        :returns: an Entity token

        Entity)r%   r-   r'   )r   r-   s     r   entityzTreeWalker.entity   s     !$///r   c                 2    |                      d|z             S )zHandles unknown node typeszUnknown node type: r/   )r   nodeTypes     r   unknownzTreeWalker.unknown   s    zz/(:;;;r   )F)NN)__name__
__module____qualname____doc__r   r    r)   r2   r5   r8   rB   rE   rJ   rM   rP   r'   r   r   r   r      s           " " "7 7 7: : : :*  "( ( ($= $= $=L1 1 1& & & &"0 0 0< < < < <r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )r   c                     t           r   r   r   nodes     r   getNodeDetailsz%NonRecursiveTreeWalker.getNodeDetails   r!   r   c                     t           r   r   rW   s     r   getFirstChildz$NonRecursiveTreeWalker.getFirstChild   r!   r   c                     t           r   r   rW   s     r   getNextSiblingz%NonRecursiveTreeWalker.getNextSibling   r!   r   c                     t           r   r   rW   s     r   getParentNodez$NonRecursiveTreeWalker.getParentNode   r!   r   c              #   J  K   | j         }||                     |          }|d         |dd          }}d}|t          k    r | j        | V  n|t          k    r | j        | D ]}|V  n|t          k    r_|\  }}}}|r|t          d         k    r+|t          v r"| 	                    ||||          D ]}|V  d}n| 
                    |||          V  n}|t          k    r|                     |d                   V  nT|t          k    r|                     |d                   V  n+|t          k    rd}n|                     |d                   V  |r|                     |          }	nd }	|	|	}n||                     |          }|d         |dd          }}|t          k    r;|\  }}}}|r|t          d         k    s	|t          vr|                     ||          V  | j         |u rd }n1|                     |          }
|
|
}n|                     |          }||d S d S )Nr      FhtmlT)r   rY   r   rJ   r   rB   r   r   r	   r2   r5   r   rE   r   rM   r   rP   r[   r8   r]   r_   )r   currentNodedetailsr%   r1   tokenr.   r-   
attributes
firstChildnextSiblings              r   r    zNonRecursiveTreeWalker.__iter__   s     i%))+66G#AJ'DKw"dlG,,,,,&TY0    EKKKK  ;B8	4[! EY*V2D%D%D$R^J^J^!%y$
/:"< "< $ $#"'KK--	4DDDDDDll71:......kk'!*------!!" ll71:..... "!//<<

!
%(!-"11+>>G$+AJ'DwCJ@	4[% ?)z&7I*I*IdZfNfNf"&++i">">>>>yK//&*"&"5"5k"B"BK".&1&*&8&8&E&E "-U %%%%%r   N)rQ   rR   rS   rY   r[   r]   r_   r    r'   r   r   r   r      sd        " " "" " "" " "" " ";F ;F ;F ;F ;Fr   r   N)
__future__r   r   r   xml.domr   	constantsr   r	   r
   __all__DOCUMENT_NODEr   DOCUMENT_TYPE_NODEr   	TEXT_NODEr   ELEMENT_NODEr   COMMENT_NODEr   ENTITY_NODEr   r   joinobjectr   r   r'   r   r   <module>ru      s&   B B B B B B B B B B       A A A A A A A A A A3 3 3 

!~



		
''/**]< ]< ]< ]< ]< ]< ]< ]<@HF HF HF HF HFZ HF HF HF HF HFr   