Ë
    èÍ:jŒd  ã                   ól  — 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
mZmZmZmZmZmZmZmZ ddlmZmZmZmZmZ ddlmZmZ dd	lmZ e	r
dd
lmZm Z m!Z!  G d„ de«      Z"eee"   ee"ee#e$f   f   ee"e#e#f   f   Z% e«        G d„ de«      «       Z& G d„ d«      Z' G d„ d«      Z(e)dk(  �rd dl*mZ d dl+m,Z, d dl-m.Z. dZ/ e.j`                  d«      Z1 e«       Zeje                  d«       ejg                  d«       ejg                  d«       ejg                   e,e/dd¬«      «       ejg                  «        ejg                  d«        e4ejk                  e1«      «      Z6ejg                  e6«       ejg                  «        ejg                  d «       ejg                  e1«       ejg                  d!«       y"y")#é    )Ú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                   óP   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZy)ÚControlTypezDNon-printable control codes which typically translate to ANSI codes.r   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__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© ó    úa/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/rich/segment.pyr   r       sY   „ ÙNà€DØ€OØ€DØ€EØ€KØ€KØÐØÐØ€IØ€KØ€NØ€OØÐØ€NØ€MØÑrC   r   c                   ó¬  — e Zd ZU dZeed<   dZee   ed<   dZ	ee
e      ed<   edefd„«       Zdefd„Zdefd	„Zedefd
„«       Ze ed«      dd deded   fd„«       «       Zdeded   fd„Zed0d„«       Ze	 	 d1ded    dee   dee   ded    fd„«       Ze	 d2ded    deded    fd„«       Zeded    deed       fd„«       Zeded    deeed    ef      fd„«       Ze	 	 	 d3ded    dedee   dededeed       fd„«       Z e	 	 d4ded    dedee   deded    f
d„«       Z!eded    defd„«       Z"ed eed       deeef   fd!„«       Z#e	 	 	 d5d eed       d"ed#ee   dee   d$edeed       fd%„«       Z$e	 d2d&e%d    d eed       d"ed#eded$edeed       fd'„«       Z&e	 d2d&e%d    d eed       d"ed#eded$edeed       fd(„«       Z'e	 d2d&e%d    d eed       d"ed#eded$edeed       fd)„«       Z(eded    ded    fd*„«       Z)eded    ded    fd+„«       Z*eded    ded    fd,„«       Z+eded    ded    fd-„«       Z,eded    d.ee   deed       fd/„«       Z-y)6Ú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.
    ÚtextNÚstyleÚcontrolÚreturnc                 ó,   — | \  }}}|rdS t        |«      S )zzThe number of terminal cells required to display self.text.

        Returns:
            int: A number of cells.
        r   )r   )ÚselfrG   Ú_stylerI   s       rD   Úcell_lengthzSegment.cell_lengthN   s!   € ð !%Ñˆˆf�gÙˆqÐ/¤¨$£Ð/rC   c              #   ó°   K  — | j                   –— | j                  €| j                  �| j                  –— y y | j                  –— | j                  –— y ­w©N)rG   rI   rH   ©rL   s    rD   Ú__rich_repr__zSegment.__rich_repr__X   sH   è ø€ Ø�i‰iŠØ�<‰<ÐØ�z‰zÐ%Ø—j‘jÓ ð &ð —*‘*ÒØ—,‘,Óùs   ‚AAc                 ó,   — t        | j                  «      S )z#Check if the segment contains text.)ÚboolrG   rQ   s    rD   Ú__bool__zSegment.__bool__a   s   € ä�D—I‘I‹ÐrC   c                 ó   — | j                   duS )z,Check if the segment contains control codes.N)rI   rQ   s    rD   Ú
is_controlzSegment.is_controle   s   € ð �|‰| 4Ð'Ð'rC   i @  ÚsegmentÚcut)rF   rF   c                 óò  — |\  }}}t         }|j                  }||k\  r| |d||«      fS t        }t        ||z  t	        |«      z  «      }		 |d|	 }
t        |
«      }||z
  }|s ||
||«       |||	d ||«      fS |dk(  r1 |||	   «      dk(  r# ||d|	 dz   ||«       |d||	dz   d z   ||«      fS |dk(  r4 |||	dz
     «      dk(  r# ||d|	dz
   dz   ||«       |d||	d z   ||«      fS ||k  r|	dz  }	n|	dz  }	Œ®)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   )rF   rN   r   ÚintÚlenr   )ÚclsrX   rY   rG   rH   rI   Ú_SegmentrN   Ú	cell_sizeÚposÚbeforeÚcell_posÚout_bys                rD   Ú_split_cellszSegment._split_cellsj   ss  € ð  'Ñˆˆe�WÜˆØ×)Ñ)ˆØ�+ÒØ™H R¨°Ó8Ð8Ð8ä+ˆ	ä�3˜Ñ$¬¨D«	Ñ1Ó2ˆàØ˜$˜3�ZˆFÜ Ó'ˆHØ ‘^ˆFÙá˜V U¨GÓ4Ù˜T # $˜Z¨°Ó8ðð ð ˜Š|¡	¨$¨s©)Ó 4¸Ò 9á˜T $ 3˜Z¨#Ñ-¨u°gÓ>Ù˜S 4¨¨a©¨	 ?Ñ2°E¸7ÓCðð ð ˜Š|¡	¨$¨s°Q©w©-Ó 8¸AÒ =á˜T ) C¨!¡G˜_¨sÑ2°E¸7ÓCÙ˜S 4¨¨ :Ñ-¨u°gÓ>ðð ð ˜#Š~Ø�q‘‘à�q‘�ð- rC   c                 óÐ   — | \  }}}|dk\  sJ ‚t        |«      r=|t        |«      k\  r| t        d||«      fS t        |d| ||«      t        ||d ||«      fS | j                  | |«      S )ax  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   r[   N)r   r_   rF   rg   )rL   rY   rG   rH   rI   s        rD   Úsplit_cellszSegment.split_cells›   s†   € ð  $Ñˆˆe�WØ�aŠxˆˆxä! $Ô'à”c˜$“iÒØœW R¨°Ó8Ð8Ð8ä˜˜T˜c˜
 E¨7Ó3Ü˜˜S˜T˜
 E¨7Ó3ðð ð
 × Ñ   sÓ+Ð+rC   c                 ó   —  | d«      S )zMake a new line segment.ú
rB   )r`   s    rD   ÚlinezSegment.lineµ   s   € ñ �4‹yÐrC   ÚsegmentsÚ
post_stylec                 ó`   ‡ ‡‡— |}|r|j                   Šˆˆ fd„|D «       }‰rˆ ˆfd„|D «       }|S )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   óN   •K  — | ]  \  }}} ‰||rd n ‰|«      |«      –— Œ y ­wrP   rB   )Ú.0rG   rM   rI   Úapplyr`   s       €€rD   ú	<genexpr>z&Segment.apply_style.<locals>.<genexpr>Ð   s0   øè ø€ ò á)�D˜& 'ñ �D¡'™$©u°V«}¸g×Fñùs   ƒ"%c              3   óP   •K  — | ]  \  }}} ‰||rd n|r|‰z   n‰|«      –— Œ y ­wrP   rB   )rq   rG   rM   rI   r`   rn   s       €€rD   rs   z&Segment.apply_style.<locals>.<genexpr>Õ   sB   øè ø€ ò ñ *�D˜& 'ñ Øñ #ñ á5;˜f zÒ1Àà÷ñùs   ƒ#&)Ú__add__)r`   rm   rH   rn   Úresult_segmentsrr   s   `  ` @rD   Úapply_stylezSegment.apply_styleº   sC   ú€ ð& #ˆÙØ—M‘MˆEôà-<ôˆOñ ôð .=ôˆOð ÐrC   rW   c                 óZ   — |rt        t        d«      |«      S t        t        d«      |«      S )a2  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.

        rI   )Úfilterr   r   )r`   rm   rW   s      rD   Úfilter_controlzSegment.filter_controlã   s+   € ñ Üœ* YÓ/°Ó:Ð:äœz¨)Ó4°hÓ?Ð?rC   c              #   ó  K  — g }|j                   }|D ]k  }d|j                  v rS|j                  sG|\  }}}|sŒ&|j                  d«      \  }}	}|r | | ||«      «       |	r|–— g }|j                   }|rŒ=Œd ||«       Œm |r|–— yy­w)a   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.
        rk   N©ÚappendrG   rI   Ú	partition©
r`   rm   rl   r}   rX   rG   rH   Ú_Ú_textÚnew_lines
             rD   Úsplit_lineszSegment.split_linesö   sŸ   è ø€ ð !ˆØ—‘ˆàò 	 ˆGØ�w—|‘|Ñ#¨G¯OªOØ!(‘��e˜QÚØ,0¯N©N¸4Ó,@Ñ)�E˜8 TÙÙ™s 5¨%Ó0Ô1ÙØ"š
Ø!˜Ø!%§¡˜ó ñ �w•ð	 ñ Ø‹Jð ùs   ‚6B	¹<B	Á6B	c              #   ó  K  — g }|j                   }|D ]m  }d|j                  v rU|j                  sI|\  }}}|sŒ&|j                  d«      \  }}	}|r | | ||«      «       |	r|df–— g }|j                   }|rŒ?Œf ||«       Œo |r|df–— yy­w)a2  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.
        rk   TFNr|   r   s
             rD   Úsplit_lines_terminatorzSegment.split_lines_terminator  s©   è ø€ ð !ˆØ—‘ˆàò 	 ˆGØ�w—|‘|Ñ#¨G¯OªOØ!(‘��e˜QÚØ,0¯N©N¸4Ó,@Ñ)�E˜8 TÙÙ™s 5¨%Ó0Ô1ÙØ# T˜lÒ*Ø!˜Ø!%§¡˜ó ñ �w•ð	 ñ Ø˜�-Óð ùs   ‚6B¹>BÁ8BÚlengthÚpadÚinclude_new_linesc              #   ó”  K  — g }|j                   }| j                  } | d«      }	|D ]Œ  }
d|
j                  v rt|
j                  sh|
\  }}}|sŒ&|j	                  d«      \  }}}|r | | ||«      «       |r3 |||||¬«      }|r|j                  |	«       |–— |j                  «        |rŒ^Œ… ||
«       ŒŽ |r |||||¬«      –— yy­w)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.
        rk   )rH   r‡   N)r}   Úadjust_line_lengthrG   rI   r~   Úclear)r`   rm   r†   rH   r‡   rˆ   rl   r}   rŠ   Únew_line_segmentrX   rG   Úsegment_styler€   r�   r‚   Úcropped_lines                    rD   Úsplit_and_crop_lineszSegment.split_and_crop_lines2  så   è ø€ ð* !ˆØ—‘ˆà ×3Ñ3ÐÙ˜t›9Ðàò 	 ˆGØ�w—|‘|Ñ#¨G¯OªOØ)0Ñ&��m QÚØ,0¯N©N¸4Ó,@Ñ)�E˜8 TÙÙ™s 5¨-Ó8Ô9ÙÙ'9Ø  &°¸3ô(˜ñ -Ø(×/Ñ/Ð0@ÔAØ*Ò*ØŸ
™
œó ñ �w•ð!	 ñ" Ù$ T¨6¸ÀCÔHÓHð ùs   ‚A
CÁACÂ+Crl   c                 ó^  — t        d„ |D «       «      }||k  r|r| | d||z
  z  |«      gz   }|S |dd }|S ||kD  rmg }|j                  }d}|D ]V  }|j                  }	||	z   |k  s|j                  r ||«       ||	z  }Œ1|\  }
}}t	        |
||z
  «      }
 | | |
|«      «        |S  |S |dd }|S )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   ó4   K  — | ]  }|j                   –— Œ y ­wrP   )rN   )rq   rX   s     rD   rs   z-Segment.adjust_line_length.<locals>.<genexpr>t  s   è ø€ ÒB°'˜'×-Õ-ÑBùs   ‚r]   Nr   )Úsumr}   rN   rI   r   )r`   rl   r†   rH   r‡   Úline_lengthr‚   r}   rX   Úsegment_lengthrG   r�   r€   s                rD   rŠ   zSegment.adjust_line_lengtha  s   € ô& ÑB¸TÔBÓBˆð ˜ÒÙØ¡3 s¨f°{Ñ.BÑ'CÀUÓ#KÐ"LÑL�ð& ˆð#  ¡˜7�ð" ˆð! ˜6Ò!ØˆHØ—_‘_ˆFØˆKØò 	�Ø!(×!4Ñ!4�Ø Ñ/°&Ò8¸G¿OºOÙ˜7”OØ >Ñ1‘Kà-4Ñ*�D˜-¨Ü(¨¨v¸Ñ/CÓD�DÙ™3˜t ]Ó3Ô4Øð ˆð	ð ˆð ™A�wˆHØˆrC   c                 ó8   ‡— t         Št        ˆfd„|D «       «      S )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   ó<   •K  — | ]  \  }}}|rŒ
 ‰|«      –— Œ y ­wrP   rB   )rq   rG   rH   rI   Ú	_cell_lens       €rD   rs   z*Segment.get_line_length.<locals>.<genexpr>™  s   øè ø€ ÒSÑ'; t¨U°GÊ7‘9˜T—?ÑSùs   ƒ�)r   r’   )r`   rl   r—   s     @rD   Úget_line_lengthzSegment.get_line_lengthŽ  s   ø€ ô ˆ	ÜÓS¸tÔSÓSÐSrC   Úlinesc                 óf   ‡— | j                   Š|rt        ˆfd„|D «       «      nd}|t        |«      fS )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   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrP   rB   )rq   rl   r˜   s     €rD   rs   z$Segment.get_shape.<locals>.<genexpr>¦  s   øè ø€ Ò@°$™¨×-Ñ@ùs   ƒr   )r˜   Úmaxr_   )r`   r™   Ú	max_widthr˜   s      @rD   Ú	get_shapezSegment.get_shape›  s3   ø€ ð ×-Ñ-ˆÙDI”CÓ@¸%Ô@Ô@Èqˆ	Øœ3˜u›:Ð&Ð&rC   ÚwidthÚheightÚ	new_linesc                 ó$  — |xs t        |«      }|r | d|z  dz   |«      gn | d|z  |«      g}| j                  }|d| }	|D �
cg c]  }
 ||
||¬«      ‘Œ c}
|	dd t        |	«      |k  r!|	j                  |g|t        |	«      z
  z  «       |	S c c}
w )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.
        r]   rk   N)rH   )r_   rŠ   Úextend)r`   r™   rŸ   r    rH   r¡   Ú_heightÚblankrŠ   Úshaped_linesrl   s              rD   Ú	set_shapezSegment.set_shape©  s·   € ð* Ò&œC ›Jˆñ 1:‰S��u‘˜tÑ# UÓ+Ñ,ÁÀCÈ%ÁKÐQVÓ@WÐ?Xð 	ð !×3Ñ3ÐØ˜X˜g�ˆàEJö
Ø=AÑ˜t U°%Ö8ò
ˆ‘Qˆô ˆ|Ó˜wÒ&Ø×Ñ  ¨7´S¸Ó5FÑ+FÑ GÔHØÐùò
s   ÁBr`   c                 óˆ   — |t        |«      z
  }|s|dd S |d| }|r | d|z  dz   |«      n | d|z  |«      }||gg|z  z   }|S )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.
        Nr]   rk   ©r_   ©r`   r™   rŸ   r    rH   r¡   Úextra_linesr¥   s           rD   Ú	align_topzSegment.align_topÍ  sf   € ð* œs 5›zÑ)ˆÙØ™�8ˆOØ�g�v�ˆÙ2;‘�C˜%‘K $Ñ&¨Ô.ÁÀSÈ5Á[ÐRWÓAXˆØ˜%˜˜	 KÑ/Ñ/ˆØˆrC   c                 óˆ   — |t        |«      z
  }|s|dd S |d| }|r | d|z  dz   |«      n | d|z  |«      }|gg|z  |z   }|S )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.
        Nr]   rk   r©   rª   s           rD   Úalign_bottomzSegment.align_bottomê  sf   € ð* œs 5›zÑ)ˆÙØ™�8ˆOØ�g�v�ˆÙ2;‘�C˜%‘K $Ñ&¨Ô.ÁÀSÈ5Á[ÐRWÓAXˆØ��	˜KÑ'¨%Ñ/ˆØˆrC   c                 ó¬   — |t        |«      z
  }|s|dd S |d| }|r | d|z  dz   |«      n | d|z  |«      }|dz  }||z
  }	|gg|z  |z   |gg|	z  z   }|S )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.
        Nr]   rk   r   r©   )
r`   r™   rŸ   r    rH   r¡   r«   r¥   Ú	top_linesÚbottom_liness
             rD   Úalign_middlezSegment.align_middle  sˆ   € ð* œs 5›zÑ)ˆÙØ™�8ˆOØ�g�v�ˆÙ2;‘�C˜%‘K $Ñ&¨Ô.ÁÀSÈ5Á[ÐRWÓAXˆØ 1Ñ$ˆ	Ø" YÑ.ˆØ��	˜IÑ%¨Ñ-°%°°	¸LÑ0HÑHˆØˆrC   c              #   ó&  K  — t        |«      }	 t        |«      }t        }|D ]X  }|j                  |j                  k(  r7|j
                  s+ ||j                  |j                  z   |j                  «      }ŒS|–— |}ŒZ |–— y# t        $ r Y yw xY w­w)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ÚStopIterationrF   rH   rI   rG   )r`   rm   Úiter_segmentsÚlast_segmentra   rX   s         rD   ÚsimplifyzSegment.simplify&  sš   è ø€ ô ˜X›ˆð	Ü Ó.ˆLô ˆØ$ò 	'ˆGØ×!Ñ! W§]¡]Ò2¸7¿?º?Ù'Ø ×%Ñ%¨¯©Ñ4°l×6HÑ6Hó ‘ð #Ò"Ø&‘ð	'ð Óøô ò 	Ùð	üs(   ‚B�B šA(BÂ	BÂBÂBÂBc              #   óœ   K  — |D ]C  }|j                   s|j                  €|–— Œ |\  }}} | ||r|j                  d«      nd«      –— ŒE y­w)zÆRemove all links from an iterable of styles.

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

        Yields:
            Segment: Segments with link removed.
        N)rI   rH   Úupdate_link)r`   rm   rX   rG   rH   Ú_controls         rD   Ústrip_linkszSegment.strip_linksA  sV   è ø€ ð  ò 	LˆGØ�Š '§-¡-Ð"7Ø“à(/Ñ%��e˜XÙ˜$¹5 × 1Ñ 1°$Ô 7ÀdÓKÓKñ	Lùs   ‚A
Ac              #   ó:   K  — |D ]  \  }}} | |d|«      –— Œ y­w)zÔRemove all styles from an iterable of segments.

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

        Yields:
            Segment: Segments with styles replace with None
        NrB   )r`   rm   rG   rM   rI   s        rD   Ústrip_styleszSegment.strip_stylesR  s-   è ø€ ð &.ò 	+Ñ!ˆD�&˜'Ù�d˜D 'Ó*Ó*ñ	+ùs   ‚c              #   ó¤   K  — i }|D ]E  \  }}}|r1|j                  |«      }|€|j                  }|||<    | |||«      –— Œ: | |d|«      –— ŒG y­w)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)r`   rm   ÚcacherG   rH   rI   Úcolorless_styles          rD   Úremove_colorzSegment.remove_color_  sl   è ø€ ð %'ˆØ$,ò 	/Ñ ˆD�%˜ÙØ"'§)¡)¨EÓ"2�Ø"Ð*Ø&+×&9Ñ&9�OØ#2�E˜%‘LÙ˜$ °Ó9Ó9á˜$  gÓ.Ó.ñ	/ùs   ‚AAÚcutsc              #   óV  K  — g }|j                   }t        |«      }	 t        |d«      }|dk(  ry|dk7  rng –— Œd}|j                  }|j                  }	t
        }
|D ]À  }|\  }}}|sŒ|r|n
| |
|«      z   }||k  r ||«       |}Œ+||k(  r9 ||«        |	«       –—  |«        |}t        |d«      }|dk(  r|r	 |	«       –—  yŒi|j                  ||z
  «      \  }}|\  }}} ||«        |	«       –—  |«        |}t        |d«      }|dk(  r|r	 |	«       –—  y|rŒµŒÂ  |	«       –— y­w)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.
        r\   Nr   )r}   r´   rµ   r‹   Úcopyr   ri   )r`   rm   rÆ   Úsplit_segmentsÚadd_segmentÚ	iter_cutsrY   rc   Úsegments_clearÚsegments_copyr—   rX   rG   rM   rI   Úend_posrd   s                    rD   ÚdividezSegment.divideu  sp  è ø€ ð +-ˆØ$×+Ñ+ˆä˜“Jˆ	àÜ�y "Ó%ˆCØ�bŠyØØ�aŠxØØŠHð ð ˆà'×-Ñ-ˆØ&×+Ñ+ˆä#ˆ	Øò #	ˆGØ$+Ñ!ˆD�&˜'ÚÙ!(™#¨c±I¸d³OÑ.C�Ø˜S’=Ù Ô(Ø!�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%D)Á(B4D)ÄD))rJ   rF   )NN©F)NTT)NT)NNF).r.   r/   r0   r1   ÚstrÚ__annotations__rH   r   r   rI   r   ÚControlCodeÚpropertyr^   rN   r   rR   rT   rU   rW   Úclassmethodr   r   rg   ri   rl   r	   rw   rz   r
   rƒ   r…   r�   rŠ   r˜   rž   r§   r   r¬   r®   r²   r¹   r½   r¿   rÅ   rÏ   rB   rC   rD   rF   rF   <   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rC   rF   c                   ó@   — e Zd ZdZddee   deddfd„Z	 	 	 	 	 	 d	d„Zy)
ÚSegmentsa=  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.
    rm   r¡   rJ   Nc                 ó2   — t        |«      | _        || _        y rP   )Úlistrm   r¡   )rL   rm   r¡   s      rD   Ú__init__zSegments.__init__Ä  s   € Ü˜X›ˆŒØ"ˆ�rC   c              #   ó¬   K  — | j                   r.t        j                  «       }| j                  D ]
  }|–— |–— Œ y | j                  E d {  –—†  y 7 Œ­wrP   )r¡   rF   rl   rm   )rL   ÚconsoleÚoptionsrl   rX   s        rD   Ú__rich_console__zSegments.__rich_console__È  sF   è ø€ ð �>Š>Ü—<‘<“>ˆDØŸ=™=ò �Ø’Ø“
ñð —}‘}×$Ò$ús   ‚A
AÁAÁArÐ   ©rÜ   r   rÝ   r   rJ   r   )	r.   r/   r0   r1   r	   rF   rT   rÚ   rÞ   rB   rC   rD   r×   r×   »  sD   „ ññ# ¨'Ñ!2ð #¸tð #ÐPTó #ð	%Ø ð	%Ø+;ð	%à	ô	%rC   r×   c                   óB   — e Zd Zddeee      deddfd„Z	 	 	 	 	 	 dd„Zy)	ÚSegmentLinesr™   r¡   rJ   Nc                 ó2   — t        |«      | _        || _        y)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¡   )rL   r™   r¡   s      rD   rÚ   zSegmentLines.__init__Õ  s   € ô ˜%“[ˆŒ
Ø"ˆ�rC   c              #   óÊ   K  — | j                   r4t        j                  «       }| j                  D ]  }|E d {  –—†  |–— Œ y | j                  D ]  }|E d {  –—†  Œ y 7 Œ'7 Œ	­wrP   )r¡   rF   rl   r™   )rL   rÜ   rÝ   r‚   rl   s        rD   rÞ   zSegmentLines.__rich_console__à  s`   è ø€ ð �>Š>Ü—|‘|“~ˆHØŸ
™
ò �Ø—�Ø“ñð Ÿ
™
ò  �Ø—‘ñ ð  øð  ús!   ‚5A#·A¸A#ÁA!ÁA#Á!A#rÐ   rß   )	r.   r/   r0   r	   r
   rF   rT   rÚ   rÞ   rB   rC   rD   rá   rá   Ô  sC   „ ñ	#˜h t¨G¡}Ñ5ð 	#À$ð 	#ÐSWó 	#ð
 Ø ð
 Ø+;ð
 à	ô
 rC   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   rH   r   rÜ   r   r   r   r   r^   rÑ   rÓ   rF   r×   rá   r.   Úrich.consoleÚrich.syntaxrå   Ú	rich.textræ   ÚcodeÚfrom_markuprG   ÚruleÚprintrÙ   ÚrenderÚ	fragmentsrB   rC   rD   ú<module>rù      s�  ðÝ Ý Ý !Ý ÷÷ ÷ ÷õ ÷ $Ý áß>Ñ>ô�'ô ð* Ø	ˆ+ÑØ	ˆ+�u˜S #˜X‘Ð
&Ñ'Ø	ˆ+�s˜CÐ
Ñ ð"ñ€ñ ƒô{	ˆjó {	ó ð{	÷|%ñ %÷2 ñ  ð2 ˆzÓÝ$Ý"Ýð€Dð
 ˆ4×ÑÐ<Ó=€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Ø^õð; rC   