+
    NV-jŒd  ã                   ó¨  € ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
HtHtHtHtHtHtHtHt ^RIHtHtHtHtHt ^RIHtHt ^RIHt ]	'       d   ^R	IHtH t H!t!  ! R
 R]4      t"]]]",          ]]"]]#]$3,          3,          ]]"]#]#3,          3,          t%]! 4        ! R R]4      4       t& ! R R4      t' ! R R4      t(])R8X  Ed	   ^ RI*Ht ^ RI+H,t, ^ RI-H.t. Rt/].P`                  ! R4      t1]! 4       t]Pe                  R4       ]Pg                  R4       ]Pg                  R4       ]Pg                  ],! ]/RRR7      4       ]Pg                  4        ]Pg                  R4       ]4! ]Pk                  ]14      4      t6]Pg                  ]64       ]Pg                  4        ]Pg                  R4       ]Pg                  ]14       ]Pg                  R 4       R!# R!# )"é    )ÚIntEnum)Ú	lru_cache)Úfilterfalse)Ú
attrgetter)
ÚTYPE_CHECKINGÚDictÚIterableÚListÚ
NamedTupleÚOptionalÚSequenceÚTupleÚTypeÚUnion)Ú_is_single_cell_widthsÚcached_cell_lenÚcell_lenÚget_character_cell_sizeÚset_cell_size)ÚResultÚ	rich_repr)ÚStyle)ÚConsoleÚConsoleOptionsÚRenderResultc                   óZ   € ] tR t^ tRt^t^t^t^t^t	^t
^t^t^	t^
t^t^t^t^t^t^tRtR# )ÚControlTypezDNon-printable control codes which typically translate to ANSI codes.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚBELLÚCARRIAGE_RETURNÚHOMEÚCLEARÚSHOW_CURSORÚHIDE_CURSORÚENABLE_ALT_SCREENÚDISABLE_ALT_SCREENÚ	CURSOR_UPÚCURSOR_DOWNÚCURSOR_FORWARDÚCURSOR_BACKWARDÚCURSOR_MOVE_TO_COLUMNÚCURSOR_MOVE_TOÚERASE_IN_LINEÚSET_WINDOW_TITLEÚ__static_attributes__r   ó    Ú]/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/rich/segment.pyr   r       sY   † ÙNà€DØ€OØ€DØ€EØ€KØ€KØÐØÐØ€IØ€KØ€NØ€OØÐØ€NØ€MØÔr5   r   c                   óð  a € ] tR t^<t o RtRtRt]V 3R lR l4       tV 3R lR lt	V 3R lR lt
]V 3R	 lR
 l4       t]]! R54      V 3R lR l4       4       tV 3R lR lt]V 3R lR l4       t]R6V 3R lR ll4       t]R7V 3R lR ll4       t]V 3R lR l4       t]V 3R lR l4       t]R8V 3R lR ll4       t]R9V 3R lR ll4       t]V 3R lR l4       t]V 3R lR  l4       t]R:V 3R! lR" ll4       t]R7V 3R# lR$ ll4       t]R7V 3R% lR& ll4       t]R7V 3R' lR( ll4       t]V 3R) lR* l4       t]V 3R+ lR, l4       t]V 3R- lR. l4       t]V 3R/ lR0 l4       t ]V 3R1 lR2 l4       t!V 3R3 lt"R4t#V t$R# );ÚSegmenta¼  A piece of text with associated style. Segments are produced by the Console render process and
are ultimately converted in to strings to be written to the terminal.

Args:
    text (str): A piece of text.
    style (:class:`~rich.style.Style`, optional): An optional style to apply to the text.
    control (Tuple[ControlCode], optional): Optional sequence of control codes.

Attributes:
    cell_length (int): The cell length of this Segment.
Nc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn)Úint)ÚformatÚ__classdict__s   "€r6   Ú__annotate__ÚSegment.__annotate__O   s   ø€ ÷ 0ñ 0™Sñ 0r5   c                ó6   € V w  rpV'       d   ^ # \        V4      # )zbThe number of terminal cells required to display self.text.

Returns:
    int: A number of cells.
)r   )ÚselfÚtextÚ_styleÚcontrols   &   r6   Úcell_lengthÚSegment.cell_lengthN   s   € ð !%Ñˆ�gßˆqÐ/¤¨$£Ð/r5   c                ó    <€ V ^8„  d   QhRS[ /# r:   )r   )r>   r?   s   "€r6   r@   rA   X   s   ø€ ÷ ñ ™vñ r5   c              #  ó¾   "  € V P                   x € V P                  f!   V P                  e   V P                  x € R # R # V P                  x € V P                  x € R # 5i©N)rD   rF   Ústyle©rC   s   &r6   Ú__rich_repr__ÚSegment.__rich_repr__X   sG   é € Ø�i‰iŠØ�<‰<ÒØ�z‰zÒ%Ø—j‘jÔ ñ &ð —*‘*ÒØ—,‘,Ôùs   ‚AAc                ó    <€ V ^8„  d   QhRS[ /# r:   ©Úbool)r>   r?   s   "€r6   r@   rA   a   s   ø€ ÷ ñ ™$ñ r5   c                ó,   € \        V P                  4      # )z#Check if the segment contains text.)rR   rD   rM   s   &r6   Ú__bool__ÚSegment.__bool__a   s   € ä�D—I‘I‹Ðr5   c                ó    <€ V ^8„  d   QhRS[ /# r:   rQ   )r>   r?   s   "€r6   r@   rA   f   s   ø€ ÷ (ñ (™Dñ (r5   c                ó   € V P                   RJ# )z,Check if the segment contains control codes.N)rF   rM   s   &r6   Ú
is_controlÚSegment.is_controle   s   € ð �|‰| 4Ð'Ð'r5   c                ó8   <€ V ^8„  d   QhRRRS[ RS[R,          /# )r;   Úsegmentr8   Úcutr<   ©r8   r8   ©r=   r   )r>   r?   s   "€r6   r@   rA   l   s(   ø€ ÷ -ñ - 9ð -±3ð -¹5ÐAUÕ;Vñ -r5   c                óf  € Vw  r4p\         pVP                  pW'8¼  d   W! RWE4      3# \        p\        W',          \	        V4      ,          4      p	 VRV	 p
\        V
4      pW²,
          pV'       g   V! W¤V4      V! W9R WE4      3# VR8X  d@   V! W9,          4      ^8X  d-   V! VRV	 R,           WE4      V! RW9^,           R ,           WE4      3# V^8X  dG   V! W9^,
          ,          4      ^8X  d-   V! VRV	^,
           R,           WE4      V! RW9R ,           WE4      3# W²8  d   V	^,          p	KÙ  V	^,          p	Kä  )a  Split a segment in to two at a given cell position.

Note that splitting a double-width character, may result in that character turning
into two spaces.

Args:
    segment (Segment): A segment to split.
    cut (int): A cell position to cut on.

Returns:
    A tuple of two segments.
Ú NÚ éÿÿÿÿ)r8   rG   r   r=   Úlenr   )Úclsr[   r\   rD   rL   rF   Ú_SegmentrG   Ú	cell_sizeÚposÚbeforeÚcell_posÚout_bys   &&&          r6   Ú_split_cellsÚSegment._split_cellsj   sL  € ð  'Ñˆ�WÜˆØ×)Ñ)ˆØÔØ˜H R¨Ó8Ð8Ð8ä+ˆ	ä�3Õ$¬¨D«	Õ1Ó2ˆàØ˜$˜3�ZˆFÜ Ó'ˆHØ•^ˆFßá˜V¨GÓ4Ù˜T $˜Z¨Ó8ðð ð ˜Œ|¡	¨$­)Ó 4¸Ô 9á˜T $ 3˜Z¨#Õ-¨uÓ>Ù˜S 4¨a­¨	 ?Õ2°EÓCðð ð ˜Œ|¡	¨$°Q­w­-Ó 8¸AÔ =á˜T ) C¨!¥G˜_¨sÕ2°EÓCÙ˜S 4¨ :Õ-¨uÓ>ðð ð Œ~Ø�q•’à�q•’r5   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# )r;   r\   r<   r]   r^   )r>   r?   s   "€r6   r@   rA   ›   s!   ø€ ÷ ,ñ ,™sð ,¡uÐ-AÕ'Bñ ,r5   c                óØ   € V w  r#pV^ 8¼  g   Q h\        V4      '       d<   V\        V4      8¼  d   V \        RW44      3# \        VRV W44      \        W!R W44      3# V P                  W4      # )a@  Split segment in to two segments at the specified column.

If the cut point falls in the middle of a 2-cell wide character then it is replaced
by two spaces, to preserve the display width of the parent segment.

Args:
    cut (int): Offset within the segment to cut.

Returns:
    Tuple[Segment, Segment]: Two segments.
r`   N)r   rc   r8   rk   )rC   r\   rD   rL   rF   s   &&   r6   Úsplit_cellsÚSegment.split_cells›   s}   € ð  $Ñˆ�WØ�aŒxˆˆxä! $×'Ò'à”c˜$“iÔØœW R¨Ó8Ð8Ð8ä˜˜T˜c˜
 EÓ3Ü˜˜T˜
 EÓ3ðð ð
 × Ñ  Ó+Ð+r5   c                ó   <€ V ^8„  d   QhRR/# )r;   r<   r8   r   )r>   r?   s   "€r6   r@   rA   ¶   s   ø€ ÷ ñ �Yñ r5   c                ó   € V ! R4      # )zMake a new line segment.Ú
r   )rd   s   &r6   ÚlineÚSegment.lineµ   s   € ñ �4‹yÐr5   c          	      ón   <€ V ^8„  d   QhRS[ R,          RS[S[,          RS[S[,          RS[ R,          /# )r;   Úsegmentsr8   rL   Ú
post_styler<   )r	   r   r   )r>   r?   s   "€r6   r@   rA   »   sE   ø€ ÷ &ñ &á˜9Õ%ð&ñ ™�ð&ñ ™U•Oð	&ñ
 
�)Õ	ñ&r5   c                ó|   a aa€ TpV'       d   VP                   oVV 3R lV 4       pS'       d   V V3R lV 4       pV# )aÃ  Apply style(s) to an iterable of segments.

Returns an iterable of segments where the style is replaced by ``style + segment.style + post_style``.

Args:
    segments (Iterable[Segment]): Segments to process.
    style (Style, optional): Base style. Defaults to None.
    post_style (Style, optional): Style to apply on top of segment style. Defaults to None.

Returns:
    Iterable[Segments]: A new iterable of segments (possibly the same iterable).
c              3   ó\   <"  € T F!  w  rpS! Y'       d   R MS! V4      V4      x € K#  	  R # 5irK   r   )Ú.0rD   rE   rF   Úapplyrd   s   &   €€r6   Ú	<genexpr>Ú&Segment.apply_style.<locals>.<genexpr>Ð   s1   øé € ð á-<Ñ)�D 'ñ �D¦'™$©u°V«}¸g×FÐFÛ-<ùs   ƒ),c              3   ót   <"  € T F-  w  rpS! TV'       d   R MV'       d
   VS,           MSV4      x € K/  	  R # 5irK   r   )r{   rD   rE   rF   rd   rx   s   &   €€r6   r}   r~   Õ   sG   øé € ð ñ .=Ñ)�D 'ñ Ø÷ #ñ ç5;˜f zÖ1Àà÷ð ó .=ùs   ƒ8 8)Ú__add__)rd   rw   rL   rx   Úresult_segmentsr|   s   f&&f @r6   Úapply_styleÚSegment.apply_styleº   sC   ú€ ð& #ˆßØ—M‘MˆEõá-<óˆO÷ õñ .=óˆOð Ðr5   c                óH   <€ V ^8„  d   QhRS[ R,          RS[RS[ R,          /# )r;   rw   r8   rX   r<   )r	   rR   )r>   r?   s   "€r6   r@   rA   ä   s4   ø€ ÷ @ñ @Ù 	Õ*ð@Ù8<ð@á	�)Õ	ñ@r5   c                óf   € V'       d   \        \        R4      V4      # \        \        R4      V4      # )a  Filter segments by ``is_control`` attribute.

Args:
    segments (Iterable[Segment]): An iterable of Segment instances.
    is_control (bool, optional): is_control flag to match in search.

Returns:
    Iterable[Segment]: And iterable of Segment instances.

rF   )Úfilterr   r   )rd   rw   rX   s   &&&r6   Úfilter_controlÚSegment.filter_controlã   s+   € ÷ Üœ* YÓ/°Ó:Ð:äœz¨)Ó4°hÓ?Ð?r5   c                óR   <€ V ^8„  d   QhRS[ R,          RS[ S[R,          ,          /# ©r;   rw   r8   r<   )r	   r
   )r>   r?   s   "€r6   r@   rA   ÷   s)   ø€ ÷ ñ ¡8¨IÕ#6ð ¹8ÁDÈÅOÕ;Tñ r5   c              #  ó\  "  € . pVP                   pV F…  pRVP                  9   dj   VP                  '       gX   Vw  rVpV'       dI   VP                  R4      w  r‰pV'       d   V! V ! W†4      4       V	'       g   K<  Vx € . pVP                   pKP  K}  V! V4       K‡  	  V'       d   Vx € R# R# 5i)zØSplit a sequence of segments in to a list of lines.

Args:
    segments (Iterable[Segment]): Segments potentially containing line feeds.

Yields:
    Iterable[List[Segment]]: Iterable of segment lists, one per line.
rs   N©ÚappendrD   rF   Ú	partition©
rd   rw   rt   r�   r[   rD   rL   Ú_Ú_textÚnew_lines
   &&        r6   Úsplit_linesÚSegment.split_linesö   s—   é € ð !ˆØ—‘ˆãˆGØ�w—|‘|Ô#¨G¯O¯O¨OØ!(‘�˜QßØ,0¯N©N¸4Ó,@Ñ)�E TßÙ™s 5Ó0Ô1ß‘xØ"š
Ø!˜Ø!%§¡šñ ñ �w–ñ  ÷ ØŒJñ ùs   ‚6B,¹B,Á/B,Á:)B,Â$B,c                óh   <€ V ^8„  d   QhRS[ R,          RS[ S[S[R,          S[3,          ,          /# rŠ   )r	   r   r
   rR   )r>   r?   s   "€r6   r@   rA     s5   ø€ ÷  ñ  Ù 	Õ*ð á	‘%™˜Y�©Ð-Õ.Õ	/ñ r5   c              #  ód  "  € . pVP                   pV F‡  pRVP                  9   dl   VP                  '       gZ   Vw  rVpV'       dK   VP                  R4      w  r‰pV'       d   V! V ! W†4      4       V	'       g   K<  VR3x € . pVP                   pKR  K  V! V4       K‰  	  V'       d	   VR3x € R# R# 5i)a
  Split a sequence of segments in to a list of lines and a boolean to indicate if there was a new line.

Args:
    segments (Iterable[Segment]): Segments potentially containing line feeds.

Yields:
    Iterable[List[Segment]]: Iterable of segment lists, one per line.
rs   TFNrŒ   r�   s
   &&        r6   Úsplit_lines_terminatorÚSegment.split_lines_terminator  s¡   é € ð !ˆØ—‘ˆãˆGØ�w—|‘|Ô#¨G¯O¯O¨OØ!(‘�˜QßØ,0¯N©N¸4Ó,@Ñ)�E TßÙ™s 5Ó0Ô1ß‘xØ# T˜lÒ*Ø!˜Ø!%§¡šñ ñ �w–ñ  ÷ Ø˜�-Ôñ ùs   ‚6B0¹B0Á/B0Á:+B0Â&
B0c                óz   <€ V ^8„  d   QhRS[ R,          RS[RS[S[,          RS[RS[RS[ S[R,          ,          /# )r;   rw   r8   ÚlengthrL   ÚpadÚinclude_new_linesr<   )r	   r=   r   r   rR   r
   )r>   r?   s   "€r6   r@   rA   3  sa   ø€ ÷ ,Iñ ,Iá˜9Õ%ð,Iñ ð,Iñ ™�ð	,Iñ
 ð,Iñ  ð,Iñ 
‘$�y•/Õ	"ñ,Ir5   c              #  óÞ  "  € . pVP                   pV P                  pV ! R4      p	V Fª  p
RV
P                  9   d�   V
P                  '       g}   V
w  r¼pV'       dn   VP	                  R4      w  rïpV'       d   V! V ! Wì4      4       V'       g   K<  V! WbW4R7      pV'       d   VP                  V	4       Vx € VP                  4        Ku  K¢  V! V
4       K¬  	  V'       d   V! WbW4R7      x € R# R# 5i)aª  Split segments in to lines, and crop lines greater than a given length.

Args:
    segments (Iterable[Segment]): An iterable of segments, probably
        generated from console.render.
    length (int): Desired line length.
    style (Style, optional): Style to use for any padding.
    pad (bool): Enable padding of lines that are less than `length`.

Returns:
    Iterable[List[Segment]]: An iterable of lines of segments.
rs   )rL   r›   N)r�   Úadjust_line_lengthrD   rF   rŽ   Úclear)rd   rw   rš   rL   r›   rœ   rt   r�   rž   Únew_line_segmentr[   rD   Úsegment_styler�   r‘   r’   Úcropped_lines   &&&&&&           r6   Úsplit_and_crop_linesÚSegment.split_and_crop_lines2  sÕ   é € ð* !ˆØ—‘ˆà ×3Ñ3ÐÙ˜t›9ÐãˆGØ�w—|‘|Ô#¨G¯O¯O¨OØ)0Ñ&� QßØ,0¯N©N¸4Ó,@Ñ)�E TßÙ™s 5Ó8Ô9ß‘xÙ'9Ø °ô(˜÷ -Ø(×/Ñ/Ð0@ÔAØ*Ò*ØŸ
™
žñ ñ �w–ñ!  ÷" Ù$ T¸ÔHÔHñ ùs   ‚A
C-ÁC-Á/C-ÂAC-ÃC-c                ód   <€ V ^8„  d   QhRS[ R,          RS[RS[S[,          RS[RS[ R,          /# )r;   rt   r8   rš   rL   r›   r<   ©r
   r=   r   r   rR   )r>   r?   s   "€r6   r@   rA   b  sI   ø€ ÷ *ñ *á�9�oð*ñ ð*ñ ™�ð	*ñ
 ð*ñ 
ˆi�ñ*r5   c                ó¸  € \        R V 4       4      pWR8  d4   V'       d    W! RW%,
          ,          V4      .,           pV# VR,          p V# WR8”  d€   . pVP                  p^ pV Ff  pVP                  p	WY,           V8  g   VP                  '       d   V! V4       WY,          pK@  Vw  r«p\	        W¢V,
          4      p
V! V ! W«4      4        V# 	   V# VR,          pV# )aÏ  Adjust a line to a given width (cropping or padding as required).

Args:
    segments (Iterable[Segment]): A list of segments in a single line.
    length (int): The desired width of the line.
    style (Style, optional): The style of padding if used (space on the end). Defaults to None.
    pad (bool, optional): Pad lines with spaces if they are shorter than `length`. Defaults to True.

Returns:
    List[Segment]: A line of segments with the desired length.
c              3   ó8   "  € T F  qP                   x € K  	  R # 5irK   )rG   )r{   r[   s   & r6   r}   Ú-Segment.adjust_line_length.<locals>.<genexpr>t  s   é € ÐB¹T°'×-Ö-»Tùs   ‚ra   ºNNN)Úsumr�   rG   rF   r   )rd   rt   rš   rL   r›   Úline_lengthr’   r�   r[   Úsegment_lengthrD   r¡   r�   s   &&&&&        r6   rž   ÚSegment.adjust_line_lengtha  sí   € ô& ÑB¹TÓBÓBˆð ÔßØ 3 s¨fÕ.BÕ'CÀUÓ#KÐ"LÕL�ð& ˆð#   �7‘ð" ˆð! Ô!ØˆHØ—_‘_ˆFØˆKÛ�Ø!(×!4Ñ!4�ØÕ/°&Ô8¸G¿O¿O¸OÙ˜7”OØÕ1’Kà-4Ñ*�D¨Ü(¨¸Õ/CÓD�DÙ™3˜tÓ3Ô4Øð ˆò  ð ˆð ˜A•wˆHØˆr5   c                ó4   <€ V ^8„  d   QhRS[ R,          RS[/# )r;   rt   r8   r<   )r
   r=   )r>   r?   s   "€r6   r@   rA   �  s#   ø€ ÷ 
Tñ 
T¡4¨	¥?ð 
T±sñ 
Tr5   c                ó:   a€ \         o\        V3R lV 4       4      # )z´Get the length of list of segments.

Args:
    line (List[Segment]): A line encoded as a list of Segments (assumes no '\\n' characters),

Returns:
    int: The length of the line.
c              3   óL   <"  € T F  w  rq3'       d   K  S! V4      x € K  	  R # 5irK   r   )r{   rD   rL   rF   Ú	_cell_lens   &   €r6   r}   Ú*Segment.get_line_length.<locals>.<genexpr>™  s    øé € ÐS¹tÑ'; t°GË7”?‘9˜T—?�?»tùs   ƒ$”$)r   r«   )rd   rt   r²   s   &&@r6   Úget_line_lengthÚSegment.get_line_lengthŽ  s   ø€ ô ˆ	ÜÔS¹tÓSÓSÐSr5   c                óZ   <€ V ^8„  d   QhRS[ S[ R,          ,          RS[S[S[3,          /# )r;   Úlinesr8   r<   )r
   r   r=   )r>   r?   s   "€r6   r@   rA   œ  s,   ø€ ÷ 'ñ '™d¡4¨	¥?Õ3ð '¹¹cÁ3¸h½ñ 'r5   c                ót   a€ V P                   oV'       d   \        V3R lV 4       4      M^ pV\        V4      3# )zÆGet the shape (enclosing rectangle) of a list of lines.

Args:
    lines (List[List[Segment]]): A list of lines (no '\\n' characters).

Returns:
    Tuple[int, int]: Width and height in characters.
c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irK   r   )r{   rt   r´   s   & €r6   r}   Ú$Segment.get_shape.<locals>.<genexpr>¦  s   øé € Ð@¹%°$™¨×-Ð-»%ùs   ƒ)r´   Úmaxrc   )rd   r·   Ú	max_widthr´   s   && @r6   Ú	get_shapeÚSegment.get_shape›  s3   ø€ ð ×-Ñ-ˆßDI”CÔ@¹%Ó@Ô@Èqˆ	Øœ3˜u›:Ð&Ð&r5   c                óš   <€ V ^8„  d   QhRS[ S[ R,          ,          RS[RS[S[,          RS[S[,          RS[RS[ S[ R,          ,          /# )r;   r·   r8   ÚwidthÚheightrL   Ú	new_linesr<   r¦   )r>   r?   s   "€r6   r@   rA   ª  sa   ø€ ÷ !ñ !á‘D˜•OÕ$ð!ñ ð!ñ ™•ð	!ñ
 ™�ð!ñ ð!ñ 
‰d�9�oÕ	ñ!r5   c           	     óh  € T;'       g    \        V4      pV'       d   V ! RV,          R,           V4      .MV ! RV,          V4      .pV P                  pVRV p	V U
u. uF  q¨! W¢VR7      NK  	  up
V	R&   \        V	4      V8  d*   V	P                  V.V\        V	4      ,
          ,          4       V	# u up
i )aÞ  Set the shape of a list of lines (enclosing rectangle).

        Args:
            lines (List[List[Segment]]): A list of lines.
            width (int): Desired width.
            height (int, optional): Desired height or None for no change.
            style (Style, optional): Style of any padding added.
            new_lines (bool, optional): Padded lines should include "
". Defaults to False.

        Returns:
            List[List[Segment]]: New list of lines.
        ra   rs   N)rL   rª   )rc   rž   Úextend)rd   r·   rÀ   rÁ   rL   rÂ   Ú_heightÚblankrž   Úshaped_linesrt   s   &&&&&&     r6   Ú	set_shapeÚSegment.set_shape©  s¼   € ð* ×&Ð&œC ›Jˆ÷ 1:‰S��u•˜tÕ# UÓ+Ñ,ÁÀCÈ%ÅKÐQVÓ@WÐ?Xð 	ð !×3Ñ3ÐØ˜X˜g�ˆáEJó
ÙEJ¸TÐ˜t°%×8ÁUñ
ˆ�Q‰ô ˆ|Ó˜wÔ&Ø×Ñ  ¨7´S¸Ó5FÕ+FÕ GÔHØÐùò
s   ÁB/c                óŽ   <€ V ^8„  d   QhRS[ R,          RS[S[R,          ,          RS[RS[RS[RS[RS[S[R,          ,          /# ©	r;   rd   r8   r·   rÀ   rÁ   rL   rÂ   r<   ©r   r
   r=   r   rR   )r>   r?   s   "€r6   r@   rA   Î  óe   ø€ ÷ ñ Ù�)�_ðá‘D˜•OÕ$ðñ ðñ ð	ñ
 ðñ ðñ 
‰d�9�oÕ	ñr5   c                óÖ   € V\        V4      ,
          pV'       g
   VR,          # VRV pV'       d   V ! RV,          R,           V4      MV ! RV,          V4      pW..V,          ,           pV# )aÚ  Aligns lines to top (adds extra lines to bottom as required).

        Args:
            lines (List[List[Segment]]): A list of lines.
            width (int): Desired width.
            height (int, optional): Desired height or None for no change.
            style (Style): Style of any padding added.
            new_lines (bool, optional): Padded lines should include "
". Defaults to False.

        Returns:
            List[List[Segment]]: New list of lines.
        rª   Nra   rs   ©rc   ©rd   r·   rÀ   rÁ   rL   rÂ   Úextra_linesrÆ   s   &&&&&&  r6   Ú	align_topÚSegment.align_topÍ  sd   € ð* œs 5›zÕ)ˆßØ˜•8ˆOØ�g�v�ˆß2;‘�C˜%•K $Õ&¨Ô.ÁÀSÈ5Å[ÐRWÓAXˆØ˜˜	 KÕ/Õ/ˆØˆr5   c                óŽ   <€ V ^8„  d   QhRS[ R,          RS[S[R,          ,          RS[RS[RS[RS[RS[S[R,          ,          /# rË   rÌ   )r>   r?   s   "€r6   r@   rA   ë  rÍ   r5   c                óØ   € V\        V4      ,
          pV'       g
   VR,          # VRV pV'       d   V ! RV,          R,           V4      MV ! RV,          V4      pV..V,          V,           pV# )aì  Aligns render to bottom (adds extra lines above as required).

        Args:
            lines (List[List[Segment]]): A list of lines.
            width (int): Desired width.
            height (int, optional): Desired height or None for no change.
            style (Style): Style of any padding added. Defaults to None.
            new_lines (bool, optional): Padded lines should include "
". Defaults to False.

        Returns:
            List[List[Segment]]: New list of lines.
        rª   Nra   rs   rÏ   rÐ   s   &&&&&&  r6   Úalign_bottomÚSegment.align_bottomê  sf   € ð* œs 5›zÕ)ˆßØ˜•8ˆOØ�g�v�ˆß2;‘�C˜%•K $Õ&¨Ô.ÁÀSÈ5Å[ÐRWÓAXˆØ��	˜KÕ'¨%Õ/ˆØˆr5   c                óŽ   <€ V ^8„  d   QhRS[ R,          RS[S[R,          ,          RS[RS[RS[RS[RS[S[R,          ,          /# rË   rÌ   )r>   r?   s   "€r6   r@   rA     se   ø€ ÷ ñ Ù�)�_ðá‘D˜•OÕ$ðñ ðñ ð	ñ
 ðñ ðñ 
‰d�9�oÕ	ñr5   c                ó  € V\        V4      ,
          pV'       g
   VR,          # VRV pV'       d   V ! RV,          R,           V4      MV ! RV,          V4      pV^,          pWh,
          p	V..V,          V,           V..V	,          ,           pV# )aæ  Aligns lines to middle (adds extra lines to above and below as required).

        Args:
            lines (List[List[Segment]]): A list of lines.
            width (int): Desired width.
            height (int, optional): Desired height or None for no change.
            style (Style): Style of any padding added.
            new_lines (bool, optional): Padded lines should include "
". Defaults to False.

        Returns:
            List[List[Segment]]: New list of lines.
        rª   Nra   rs   rÏ   )
rd   r·   rÀ   rÁ   rL   rÂ   rÑ   rÆ   Ú	top_linesÚbottom_liness
   &&&&&&    r6   Úalign_middleÚSegment.align_middle  s†   € ð* œs 5›zÕ)ˆßØ˜•8ˆOØ�g�v�ˆß2;‘�C˜%•K $Õ&¨Ô.ÁÀSÈ5Å[ÐRWÓAXˆØ 1Õ$ˆ	Ø"Õ.ˆØ��	˜IÕ%¨Õ-°%°°	¸LÕ0HÕHˆØˆr5   c                óB   <€ V ^8„  d   QhRS[ R,          RS[ R,          /# rŠ   ©r	   )r>   r?   s   "€r6   r@   rA   '  s%   ø€ ÷ ñ ¡¨Õ 3ð ¹ÀÕ8Kñ r5   c              #  óL  "  € \        V4      p \        V4      p\        pT Ff  pTP                  TP                  8X  dC   TP
                  '       g1   T! TP                  TP                  ,           TP                  4      pK`  Tx € TpKh  	  Tx € R#   \         d     R# i ; i5i)a  Simplify an iterable of segments by combining contiguous segments with the same style.

Args:
    segments (Iterable[Segment]): An iterable of segments.

Returns:
    Iterable[Segment]: A possibly smaller iterable of segments that will render the same way.
N)ÚiterÚnextÚStopIterationr8   rL   rF   rD   )rd   rw   Úiter_segmentsÚlast_segmentre   r[   s   &&    r6   ÚsimplifyÚSegment.simplify&  s–   é € ô ˜X›ˆð	Ü Ó.ˆLô ˆÛ$ˆGØ×!Ñ! W§]¡]Ô2¸7¿?¿?¸?Ù'Ø ×%Ñ%¨¯©Õ4°l×6HÑ6Hó ’ð #Ò"Ø&’ñ %ð Ôøô ô 	Úð	üs.   ‚B$�B š7B$ÁA B$ÂB!ÂB$Â B!Â!B$c                óB   <€ V ^8„  d   QhRS[ R,          RS[ R,          /# rŠ   rß   )r>   r?   s   "€r6   r@   rA   B  s)   ø€ ÷ Lñ L¡8¨IÕ#6ð L¹8ÀIÕ;Nñ Lr5   c              #  ó¼   "  € V FQ  pVP                   '       g   VP                  f   Vx € K)  Vw  r4pT ! Y4'       d   VP                  R4      MR4      x € KS  	  R# 5i)zžRemove all links from an iterable of styles.

Args:
    segments (Iterable[Segment]): An iterable segments.

Yields:
    Segment: Segments with link removed.
N)rF   rL   Úupdate_link)rd   rw   r[   rD   rL   Ú_controls   &&    r6   Ústrip_linksÚSegment.strip_linksA  sN   é € ó  ˆGØ��ˆ '§-¡-Ò"7Ø”à(/Ñ%�˜XÙ˜$¾5 × 1Ñ 1°$Ô 7ÀdÓKÔKó  ùs   ‚AAc                óB   <€ V ^8„  d   QhRS[ R,          RS[ R,          /# rŠ   rß   )r>   r?   s   "€r6   r@   rA   S  s%   ø€ ÷ 
+ñ 
+¡H¨YÕ$7ð 
+¹HÀYÕ<Oñ 
+r5   c              #  ó>   "  € V F  w  r#pV ! VRV4      x € K  	  R# 5i)z¬Remove all styles from an iterable of segments.

Args:
    segments (Iterable[Segment]): An iterable segments.

Yields:
    Segment: Segments with styles replace with None
Nr   )rd   rw   rD   rE   rF   s   &&   r6   Ústrip_stylesÚSegment.strip_stylesR  s%   é € ó &.Ñ!ˆD˜'Ù�d˜D 'Ó*Ô*ó &.ùs   ‚c                óB   <€ V ^8„  d   QhRS[ R,          RS[ R,          /# rŠ   rß   )r>   r?   s   "€r6   r@   rA   `  s%   ø€ ÷ /ñ /¡H¨YÕ$7ð /¹HÀYÕ<Oñ /r5   c              #  ó¶   "  € / pV FL  w  r4pV'       d3   VP                  V4      pVf   VP                  pWbV&   V ! W6V4      x € K@  V ! VRV4      x € KN  	  R# 5i)z£Remove all color from an iterable of segments.

Args:
    segments (Iterable[Segment]): An iterable segments.

Yields:
    Segment: Segments with colorless style.
N)ÚgetÚwithout_color)rd   rw   ÚcacherD   rL   rF   Úcolorless_styles   &&     r6   Úremove_colorÚSegment.remove_color_  s`   é € ð %'ˆÛ$,Ñ ˆD˜ßØ"'§)¡)¨EÓ"2�Ø"Ò*Ø&+×&9Ñ&9�OØ#2˜%‘LÙ˜$°Ó9Ô9á˜$  gÓ.Ô.ó %-ùs   ‚AAc                óh   <€ V ^8„  d   QhRS[ R,          RS[ S[,          RS[ S[R,          ,          /# )r;   rw   r8   Úcutsr<   )r	   r=   r
   )r>   r?   s   "€r6   r@   rA   v  s<   ø€ ÷ Bñ BÙ 	Õ*ðBÙ2:¹3µ-ðBá	‘$�y•/Õ	"ñBr5   c              #  ó°  "  € . pVP                   p\        V4      p \        VR4      pVR8X  d   R# V^ 8w  d   M. x € K$  ^ pVP                  pVP                  p	\
        p
V Få  pVw  rÍpV'       g   K  V'       d   TMWz! V4      ,           pWö8  d   V! V4       TpK<  Wö8X  dD   V! V4       V	! 4       x € V! 4        Tp\        VR4      pVR8X  d   V'       d
   V	! 4       x €  R# K…  VP                  Wg,
          4      w  ppVw  rÍpV! V4       V	! 4       x € V! 4        Tp\        VR4      pVR8X  g   KË  V'       d
   V	! 4       x €  R# 	  V	! 4       x € R# 5i)zºDivides an iterable of segments in to portions.

Args:
    cuts (Iterable[int]): Cell positions where to divide.

Yields:
    [Iterable[List[Segment]]]: An iterable of Segments in List.
Nrb   )r�   rá   râ   rŸ   Úcopyr   ro   )rd   rw   rû   Úsplit_segmentsÚadd_segmentÚ	iter_cutsr\   rg   Úsegments_clearÚsegments_copyr²   r[   rD   rE   rF   Úend_posrh   s   &&&              r6   ÚdivideÚSegment.divideu  sV  é € ð +-ˆØ$×+Ñ+ˆä˜“Jˆ	àÜ�y "Ó%ˆCØ�bŒyÙØ�aŒxØØŒHØˆà'×-Ñ-ˆØ&×+Ñ+ˆä#ˆ	ÛˆGØ$+Ñ!ˆD˜'ß‘$ß!(™#¨c°I¸d³OÕ.C�Ø”=Ù Ô(Ø!�CÙà”>Ù Ô(Ù'›/Ò)Ù"Ô$Ø!�Cä˜y¨"Ó-�CØ˜b”yß)Ù"/£/Ò1Úáð '.×&9Ñ&9¸#½)Ó&D‘O�F˜GØ,3Ñ)�D 'Ù Ô'Ù'›/Ò)Ù"Ô$Ø�Cä˜9 bÓ)�Ø˜"–9ß%Ù+›oÒ-ÚñG  ñJ ‹oÔùs&   ‚A-EÁ4EÁ<AEÃAEÄ5EÄ=Ec                ón   <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   S[S[S[,          ,          ;R&   # )r;   rD   rL   rF   )Ústrr   r   r   ÚControlCode)r>   r?   s   "€r6   r@   rA   <   s9   ø‡ ‚ ñ �Iñ ñ ‘E�?Ñ!ñ ñ  ‘h™{Õ+Õ,Ñ3ò! r5   r   i @  )NN©F)NTT)NT)NNF)%r   r    r!   r"   r#   rL   rF   ÚpropertyrG   rN   rT   rX   Úclassmethodr   rk   ro   rt   r‚   r‡   r“   r—   r£   rž   r´   r½   rÈ   rÒ   rÖ   rÜ   ræ   rì   rð   rø   r  Ú__annotate_func__r4   Ú__classdictcell__©r?   s   @r6   r8   r8   <   s$  ø‡ € ñ
ð "€EØ/3€Gà÷0ó ð0÷ð ÷ð ð ÷(ó ð(ð ÙˆyÓ÷-ó ó ð-÷^,ð ,ð4 ÷ó ðð ÷&ñ &ó ð&ðP ÷@ñ @ó ð@ð$ ÷ó ðð8 ÷ ó ð ð< ÷,Iñ ,Ió ð,Ið\ ÷*ñ *ó ð*ðX ÷
Tó ð
Tð ÷'ó ð'ð ÷!ñ !ó ð!ðF ÷ñ ó ðð8 ÷ñ ó ðð8 ÷ñ ó ðð< ÷ó ðð4 ÷Ló ðLð  ÷
+ó ð
+ð ÷/ó ð/ð* ÷Bó ðB÷u ƒ r5   r8   c                   óL   a € ] tR tRt o RtR	V 3R lR lltV 3R lR ltRtV tR# )
ÚSegmentsi»  a)  A simple renderable to render an iterable of segments. This class may be useful if
you want to print segments outside of a __rich_console__ method.

Args:
    segments (Iterable[Segment]): An iterable of segments.
    new_lines (bool, optional): Add new lines between segments. Defaults to False.
c                ó:   <€ V ^8„  d   QhRS[ S[,          RS[RR/# )r;   rw   rÂ   r<   N)r	   r8   rR   )r>   r?   s   "€r6   r@   ÚSegments.__annotate__Ä  s(   ø€ ÷ #ñ #¡©'Õ!2ð #¹tð #ÐPTñ #r5   c                ó2   € \        V4      V n        W n        R # rK   )Úlistrw   rÂ   )rC   rw   rÂ   s   &&&r6   Ú__init__ÚSegments.__init__Ä  s   € Ü˜X›ˆŒØ"Žr5   c                ó&   <€ V ^8„  d   QhRRRRRR/# ©r;   Úconsoler   Úoptionsr   r<   r   r   )r>   r?   s   "€r6   r@   r  È  s%   ø€ ÷ 	%ñ 	%Ø ð	%Ø+;ð	%à	ñ	%r5   c              #  óÀ   "  € V P                   '       d2   \        P                  4       pV P                   F  pVx € Vx € K  	  R # V P                   R j  x€L
  R #  L5irK   )rÂ   r8   rt   rw   )rC   r  r  rt   r[   s   &&&  r6   Ú__rich_console__ÚSegments.__rich_console__È  sB   é € ð �>�>ˆ>Ü—<‘<“>ˆDØŸ=œ=�Ø’Ø”
ó )ð —}‘}×$Ô$ùs   ‚AAÁAÁA)rÂ   rw   Nr	  )	r   r    r!   r"   r#   r  r  r4   r  r  s   @r6   r  r  »  s   ø‡ € ñ÷#ò #÷	%ö 	%r5   r  c                   óH   a € ] tR tRt o RV 3R lR lltV 3R lR ltRtV tR# )	ÚSegmentLinesiÔ  c                óJ   <€ V ^8„  d   QhRS[ S[S[,          ,          RS[RR/# )r;   r·   rÂ   r<   N)r	   r
   r8   rR   )r>   r?   s   "€r6   r@   ÚSegmentLines.__annotate__Õ  s,   ø€ ÷ 	#ñ 	#™h¡t©G¥}Õ5ð 	#Á$ð 	#ÐSWñ 	#r5   c                ó2   € \        V4      V n        W n        R# )a  A simple renderable containing a number of lines of segments. May be used as an intermediate
in rendering process.

Args:
    lines (Iterable[List[Segment]]): Lists of segments forming lines.
    new_lines (bool, optional): Insert new lines after each line. Defaults to False.
N)r  r·   rÂ   )rC   r·   rÂ   s   &&&r6   r  ÚSegmentLines.__init__Õ  s   € ô ˜%“[ˆŒ
Ø"Žr5   c                ó&   <€ V ^8„  d   QhRRRRRR/# r  r   )r>   r?   s   "€r6   r@   r!  à  s%   ø€ ÷ 
 ñ 
 Ø ð
 Ø+;ð
 à	ñ
 r5   c              #  óâ   "  € V P                   '       d8   \        P                  4       pV P                   F  pT R j  x€L
  Vx € K  	  R # V P                   F  pT R j  x€L
  K  	  R #  L- L5irK   )rÂ   r8   rt   r·   )rC   r  r  r’   rt   s   &&&  r6   r  ÚSegmentLines.__rich_console__à  sV   é € ð �>�>ˆ>Ü—|‘|“~ˆHØŸ
œ
�Ø—�Ø”ó #ð Ÿ
œ
�Ø—’ó #ñ  ñ  ùs!   ‚;A/½A+¾"A/Á A-Á!A/Á-A/)r·   rÂ   Nr	  )r   r    r!   r"   r  r  r4   r  r  s   @r6   r  r  Ô  s   ø‡ € ÷	#ò 	#÷
 ö 
 r5   r  Ú__main__)r   )ÚSyntax)ÚTextz‚from rich.console import Console
console = Console()
text = Text.from_markup("Hello, [bold magenta]World[/]!")
console.print(text)zHello, [bold magenta]World[/]!zrich.Segmentz]A Segment is the last step in the Rich render process before generating text with ANSI codes.z
Consider the following code:
ÚpythonT)Úline_numberszRWhen you call [b]print()[/b], Rich [i]renders[/i] the object in to the following:
zAThe Segments are then processed to produce the following output:
zS
You will only need to know this if you are implementing your own Rich renderables.N)7Úenumr   Ú	functoolsr   Ú	itertoolsr   Úoperatorr   Útypingr   r   r	   r
   r   r   r   r   r   r   Úcellsr   r   r   r   r   Úreprr   r   rL   r   r  r   r   r   r   r=   r  r  r8   r  r  r   Úrich.consoleÚrich.syntaxr(  Ú	rich.textr)  ÚcodeÚfrom_markuprD   ÚruleÚprintr  ÚrenderÚ	fragmentsr   r5   r6   Ú<module>r<     s›  ðÝ Ý Ý !Ý ÷÷ ÷ ÷õ ÷ $Ý çß>Ñ>ô�'ô ð* Ø	ˆ+ÕØ	ˆ+�u˜S #˜X•Ð
&Õ'Ø	ˆ+�s˜CÐ
Õ ð"õ€ñ ƒô{	ˆjó {	ó ð{	÷|%ñ %÷2 ñ  ð2 ˆzÕÝ$Ý"Ýð€Dð
 ×ÒÐ<Ó=€Dá‹i€Gà‡L�L�Ô Ø‡M�MØgôð ‡M�MÐ4Ô5Ø‡M�M‘&˜˜x°dÔ;Ô<Ø‡M�M„OØ‡M�MØ]ôñ �W—^‘^ DÓ)Ó*€IØ‡M�M�)ÔØ‡M�M„OØ‡M�MÐVÔWØ‡M�M�$ÔØ‡M�MØ^öñ; r5   