U ��.eR�@sZdZddlmZmZmZddlmZddlmZddgZ iZ d d d�Z d d �Z d d�Z dS)a�A collection of modules for iterating through different kinds of tree, generating tokens identical to those produced by the tokenizer module. To create a tree walker for a new type of tree, you need to do implement a tree walker object (called TreeWalker by convention) that implements a 'serialize' method taking a tree as sole argument and returning an iterator generating tokens. �)�absolute_import�division�unicode_literals�)� constants)� default_etree� getTreeWalker�pprintNcKs�|��}|tkr�|dkr0ddlm}|jt|<np|dkrPddlm}|jt|<nP|dkrpddlm}|jt|<n0|dkr�dd lm}|d kr�t}|j |f|�jSt� |�S) a;Get a TreeWalker class for various types of tree with built-in support :arg str treeType: the name of the tree type required (case-insensitive). Supported values are: * "dom": The xml.dom.minidom DOM implementation * "etree": A generic walker for tree implementations exposing an elementtree-like interface (known to work with ElementTree, cElementTree and lxml.etree). * "lxml": Optimized walker for lxml.etree * "genshi": a Genshi stream :arg implementation: A module implementing the tree type e.g. xml.etree.ElementTree or cElementTree (Currently applies to the "etree" tree type only). :arg kwargs: keyword arguments passed to the etree walker--for other walkers, this has no effect :returns: a TreeWalker class �dom�)r �genshi)r Zlxml)� etree_lxml�etree)rN) �lower�treeWalkerCache�r Z TreeWalkerr r rrZgetETreeModule�get)ZtreeType�implementation�kwargsr r r r�r�M/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__init__.pyrs"       ccshg}|D]D}|d}|dkr,|�|d�q|rFdd�|�d�Vg}|Vq|rddd�|�d�VdS)N�type)� Characters�SpaceCharacters�datarr)rr)�append�join)�tokensZpendingCharacters�tokenrrrr�concatenateCharacterTokensAsrc CsTg}d}t|�D�]6}|d}|dk�r|drz|dtjdkrz|dtjkr`tj|d}n|d}d||df}n|d}|�dd ||f�|d 7}|d }t|���D]T\\}} } |r�|tjkr�tj|}n|}d|| f}n| }|�d d ||| f�q�|d k�rH|d 8}q|dk�r2|d 8}q|dk�rX|�dd ||d f�q|dk�r |d�r�|d�r�|�dd ||d|d|d�r�|dndf�nF|d�r�|�dd ||d|df�n|�dd ||df�n|�dd |f�q|dk�r0|�dd ||d f�q|dk�r� rrz %s%s="%s"r ZEndTag�Commentz %sZDoctypeZpublicIdz%sZsystemIdrz%sz%sz %srz%s"%s"rzUnknown token type, %s� ) rrZ namespaces�prefixesr�sorted�items� ValueErrorr) Zwalker�output�indentrr�nsr"Zattrsr!Z localname�valuerrrr Psn           �� �� �   )N)�__doc__Z __future__rrrrrZ_utilsr�__all__rrrr rrrr�s    ,