o
    �õ±j  ã                   @  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© ú•/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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)
Ú
childNodesÚnodeTypeÚ	TEXT_NODEr   ÚdataÚnodeNameÚ
attributesÚitemsÚ
ValueErrorÚpop)r   ÚchildÚ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	   ÚminidomÚparseStringr   Úformatted_text)Úselfr	   Údocumentr   r,   r   Ú__init__!   s   ,zHTML.__init__c                 C  s   d| j ›d�S )NzHTML(ú))r	   ©r3   r   r   r   Ú__repr__f   ó   zHTML.__repr__r   c                 C  s   | j S ©N)r2   r7   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	   )r3   r<   r>   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 r:   )Úhtml_escape)Ú.0Úir   r   r   Ú	<genexpr>z   s   € zHTML.__mod__.<locals>.<genexpr>)Ú
isinstanceÚtupler   r	   )r3   r	   r   r   r   Ú__mod__s   s   
zHTML.__mod__N)r	   r
   r   r   r/   )r   r   )r<   r=   r>   r=   r   r   )r	   r=   r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r8   r;   rA   rH   r   r   r   r   r      s    

E

c                   @  s   e Zd Zd	dd„ZdS )
ÚHTMLFormatterr	   r=   Úformat_specr
   r   c                 C  s   t t||ƒƒS r:   )rB   rA   )r3   r	   rN   r   r   r   Úformat_field   r9   zHTMLFormatter.format_fieldN)r	   r=   rN   r
   r   r
   )rI   rJ   rK   rO   r   r   r   r   rM   ~   s    rM   Útextr=   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;)rF   r
   Úreplace)rP   r   r   r   rB   ƒ   s   

ürB   )rP   r=   r   r
   )Ú
__future__r   Úxml.dom.minidomÚdomr0   Ústringr   Útypingr   Úbaser   r   Ú__all__r   rM   rB   r?   r   r   r   r   Ú<module>   s    r

