a ˆljWã@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 implement a tree walker object (called TreeWalker by convention) that implements a 'serialize' method which takes a tree as sole argument and returns an iterator which generates tokens. é)Úabsolute_importÚdivisionÚunicode_literalsé)Ú constants)Ú default_etreeÚ getTreeWalkerÚpprintNcKs®| ¡}|tvr¤|dkr0ddlm}|jt|<nt|dkrPddlm}|jt|<nT|dkrpddlm}|jt|<n4|dkr¤dd lm}|d urt}|j |fi|¤Ž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.9/site-packages/pip/_vendor/html5lib/treewalkers/__init__.pyrs"       ccshg}|D]D}|d}|dvr,| |d¡q|rFdd |¡dœVg}|Vq|rddd |¡dœVdS)NÚtype)Ú CharactersÚSpaceCharactersÚdatarr)rr)ÚappendÚjoin)ÚtokensZpendingCharactersÚtokenrrrrÚconcatenateCharacterTokensAsrc Csbg}d}t|ƒD]D}|d}|dvr|drz|dtjdkrz|dtjvr`tj|d}n|d}d||df}n|d}| dd ||f¡|d 7}|d }t| ¡ƒD]T\\}} } |rì|tjvrÚtj|}n|}d|| f}n| }| d d ||| f¡q´|d krV|d 8}q|dkr2|d 8}q|dkrX| dd ||d f¡q|dkr |drô|dr¬| dd ||d|d|dr |dndf¡nF|drØ| dd ||d|df¡n| dd ||df¡n| dd |f¡q|dkr0| dd ||d f¡q|dkrJdsVJdƒ‚qtd|ƒ‚qd |¡S) z Pretty printer for tree walkers Takes a TreeWalker instance and pretty prints the output of walking the tree. :arg walker: a TreeWalker instance rr)ZStartTagÚEmptyTagÚ namespaceZhtmlz%s %sÚnamez%s<%s>ú rrz %s%s="%s"r ZEndTagÚCommentz %sZDoctypeZpublicIdz%sZsystemIdrz%sz%sz %srz%s"%s"rFzBconcatenateCharacterTokens should have got rid of all Space tokenszUnknown token type, %sÚ ) rrZ namespacesÚprefixesrÚsortedÚitemsÚ ValueErrorr) ZwalkerÚoutputÚindentrrÚnsr"Úattrsr!Z localnameÚvaluerrrr Psn           ýÿ þÿ ÿ   )N)Ú__doc__Z __future__rrrrrZ_utilsrÚ__all__rrrr rrrrÚs    ,