
    f                        d dl mZ d dlmc mZ d dlmZ d dlmZ ddl	m
Z
mZ dgZ G d d      Z G d	 d
e      ZddZ e       Zy)    )annotationsN)	Formatter)Any   )FormattedTextStyleAndTextTuplesHTMLc                  8    e Zd ZdZddZd	dZd
dZddZddZy)r	   a  
    HTML formatted text.
    Take something HTML-like, for use as a formatted string.

    ::

        # Turn something into red.
        HTML('<style fg="ansired" bg="#00ff44">...</style>')

        # Italic, bold, underline and strike.
        HTML('<i>...</i>')
        HTML('<b>...</b>')
        HTML('<u>...</u>')
        HTML('<s>...</s>')

    All HTML elements become available as a "class" in the style sheet.
    E.g. ``<username>...</username>`` can be styled, by setting a style for
    ``username``.
    c                    || _         t        j                  d| d      }g g g g dfddfd |       t              | _        y )Nz<html-root>z</html-root>c                     g } r#| j                  ddj                        z          r| j                  dd   z          r| j                  dd   z          dj                  |       S )z$Build style string for current node.zclass:,zfg:zbg: )appendjoin)partsbg_stackfg_stack
name_stacks    ]/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/formatted_text/html.pyget_current_stylez(HTML.__init__.<locals>.get_current_style*   sc    EX(<<=UXb\12UXb\1288E?"    c                z   | j                   D ]*  }|j                  |j                  k(  r#j                   	       |j                  f       @|j
                  dv}dx}}|j                  j                         D ]  \  }}|dk(  r|}|dk(  r|}|dk(  s|} d|v rt        d      d|v rt        d      |r
j                  |j
                         |rj                  |       |rj                  |        |       |r
j                          |rj                          |sj                          - y	)
zProcess node recursively.)z	#documentz	html-rootstyle fgbgcolorr   z "fg" attribute contains a space.z "bg" attribute contains a space.N)

childNodesnodeType	TEXT_NODEr   datanodeName
attributesitems
ValueErrorpop)nodechildadd_to_name_stackr   r   kvr   r   r   r   process_noderesults          r   r-   z#HTML.__init__.<locals>.process_node6   s-    ('>>U__4MM#4#6

"CD(- ? )%
 !LB % 0 0 6 6 8 #19!"B9!"B<!"B# by()KLLby()KLL("))%..9 + + '("(  Q('r   returnstr)r(   r   r0   None)valueminidomparseStringr   formatted_text)	selfr3   documentr   r   r   r   r-   r.   s	      @@@@@@r   __init__zHTML.__init__!   s^    
&&UG<'HI%' "
  
	#*	' *	'X 	X+F3r   c                "    d| j                   dS )NzHTML())r3   r7   s    r   __repr__zHTML.__repr__f   s    tzznA&&r   c                    | j                   S N)r6   r<   s    r   __pt_formatted_text__zHTML.__pt_formatted_text__i   s    """r   c                V    t        t        j                  | j                  ||            S )zc
        Like `str.format`, but make sure that the arguments are properly
        escaped.
        )r	   	FORMATTERvformatr3   )r7   argskwargss      r   formatzHTML.formatl   s"    
 I%%djj$?@@r   c                |    t        |t              s|f}t        d |D              }t        | j                  |z        S )z+
        HTML('<b>%s</b>') % value
        c              3  2   K   | ]  }t        |        y wr?   )html_escape).0is     r   	<genexpr>zHTML.__mod__.<locals>.<genexpr>z   s     4k!n4s   )
isinstancetupler	   r3   )r7   r3   s     r   __mod__zHTML.__mod__s   s9     %'HE4e44DJJ&''r   N)r3   r1   r0   r2   r/   )r0   r   )rD   objectrE   rP   r0   r	   )r3   rP   r0   r	   )	__name__
__module____qualname____doc__r9   r=   r@   rF   rO    r   r   r	   r	      s#    (C4J'#A(r   c                      e Zd ZddZy)HTMLFormatterc                ,    t        t        ||            S r?   )rI   rF   )r7   r3   format_specs      r   format_fieldzHTMLFormatter.format_field   s    6%566r   N)r3   rP   rY   r1   r0   r1   )rQ   rR   rS   rZ   rU   r   r   rW   rW   ~   s    7r   rW   c                    t        | t              s|  } | j                  dd      j                  dd      j                  dd      j                  dd      S )	N&z&amp;<z&lt;>z&gt;"z&quot;)rM   r1   replace)texts    r   rI   rI      sN     dC  	S'"	f		f		h		r   )ra   rP   r0   r1   )
__future__r   xml.dom.minidomdomr4   stringr   typingr   baser   r   __all__r	   rW   rI   rB   rU   r   r   <module>ri      sE    " ! !   3(o( o(d7I 7
 O	r   