U
    ÔðccÇ  ã                   @   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
 dddd	d
gZeedœdd„Ze	edœdd„Ze	edœdd„Ze	edœdd	„Ze	ee	 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.
é    )Ú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   ú]/var/www/html/project/venv/lib/python3.8/site-packages/prompt_toolkit/formatted_text/utils.pyr      s    )Ú	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  krt |d ƒV  qdS ©r   r   N)Úlen©Ú.0Úitem©ZZeroWidthEscaper   r   Ú	<genexpr>*   s      z$fragment_list_len.<locals>.<genexpr>©Úsum©r   r   r   r   r   "   s    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 k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    þ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  k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    c                 c   s|   g }| D ]h^}}}|  d¡}|dd… D ]*}|rH| tt||f|˜ƒ¡ |V  g }q(| tt||d f|˜ƒ¡ 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   I   s    
N)Ú__doc__Útypingr   r   Zprompt_toolkit.utilsr   Úbaser   r   r	   r
   Ú__all__Ústrr   Úintr   r   r   r   r   r   r   r   Ú<module>   s   û	