
    NgW                     V    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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
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                 h   |                                  } | t          vr|| dk    rddlm} |j        t          | <   n`| dk    rddlm} |j        t          | <   nD| dk    rddlm} |j        t          | <   n(| dk    r"dd	lm} |t          } |j	        |fi |j        S t          
                    |           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          Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/html5lib/treewalkers/__init__.pyr	   r	      s    0 ~~H&&u(+OH%%!!      (.(9OH%%$$$$$$(2(=OH%%  %!.'5'AA&AALLx(((    c              #      K   g }| D ]L}|d         }|dv r|                     |d                    *|rdd                    |          dV  g }|V  M|rdd                    |          dV  d S d S )Ntype)
CharactersSpaceCharactersdatar   r   )r   r!   )appendjoin)tokenspendingCharacterstokenr   s       r   concatenateCharacterTokensr'   A   s        V}444$$U6]3333  '+RWW=N5O5OPPPPP$&!KKKK I#RWW5F-G-GHHHHHHHI Ir   c                 d   g }d}t          |           D ]}|d         }|dv r |d         r_|d         t          j        d         k    rC|d         t          j        v rt          j        |d                  }n|d         }|d|d         }n|d         }|                    d|z  d|d	           |d
z  }|d         }t          |                                          D ]W\  \  }}	}
|r+|t          j        v rt          j        |         }n|}|d|	}n|	}|                    d|z  |d|
d           X|dk    r|d
z  }0|dk    r|d
z  }=|dk    r&|                    d|z  d|d         d           i|dk    r|d         r|d         rB|                    d|z  d|d         d|d         d|d         r|d         ndd           |d         r/|                    d|z  d|d         d|d         d           |                    d|z  d|d         d	           |                    d|z  d           ;|dk    r&|                    d|z  d|d         d           g|dk    r
J d             t          d!|z            d"                    |          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    FzBconcatenateCharacterTokens 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3 >> >>V}+++[! %eK&8I<PQW<X&X&X%);;;"+E+,>?BB{+B"$""eFmm4V}MMcFlllDDD9:::aKF&ME171F1F 	K 	K-&I % I$666&/	:&&(bb))4DD$DsV||TTT555IJJJJz!!!XaKFFYMMS6\\\5===IJJJJYV} A$ GMM#&<<<#(===#(#4#4#48=j8I#Q5#4#4r#Q#Q	#S T T T T
 :& GMM#&<<<#(===#(#4#4#4#6 7 7 7 7
 MMsV|||7<V}}}#F G G G G v?@@@@\!!MMfeFmmmDEEEE&&&^^^^^ 5<===99Vr   )N)__doc__
__future__r   r   r   r   r   _utilsr   __all__r   r	   r'   r
    r   r   <module>rI      s     C B B B B B B B B B       " " " " " "H
%)) )) )) ))XI I IJ J J J Jr   