U o a4 @sddlmZmZmZddlmZddlmZmZm Z ddddd d d d d g Z ej Z ej ZejZejZejZejZdZde Z Gdd d eZGdd d eZdS))absolute_importdivisionunicode_literals)Node) namespaces voidElementsspaceCharactersDOCUMENTDOCTYPETEXTELEMENTCOMMENTENTITYUNKNOWN TreeWalkerNonRecursiveTreeWalkerz <#UNKNOWN#>c@sleZdZdZddZddZddZdd d Zd d Zd dZ ddZ ddZ dddZ ddZ ddZdS)rz}Walks a tree yielding tokens Tokens are dicts that all have a ``type`` field specifying the type of the token. cCs ||_dS)zCCreates a TreeWalker :arg tree: the tree to walk N)tree)selfrrfC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-6mt8ur68\pip\_vendor\html5lib\treewalkers\base.py__init__szTreeWalker.__init__cCstdSNNotImplementedError)rrrr__iter__#szTreeWalker.__iter__cCs d|dS)zGenerates an error token with the given message :arg msg: the error message :returns: SerializeError token SerializeErrortypedatar)rmsgrrrerror&szTreeWalker.errorFccs$d|||dV|r |dVdS)arGenerates 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 EmptyTagrname namespacer zVoid element has childrenNr")rr&r%attrs hasChildrenrrremptyTag0s zTreeWalker.emptyTagcCsd|||dS)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)rr&r%r(rrrstartTagEs zTreeWalker.startTagcCs d||dS)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)rr%r&r)rr&r%rrrendTagVs zTreeWalker.endTagccsx|}|t}|dt|t|}|r6d|dV|}|t}|t|d}|rdd|dV|rtd|dVdS)atGenerates 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 NSpaceCharactersr Characters)lstripr lenrstrip)rr Zmiddleleftrightrrrtextds    zTreeWalker.textcCs d|dS)zdGenerates a Comment token :arg data: the comment :returns: Comment token Commentrr)rr rrrcommentszTreeWalker.commentNcCsd|||dS)zGenerates a Doctype token :arg name: :arg publicId: :arg systemId: :returns: the Doctype token Doctype)rr%publicIdsystemIdr)rr%r:r;rrrdoctypes zTreeWalker.doctypecCs d|dS)zjGenerates an Entity token :arg name: the entity name :returns: an Entity token Entity)rr%r)rr%rrrentityszTreeWalker.entitycCs|d|S)zHandles unknown node typeszUnknown node type: r')rZnodeTyperrrunknownszTreeWalker.unknown)F)NN)__name__ __module__ __qualname____doc__rrr"r*r,r.r6r8r<r>r?rrrrrs &  c@s4eZdZddZddZddZddZd d Zd S) rcCstdSrrrnoderrrgetNodeDetailssz%NonRecursiveTreeWalker.getNodeDetailscCstdSrrrDrrr getFirstChildsz$NonRecursiveTreeWalker.getFirstChildcCstdSrrrDrrrgetNextSiblingsz%NonRecursiveTreeWalker.getNextSiblingcCstdSrrrDrrr getParentNodesz$NonRecursiveTreeWalker.getParentNodec cs|j}|dk r||}|d|dd}}d}|tkrJ|j|Vn|tkrj|j|D] }|Vq\n|tkr|\}}}}|r|tdkr|tkr| ||||D] }|Vqd}n| |||VnV|t kr| |dVn<|t kr||dVn |tkrd}n||dV|r2||} nd} | dk rF| }q|dk r||}|d|dd}}|tkr|\}}}}|r|tdks|tkr|||V|j|krd}q||} | dk r| }qn ||}qFqdS)NrFhtmlT)rrFr r<r r6r rrr*r,rr8rr>r r?rGr.rHrI) r currentNodedetailsrr)tokenr&r% attributesZ firstChildZ nextSiblingrrrrs\               zNonRecursiveTreeWalker.__iter__N)r@rArBrFrGrHrIrrrrrrs N) __future__rrrxml.domr constantsrrr __all__Z DOCUMENT_NODEr ZDOCUMENT_TYPE_NODEr Z TEXT_NODEr Z ELEMENT_NODEr Z COMMENT_NODErZ ENTITY_NODErrjoinobjectrrrrrrs"  !