
    f'                        U d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ erddlmZ d	d
gZ G d d
      Z eed      Zded<   dZ G d d	      Z G d d      Zy)    )annotationsdefaultdict)TYPE_CHECKINGCallable)FastDictCache)Point)
get_cwidth   )WindowScreenCharc                     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<   ddd{Zdd|Zdd}Z	e
seZe	Zdd~Zy)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_mappingsc                    || j                   v r|dk(  r|dz  }n|dz  }| j                   |   }|| _        || _        t        |      | _        y )NrU   z class:nbsp z class:control-character )rV   r   r   r
   r   )selfr   r   s      W/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/layout/screen.py__init__zChar.__init__l   sX    4(((v~'44((.D	
  %
    c                j    | j                   |j                   k(  xr | j                  |j                  k(  S Nr   r   rX   others     rY   _equalzChar._equal   s'    yyEJJ&D4::+DDr[   c                j    | j                   |j                   k7  xs | j                  |j                  k7  S r]   r^   r_   s     rY   
_not_equalzChar._not_equal   s)     yyEJJ&C$***CCr[   c                h    | j                   j                   d| j                  d| j                  dS )N(z, ))	__class____name__r   r   rX   s    rY   __repr__zChar.__repr__   s.    ..))*!DII=4::.JJr[   N)rF    )r   strr   rl   returnNone)r`   r   rm   boolrm   rl   )rh   
__module____qualname____doc__	__slots__rV   __annotations__rZ   ra   rc   r   __eq____ne__rj    r[   rY   r   r      s:    +I
G(G(G( 	G( 		G(
 	G( 	G( 	G( 	G( 	G( 	G( 	G( 	G( 	G( 	G( 	G(  	!G(" 	#G($ 	%G(& 	'G(( 	)G(* 	+G(, 	-G(. 	/G(0 	1G(2 	3G(4 	5G(6 	7G(8 	9G(: 	;G(< 	=G(> 	?G(@ 	AG(B 	CG(F 	GG(H 	IG(J 	KG(L 	MG(N 	OG(P 	QG(R 	SG(T 	UG(V 	WG(X 	YG(Z 	[G(\ 	]G(^ 	_G(` 	aG(b 	cG(d 	eG(f 	gG(h 	iG(j  MG(n GR&(ED
 Kr[   i@B )sizez$FastDictCache[tuple[str, str], Char]_CHAR_CACHEz[transparent]c                      e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZedd       ZddZddZddZ	ddZ
dd	Zdd
ZddZ	 d	 	 	 	 	 	 	 ddZy)r   z=
    Two dimensional buffer of :class:`.Char` instances.
    Nc                    |t         dt        f   n|t        fd      | _        t        d       | _        i | _        d| _        i | _        |xs d| _        |xs d| _	        i | _
        g | _        y )NrF   c                      t         fd      S )Nc                      S r]   rx   default_char2s   rY   <lambda>z3Screen.__init__.<locals>.<lambda>.<locals>.<lambda>   s     r[   r   r   s   rY   r   z!Screen.__init__.<locals>.<lambda>   s    K 56 r[   c                      t        t              S r]   )r   rl   rx   r[   rY   r   z!Screen.__init__.<locals>.<lambda>   s    K$ r[   Tr   )rz   Transparentr   data_bufferzero_width_escapescursor_positionsshow_cursormenu_positionsr   height"visible_windows_to_write_positions_draw_float_functions)rX   default_charinitial_widthinitial_heightr   s       @rY   rZ   zScreen.__init__   s     '[(89M(MEP6F

 LW$L
  	
    	 #'a
$) PR/ LN"r[   c                H    t        | j                  j                               S r]   )listr   keysri   s    rY   visible_windowszScreen.visible_windows   s    D;;@@BCCr[   c                "    || j                   |<   yz=
        Set the cursor position for a given window.
        N)r   rX   windowpositions      rY   set_cursor_positionzScreen.set_cursor_position   s     )1f%r[   c                "    || j                   |<   yr   )r   r   s      rY   set_menu_positionzScreen.set_menu_position   s     '/F#r[   c                Z    	 | j                   |   S # t        $ r t        dd      cY S w xY w)zX
        Get the cursor position for a given window.
        Returns a `Point`.
        r   xy)r   KeyErrorr	   rX   r   s     rY   get_cursor_positionzScreen.get_cursor_position   s3    
	#((00 	#1?"	#s    **c                    	 | j                   |   S # t        $ r1 	 | j                  |   cY S # t        $ r t        dd      cY cY S w xY ww xY 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   s     rY   get_menu_positionzScreen.get_menu_position   sX    
	'&&v.. 	'',,V44 'qA&'	's)    	A,AAAAAc                >    | j                   j                  ||f       y)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)rX   z_index	draw_funcs      rY   draw_with_z_indexzScreen.draw_with_z_index   s    
 	""))7I*>?r[   c                    | j                   r=t        | j                   d       }|dd | _          |d   d           | j                   r<yy)z?
        Draw all float functions in order of z-index.
        c                    | d   S Nr   rx   )items    rY   r   z(Screen.draw_all_floats.<locals>.<lambda>  s    DQRG r[   )keyr   Nr   )r   sorted)rX   	functionss     rY   draw_all_floatszScreen.draw_all_floats   sK     ((t99?STI *312D&IaLO ((r[   c                    | j                   }t        }d|z   }|j                         D ]>  \  }}|j                         D ]&  \  }}||j                  |j                  |z   f   ||<   ( @ y)zn
        For all the characters in the screen.
        Set the style string to the given `style_str`.
        rF   N)r   rz   itemsr   r   )	rX   	style_strb
char_cacheappend_styler   rowr   r   s	            rY   append_style_to_contentzScreen.append_style_to_content  ss    
  
Yggi 	JFAs99; J4#DIItzzL/H$HIAJ	Jr[   c                   |j                         sy|j                  }|j                  |j                  z   }t        }| j                  }|rd|z   }d}	nd}|dz   }	t        |j                  |j                  |j                  z         D ]A  }
||
   }t        ||      D ]+  }||   }||j                  |	|j                  z   |z   f   ||<   - C y)z
        Fill the content of this area, using the given `style`.
        The style is prepended before whatever was here before.
        NrF   rk   )
stripxposr   rz   r   rangeyposr   r   r   )rX   write_positionr   afterxminxmaxr   r   r   prepend_styler   r   r   cells                 rY   	fill_areazScreen.fill_area  s     {{}""""^%9%99 
&&;LML!CKM!4!4~7L7L!L
 	A a.C4& 1v#II}tzz9LHHA		r[   )Nr   r   )r   zChar | Noner   intr   r   rm   rn   )rm   zlist[Window])r   r   r   r	   rm   rn   )r   r   rm   r	   )r   r   r   zCallable[[], None]rm   rn   )rm   rn   )r   rl   rm   rn   )rk   F)r   WritePositionr   rl   r   ro   rm   rn   )rh   rq   rr   rs   rZ   propertyr   r   r   r   r   r   r   r   r   rx   r[   rY   r   r      s     %)	.N!.N .N 	.N
 
.N` D D1/#'@J MR+47EI	r[   c                      e Zd ZddZddZy)r   c                X    |dk\  sJ |dk\  sJ || _         || _        || _        || _        y r   )r   r   r   r   )rX   r   r   r   r   s        rY   rZ   zWritePosition.__init__8  s8    {{zz 		
r[   c           
         | j                   j                   d| j                  d| j                  d| j                  d| j
                  d
S )Nz(x=z, y=z, width=z	, height=rf   )rg   rh   r   r   r   r   ri   s    rY   rj   zWritePosition.__repr__B  sL    ..))*#dii]$tyym8TXT^T^Saajkokvkvjyyz{{r[   N)
r   r   r   r   r   r   r   r   rm   rn   rp   )rh   rq   rr   rZ   rj   rx   r[   rY   r   r   7  s    |r[   r   N)
__future__r   collectionsr   typingr   r   prompt_toolkit.cacher   prompt_toolkit.data_structuresr	   prompt_toolkit.utilsr
   
containersr   __all__r   rz   ru   r   r   r   rx   r[   rY   <module>r      su    " # * . 0 +" 
yK yKx 5B{51  ^ ^B| |r[   