o
    Zh                     @  s~   d dl mZ d dlm  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 dZG d	d
 d
eZdddZe ZdS )    )annotationsN)	Formatter)Any   )FormattedTextStyleAndTextTuplesHTMLc                   @  sB   e Zd ZdZdddZddd	ZdddZdddZdddZdS )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``.
    valuestrreturnNonec                   sh   || _ td| d}g g g g  d fddd fd
d| t| _d S )Nz<html-root>z</html-root>r   r
   c                    sR   g } r|  dd  r|  dd    r$|  d d   d| S )z$Build style string for current node.zclass:,zfg:zbg: )appendjoin)parts)bg_stackfg_stack
name_stack Y/var/www/html/lang_env/lib/python3.10/site-packages/prompt_toolkit/formatted_text/html.pyget_current_style*   s   
z(HTML.__init__.<locals>.get_current_stylenoder   r   c                   s   | j D ]s}|j|jkr |jf q|jdv}d }}|j D ]\}}|dkr-|}|dkr3|}|dkr9|}q#d|v rBtdd|v rJtd|rR|j |rY| |r` | | |rj	  |rp	  |rv 	  qd	S )
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)
Z
childNodesZnodeTypeZ	TEXT_NODEr   dataZnodeName
attributesitems
ValueErrorpop)r   childZadd_to_name_stackr   r   kvr   r   r   r   process_noderesultr   r   r(   6   s@   



z#HTML.__init__.<locals>.process_noder   r
   )r   r   r   r   )r	   minidomZparseStringr   formatted_text)selfr	   Zdocumentr   r'   r   __init__!   s   ,zHTML.__init__c                 C  s   d| j dS )NzHTML())r	   r-   r   r   r   __repr__f      zHTML.__repr__r   c                 C  s   | j S N)r,   r0   r   r   r   __pt_formatted_text__i   s   zHTML.__pt_formatted_text__argsobjectkwargsc                 O  s   t t| j||S )zc
        Like `str.format`, but make sure that the arguments are properly
        escaped.
        )r   	FORMATTERvformatr	   )r-   r5   r7   r   r   r   formatl   s   zHTML.formatc                 C  s0   t |ts|f}tdd |D }t| j| S )z+
        HTML('<b>%s</b>') % value
        c                 s  s    | ]}t |V  qd S r3   )html_escape).0ir   r   r   	<genexpr>z   s    zHTML.__mod__.<locals>.<genexpr>)
isinstancetupler   r	   )r-   r	   r   r   r   __mod__s   s   
zHTML.__mod__N)r	   r
   r   r   r*   )r   r   )r5   r6   r7   r6   r   r   )r	   r6   r   r   )	__name__
__module____qualname____doc__r.   r1   r4   r:   rA   r   r   r   r   r      s    

E

c                   @  s   e Zd Zd	ddZdS )
HTMLFormatterr	   r6   format_specr
   r   c                 C  s   t t||S r3   )r;   r:   )r-   r	   rG   r   r   r   format_field   r2   zHTMLFormatter.format_fieldN)r	   r6   rG   r
   r   r
   )rB   rC   rD   rH   r   r   r   r   rF   ~   s    rF   textr6   r   r
   c                 C  s4   t | ts|  } | ddddddddS )	N&z&amp;<z&lt;>z&gt;"z&quot;)r?   r
   replace)rI   r   r   r   r;      s   

r;   )rI   r6   r   r
   )
__future__r   Zxml.dom.minidomdomr+   stringr   typingr   baser   r   __all__r   rF   r;   r8   r   r   r   r   <module>   s    r

