
    ^h                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	J
r
JrJr  / SQrSS jrSS	 jrSS
 jrSS jr    SS jrg)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                *    [        [        U 5      5      $ )z7
Turn any kind of formatted text back into plain text.
)r   r   )values    ]/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/formatted_text/utils.pyr   r      s     !!25!9::    c                2   ^ Sm[        U4S jU  5       5      $ )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  V   >#    U  H  nTUS    ;  d  M  [        US   5      v   M      g7fr   r   N)len.0itemZeroWidthEscapes     r   	<genexpr>$fragment_list_len.<locals>.<genexpr>-   s)     T	_DQRG5S|s47||	s   ))sum	fragmentsr   s    @r   r   r   %   s     *OT	TTTr   c                2   ^ Sm[        U4S jU  5       5      $ )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  j   >#    U  H(  nUS      H  nTUS   ;  d  M  [        U5      v   M     M*     g7f)r   r   Nr   )r   r   cr   s      r   r   &fragment_list_width.<locals>.<genexpr>9   s=      DaA$q') 	
1 	s   33r!   r#   s    @r   r   r   0   s$     *O   r   c                >   ^ SmSR                  U4S jU  5       5      $ )z
Concatenate all the text parts again.

:param fragments: List of ``(style_str, text)`` or
    ``(style_str, text, mouse_handler)`` tuples.
r    c              3  D   >#    U  H  nTUS    ;  d  M  US   v   M     g7fr    r   s     r   r   (fragment_list_to_text.<locals>.<genexpr>I   s#     SytO4PQ74R747ys     )joinr#   s    @r   r   r   A   s     *O77SySSSr   c           	   #    #    / nU  Hq  tp#nUR                  S5      nUSS  H,  nUR                  [        [        X&/UQ75      5        Uv   / nM.     UR                  [        [        X%S   /UQ75      5        Ms     Uv   g7f)z
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"#2JDKK1E3P-3PQRJD 
 	D-Ry/Q=/QRS *3 Js   A?BN)r   r	   returnstr)r$   r   r:   int)r$   r   r:   r;   )r$   zIterable[OneStyleAndTextTuple]r:   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>rC      sQ    # ! + ;U"T-!r   