o
    ˷e                     @   s   d 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edefd	d
Zde	defddZde	defddZde	defddZde	dee	 f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.
    )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valuereturnc                 C   s   t t| S )z?
    Turn any kind of formatted text back into plain text.
    )r   r
   )r    r   Z/var/www/ideatree/venv/lib/python3.10/site-packages/prompt_toolkit/formatted_text/utils.pyr      s   r   	fragmentsc                       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   6   s    z&fragment_list_width.<locals>.<genexpr>r   r!   r   r   r   r   -   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   F   s   " z(fragment_list_to_text.<locals>.<genexpr>)joinr!   r   r   r   r   >   s   r   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: List 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   I   s   
 
r   N)__doc__typingr   r   prompt_toolkit.utilsr   baser   r   r	   r
   __all__strr   intr   r   r   r   r   r   r   r   <module>   s    	