
    AHj                        U d Z ddlmZ ddl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mZ dd	lmZ dd
l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mZ ddlmZm Z  ed   Z!de"d<   ddddZ# G d de      Z$ G d d      Z%e G d de%             Z&e G d de%             Z'e G d de%             Z( G d  d!      Z)y)"zu
A Canvas class used to render keylines.

!!! note
    This API is experimental, and may change in the near future.

    )annotationsN)array)defaultdict)	dataclass)
itemgetter)
NamedTupleSequence)Segment)Style)Literal	TypeAlias)BOX_CHARACTERSQuadcombine_quads)Color)Offsetclamp)StripStripRenderable)thinheavydoubler   CanvasLineType         c                  0    e Zd ZU dZded<   ded<   ded<   y)_Spanz8Associates a sequence of character indices with a color.intstartendr   colorN)__name__
__module____qualname____doc____annotations__     F/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/canvas.pyr   r   !   s    BJ	HLr)   r   c                      e Zd ZdZddZy)	Primitivez"Base class for a canvas primitive.c                    t               )zRRender to the canvas.

        Args:
            canvas: Canvas instance.
        )NotImplementedError)selfcanvass     r*   renderzPrimitive.render,   s     "##r)   Nr0   CanvasreturnNone)r#   r$   r%   r&   r1   r(   r)   r*   r,   r,   )   s
    ,$r)   r,   c                  F    e Zd ZU dZded<   ded<   ded<   dZd	ed
<   ddZy)HorizontalLinezA horizontal line.r   originr   lengthr   r"   r   r   	line_typec                b   | j                   \  }}|dk  s||j                  dz
  kD  ry |j                  }||   }t        | j                     }t
        }|| j                  z   dz
  }|j                  ||| j                  z         }	||	v r |||   d|ddf      ||<   ||	v r |||   ddd|f      ||<   d|d|f}
|j                  |dz   || j                  z   dz
        D ]  } |||   |
      ||<    |j                  |   j                  t        ||| j                  z   | j                               y Nr   r   )r8   heightbox_LINE_TYPE_INDEXr:   r   r9   x_rangespansappendr   r"   )r/   r0   xyr>   box_lineline_type_index_combine_quadsrightr@   	line_quadbox_xs               r*   r1   zHorizontalLine.render>   sB   {{1q5A))jjq6*4>>:&DKK!#..AO4<(!q/1a6PQHQKG,!Q?!;HUO O<	^^AE1t{{?Q+>? 	IE,Xe_iHHUO	I 	QuQDKKDEr)   Nr2   r#   r$   r%   r&   r'   r:   r1   r(   r)   r*   r7   r7   5   s$    NKL &I~&Fr)   r7   c                  F    e Zd ZU dZded<   ded<   ded<   dZd	ed
<   ddZy)VerticalLinezA vertical line.r   r8   r   r9   r   r"   r   r   r:   c                x   | j                   \  }}|dk  s||j                  k\  ry t        | j                     }|j                  }t
        }|j                  ||| j                  z         }||v r |||   |   dd|df      ||   |<   || j                  z   dz
  }||v r |||   |   |dddf      ||   |<   |d|df}	|j                  |dz   || j                  z   dz
        D ]  }
 |||
   |   |	      ||
   |<    |j                  }t        ||dz   | j                        }|D ]  }||   j                  |        y r<   )r8   widthr?   r:   r>   r   y_ranger9   rA   r   r"   rB   )r/   r0   rC   rD   rF   r>   rG   rP   bottomrI   box_yrA   spans                r*   r1   zVerticalLine.renderc   s\   {{1q5A%*4>>:jj&..AO4<&s1vay1a!2LMCF1IT[[1$W+CKN_aQRTU<VWCKN$a!<	^^AE1t{{?Q+>? 	EE*3u:a=)DCJqM	E QAtzz* 	"A!HOOD!	"r)   Nr2   rK   r(   r)   r*   rM   rM   Z   s#    NKL &I~&"r)   rM   c                  P    e Zd ZU dZded<   ded<   ded<   ded<   d	Zd
ed<   ddZy)	RectanglezA rectangle.r   r8   r   rO   r=   r   r"   r   r   r:   c                   | j                   }| j                  }| j                  }| j                  }| j                  }t        ||||      j                  |       t        |d|dz
  fz   |||      j                  |       t        ||||      j                  |       t        ||dz
  dfz   |||      j                  |       y r<   )r8   rO   r=   r"   r:   r7   r1   rM   )r/   r0   r8   rO   r=   r"   r:   s          r*   r1   zRectangle.render   s    



NN	vueY7>>vFvFQJ/yIPPQWXVVUI6==fEVuqy!n,feYGNNvVr)   Nr2   rK   r(   r)   r*   rU   rU   ~   s)    NJKL &I~&	Wr)   rU   c                  `    e Zd ZdZd	dZed
d       Zed
d       ZddZddZ		 	 	 	 	 	 ddZ
y)r3   zA character canvas.c                R   || _         || _        d|z  }t        j                  dk\  rdnd}t	        |      D cg c]  }t        ||       c}| _        t	        |      D cg c]  }t        d        c}| _        t	        |      D cg c]  }g  c}| _	        yc c}w c c}w c c}w )z

        Args:
            width: Width of the canvas (in cells).
            height Height of the canvas (in cells).
         )r      wuc                      y)N)r   r   r   r   r(   r(   r)   r*   <lambda>z!Canvas.__init__.<locals>.<lambda>   s    r)   N)
_width_heightsysversion_inforanger   linesr   r>   rA   )r/   rO   r=   
blank_linearray_type_code_s         r*   __init__zCanvas.__init__   s     5[
!$!1!1W!<##8=f(
34E/:.(

 8=V}2
23K,-2
 6;6](C(C
(
2
 )Ds   B B	B$c                    | j                   S )zThe canvas width.)r_   r/   s    r*   rO   zCanvas.width   s     {{r)   c                    | j                   S )zThe canvas height.)r`   rj   s    r*   r=   zCanvas.height   s     ||r)   c                n    t        t        |d| j                        t        |d| j                              S )zRange of x values, clipped to the canvas dimensions.

        Args:
            start: Start index.
            end: End index.

        Returns:
            A range object.
        r   )rc   r   r_   r/   r    r!   s      r*   r@   zCanvas.x_range   s1     %DKK(#q$++&
 	
r)   c                n    t        t        |d| j                        t        |d| j                              S )zRange of y values, clipped to the canvas dimensions.

        Args:
            start: Start index.
            end: End index.

        Returns:
            A range object.
        r   )rc   r   r`   rm   s      r*   rP   zCanvas.y_range   s1     %DLL)#q$,,'
 	
r)   c                   |D ]  }|j                  |         t        j                  }t        | j                  | j
                        D ](  \  }}|j                         D ]  \  }} ||      ||<    * | j                  }	t        dd      }
g }|j                  rt        j                  |j                        nt        j                  d      }t        }t        | j                  | j
                        D ]^  \  }}|j                         }|r"g }|g|D cg c]  }|j                    c}z   }dgd t#        |d      D        d t#        |d      D        |	ddf}|j%                  |
       t'               }|j(                  }|j*                  }t        ||dd	       D ]q  \  \  }}}\  }}}|r	 ||       n ||       ||kD  s'|j-                   |||| |t/        j0                  ||rt3        |      nd   j4                        z                s |j-                  t7        ||	             <|j-                  t7         |||      g|	             a t9        ||	      S c c}w )
zRender the canvas.

        Args:
            primitives: A sequence of primitives.
            base_style: The base style of the canvas.

        Returns:
            A Rich renderable for the canvas.
        r   r   transparent)r   Fr   c              3  @   K   | ]  \  }}|j                   d |f  yw)FN)r    .0indexrS   s      r*   	<genexpr>z Canvas.render.<locals>.<genexpr>   s'      'E4 UE2   c              3  @   K   | ]  \  }}|j                   d |f  yw)TN)r!   rr   s      r*   ru   z Canvas.render.<locals>.<genexpr>   s'      'E4 4/rv   T)keyN)r1   r   __getitem__zipr>   rd   itemsr_   r   bgcolorr   from_rich_colorparser
   rA   	tounicoder"   	enumeratesortsetdiscardaddrB   r   
from_colormax
rich_colorr   r   )r/   
primitives
base_style	primitiveget_boxr>   lineoffsetquadrO   span_sort_keystripsr"   _Segment	raw_spanstextsegmentsrS   colorsrA   color_indicescolor_remove	color_addleavingstyle_idnext_offsetrg   s                              r*   r1   zCanvas.render   s    $ 	#IT"	# !,,TXXtzz2 	-IC #		 -&t}V-	- "1a(  !! !!*"4"45]+ 	
 "4::tzz: +	JOIt>>#D*,9#E4DJJ#EE!+4Y+B+4Y+B D!$ 

}
-*-%,44)--	HK59I D/VWh1D+q! $X.!(+"V+ $ $VK 8 *"'"2"2$*>KM(:QR%&&0j#"!"
& eHe45eXdJ%?$@%HIW+	JZ vu--Q $Fs   I"N)rO   r   r=   r   r4   r5   )r4   r   )r    r   r!   r   r4   rc   )r   zSequence[Primitive]r   r   r4   r   )r#   r$   r%   r&   rh   propertyrO   r=   r@   rP   r1   r(   r)   r*   r3   r3      s^    D&    

J.-J.;@J.	J.r)   r3   )*r&   
__future__r   ra   r   collectionsr   dataclassesr   operatorr   typingr   r	   rich.segmentr
   
rich.styler   typing_extensionsr   r   textual._box_drawingr   r   r   textual.colorr   textual.geometryr   r   textual.stripr   r   r   r'   r?   r   r,   r7   rM   rU   r3   r(   r)   r*   <module>r      s    # 
  # !  '    0 D D  * 0#$=>	 > Q7 J 	$ 	$ !FY !F !FH  "9  "  "F W	 W W*H. H.r)   