3 υ_@sbdZddlmZmZmZddlmZddlmZdddd d d gZ iZ dd dZ ddZ ddZ d S)aA 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_importdivisionunicode_literals) constants) default_etree getTreeWalkerpprintdometreegenshi etree_lxmlNcKs|j}|tkr|dkr0ddlm}|jt|<np|dkrPddlm}|jt|<nP|dkrpddlm}|jt|<n0|dkrdd lm}|d krt}|j |f|jStj |S) aGet 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) lowertreeWalkerCacher Z TreeWalkerr r r rZgetETreeModuleget)ZtreeTypeimplementationkwargsr r r r r/usr/lib/python3.6/__init__.pyrs"       ccslg}xL|D]D}|d}|dkr.|j|dq |rHddj|dVg}|Vq W|rhddj|dVdS)Ntype CharactersSpaceCharactersdatar)rr)rr)appendjoin)tokensZpendingCharacterstokenrrrrconcatenateCharacterTokens<s  rc Cslg}d}xVt|D]H}|d}|d kr&|dr~|dtjdkr~|dtjkrdtj|d}n|d}d||df}n|d}|jd d ||f|d 7}|d }xdt|jD]T\\}} } |r|tjkrtj|}n|}d|| f}n| }|jd d ||| fqW|dkr^|d 8}q|dkr:|d 8}q|dkr`|jdd ||d fq|dkr|dr|dr|jdd ||d|d|dr|dndfnF|dr|jdd ||d|dfn|jdd ||dfn|jdd |fq|dkr8|jdd ||d fq|dkrRds^tdqtd|qWdj |S)!zPretty printer for tree walkersrrStartTagEmptyTag namespaceZhtmlz%s %snamez%s<%s> rrz %s%s="%s"ZEndTagCommentz %sZDoctypeZpublicIdz%sZsystemIdrz%sz%sz %srz%s"%s"rFzBconcatenateCharacterTokens should have got rid of all Space tokenszUnknown token type, %s )r r!) rrZ namespacesprefixesrsorteditemsAssertionError ValueErrorr) Zwalkeroutputindentrrnsr#Zattrsr"Z localnamevaluerrrr Ksd               )N)__doc__Z __future__rrrrrZ_utilsr__all__rrrr rrrr s   '