§
    ŒŸj‡(  ã                  ó  — d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ dd	lmZ erdd
lmZ g d¢Z G d„ de¬¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zQ
Margin implementations for a :class:`~prompt_toolkit.layout.containers.Window`.
é    )Úannotations)ÚABCMetaÚabstractmethod)ÚTYPE_CHECKINGÚCallable)ÚFilterOrBoolÚ	to_filter)ÚStyleAndTextTuplesÚfragment_list_to_textÚto_formatted_text)Ú
get_cwidthé   )Ú	UIContent)ÚWindowRenderInfo)ÚMarginÚNumberedMarginÚScrollbarMarginÚConditionalMarginÚPromptMarginc                  óB   — e Zd ZdZedd„¦   «         Zedd„¦   «         ZdS )r   z&
    Base interface for a margin.
    Úget_ui_contentúCallable[[], UIContent]ÚreturnÚintc                ó   — dS )a  
        Return the width that this margin is going to consume.

        :param get_ui_content: Callable that asks the user control to create
            a :class:`.UIContent` instance. This can be used for instance to
            obtain the number of lines.
        r   © ©Úselfr   s     új/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/prompt_toolkit/layout/margins.pyÚ	get_widthzMargin.get_width%   s	   € ð ˆqó    Úwindow_render_infor   ÚwidthÚheightr
   c                ó   — g S )a³  
        Creates a margin.
        This should return a list of (style_str, text) tuples.

        :param window_render_info:
            :class:`~prompt_toolkit.layout.containers.WindowRenderInfo`
            instance, generated after rendering and copying the visible part of
            the :class:`~prompt_toolkit.layout.controls.UIControl` into the
            :class:`~prompt_toolkit.layout.containers.Window`.
        :param width: The width that's available for this margin. (As reported
            by :meth:`.get_width`.)
        :param height: The height that's available for this margin. (The height
            of the :class:`~prompt_toolkit.layout.containers.Window`.)
        r   ©r   r"   r#   r$   s       r   Úcreate_marginzMargin.create_margin0   s	   € ð$ ˆ	r!   N©r   r   r   r   ©r"   r   r#   r   r$   r   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r'   r   r!   r   r   r       s^   € € € € € ðð ð ðð ð ñ „^ðð ðð ð ñ „^ðð ð r!   r   )Ú	metaclassc                  ó.   — e Zd ZdZ	 ddd„Zdd„Zdd„ZdS )r   a  
    Margin that displays the line numbers.

    :param relative: Number relative to the cursor position. Similar to the Vi
                     'relativenumber' option.
    :param display_tildes: Display tildes after the end of the document, just
        like Vi does.
    FÚrelativer   Údisplay_tildesr   ÚNonec                óV   — t          |¦  «        | _        t          |¦  «        | _        d S ©N)r	   r0   r1   )r   r0   r1   s      r   Ú__init__zNumberedMargin.__init__O   s)   € õ " (Ñ+Ô+ˆŒÝ'¨Ñ7Ô7ˆÔÐÐr!   r   r   r   c                ób   —  |¦   «         j         }t          dt          |› ¦  «        dz   ¦  «        S )Né   r   )Ú
line_countÚmaxÚlen)r   r   r8   s      r   r    zNumberedMargin.get_widthU   s1   € Ø#�^Ñ%Ô%Ô0ˆ
Ý�1•c˜Z˜/Ñ*Ô*¨QÑ.Ñ/Ô/Ð/r!   r"   r   r#   r$   r
   c                ó˜  — |                       ¦   «         }d}d}|j        j        j        }g }d }	t	          |j        ¦  «        D ]Ã\  }
}||	k    r¡|€nž||k    rQ|r|                     |d|dz   z  f¦  «         nx|                     |d|dz   z                       |¦  «        f¦  «         nG|rt          ||z
  ¦  «        dz
  }|                     |d|dz   z                       |¦  «        f¦  «         |}	|                     d¦  «         ŒÄ|  	                    ¦   «         r0|
|j
        k     r%|                     d¦  «         |
dz  }
|
|j
        k     °%|S )Nzclass:line-numberzclass:line-number.currentz%ir   z%i ©Ú ú
)zclass:tildez~
)r0   Ú
ui_contentÚcursor_positionÚyÚ	enumerateÚdisplayed_linesÚappendÚrjustÚabsr1   Úwindow_height)r   r"   r#   r$   r0   ÚstyleÚstyle_currentÚcurrent_linenoÚresultÚlast_linenorA   Úlinenos               r   r'   zNumberedMargin.create_marginY   sœ  € ð —=’=‘?”?ˆà#ˆØ3ˆð ,Ô6ÔFÔHˆð &(ˆØˆå"Ð#5Ô#EÑFÔFð 	&ð 	&‰IˆAˆvà˜Ò$Ð$Ø�>ØØ˜~Ò-Ð-àð àŸš }°d¸fÀq¹jÑ6IÐ&JÑKÔKÐKÐKàŸšØ*¨U°f¸q±jÑ-A×,HÒ,HÈÑ,OÔ,OÐPñô ð ð ð
  ð BÝ!$ V¨nÑ%<Ñ!=Ô!=ÀÑ!A˜à—M’M 5¨5°F¸Q±JÑ+?×*FÒ*FÀuÑ*MÔ*MÐ"NÑOÔOÐOà ˆKØ�MŠM˜*Ñ%Ô%Ð%Ð%ð ×ÒÑ Ô ð 	ØÐ(Ô6Ò6Ð6Ø—’Ð4Ñ5Ô5Ð5Ø�Q‘�ð Ð(Ô6Ò6Ð6ð ˆr!   N)FF)r0   r   r1   r   r   r2   r(   r)   ©r*   r+   r,   r-   r5   r    r'   r   r!   r   r   r   E   sf   € € € € € ðð ð NSð8ð 8ð 8ð 8ð 8ð0ð 0ð 0ð 0ð-ð -ð -ð -ð -ð -r!   r   c                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )r   zJ
    Wrapper around other :class:`.Margin` classes to show/hide them.
    Úmarginr   Úfilterr   r   r2   c                ó<   — || _         t          |¦  «        | _        d S r4   )rP   r	   rQ   )r   rP   rQ   s      r   r5   zConditionalMargin.__init__Ž   s   € ØˆŒÝ Ñ'Ô'ˆŒˆˆr!   r   r   r   c                ób   — |                       ¦   «         r| j                             |¦  «        S dS )Nr   )rQ   rP   r    r   s     r   r    zConditionalMargin.get_width’   s-   € Ø�;Š;‰=Œ=ð 	Ø”;×(Ò(¨Ñ8Ô8Ð8à�1r!   r"   r   r#   r$   r
   c                ój   — |r0|                       ¦   «         r| j                             |||¦  «        S g S r4   )rQ   rP   r'   r&   s       r   r'   zConditionalMargin.create_margin˜   s;   € ð ð 	�T—[’[‘]”]ð 	Ø”;×,Ò,Ð-?ÀÈÑOÔOÐOàˆIr!   N)rP   r   rQ   r   r   r2   r(   r)   rN   r   r!   r   r   r   ‰   sZ   € € € € € ðð ð(ð (ð (ð (ðð ð ð ðð ð ð ð ð r!   r   c                  ó2   — e Zd ZdZ	 	 	 ddd„Zdd„Zdd„ZdS )r   zc
    Margin displaying a scrollbar.

    :param display_arrows: Display scroll up/down arrows.
    Fú^ÚvÚdisplay_arrowsr   Úup_arrow_symbolÚstrÚdown_arrow_symbolr   r2   c                óJ   — t          |¦  «        | _        || _        || _        d S r4   )r	   rX   rY   r[   )r   rX   rY   r[   s       r   r5   zScrollbarMargin.__init__¨   s*   € õ (¨Ñ7Ô7ˆÔØ.ˆÔØ!2ˆÔÐÐr!   r   r   r   c                ó   — dS )Nr   r   r   s     r   r    zScrollbarMargin.get_width²   s   € Øˆqr!   r"   r   r#   r$   r
   c           
     óp  ‡‡— |j         }|j        }|                      ¦   «         }|r|dz  }	 t          |j        ¦  «        t          |¦  «        z  }|j        t          |¦  «        z  }t          t          |t          d||z  ¦  «        ¦  «        ¦  «        Št          ||z  ¦  «        Šdˆˆfd„}	g }
|r|
 
                    d| j        fd	g¦  «         d
}d}d}d}t          |¦  «        D ]�} |	|¦  «        r> |	|dz   ¦  «        s|
                     |df¦  «         nU|
                     |df¦  «         n= |	|dz   ¦  «        r|
                     |df¦  «         n|
                     |df¦  «         |
                     d¦  «         Œž|r|
                     d| j        f¦  «         |
S # t          $ r g cY S w xY w)Né   r   Úrowr   r   Úboolc                ó*   •— ‰| cxk    o‰‰z   k    nc S )z/True if we should display a button on this row.r   )r`   Úscrollbar_heightÚscrollbar_tops    €€r   Úis_scroll_buttonz7ScrollbarMargin.create_margin.<locals>.is_scroll_buttonÍ   s+   ø€ à$¨ÐOÐOÒOÐO¨}Ð?OÑ/OÒOÐOÐOÐOÐOr!   zclass:scrollbar.arrow)zclass:scrollbarr>   zclass:scrollbar.backgroundz*class:scrollbar.background,scrollbar.startzclass:scrollbar.buttonz$class:scrollbar.button,scrollbar.endú r<   )r`   r   r   ra   )Úcontent_heightrG   rX   r:   rC   ÚfloatÚvertical_scrollr   Úminr9   ÚextendrY   ÚrangerD   r[   ÚZeroDivisionError)r   r"   r#   r$   rg   rG   rX   Úfraction_visibleÚfraction_abovere   rK   Úscrollbar_backgroundÚscrollbar_background_startÚscrollbar_buttonÚscrollbar_button_endÚirc   rd   s                   @@r   r'   zScrollbarMargin.create_marginµ   sg  øø€ ð ,Ô:ˆØ*Ô8ˆØ×,Ò,Ñ.Ô.ˆàð 	Ø˜QÑˆMð5	Ý"Ð#5Ô#EÑFÔFÍØñJô Jñ  Ðð 0Ô?Å%ÈÑBWÔBWÑWˆNå"Ý�M¥3 q¨-Ð:JÑ*JÑ#KÔ#KÑLÔLñ ô  Ðõ   °Ñ >Ñ?Ô?ˆMð
Pð Pð Pð Pð Pð Pð Pð
 *,ˆFØð Ø—’à0°$Ô2FÐGØ1ðñô ð ð $@Ð Ø)UÐ&Ø7ÐØ#IÐ å˜=Ñ)Ô)ð *ð *�Ø#Ð# AÑ&Ô&ð CØ+Ð+¨A°©EÑ2Ô2ð ?ð ŸšÐ';¸SÐ&AÑBÔBÐBÐBàŸšÐ'7¸Ð&=Ñ>Ô>Ð>Ð>à'Ð'¨¨A©Ñ.Ô.ð CØŸšÐ'AÀ3Ð&GÑHÔHÐHÐHàŸšÐ';¸SÐ&AÑBÔBÐBØ—’˜jÑ)Ô)Ð)Ð)ð ð QØ—’Ð6¸Ô8NÐOÑPÔPÐPàˆMøõW !ð 	ð 	ð 	ØˆIˆIˆIð	øøøs   ­A;F& Æ&F5Æ4F5N)FrV   rW   )rX   r   rY   rZ   r[   rZ   r   r2   r(   r)   rN   r   r!   r   r   r   ¡   sj   € € € € € ðð ð (-Ø"Ø!$ð	3ð 3ð 3ð 3ð 3ðð ð ð ð?ð ?ð ?ð ?ð ?ð ?r!   r   c                  ó.   — e Zd ZdZ	 ddd	„Zdd„Zdd„ZdS )r   a¢  
    [Deprecated]

    Create margin that displays a prompt.
    This can display one prompt at the first line, and a continuation prompt
    (e.g, just dots) on all the following lines.

    This `PromptMargin` implementation has been largely superseded in favor of
    the `get_line_prefix` attribute of `Window`. The reason is that a margin is
    always a fixed width, while `get_line_prefix` can return a variable width
    prefix in front of every line, making it more powerful, especially for line
    continuations.

    :param get_prompt: Callable returns formatted text or a list of
        `(style_str, type)` tuples to be shown as the prompt at the first line.
    :param get_continuation: Callable that takes three inputs. The width (int),
        line_number (int), and is_soft_wrap (bool). It should return formatted
        text or a list of `(style_str, type)` tuples for the next lines of the
        input.
    NÚ
get_promptú Callable[[], StyleAndTextTuples]Úget_continuationú5None | Callable[[int, int, bool], StyleAndTextTuples]r   r2   c                ó"   — || _         || _        d S r4   )rv   rx   )r   rv   rx   s      r   r5   zPromptMargin.__init__  s   € ð %ˆŒØ 0ˆÔÐÐr!   r   r   r   c                ób   — t          |                      ¦   «         ¦  «        }t          |¦  «        S )z Width to report to the `Window`.)r   rv   r   )r   r   Útexts      r   r    zPromptMargin.get_width  s)   € õ % T§_¢_Ñ%6Ô%6Ñ7Ô7ˆÝ˜$ÑÔÐr!   r"   r   r#   r$   r
   c                ó<  — | j         }g }|                     t          |                      ¦   «         ¦  «        ¦  «         |r\d }|j        dd …         D ]J}|                     d¦  «         |                     t           |||||k    ¦  «        ¦  «        ¦  «         |}ŒK|S )Nr   r<   )rx   rk   r   rv   rC   rD   )r   r"   r#   r$   rx   rK   Úlast_yrA   s           r   r'   zPromptMargin.create_margin  s¸   € ð  Ô0ÐØ%'ˆð 	�ŠÕ'¨¯ªÑ(9Ô(9Ñ:Ô:Ñ;Ô;Ð;ð ð 	ØˆFà'Ô7¸¸¸Ô;ð ð �Ø—’˜jÑ)Ô)Ð)Ø—’Ý%Ð&6Ð&6°u¸aÀÀfÂÑ&MÔ&MÑNÔNñô ð ð ��àˆr!   r4   )rv   rw   rx   ry   r   r2   r(   r)   rN   r   r!   r   r   r   ÷   se   € € € € € ðð ð2 >Bð	1ð 1ð 1ð 1ð 1ð ð  ð  ð  ðð ð ð ð ð r!   r   N)r-   Ú
__future__r   Úabcr   r   Útypingr   r   Úprompt_toolkit.filtersr   r	   Úprompt_toolkit.formatted_textr
   r   r   Úprompt_toolkit.utilsr   Úcontrolsr   Ú
containersr   Ú__all__r   r   r   r   r   r   r!   r   ú<module>rˆ      sâ  ððð ð #Ð "Ð "Ð "Ð "Ð "à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð
 ,Ð +Ð +Ð +Ð +Ð +à Ð Ð Ð Ð Ð àð -Ø,Ð,Ð,Ð,Ð,Ð,ðð ð €ð"ð "ð "ð "ð "�wð "ñ "ô "ð "ðJAð Að Að Að A�Vñ Aô Að AðHð ð ð ð ˜ñ ô ð ð0Sð Sð Sð Sð S�fñ Sô Sð Sðl9ð 9ð 9ð 9ð 9�6ñ 9ô 9ð 9ð 9ð 9r!   