o
    Df                     @  s   d Z ddlmZ ddlmZ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   \/home/ubuntu/webapp/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!   9   s    z&fragment_list_width.<locals>.<genexpr>r"   r$   r   r   r   r   0   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!   I   s   " z(fragment_list_to_text.<locals>.<genexpr>)joinr$   r   r   r   r   A   s   r   Iterable[OneStyleAndTextTuple]Iterable[StyleAndTextTuples]c                 c  s    g }| D ]6^}}}| d}|dd D ]}|r&|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   L   s   

 
r   N)r   r   r   r   )r   r
   r   r   )r   r
   r   r   )r   r(   r   r)   )__doc__
__future__r   typingr   r   prompt_toolkit.utilsr   baser   r	   r
   r   __all__r   r   r   r   r   r   r   r   r   <module>   s    
	


