a
    Šxdë  ã                   @  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
œdd„Zdddœdd„Zdddœdd„Zdd	dœdd„Zdd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_linesr   Ústr)ÚvalueÚreturnc                 C  s   t t| ƒƒS )z?
    Turn any kind of formatted text back into plain text.
    )r   r   )r   © r   ú[/var/www/html/Ranjet/env/lib/python3.9/site-packages/prompt_toolkit/formatted_text/utils.pyr      s    r   r
   Úint)Ú	fragmentsr   c                   s   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©ZZeroWidthEscaper   r   Ú	<genexpr>,   ó    z$fragment_list_len.<locals>.<genexpr>©Úsum©r   r   r   r   r   $   s    r   c                   s   d‰ t ‡ fd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  s0   | ](}|d  D ]}ˆ |d vrt |ƒV  qqdS )r   r   Nr   )r   r   Úcr   r   r   r   8   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   H   r    z(fragment_list_to_text.<locals>.<genexpr>)Újoinr#   r   r   r   r   @   s    r   zIterable[StyleAndTextTuples]c                 c  s€   g }| D ]l^}}}|  d¡}|dd… D ],}|rJ| 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ÚstringZmouse_handlerÚpartsÚpartr   r   r   r   K   s    
 r   N)Ú__doc__Ú
__future__r   Útypingr   r   Zprompt_toolkit.utilsr   Úbaser   r	   r
   r   Ú__all__r   r   r   r   r   r   r   r   r   Ú<module>   s   	