ó
    EñiŒd  ã                   ór  • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJrJrJrJrJr  SSKJrJrJrJrJr  SSKJrJr  SS	KJr  \	(       a
  SS
KJrJ r J!r!   " S S\5      r"\\\"   \\"\\#\$4   4   \\"\#\#4   4   r%\" 5        " S S\5      5       r& " S S5      r' " S S5      r(\)S:X  Ga  S SK*Jr  S SK+J,r,  S SK-J.r.  Sr/\.R`                  " S5      r1\" 5       r\Re                  S5        \Rg                  S5        \Rg                  S5        \Rg                  \," \/SSS95        \Rg                  5         \Rg                  S5        \4" \Rk                  \15      5      r6\Rg                  \65        \Rg                  5         \Rg                  S 5        \Rg                  \15        \Rg                  S!5        g"g")#é    )Ú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                   óX   • \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrg)ÚControlTypeé    zDNon-printable control codes which typically translate to ANSI codes.r   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   © 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/   ó    ÚI/home/mande/repo/quber/.venv/lib/python3.13/site-packages/rich/segment.pyr   r       sY   † ÙNà€DØ€OØ€DØ€EØ€KØ€KØÐØÐØ€IØ€KØ€NØ€OØÐØ€NØ€MØÓrF   r   c                   óô  • \ rS rSr% Sr\\S'   Sr\\	   \S'   Sr
\\\      \S'   \S\4S j5       rS\4S	 jrS\4S
 jr\S\4S j5       r\\" S5      SS S\S\S   4S j5       5       rS\S\S   4S jr\S2S j5       r\  S3S\S    S\\	   S\\	   S\S    4S jj5       r\ S4S\S    S\S\S    4S jj5       r\S\S    S\\S       4S j5       r\S\S    S\\\S    \4      4S j5       r \   S5S\S    S\S\\	   S\S\S\\S       4S jj5       r!\  S6S\S    S\S\\	   S\S\S    4
S jj5       r"\S\S    S\4S  j5       r#\S!\\S       S\\\4   4S" j5       r$\   S7S!\\S       S#\S$\\   S\\	   S%\S\\S       4S& jj5       r%\ S4S'\&S    S!\\S       S#\S$\S\	S%\S\\S       4S( jj5       r'\ S4S'\&S    S!\\S       S#\S$\S\	S%\S\\S       4S) jj5       r(\ S4S'\&S    S!\\S       S#\S$\S\	S%\S\\S       4S* jj5       r)\S\S    S\S    4S+ j5       r*\S\S    S\S    4S, j5       r+\S\S    S\S    4S- j5       r,\S\S    S\S    4S. j5       r-\S\S    S/\\   S\\S       4S0 j5       r.S1r/g)8ÚSegmenté<   a¼  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.
ÚtextNÚstyleÚcontrolÚreturnc                 ó4   • U u  pnU(       a  S$ [        U5      $ )zbThe number of terminal cells required to display self.text.

Returns:
    int: A number of cells.
r   )r   )ÚselfrK   Ú_stylerM   s       rG   Úcell_lengthÚSegment.cell_lengthN   s   € ð !%Ñˆ�gÞˆqÐ/¤¨$£Ð/rF   c              #   ó´   #   • U R                   v •  U R                  c  U R                  b  U R                  v •  g g U R                  v •  U R                  v •  g 7f©N)rK   rM   rL   ©rP   s    rG   Ú__rich_repr__ÚSegment.__rich_repr__X   sG   é € Ø�i‰iŠØ�<‰<ÑØ�z‰zÑ%Ø—j‘jÓ ð &ð —*‘*ÒØ—,‘,Óùó   ‚AAc                 ó,   • [        U R                  5      $ )z#Check if the segment contains text.)ÚboolrK   rV   s    rG   Ú__bool__ÚSegment.__bool__a   s   € ä�D—I‘I‹ÐrF   c                 ó   • U R                   SL$ )z,Check if the segment contains control codes.N)rM   rV   s    rG   Ú
is_controlÚSegment.is_controle   s   € ð �|‰| 4Ð'Ð'rF   i @  ÚsegmentÚcut)rI   rI   c                 óæ  • Uu  p4n[         nUR                  nX':¼  a
  X" SXE5      4$ [        n[        X'-  [	        U5      -  5      n	 USU	 n
[        U
5      nX²-
  nU(       d  U" X¤U5      U" X9S XE5      4$ US:X  a.  U" X9   5      S:X  a   U" USU	 S-   XE5      U" SX9S-   S -   XE5      4$ US:X  a1  U" X9S-
     5      S:X  a   U" USU	S-
   S-   XE5      U" SX9S -   XE5      4$ X²:  a  U	S-  n	OU	S-  n	M¬  )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éÿÿÿÿr    Ú r   )rI   rR   r   ÚintÚlenr   )Úclsra   rb   rK   rL   rM   Ú_SegmentrR   Ú	cell_sizeÚposÚbeforeÚcell_posÚout_bys                rG   Ú_split_cellsÚSegment._split_cellsj   sQ  € ð  'Ñˆ�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‘�ñ- rF   c                 óÒ   • U u  p#nUS:¼  d   e[        U5      (       a:  U[        U5      :¼  a  U [        SX45      4$ [        USU X45      [        X!S X45      4$ U R                  X5      $ )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   rd   N)r   rh   rI   rp   )rP   rb   rK   rL   rM   s        rG   Úsplit_cellsÚSegment.split_cells›   s}   € ð  $Ñˆ�WØ�a‹xˆˆxä! $×'Ñ'à”c˜$“iÓØœW R¨Ó8Ð8Ð8ä˜˜T˜c˜
 EÓ3Ü˜˜T˜
 EÓ3ðð ð
 × Ñ  Ó+Ð+rF   c                 ó   • U " S5      $ )zMake a new line segment.Ú
r/   )ri   s    rG   ÚlineÚSegment.lineµ   s   € ñ �4‹yÐrF   ÚsegmentsÚ
post_stylec                 óx   ^ ^^• UnU(       a  UR                   mUU 4S jU 5       nT(       a  U U4S jU 5       nU$ )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   óZ   >#   • U  H   u  pnT" X(       a  S OT" U5      U5      v •  M"     g 7frU   r/   )Ú.0rK   rQ   rM   Úapplyri   s       €€rG   Ú	<genexpr>Ú&Segment.apply_style.<locals>.<genexpr>Ð   s1   øé € ð â-<Ñ)�D 'ñ �D¥'™$©u°V«}¸g×FÐFÚ-<ùs   ƒ(+c              3   óh   >#   • U  H'  u  pnT" UU(       a  S OU(       a  UT-   OTU5      v •  M)     g 7frU   r/   )r}   rK   rQ   rM   ri   rz   s       €€rG   r   r€   Õ   sG   øé € ð ò .=Ñ)�D 'ñ Øö #ñ æ5;˜f zÒ1Àà÷ð ò .=ùs   ƒ/2)Ú__add__)ri   ry   rL   rz   Úresult_segmentsr~   s   `  ` @rG   Úapply_styleÚSegment.apply_styleº   sC   ú€ ð& #ˆÞØ—M‘MˆEõá-<óˆOö õñ .=óˆOð ÐrF   r_   c                 ód   • U(       a  [        [        S5      U5      $ [        [        S5      U5      $ )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.

rM   )Úfilterr   r   )ri   ry   r_   s      rG   Úfilter_controlÚSegment.filter_controlã   s+   € ö Üœ* YÓ/°Ó:Ð:äœz¨)Ó4°hÓ?Ð?rF   c              #   óZ  #   • / nUR                   nU H‡  nSUR                  ;   al  UR                  (       d[  Uu  pVnU(       aM  UR                  S5      u  p‰nU(       a  U" U " X†5      5        U	(       a  Uv •  / nUR                   nU(       a  MK  M}  M  U" U5        M‰     U(       a  Uv •  gg7f)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.
rv   N©ÚappendrK   rM   Ú	partition©
ri   ry   rw   rŒ   ra   rK   rL   Ú_Ú_textÚnew_lines
             rG   Úsplit_linesÚSegment.split_linesö   s•   é € ð !ˆØ—‘ˆãˆGØ�w—|‘|Ó#¨G¯O¯OØ!(‘�˜QÞØ,0¯N©N¸4Ó,@Ñ)�E TÞÙ™s 5Ó0Ô1ÞØ"š
Ø!˜Ø!%§¡˜÷ ”dñ �w–ñ  ö Ø‹Jð ùs   ‚B
B+ÂB+c              #   ób  #   • / nUR                   nU H‰  nSUR                  ;   an  UR                  (       d]  Uu  pVnU(       aO  UR                  S5      u  p‰nU(       a  U" U " X†5      5        U	(       a  US4v •  / nUR                   nU(       a  MM  M  M�  U" U5        M‹     U(       a  US4v •  gg7f)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.
rv   TFNr‹   rŽ   s
             rG   Úsplit_lines_terminatorÚSegment.split_lines_terminator  sŸ   é € ð !ˆØ—‘ˆãˆGØ�w—|‘|Ó#¨G¯O¯OØ!(‘�˜QÞØ,0¯N©N¸4Ó,@Ñ)�E TÞÙ™s 5Ó0Ô1ÞØ# T˜lÒ*Ø!˜Ø!%§¡˜÷ ”dñ �w–ñ  ö Ø˜�-Óð ùs   ‚BB/ÂB/ÚlengthÚpadÚinclude_new_linesc              #   óÎ  #   • / nUR                   nU R                  nU " S5      n	U H¨  n
SU
R                  ;   a�  U
R                  (       d|  U
u  p¼nU(       an  UR	                  S5      u  pïnU(       a  U" U " Xì5      5        U(       a3  U" XbX4S9nU(       a  UR                  U	5        Uv •  UR                  5         U(       a  Ml  Mž  M   U" U
5        Mª     U(       a
  U" XbX4S9v •  gg7f)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.
rv   )rL   r˜   N)rŒ   Úadjust_line_lengthrK   rM   r�   Úclear)ri   ry   r—   rL   r˜   r™   rw   rŒ   r›   Únew_line_segmentra   rK   Úsegment_styler�   r�   r‘   Úcropped_lines                    rG   Úsplit_and_crop_linesÚSegment.split_and_crop_lines2  sÓ   é € ð* !ˆØ—‘ˆà ×3Ñ3ÐÙ˜t›9ÐãˆGØ�w—|‘|Ó#¨G¯O¯OØ)0Ñ&� QÞØ,0¯N©N¸4Ó,@Ñ)�E TÞÙ™s 5Ó8Ô9ÞÙ'9Ø °ñ(˜ö -Ø(×/Ñ/Ð0@ÔAØ*Ò*ØŸ
™
œ÷ ”dñ �w–ñ!  ö" Ù$ T¸ÑHÓHð ùs   ‚B?C%Ã"C%rw   c                 ón  • [        S U 5       5      nXR:  a"  U(       a  X" SX%-
  -  U5      /-   nU$ USS n U$ XR:”  aq  / nUR                  nSnU HX  nUR                  n	XY-   U:  d  UR                  (       a  U" U5        XY-  nM6  Uu  p«n[	        X¢U-
  5      n
U" U " X«5      5          U$     U$ USS nU$ )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   #   • U  H  oR                   v •  M     g 7frU   )rR   )r}   ra   s     rG   r   Ú-Segment.adjust_line_length.<locals>.<genexpr>t  s   é € ÐBºT°'×-Ö-ºTùs   ‚rf   Nr   )ÚsumrŒ   rR   rM   r   )ri   rw   r—   rL   r˜   Úline_lengthr‘   rŒ   ra   Úsegment_lengthrK   rž   r�   s                rG   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Ù˜7”OØÑ1’Kà-4Ñ*�D¨Ü(¨¸Ñ/CÓD�DÙ™3˜tÓ3Ô4Øð ˆò  ð ˆð ™A�wˆHØˆrF   c                 ó:   ^• [         m[        U4S jU 5       5      $ )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   óJ   >#   • U  H  u  po3(       a  M  T" U5      v •  M     g 7frU   r/   )r}   rK   rL   rM   Ú	_cell_lens       €rG   r   Ú*Segment.get_line_length.<locals>.<genexpr>™  s    øé € ÐSºtÑ'; t°GË7“?‘9˜T—?�?ºtùs   ƒ#”#)r   r¥   )ri   rw   r«   s     @rG   Úget_line_lengthÚSegment.get_line_lengthŽ  s   ø€ ô ˆ	ÜÔS¹tÓSÓSÐSrF   Úlinesc                 ór   ^• U R                   mU(       a  [        U4S jU 5       5      OSnU[        U5      4$ )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   >#   • U  H  nT" U5      v •  M     g 7frU   r/   )r}   rw   r­   s     €rG   r   Ú$Segment.get_shape.<locals>.<genexpr>¦  s   øé € Ð@º%°$™¨×-Ð-º%ùs   ƒr   )r­   Úmaxrh   )ri   r¯   Ú	max_widthr­   s      @rG   Ú	get_shapeÚSegment.get_shape›  s3   ø€ ð ×-Ñ-ˆÞDI”CÔ@¹%Ó@Ô@Èqˆ	Øœ3˜u›:Ð&Ð&rF   ÚwidthÚheightÚ	new_linesc           	      ó6  • U=(       d    [        U5      nU(       a  U " SU-  S-   U5      /OU " SU-  U5      /nU R                  nUSU n	U V
s/ s H	  o¨" X¢US9PM     sn
U	SS& [        U	5      U:  a!  U	R                  U/U[        U	5      -
  -  5        U	$ s  sn
f )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.
        rf   rv   N)rL   )rh   r›   Úextend)ri   r¯   r·   r¸   rL   r¹   Ú_heightÚblankr›   Úshaped_linesrw   s              rG   Ú	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ri   c                 óš   • U[        U5      -
  nU(       d  USS $ USU nU(       a  U " SU-  S-   U5      OU " SU-  U5      nX//U-  -   nU$ )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.
        Nrf   rv   ©rh   ©ri   r¯   r·   r¸   rL   r¹   Úextra_linesr½   s           rG   Ú	align_topÚSegment.align_topÍ  sd   € ð* œs 5›zÑ)ˆÞØ™�8ˆOØ�g�v�ˆÞ2;‘�C˜%‘K $Ñ&¨Ô.ÁÀSÈ5Á[ÐRWÓAXˆØ˜˜	 KÑ/Ñ/ˆØˆrF   c                 óœ   • U[        U5      -
  nU(       d  USS $ USU nU(       a  U " SU-  S-   U5      OU " SU-  U5      nU//U-  U-   nU$ )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.
        Nrf   rv   rÂ   rÃ   s           rG   Úalign_bottomÚSegment.align_bottomê  sf   € ð* œs 5›zÑ)ˆÞØ™�8ˆOØ�g�v�ˆÞ2;‘�C˜%‘K $Ñ&¨Ô.ÁÀSÈ5Á[ÐRWÓAXˆØ��	˜KÑ'¨%Ñ/ˆØˆrF   c                 ó¾   • U[        U5      -
  nU(       d  USS $ USU nU(       a  U " SU-  S-   U5      OU " SU-  U5      nUS-  nXh-
  n	U//U-  U-   U//U	-  -   nU$ )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.
        Nrf   rv   r    rÂ   )
ri   r¯   r·   r¸   rL   r¹   rÄ   r½   Ú	top_linesÚbottom_liness
             rG   Ú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ˆØˆrF   c              #   ó:  #   • [        U5      n [        U5      n[        nU H`  nUR                  UR                  :X  a=  UR
                  (       d,  U" UR                  UR                  -   UR                  5      nMZ  Uv •  UnMb     Uv •  g! [         a     gf = f7f)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ÚStopIterationrI   rL   rM   rK   )ri   ry   Úiter_segmentsÚlast_segmentrj   ra   s         rG   ÚsimplifyÚSegment.simplify&  s”   é € ô ˜X›ˆð	Ü Ó.ˆLô ˆÛ$ˆGØ×!Ñ! W§]¡]Ó2¸7¿?¿?Ù'Ø ×%Ñ%¨¯©Ñ4°l×6HÑ6Hó ’ð #Ò"Ø&’ñ %ð Óøô ó 	Ùð	üs(   ‚B�B šA1BÂ
BÂBÂBÂBc              #   ó´   #   • U HN  nUR                   (       d  UR                  c  Uv •  M'  Uu  p4nU " X4(       a  UR                  S5      OS5      v •  MP     g7f)zžRemove all links from an iterable of styles.

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

Yields:
    Segment: Segments with link removed.
N)rM   rL   Úupdate_link)ri   ry   ra   rK   rL   Ú_controls         rG   Ústrip_linksÚSegment.strip_linksA  sL   é € ó  ˆGØ�� '§-¡-Ñ"7Ø”à(/Ñ%�˜XÙ˜$½5 × 1Ñ 1°$Ô 7ÀdÓKÔKò  ùrY   c              #   ó<   #   • U H  u  p#nU " USU5      v •  M     g7f)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/   )ri   ry   rK   rQ   rM   s        rG   Ústrip_stylesÚSegment.strip_stylesR  s%   é € ó &.Ñ!ˆD˜'Ù�d˜D 'Ó*Ô*ò &.ùs   ‚c              #   ó°   #   • 0 nU HJ  u  p4nU(       a1  UR                  U5      nUc  UR                  nXbU'   U " X6U5      v •  M>  U " USU5      v •  ML     g7f)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)ri   ry   ÚcacherK   rL   rM   Úcolorless_styles          rG   Úremove_colorÚSegment.remove_color_  s`   é € ð %'ˆÛ$,Ñ ˆD˜ÞØ"'§)¡)¨EÓ"2�Ø"Ñ*Ø&+×&9Ñ&9�OØ#2˜%‘LÙ˜$°Ó9Ô9á˜$  gÓ.Ô.ò %-ùs   ‚AAÚcutsc              #   ó–  #   • / nUR                   n[        U5      n [        US5      nUS:X  a  gUS:w  a  O/ v •  M   SnUR                  nUR                  n	[
        n
U HÜ  nUu  pÍnU(       d  M  U(       a  UO	Xz" U5      -   nXö:  a  U" U5        UnM5  Xö:X  a@  U" U5        U	" 5       v •  U" 5         Un[        US5      nUS:X  a  U(       a	  U	" 5       v •    gMz  UR                  Xg-
  5      u  nnUu  pÍnU" U5        U	" 5       v •  U" 5         Un[        US5      nUS:X  a  U(       a	  U	" 5       v •    gU(       a  MË  MÞ     U	" 5       v •  g7f)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.
re   Nr   )rŒ   rÐ   rÑ   rœ   Úcopyr   rs   )ri   ry   ræ   Úsplit_segmentsÚadd_segmentÚ	iter_cutsrb   rl   Úsegments_clearÚsegments_copyr«   ra   rK   rQ   rM   Úend_posrm   s                    rG   ÚdivideÚSegment.divideu  sd  é € ð +-ˆØ$×+Ñ+ˆä˜“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Ò-Ù÷C ’$ñ  ñJ ‹oÓùs   ‚A*E	Á0C	E	Ä;E	r/   )rN   rI   )NN©F)NTT)NT)NNF)0r0   r1   r2   r3   r4   ÚstrÚ__annotations__rL   r   r   rM   r   ÚControlCodeÚpropertyrg   rR   r   rW   r[   r\   r_   Úclassmethodr   r   rp   rs   rw   r	   r„   rˆ   r
   r’   r•   r    r›   r­   rµ   r¿   r   rÅ   rÈ   rÍ   rÕ   rÚ   rÝ   rä   rï   rE   r/   rF   rG   rI   rI   <   sÍ  ‡ ñ
ð ƒIØ!€Eˆ8�E‰?Ó!Ø/3€GˆX�h˜{Ñ+Ñ,Ó3àð0˜Só 0ó ð0ð˜vô ð˜$ô ð ð(˜Dó (ó ð(ð ÙˆyÓð- 9ð -°3ð -¸5ÐAUÑ;Vó -ó ó ð-ð^,˜sð , uÐ-AÑ'Bô ,ð4 óó ðð ð "&Ø&*ñ	&à˜9Ñ%ð&ð ˜‰ð&ð ˜U‘Oð	&ð
 
�)Ñ	ô&ó ð&ðP à?Dñ@Ø 	Ñ*ð@Ø8<ð@à	�)Ñ	ô@ó ð@ð$ ð 8¨IÑ#6ð ¸8ÀDÈÁOÑ;Tó ó ðð8 ð Ø 	Ñ*ð à	�%˜˜Y™¨Ð-Ñ.Ñ	/ó ó ð ð< ð
 "&ØØ"&ñ,Ià˜9Ñ%ð,Ið ð,Ið ˜‰ð	,Ið
 ð,Ið  ð,Ið 
�$�y‘/Ñ	"ô,Ió ð,Ið\ ð
 "&Øñ*à�9‰oð*ð ð*ð ˜‰ð	*ð
 ð*ð 
ˆi‰ô*ó ð*ðX ð
T 4¨	¡?ð 
T°só 
Tó ð
Tð ð'˜d 4¨	¡?Ñ3ð '¸¸cÀ3¸h¹ó 'ó ð'ð ð
 !%Ø!%Øñ!à�D˜‘OÑ$ð!ð ð!ð ˜‘ð	!ð
 ˜‰ð!ð ð!ð 
ˆd�9‰oÑ	ô!ó ð!ðF ð  ñØ�)‰_ðà�D˜‘OÑ$ðð ðð ð	ð
 ðð ðð 
ˆd�9‰oÑ	ôó ðð8 ð  ñØ�)‰_ðà�D˜‘OÑ$ðð ðð ð	ð
 ðð ðð 
ˆd�9‰oÑ	ôó ðð8 ð  ñØ�)‰_ðà�D˜‘OÑ$ðð ðð ð	ð
 ðð ðð 
ˆd�9‰oÑ	ôó ðð< ð ¨Ñ 3ð ¸ÀÑ8Kó ó ðð4 ðL 8¨IÑ#6ð L¸8ÀIÑ;Nó Ló ðLð  ð
+ H¨YÑ$7ð 
+¸HÀYÑ<Oó 
+ó ð
+ð ð/ H¨YÑ$7ð /¸HÀYÑ<Oó /ó ð/ð* ðBØ 	Ñ*ðBØ2:¸3±-ðBà	�$�y‘/Ñ	"óBó óBrF   rI   c                   óN   • \ rS rSrSrS
S\\   S\SS4S jjr      SS jr	S	r
g)Ú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.
ry   r¹   rN   Nc                 ó0   • [        U5      U l        X l        g rU   )Úlistry   r¹   )rP   ry   r¹   s      rG   Ú__init__ÚSegments.__init__Ä  s   € Ü˜X›ˆŒØ"�rF   c              #   óº   #   • U R                   (       a0  [        R                  5       nU R                   H  nUv •  Uv •  M     g U R                   S h  v•N   g  N7frU   )r¹   rI   rw   ry   )rP   ÚconsoleÚoptionsrw   ra   s        rG   Ú__rich_console__ÚSegments.__rich_console__È  s@   é € ð �>�>Ü—<‘<“>ˆDØŸ=œ=�Ø’Ø”
ò )ð —}‘}×$Ó$ùs   ‚AAÁAÁA)r¹   ry   rñ   ©rþ   r   rÿ   r   rN   r   )r0   r1   r2   r3   r4   r	   rI   r[   rû   r   rE   r/   rF   rG   rø   rø   »  sD   † ññ# ¨'Ñ!2ð #¸tð #ÐPTõ #ð	%Ø ð	%Ø+;ð	%à	÷	%rF   rø   c                   óP   • \ rS rSrS	S\\\      S\SS4S jjr      S
S jr	Sr
g)ÚSegmentLinesiÔ  r¯   r¹   rN   Nc                 ó0   • [        U5      U l        X l        g)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¹   )rP   r¯   r¹   s      rG   rû   ÚSegmentLines.__init__Õ  s   € ô ˜%“[ˆŒ
Ø"�rF   c              #   óÜ   #   • U R                   (       a6  [        R                  5       nU R                   H  nU S h  v•N   Uv •  M     g U R                   H  nU S h  v•N   M     g  N+ N7frU   )r¹   rI   rw   r¯   )rP   rþ   rÿ   r‘   rw   s        rG   r   ÚSegmentLines.__rich_console__à  sT   é € ð �>�>Ü—|‘|“~ˆHØŸ
œ
�Ø—�Ø”ò #ð Ÿ
œ
�Ø—’ò #ñ  ñ  ùs!   ‚:A,¼A(½!A,ÁA*Á
A,Á*A,)r¯   r¹   rñ   r  )r0   r1   r2   r3   r	   r
   rI   r[   rû   r   rE   r/   rF   rG   r  r  Ô  sC   † ñ	#˜h t¨G¡}Ñ5ð 	#À$ð 	#ÐSWõ 	#ð
 Ø ð
 Ø+;ð
 à	÷
 rF   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   rg   rò   rô   rI   rø   r  r0   Úrich.consoleÚrich.syntaxr
  Ú	rich.textr  ÚcodeÚfrom_markuprK   ÚruleÚprintrú   ÚrenderÚ	fragmentsr/   rF   rG   Ú<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Ø^õð; rF   