o
    �õ±jœ'  ã                   @  s´   U d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ er3dd	lmZ d
dgZG dd„ dƒZe	edd�Zded< dZG dd
„ d
ƒZG dd„ dƒZdS )é    )Úannotations©Údefaultdict)ÚCallable)ÚTYPE_CHECKING)ÚFastDictCache)ÚPoint)Ú
get_cwidthé   )ÚWindowÚScreenÚCharc                   @  s¶  e Zd ZU dZdZi dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“i d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“dEdF“¥i dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“dgdh“¥didjdkdldmdndodpdqdrdsdtdudvdwdxœ¥Zdyedz< dŒd�d�d‚„ZdŽd…d†„ZdŽd‡dˆ„Z	e
sÔeZe	Zd�d‰dŠ„Zd‹S )�r   zë
    Represent a single character in a :class:`.Screen`.

    This should be considered immutable.

    :param char: A single character (can be a double-width character).
    :param style: A style string. (Can contain classnames.)
    )ÚcharÚstyleÚwidthú z^@úz^Aúz^Búz^Cúz^Dúz^Eúz^Fúz^Gúz^Hú	z^IÚ
z^Júz^Kúz^Lúz^Múz^Núz^Oúz^Púz^Qúz^Rúz^Súz^Túz^Uúz^Vúz^Wúz^Xúz^Yúz^Zúz^[úz^\úz^]úz^^úz^_úz^?õ   Â€z<80>õ   Â�z<81>õ   Â‚z<82>õ   Âƒz<83>õ   Â„z<84>õ   Â…z<85>õ   Â†z<86>õ   Â‡z<87>õ   Âˆz<88>õ   Â‰z<89>õ   ÂŠz<8a>õ   Â‹z<8b>õ   ÂŒz<8c>õ   Â�z<8d>õ   ÂŽz<8e>õ   Â�z<8f>õ   Â�z<90>õ   Â‘z<91>z<92>z<93>z<94>z<95>z<96>z<97>z<98>z<99>z<9a>z<9b>z<9c>z<9d>z<9e>z<9f>ú )õ   Â’õ   Â“õ   Â”õ   Â•õ   Â–õ   Â—õ   Â˜õ   Â™õ   Âšõ   Â›õ   Âœõ   Â�õ   Âžõ   ÂŸõ   Â zdict[str, str]Údisplay_mappingsÚ r   Ústrr   ÚreturnÚNonec                 C  sH   || j v r|dkr|d7 }n|d7 }| j | }|| _|| _t|ƒ| _d S )NrS   z class:nbsp z class:control-character )rT   r   r   r	   r   )Úselfr   r   © rZ   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/prompt_toolkit/layout/screen.pyÚ__init__m   s   


zChar.__init__ÚotherÚboolc                 C  s   | j |j ko| j|jkS ©N©r   r   ©rY   r]   rZ   rZ   r[   Ú_equal�   s   zChar._equalc                 C  s   | j |j kp| j|jkS r_   r`   ra   rZ   rZ   r[   Ú
_not_equal„   s   zChar._not_equalc                 C  s   | j j› d| j›d| j›d�S )Nú(z, ú))Ú	__class__Ú__name__r   r   ©rY   rZ   rZ   r[   Ú__repr__�   s   zChar.__repr__N)rD   rU   )r   rV   r   rV   rW   rX   )r]   r   rW   r^   ©rW   rV   )rg   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rT   Ú__annotations__r\   rb   rc   r   Ú__eq__Ú__ne__ri   rZ   rZ   rZ   r[   r      s  
 	ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5ºI

i@B )Úsizez$FastDictCache[tuple[str, str], Char]Ú_CHAR_CACHEz[transparent]c                   @  s„   e Zd ZdZ			d0d1dd„Zed2dd„ƒZd3dd„Zd3dd„Zd4dd„Z	d4dd„Z
d5dd „Zd6d!d"„Zd7d%d&„Z	(d8d9d.d/„ZdS ):r   z=
    Two dimensional buffer of :class:`.Char` instances.
    Nr   Údefault_charúChar | NoneÚinitial_widthÚintÚinitial_heightrW   rX   c                   sp   |d u rt dtf ‰ n|‰ t‡ fdd„ƒ| _tdd„ ƒ| _i | _d| _i | _|p)d| _|p.d| _	i | _
g | _d S )NrD   c                     s   t ‡ fdd„ƒS )Nc                     s   ˆ S r_   rZ   rZ   ©Údefault_char2rZ   r[   Ú<lambda>¨   s    z3Screen.__init__.<locals>.<lambda>.<locals>.<lambda>r   rZ   ry   rZ   r[   r{   ¨   s    z!Screen.__init__.<locals>.<lambda>c                   S  s   t tƒS r_   )r   rV   rZ   rZ   rZ   r[   r{   ­   ó    Tr   )rs   ÚTransparentr   Údata_bufferÚzero_width_escapesÚcursor_positionsÚshow_cursorÚmenu_positionsr   ÚheightÚ"visible_windows_to_write_positionsÚ_draw_float_functions)rY   rt   rv   rx   rZ   ry   r[   r\   œ   s$   
ÿÿþþ


zScreen.__init__úlist[Window]c                 C  s   t | j ¡ ƒS r_   )Úlistr„   Úkeysrh   rZ   rZ   r[   Úvisible_windowsÌ   s   zScreen.visible_windowsÚwindowr   Úpositionr   c                 C  ó   || j |< dS ©z=
        Set the cursor position for a given window.
        N)r€   ©rY   rŠ   r‹   rZ   rZ   r[   Úset_cursor_positionÐ   ó   zScreen.set_cursor_positionc                 C  rŒ   r�   )r‚   rŽ   rZ   rZ   r[   Úset_menu_positionÖ   r�   zScreen.set_menu_positionc                 C  s,   z| j | W S  ty   tddd� Y S w )zX
        Get the cursor position for a given window.
        Returns a `Point`.
        r   ©ÚxÚy)r€   ÚKeyErrorr   ©rY   rŠ   rZ   rZ   r[   Úget_cursor_positionÜ   s
   ÿzScreen.get_cursor_positionc                 C  sP   z| j | W S  ty'   z| j| W  Y S  ty&   tddd� Y  Y S w w )z‰
        Get the menu position for a given window.
        (This falls back to the cursor position if no menu position was set.)
        r   r’   )r‚   r•   r€   r   r–   rZ   rZ   r[   Úget_menu_positionæ   s   ÿýzScreen.get_menu_positionÚz_indexÚ	draw_funcúCallable[[], None]c                 C  s   | j  ||f¡ dS )z�
        Add a draw-function for a `Window` which has a >= 0 z_index.
        This will be postponed until `draw_all_floats` is called.
        N)r…   Úappend)rY   r™   rš   rZ   rZ   r[   Údraw_with_z_indexó   s   zScreen.draw_with_z_indexc                 C  sB   | j rt| j dd„ d�}|dd… | _ |d d ƒ  | j sdS dS )z?
        Draw all float functions in order of z-index.
        c                 S  s   | d S ©Nr   rZ   )ÚitemrZ   rZ   r[   r{     r|   z(Screen.draw_all_floats.<locals>.<lambda>)Úkeyr
   Nr   )r…   Úsorted)rY   Ú	functionsrZ   rZ   r[   Údraw_all_floatsú   s
   ùzScreen.draw_all_floatsÚ	style_strrV   c           	      C  sR   | j }t}d| }| ¡ D ]\}}| ¡ D ]\}}||j|j| f ||< qqdS )zn
        For all the characters in the screen.
        Set the style string to the given `style_str`.
        rD   N)r~   rs   Úitemsr   r   )	rY   r¤   ÚbÚ
char_cacheÚappend_styler”   Úrowr“   r   rZ   rZ   r[   Úappend_style_to_content	  s   ÿÿzScreen.append_style_to_contentrU   FÚwrite_positionÚWritePositionr   Úafterr^   c                 C  s    |  ¡ sdS |j}|j|j }t}| j}|rd| }d}	nd}|d }	t|j|j|j ƒD ] }
||
 }t||ƒD ]}|| }||j|	|j	 | f ||< q8q-dS )z‰
        Fill the content of this area, using the given `style`.
        The style is prepended before whatever was here before.
        NrD   rU   )
ÚstripÚxposr   rs   r~   ÚrangeÚyposrƒ   r   r   )rY   r«   r   r­   ÚxminÚxmaxr§   r~   r¨   Úprepend_styler”   r©   r“   ÚcellrZ   rZ   r[   Ú	fill_area  s,   ÿ
ÿþüzScreen.fill_area)Nr   r   )rt   ru   rv   rw   rx   rw   rW   rX   )rW   r†   )rŠ   r   r‹   r   rW   rX   )rŠ   r   rW   r   )r™   rw   rš   r›   rW   rX   )rW   rX   )r¤   rV   rW   rX   )rU   F)r«   r¬   r   rV   r­   r^   rW   rX   )rg   rk   rl   rm   r\   Úpropertyr‰   r�   r‘   r—   r˜   r�   r£   rª   r¶   rZ   rZ   rZ   r[   r   —   s"    ü0







ÿc                   @  s    e Zd Zddd	„Zddd„ZdS )r¬   r¯   rw   r±   r   rƒ   rW   rX   c                 C  s4   |dksJ ‚|dksJ ‚|| _ || _|| _|| _d S rž   )r¯   r±   r   rƒ   )rY   r¯   r±   r   rƒ   rZ   rZ   r[   r\   9  s   
zWritePosition.__init__rV   c              
   C  s.   | j j› d| j›d| j›d| j›d| j›d�
S )Nz(x=z, y=z, width=z	, height=re   )rf   rg   r¯   r±   r   rƒ   rh   rZ   rZ   r[   ri   C  s   .zWritePosition.__repr__N)
r¯   rw   r±   rw   r   rw   rƒ   rw   rW   rX   rj   )rg   rk   rl   r\   ri   rZ   rZ   rZ   r[   r¬   8  s    

r¬   N)Ú
__future__r   Úcollectionsr   Úcollections.abcr   Útypingr   Úprompt_toolkit.cacher   Úprompt_toolkit.data_structuresr   Úprompt_toolkit.utilsr	   Ú
containersr   Ú__all__r   rs   ro   r}   r   r¬   rZ   rZ   rZ   r[   Ú<module>   s(    þ|ÿ "