3 �Pf��@sbdZddlmZmZmZddlmZddlmZdddd d d gZ iZ dd d�Z dd�Z dd�Z d S)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�pprint�dom�etree�genshi� etree_lxmlNcKs�|j�}|tkr�|dkr0ddlm}|jt|<np|dkrPddlm}|jt|<nP|dkrpddlm}|jt|<n0|dkr�dd lm}|d kr�t}|j |f|�jStj |�S) a�Get a TreeWalker class for various types of tree with built-in support Args: treeType (str): 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 Implementation: A module implementing the tree type e.g. xml.etree.ElementTree or cElementTree (Currently applies to the "etree" tree type only). r �)r r )r Zlxml)r r )r N) �lower�treeWalkerCache�r Z TreeWalkerr r r rZgetETreeModule�get)ZtreeType�implementation�kwargsr r r r �r�/usr/lib/python3.6/__init__.pyrs"       ccslg}xL|D]D}|d}|dkr.|j|d�q |rHddj|�d�Vg}|Vq W|rhddj|�d�VdS)N�type� Characters�SpaceCharacters�datar)rr)rr)�append�join)�tokensZpendingCharacters�tokenrrrr�concatenateCharacterTokens<s  rc Cslg}d}�xVt|�D�]H}|d}|d k�r&|dr~|dtjdkr~|dtjkrdtj|d}n|d}d||df}n|d}|jd d ||f�|d 7}|d }xdt|j��D]T\\}} } |r�|tjkr�tj|}n|}d|| f}n| }|jd d ||| f�q�W|dk�r^|d 8}q|dk�r:|d 8}q|dk�r`|jdd ||d f�q|dk�r|d�r�|d�r�|jdd ||d|d|d�r�|dndf�nF|d�r�|jdd ||d|df�n|jdd ||df�n|jdd |f�q|dk�r8|jdd ||d f�q|dk�rRd�s^td��qtd|��qWdj |�S)!zPretty printer for tree walkersrr�StartTag�EmptyTag� namespaceZhtmlz%s %s�namez%s<%s>� rrz %s%s="%s"ZEndTag�Commentz %sZDoctypeZpublicIdz%sZsystemIdrz%sz%sz %srz%s"%s"rFzBconcatenateCharacterTokens should have got rid of all Space tokenszUnknown token type, %s� )r r!) rrZ namespaces�prefixesr�sorted�items�AssertionError� ValueErrorr) Zwalker�output�indentrr�nsr#Zattrsr"Z localname�valuerrrr Ksd               )N)�__doc__Z __future__rrrrrZ_utilsr�__all__rrrr rrrr� s   '