
    MwgW                     T    d Z ddlmZmZmZ ddlmZ ddlmZ ddgZ	i Z
dd	Zd
 Zd Zy)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pprintNc                 v   | j                         } | t        vr| dk(  rddlm} |j                  t        | <   nn| dk(  rddlm} |j                  t        | <   nO| dk(  rddlm} |j                  t        | <   n0| dk(  r+dd	lm} |t        } |j                  |fi |j                  S t        j                  |       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   lxml)
etree_lxmletree)r   )lowertreeWalkerCache r   
TreeWalkerr   r   r   r   getETreeModuleget)treeTypeimplementationkwargsr   r   r   r   s          T/var/www/horilla/myenv/lib/python3.12/site-packages/html5lib/treewalkers/__init__.pyr	   r	      s    0 ~~H&u(+OH%! (.(9(9OH%$(2(=(=OH% %!.'5''A&ALLLx((    c              #      K   g }| D ]>  }|d   }|dv r|j                  |d          !|rddj                  |      d g }| @ |rddj                  |      d y y w)Ntype)
CharactersSpaceCharactersdatar   r   )r   r!   )appendjoin)tokenspendingCharacterstokenr   s       r   concatenateCharacterTokensr'   A   s      V}44$$U6]3 +RWW=N5OPP$&!K #RWW5F-GHH s   A A"c                    g }d}t        |       D ]!  }|d   }|dv r|d   rU|d   t        j                  d   k7  r<|d   t        j                  v rt        j                  |d      }n|d   }|d|d   }n|d   }|j	                  d|z  d|d	       |d
z  }|d   }t        |j                               D ]X  \  \  }}	}
|r0|t        j                  v rt        j                  |   }n|}|d|	}n|	}|j	                  d|z  |d|
d       Z |dk(  s|d
z  }|dk(  r|d
z  }|dk(  r|j	                  d|z  d|d   d       C|dk(  r|d   r|d   r2|j	                  d|z  d|d   d|d   d|d   r|d   ndd       |d   r%|j	                  d|z  d|d   d|d   d       |j	                  d|z  d|d   d	       |j	                  d|z  d       |dk(  r|j	                  d|z  d|d   d       
|dk(  rJ d       t        d |z         d!j                  |      S )"zPretty printer for tree walkers

    Takes a TreeWalker instance and pretty prints the output of walking the tree.

    :arg walker: a TreeWalker instance

    r   r   )StartTagEmptyTag	namespacehtml name<>r   r!   z=""r*   EndTagCommentz<!-- z -->DoctypepublicIdz
<!DOCTYPE z "z" "systemIdr   z">z "" "z<!DOCTYPE >r   r    zBconcatenateCharacterTokens should have got rid of all Space tokenszUnknown token type, %s
)	r'   r   
namespacesprefixesr"   sorteditems
ValueErrorr#   )walkeroutputindentr&   r   nsr.   attrsr+   	localnamevalues              r   r
   r
   P   s    FF+F3 >>V}++[!eK&8I<P<PQW<X&X%););;"++E+,>?B{+B"$eFm4V}MMcFlD9:aKF&ME171F 	K-&I I$6$66&//	:&&()4D$DsV|T5IJ	K z!!XaKFYMMS6\5=IJYV}$MM#&<#(=#(#48=j8I5#4r#Q	#S T
 :&MM#&<#(=#(#4#6 7
 MMsV|7<V}#F G v?@\!MMfeFmDE&&^^^5 5<==}>>@ 99Vr   )N)__doc__
__future__r   r   r   r   r   _utilsr   __all__r   r	   r'   r
    r   r   <module>rI      s:    C B  "H
%))XIJr   