
    f                        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Zdd	Zdd
ZddZ	 	 	 	 ddZy)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_linesc                *    t        t        |             S )z?
    Turn any kind of formatted text back into plain text.
    )r   r   )values    ^/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/formatted_text/utils.pyr   r      s     !!25!9::    c                0    dt        f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  J   K   | ]  }|d    vst        |d           ywr   r   N)len.0itemZeroWidthEscapes     r   	<genexpr>z$fragment_list_len.<locals>.<genexpr>-   s%     T_DQRG5Ss47|Ts   ##sum	fragmentsr   s    @r   r   r   %   s     *OT	TTTr   c                0    dt        fd| D              S )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  V   K   | ]   }|d    D ]  }|d   vrt        |        " yw)r   r   Nr   )r   r   cr   s      r   r   z&fragment_list_width.<locals>.<genexpr>9   sB      a $q') 	1s   &)r    r"   s    @r   r   r   0   s$     *O   r   c                <    ddj                  f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  8   K   | ]  }|d    vs|d     ywr    r   s     r   r   z(fragment_list_to_text.<locals>.<genexpr>I   s!     StO4PQ74R47Ss   
)joinr"   s    @r   r   r   A   s     *O77SySSSr   c           	   #    K   g }| D ]s  ^}}}|j                  d      }|dd D ].  }|r$|j                  t        t        ||g|             | g }0 |j                  t        t        ||d   g|             u | yw)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parts          r   r   r   L   s       "D)2 	T%vT"#2J 	DD!5t7Tm7TUVJD		 	D-uRy/Q=/QRS	T Js   B BN)r   r	   returnstr)r#   r   r7   int)r#   r   r7   r8   )r#   zIterable[OneStyleAndTextTuple]r7   zIterable[StyleAndTextTuples])__doc__
__future__r   typingr   r   prompt_toolkit.utilsr   baser	   r
   r   r   __all__r   r   r   r   r   r*   r   r   <module>r@      sQ    # ! + ;U"T-!r   