o
    �õ±jÿ  ã                   @  sŠ   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ g d¢Zddd„Zddd„Zddd„Zddd„Zd dd„ZdS )!z¿
Utilities for manipulating formatted text.

When ``to_formatted_text`` has been called, we get a list of ``(style, text)``
tuples. This file contains functions for manipulating such a list.
é    )Úannotations)ÚIterable)Úcast©Ú
get_cwidthé   )ÚAnyFormattedTextÚOneStyleAndTextTupleÚStyleAndTextTuplesÚto_formatted_text)Úto_plain_textÚfragment_list_lenÚfragment_list_widthÚfragment_list_to_textÚsplit_linesÚvaluer   ÚreturnÚstrc                 C  s   t t| ƒƒS )z?
    Turn any kind of formatted text back into plain text.
    )r   r   )r   © r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/prompt_toolkit/formatted_text/utils.pyr      s   r   Ú	fragmentsr
   Úintc                   ó   d‰ t ‡ fdd„| D ƒƒS )z²
    Return the amount of characters in this text fragment list.

    :param fragments: List of ``(style_str, text)`` or
        ``(style_str, text, mouse_handler)`` tuples.
    ú[ZeroWidthEscape]c                 3  s(   � | ]}ˆ |d  vrt |d ƒV  qdS ©r   r   N)Úlen©Ú.0Úitem©ÚZeroWidthEscaper   r   Ú	<genexpr>.   s   €& z$fragment_list_len.<locals>.<genexpr>©Úsum©r   r   r   r   r   &   s   r   c                   r   )zÞ
    Return the character width of this text fragment list.
    (Take double width characters into account.)

    :param fragments: List of ``(style_str, text)`` or
        ``(style_str, text, mouse_handler)`` tuples.
    r   c                 3  s2   � | ]}|d  D ]}ˆ |d vrt |ƒV  qqdS )r   r   Nr   )r   r   Úcr   r   r   r!   :   s   € ýýüz&fragment_list_width.<locals>.<genexpr>r"   r$   r   r   r   r   1   s   þr   c                   s   d‰ d  ‡ fdd„| D ƒ¡S )zœ
    Concatenate all the text parts again.

    :param fragments: List of ``(style_str, text)`` or
        ``(style_str, text, mouse_handler)`` tuples.
    r   Ú c                 3  s$   � | ]}ˆ |d  vr|d V  qdS r   r   r   r   r   r   r!   J   s   €" z(fragment_list_to_text.<locals>.<genexpr>)Újoinr$   r   r   r   r   B   s   r   úIterable[OneStyleAndTextTuple]úIterable[StyleAndTextTuples]c                 c  s~   � g }| D ]4^}}}|  d¡}|dd… D ]}| tt||g|¢R ƒ¡ |V  g }q| tt||d g|¢R ƒ¡ q|V  dS )a  
    Take a single list of (style_str, text) tuples and yield one such list for each
    line. Just like str.split, this will yield at least one item.

    :param fragments: Iterable of ``(style_str, text)`` or
        ``(style_str, text, mouse_handler)`` tuples.
    Ú
Néÿÿÿÿ)ÚsplitÚappendr   r	   )r   ÚlineÚstyleÚstringÚmouse_handlerÚpartsÚpartr   r   r   r   M   s   €

 
r   N)r   r   r   r   )r   r
   r   r   )r   r
   r   r   )r   r(   r   r)   )Ú__doc__Ú
__future__r   Úcollections.abcr   Útypingr   Úprompt_toolkit.utilsr   Úbaser   r	   r
   r   Ú__all__r   r   r   r   r   r   r   r   r   Ú<module>   s    
	


