a
    ÁQ\a  ã                   @   sb   d dl m  mZ d dlmZmZmZmZ ddlm	Z	m
Z
 dgZG dd„ dƒZeedœdd	„ZdS )
é    N)ÚAnyÚListÚTupleÚUnioné   )ÚFormattedTextÚStyleAndTextTuplesÚHTMLc                   @   sn   e Zd ZdZeddœdd„Zedœdd„Zedœd	d
„Ze	e	d dœdd„Z
ee	ee	df f d 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``.
    N)ÚvalueÚreturnc                    sp   || _ t d|f ¡}g ‰g ‰g ‰g ‰ tdœ‡ ‡‡fdd„‰td dœ‡ ‡‡‡‡‡fdd„‰ˆ|ƒ tˆƒ| _d S )Nz<html-root>%s</html-root>©r   c                     sR   g } ˆr|   dd ˆ¡ ¡ ˆr2|   dˆd  ¡ ˆ rH|   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© úAlib/python3.9/site-packages/prompt_toolkit/formatted_text/html.pyÚget_current_style'   s    z(HTML.__init__.<locals>.get_current_style)Únoder   c                    sò   | j D ]æ}|j|jkr*ˆ ˆƒ |jf¡ q|jdv}d }}|j ¡ D ],\}}|dkrZ|}|dkrf|}|dkrF|}qFd|v r„tdƒ‚d|v r”tdƒ‚|r¤ˆ |j¡ |r²ˆ |¡ |rÀˆ  |¡ ˆ|ƒ |rÔˆ 	¡  |ràˆ 	¡  |rˆ  	¡  qd	S )
zProcess node recursively.)z	#documentz	html-rootZstyleÚ ÚfgÚbgZcolorr   z "fg" attribute contains a space.z "bg" attribute contains a space.N)
Z
childNodesZnodeTypeZ	TEXT_NODEr   ÚdataZnodeNameZ
attributesÚitemsÚ
ValueErrorÚpop)r   ÚchildZadd_to_name_stackr   r   ÚkÚv©r   r   r   r   Úprocess_nodeÚresultr   r   r%   3   s:    



z#HTML.__init__.<locals>.process_node)r
   ÚminidomZparseStringÚstrr   r   Úformatted_text)Úselfr
   Zdocumentr   r$   r   Ú__init__   s    ,zHTML.__init__r   c                 C   s   d| j f S )NzHTML(%r))r
   ©r*   r   r   r   Ú__repr__c   s    zHTML.__repr__c                 C   s   | j S ©N)r)   r,   r   r   r   Ú__pt_formatted_text__f   s    zHTML.__pt_formatted_text__)ÚargsÚkwargsr   c                 O   s6   dd„ |D ƒ}dd„ |  ¡ D ƒ}t| jj|i |¤ŽƒS )zc
        Like `str.format`, but make sure that the arguments are properly
        escaped.
        c                 S   s   g | ]}t |ƒ‘qS r   ©Úhtml_escape)Ú.0Úar   r   r   Ú
<listcomp>o   ó    zHTML.format.<locals>.<listcomp>c                 S   s   i | ]\}}|t |ƒ“qS r   r2   )r4   r"   r#   r   r   r   Ú
<dictcomp>p   r7   zHTML.format.<locals>.<dictcomp>)r   r	   r
   Úformat)r*   r0   r1   Zescaped_argsZescaped_kwargsr   r   r   r9   i   s    zHTML.format.c                 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.   r2   )r4   Úir   r   r   Ú	<genexpr>{   r7   zHTML.__mod__.<locals>.<genexpr>)Ú
isinstanceÚtupler	   r
   )r*   r
   r   r   r   Ú__mod__t   s    
zHTML.__mod__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r+   r-   r   r/   Úobjectr9   r   r   r>   r   r   r   r   r	   	   s   E)Útextr   c                 C   s8   t | tƒsd | ¡} |  dd¡ dd¡ dd¡ dd	¡S )
Nz{}ú&z&amp;ú<z&lt;ú>z&gt;ú"z&quot;)r<   r(   r9   Úreplace)rD   r   r   r   r3      s    

ÿþýÿr3   )Zxml.dom.minidomZdomr'   Útypingr   r   r   r   Úbaser   r   Ú__all__r	   rC   r(   r3   r   r   r   r   Ú<module>   s
   v