
    Ng                         d dl mZmZmZ d dlmZ d dlZd dlmZ ddl	m
Z
 ddlmZ  ej        d	          Zd
 Z ee          ZdS )    )absolute_importdivisionunicode_literals)OrderedDictN)string_types   )base   )moduleFactoryFactoryz{([^}]*)}(.*)c                     | }|                     d          j         G fddt          j                  }t	                      S )Nasdc                   0    e Zd ZdZ fdZd Zd Zd ZdS )#getETreeBuilder.<locals>.TreeWalkera  Given the particular ElementTree representation, this implementation,
        to avoid using recursion, returns "nodes" as tuples with the following
        content:

        1. The current element

        2. The index of the element relative to its parent

        3. A stack of ancestor elements

        4. A flag "text", "tail" or None to indicate if the current node is a
           text node; either the text or tail of the current element (1)
        c                    t          |t                    r)|\  }}}}|dv rt          j        t	          ||          fS |}t          |d          s|                                }|j        dv rt          j        fS |j        dk    r;t          j	        |j
        |                    d          |                    d          fS |j        k    rt          j        |j
        fS t          |j        t                    sJ t          |j                              t                              |j                  }|r|                                \  }}n	d }|j        }t%                      }t'          |j                                                  D ]V\  }	}
t                              |	          }|r.|
||                    d          |                    d          f<   O|
|d |	f<   Wt          j        |||t1          |          p|j
        fS )	Ntexttailtag)DOCUMENT_ROOTDOCUMENT_FRAGMENTz
<!DOCTYPE>publicIdsystemIdr   r
   )
isinstancetupler	   TEXTgetattrhasattrgetrootr   DOCUMENTDOCTYPEr   getCOMMENTr   type
tag_regexpmatchgroupsr   listattribitemsgroupELEMENTlen)selfnodeelt_flagr%   	namespacer   attrsnamevalueElementTreeCommentTypes              V/var/www/html/ai-engine/env/lib/python3.11/site-packages/html5lib/treewalkers/etree.pygetNodeDetailsz2getETreeBuilder.<locals>.TreeWalker.getNodeDetails    s   $&& "&Q4+++9gc4&8&888D4'' &||~~xAAA''\))di,,dhhz.B.BD D 333|TY.. "$(L99II4>>III"((22 #%*\\^^NIss $I(C##'(9(9(;(;#<#< 4 4KD%&,,T22E 4BGu{{1~~u{{1~~>??.3tTl++is4yy5DI7 7    c                     t          |t                    r|\  }}}}n|d g d f\  }}}}|dv rd S |j        r|||dfS t          |          r!|                    |           |d         d|d fS d S )Nr   r   r   )r   r   r   r,   appendr-   r.   elementkeyparentsr1   s         r7   getFirstChildz1getETreeBuilder.<locals>.TreeWalker.getFirstChildH   s    $&& C.2+gtt.2D"d.B+gt'''t<  "C&88\\  NN7+++"1:q'4774r9   c                 B   t          |t                    r|\  }}}}nd S |dk    r2t          |          r!|                    |           |d         d|d fS d S |j        r|dk    r|||dfS |t          |d                   dz
  k     r|d         |dz            |dz   |d fS d S )Nr   r   r   r   )r   r   r,   r;   r   r<   s         r7   getNextSiblingz2getETreeBuilder.<locals>.TreeWalker.getNextSiblingY   s    $&& .2+gtttv~~w<<  NN7+++"1:q'4774<  DFNN"C&883wr{++a///"2;sQw/q'4GG4r9   c                 D   t          |t                    r|\  }}}}nd S |dk    r
|s|S |||d fS |                                }|s|S t          |d                                       |          dk    sJ |t          |d                                       |          |d fS )Nr   rB   r   )r   r   popr'   countindex)r-   r.   r=   r>   r?   r1   parents          r7   getParentNodez1getETreeBuilder.<locals>.TreeWalker.getParentNodem   s    $&& .2+gtttv~~ 7"N"C$66  R!M,,226::a????!4#4#4#:#:6#B#BGTQQr9   N)__name__
__module____qualname____doc__r8   r@   rC   rI   )r6   s   r7   
TreeWalkerr      sk        	 	&	7 &	7 &	7 &	7 &	7P	  	  	 "	  	  	 (	R 	R 	R 	R 	Rr9   rN   )Commentr   r	   NonRecursiveTreeWalkerlocals)ElementTreeImplementationElementTreerN   r6   s      @r7   getETreeBuilderrT      sv    +K(0077;lR lR lR lR lR lR lRT0 lR lR lR\ 88Or9   )
__future__r   r   r   collectionsr   resixr    r	   _utilsr   compiler$   rT   getETreeModule r9   r7   <module>r^      s    B B B B B B B B B B # # # # # # 				             ) ) ) ) ) )RZ((
r r rj &%o66r9   