§
    
Á³g ^  ã                   óD  — 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	 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#  ed¦  «        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l0m1Z1 dZ2 e1j3        d¦  «        Z4 e!¦   «         Z e  5                    d¦  «         e  6                    d¦  «         e  6                    d¦  «         e  6                     e/e2dd¬ ¦  «        ¦  «         e  6                    ¦   «          e  6                    d!¦  «          e7e  8                    e4¦  «        ¦  «        Z9e  6                    e9¦  «         e  6                    ¦   «          e  6                    d"¦  «         e  6                    e4¦  «         e  6                    d#¦  «         d$S d$S )%é    )ÚIntEnum)Ú	lru_cache)Úfilterfalse)Ú	getLogger)Ú
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ÚRenderResultÚrichc                   óR   — 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dS )Ú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© ó    úV/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pip/_vendor/rich/segment.pyr    r    #   sj   € € € € € ØNÐNà€DØ€OØ€DØ€EØ€KØ€KØÐØÐØ€IØ€KØ€NØ€OØÐØ€NØ€MØÐÐÐrE   r    c                   óX  — 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d1d„¦   «         Ze	 	 d2ded          dee         dee         ded          fd„¦   «         Ze	 d3ded          deded          fd„¦   «         Zeded          deed                   fd„¦   «         Ze	 	 	 d4ded          dedee         dededeed                   fd„¦   «         Ze	 	 d5d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	 	 	 d6d!eed                   d#ed$ee         dee         d%edeed                   fd&„¦   «         Z#e	 d3d'e$d          d!eed                   d#ed$eded%edeed                   fd(„¦   «         Z%e	 d3d'e$d          d!eed                   d#ed$eded%edeed                   fd)„¦   «         Z&e	 d3d'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d0„¦   «         Z,dS )7Ú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                 ó4   — | \  }}}|rdnt          |¦  «        S )zzThe number of terminal cells required to display self.text.

        Returns:
            int: A number of cells.
        r   )r   )ÚselfrI   Ú_stylerK   s       rF   Úcell_lengthzSegment.cell_lengthQ   s%   € ð !%Ñˆˆf�gØÐ/ˆqˆq¥¨$¡¤Ð/rE   c              #   óv   K  — | j         V — | j        €| j        �| j        V — d S d S | j        V — | j        V — d S ©N)rI   rK   rJ   ©rN   s    rF   Ú__rich_repr__zSegment.__rich_repr__[   sa   è è € ØŒiˆˆˆØŒ<ÐØŒzÐ%Ø”jÐ Ð Ð Ð Ð ð &Ð%ð ”*ÐÐÐØ”,ÐÐÐÐÐrE   c                 ó*   — t          | j        ¦  «        S )z#Check if the segment contains text.)ÚboolrI   rS   s    rF   Ú__bool__zSegment.__bool__d   s   € å�D”I‰ŒÐrE   c                 ó   — | j         duS )z,Check if the segment contains control codes.N)rK   rS   s    rF   Ú
is_controlzSegment.is_controlh   s   € ð Œ| 4Ð'Ð'rE   i @  ÚsegmentÚcut)rH   rH   c                 óž  — |\  }}}t           }|j        }||k    r| |d||¦  «        fS t          }t          ||z  t	          |¦  «        z  ¦  «        }	|d |	…         }
t          |
¦  «        }||k    r" ||
||¦  «         |||	d …         ||¦  «        fS |	t	          |¦  «        k     r™||	         }|	dz  }	| ||¦  «        z  }|d |	…         }
||k    r" ||
||¦  «         |||	d …         ||¦  «        fS ||k    r3 ||
d |	dz
  …         dz   ||¦  «         |d||	d …         z   ||¦  «        fS |	t	          |¦  «        k     °™t          d¦  «        ‚)NÚ r   ú zWill never reach here)rH   rP   r   ÚintÚlenr   ÚAssertionError)ÚclsrZ   r[   rI   rJ   rK   Ú_SegmentrP   Ú	cell_sizeÚposÚbeforeÚcell_posÚchars                rF   Ú_split_cellszSegment._split_cellsm   s±  € ð  'Ñˆˆe�WÝˆàÔ)ˆØ�+ÒÐØ˜H˜H R¨°Ñ8Ô8Ð8Ð8å+ˆ	å�3˜Ñ$­¨D©	¬	Ñ1Ñ2Ô2ˆà�d�s�d”ˆÝ˜FÑ#Ô#ˆØ�sŠ?ˆ?à�˜ ¨Ñ0Ô0Ø�˜˜c˜d˜dœ U¨GÑ4Ô4ðð ð •C˜‘I”IŠoˆoØ˜”9ˆDØ�1‰HˆCØ˜	˜	 $™œÑ'ˆHØ˜$˜3˜$”ZˆFØ˜3Šˆà�H˜V U¨GÑ4Ô4Ø�H˜T # $ $œZ¨°Ñ8Ô8ðð ð ˜#Š~ˆ~à�H˜V I c¨A¡g IÔ.°Ñ4°e¸WÑEÔEØ�H˜S 4¨¨¨¤:Ñ-¨u°gÑ>Ô>ðð ð •C˜‘I”IŠoˆoõ  Ð4Ñ5Ô5Ð5rE   c                 ó  — | \  }}}t          |¦  «        rX|t          |¦  «        k    r| t          d||¦  «        fS t          |d|…         ||¦  «        t          ||d…         ||¦  «        fS |                      | |¦  «        S )a0  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.

        Returns:
            Tuple[Segment, Segment]: Two segments.
        r]   N)r   r`   rH   ri   )rN   r[   rI   rJ   rK   s        rF   Úsplit_cellszSegment.split_cells•   s˜   € ð  $Ñˆˆe�Wå! $Ñ'Ô'ð 	à•c˜$‘i”iÒÐØ�W R¨°Ñ8Ô8Ð8Ð8å˜˜T˜c˜Tœ
 E¨7Ñ3Ô3Ý˜˜S˜T˜Tœ
 E¨7Ñ3Ô3ðð ð
 × Ò   sÑ+Ô+Ð+rE   c                 ó   —  | d¦  «        S )zMake a new line segment.ú
rD   )rb   s    rF   ÚlinezSegment.line«   s   € ð ˆs�4‰yŒyÐrE   ÚsegmentsÚ
post_stylec                 ób   ‡ ‡‡— |}|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   óT   •K  — | ]"\  }}} ‰||rd n
 ‰|¦  «        |¦  «        V — Œ#d S rR   rD   )Ú.0rI   rO   rK   Úapplyrb   s       €€rF   ú	<genexpr>z&Segment.apply_style.<locals>.<genexpr>Æ   s\   øè è € ð ð á)�D˜& 'ð ��D 'Ð<˜$˜$¨u¨u°V©}¬}¸gÑFÔFðð ð ð ð ð rE   c              3   óP   •K  — | ] \  }}} ‰||rd n|r|‰z   n‰|¦  «        V — Œ!d S rR   rD   )rs   rI   rO   rK   rb   rp   s       €€rF   ru   z&Segment.apply_style.<locals>.<genexpr>Ë   sr   øè è € ð ð ñ *�D˜& 'ð �Øð #ðM˜˜à5;ÐK˜f zÑ1Ð1Ààñô ðð ð ð ð ð rE   )Ú__add__)rb   ro   rJ   rp   Úresult_segmentsrt   s   `  ` @rF   Úapply_stylezSegment.apply_style°   s‰   øøø€ ð& #ˆØð 	Ø”MˆEðð ð ð ð à-<ðñ ô ˆOð ð 	ðð ð ð ð ð .=ðñ ô ˆOð ÐrE   FrY   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.

        rK   )Úfilterr   r   )rb   ro   rY   s      rF   Úfilter_controlzSegment.filter_controlÙ   s=   € ð ð 	@Ý�* YÑ/Ô/°Ñ:Ô:Ð:å�z¨)Ñ4Ô4°hÑ?Ô?Ð?rE   c              #   ó   K  — g }|j         }|D ]g}d|j        v rQ|j        sJ|\  }}}|rA|                     d¦  «        \  }}	}|r | | ||¦  «        ¦  «         |	r|V — g }|j         }|°AŒ\ ||¦  «         Œh|r|V — dS dS )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.
        rm   N)ÚappendrI   rK   Ú	partition)
rb   ro   rn   r~   rZ   rI   rJ   Ú_Ú_textÚnew_lines
             rF   Úsplit_lineszSegment.split_linesì   sÞ   è è € ð !ˆØ”ˆàð 	 ð 	 ˆGØ�w”|Ð#Ð#¨G¬OÐ#Ø!(‘��e˜QØð -Ø,0¯NªN¸4Ñ,@Ô,@Ñ)�E˜8 TØð 2Ø˜˜s˜s 5¨%Ñ0Ô0Ñ1Ô1Ð1Øð -Ø"˜
˜
˜
Ø!˜Ø!%¤˜ð ð -øð ��w‘”��Øð 	ØˆJˆJˆJˆJˆJð	ð 	rE   TÚlengthÚpadÚinclude_new_linesc              #   ó‚  K  — g }|j         }| j        } | d¦  «        }	|D ]‰}
d|
j        v rs|
j        sl|
\  }}}|rc|                     d¦  «        \  }}}|r | | ||¦  «        ¦  «         |r/ |||||¬¦  «        }|r|                      |	¦  «         |V — |dd…= |°cŒ~ ||
¦  «         ŒŠ|r |||||¬¦  «        V — dS dS )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.
        rm   )rJ   r…   N)r~   Úadjust_line_lengthrI   rK   r   )rb   ro   r„   rJ   r…   r†   rn   r~   rˆ   Únew_line_segmentrZ   rI   Úsegment_styler€   r�   r‚   Úcropped_lines                    rF   Úsplit_and_crop_lineszSegment.split_and_crop_lines	  sT  è è € ð* !ˆØ”ˆà Ô3ÐØ˜3˜t™9œ9Ðàð 	 ð 	 ˆGØ�w”|Ð#Ð#¨G¬OÐ#Ø)0Ñ&��m QØð $Ø,0¯NªN¸4Ñ,@Ô,@Ñ)�E˜8 TØð :Ø˜˜s˜s 5¨-Ñ8Ô8Ñ9Ô9Ð9Øð $Ø'9Ð'9Ø  &°¸3ð(ñ (ô (˜ð -ð BØ(×/Ò/Ð0@ÑAÔAÐAØ*Ð*Ð*Ð*Ø    ˜Gð ð $øð ��w‘”��Øð 	IØ$Ð$ T¨6¸ÀCÐHÑHÔHÐHÐHÐHÐHÐHð	Ið 	IrE   rn   c                 óz  — t          d„ |D ¦   «         ¦  «        }||k     r$|r| | d||z
  z  |¦  «        gz   }n‚|dd…         }nw||k    rgg }|j        }d}|D ]X}|j        }	||	z   |k     s|j        r ||¦  «         ||	z  }Œ*|\  }
}}t	          |
||z
  ¦  «        }
 | | |
|¦  «        ¦  «          n
|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   ó$   K  — | ]}|j         V — Œd S rR   )rP   )rs   rZ   s     rF   ru   z-Segment.adjust_line_length.<locals>.<genexpr>K  s%   è è € ÐBÐB°'˜'Ô-ÐBÐBÐBÐBÐBÐBrE   r^   Nr   )Úsumr~   rP   rK   r   )rb   rn   r„   rJ   r…   Úline_lengthr‚   r~   rZ   Úsegment_lengthrI   rŠ   r€   s                rF   rˆ   zSegment.adjust_line_length8  s  € õ& ÐBÐB¸TÐBÑBÔBÑBÔBˆð ˜ÒÐØð #Ø 3 3 s¨f°{Ñ.BÑ'CÀUÑ#KÔ#KÐ"LÑL��à   œ7��Ø˜6Ò!Ð!ØˆHØ”_ˆFØˆKØð 	ð 	�Ø!(Ô!4�Ø Ñ/°&Ò8Ð8¸G¼OÐ8Ø�F˜7‘O”O�OØ >Ñ1�K�Kà-4Ñ*�D˜-¨Ý(¨¨v¸Ñ/CÑDÔD�DØ�F˜3˜3˜t ]Ñ3Ô3Ñ4Ô4Ð4Øøà˜A˜A˜A”wˆHØˆrE   c                 óH   ‡— 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   ó8   •K  — | ]} ‰|j         ¦  «        V — Œd S rR   )rI   )rs   rZ   Ú	_cell_lens     €rF   ru   z*Segment.get_line_length.<locals>.<genexpr>p  s/   øè è € Ð?Ð?¨w�9�9˜Wœ\Ñ*Ô*Ð?Ð?Ð?Ð?Ð?Ð?rE   )r   r�   )rb   rn   r”   s     @rF   Úget_line_lengthzSegment.get_line_lengthe  s-   ø€ õ ˆ	ÝÐ?Ð?Ð?Ð?¸$Ð?Ñ?Ô?Ñ?Ô?Ð?rE   Úlinesc                 ór   ‡— | 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  — | ]} ‰|¦  «        V — Œd S rR   rD   )rs   rn   r•   s     €rF   ru   z$Segment.get_shape.<locals>.<genexpr>}  s-   øè è € Ð@Ð@°$˜˜¨Ñ-Ô-Ð@Ð@Ð@Ð@Ð@Ð@rE   r   )r•   Úmaxr`   )rb   r–   Ú	max_widthr•   s      @rF   Ú	get_shapezSegment.get_shaper  sJ   ø€ ð Ô-ˆØDIÐP•CÐ@Ð@Ð@Ð@¸%Ð@Ñ@Ô@Ñ@Ô@Ð@Èqˆ	Ø�3˜u™:œ:Ð&Ð&rE   ÚwidthÚheightÚ	new_linesc                 ó<  ‡‡‡	— |pt          |¦  «        }|r | d‰z  dz   ‰¦  «        gn | d‰z  ‰¦  «        g}| j        Š	|d|…         }ˆ	ˆˆfd„|D ¦   «         |dd…<   t          |¦  «        |k     r)|                     |g|t          |¦  «        z
  z  ¦  «         |S )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^   rm   Nc                 ó,   •— g | ]} ‰|‰‰¬ ¦  «        ‘ŒS ))rJ   rD   )rs   rn   rˆ   rJ   rœ   s     €€€rF   ú
<listcomp>z%Segment.set_shape.<locals>.<listcomp>�  s9   ø€ ð 
ð 
ð 
Ø=AÐÐ˜t U°%Ð8Ñ8Ô8ð
ð 
ð 
rE   )r`   rˆ   Úextend)
rb   r–   rœ   r�   rJ   rž   Ú_heightÚblankÚshaped_linesrˆ   s
     ` `    @rF   Ú	set_shapezSegment.set_shape€  sì   øøø€ ð* Ð&�C ™JœJˆð 1:ÐXˆSˆS��u‘˜tÑ# UÑ+Ô+Ð,Ð,ÀÀÀCÈ%ÁKÐQVÑ@WÔ@WÐ?Xð 	ð !Ô3ÐØ˜X˜g˜X”ˆð
ð 
ð 
ð 
ð 
ð 
ØEJð
ñ 
ô 
ˆ�Q�Q�Q‰õ ˆ|ÑÔ˜wÒ&Ð&Ø×Ò  ¨7µS¸Ñ5FÔ5FÑ+FÑ GÑHÔHÐHØÐrE   rb   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^   rm   ©r`   ©rb   r–   rœ   r�   rJ   rž   Úextra_linesr¤   s           rF   Ú	align_topzSegment.align_top¤  sƒ   € ð* �s 5™zœzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔAXˆØ˜%˜˜	 KÑ/Ñ/ˆØˆrE   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^   rm   r¨   r©   s           rF   Úalign_bottomzSegment.align_bottomÁ  sƒ   € ð* �s 5™zœzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔAXˆØ��	˜KÑ'¨%Ñ/ˆØˆrE   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^   rm   r!   r¨   )
rb   r–   rœ   r�   rJ   rž   rª   r¤   Ú	top_linesÚbottom_liness
             rF   Úalign_middlezSegment.align_middleÞ  s¥   € ð* �s 5™zœzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔAXˆØ 1Ñ$ˆ	Ø" YÑ.ˆØ��	˜IÑ%¨Ñ-°%°°	¸LÑ0HÑHˆØˆrE   c              #   ó  K  — t          |¦  «        }	 t          |¦  «        }n# t          $ r Y dS w xY wt          }|D ]>}|j        |j        k    r&|j        s ||j        |j        z   |j        ¦  «        }Œ8|V — |}Œ?|V — dS )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ÚStopIterationrH   rJ   rK   rI   )rb   ro   Úiter_segmentsÚlast_segmentrc   rZ   s         rF   ÚsimplifyzSegment.simplifyý  sÂ   è è € õ ˜X™œˆð	Ý Ñ.Ô.ˆLˆLøÝð 	ð 	ð 	ØˆFˆFð	øøøõ ˆØ$ð 	'ð 	'ˆGØÔ! W¤]Ò2Ð2¸7¼?Ð2Ø'˜xØ Ô%¨¬Ñ4°lÔ6Hñ ô  ��ð #Ð"Ð"Ð"Ø&��ØÐÐÐÐÐs   “# £
1°1c              #   ó�   K  — |D ]@}|j         s|j        €|V — Œ|\  }}} | ||r|                     d¦  «        nd¦  «        V — ŒAdS )zÆRemove all links from an iterable of styles.

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

        Yields:
            Segment: Segments with link removed.
        N)rK   rJ   Úupdate_link)rb   ro   rZ   rI   rJ   Ú_controls         rF   Ústrip_linkszSegment.strip_links  s�   è è € ð  ð 	Lð 	LˆGØŒð L '¤-Ð"7Ø����à(/Ñ%��e˜XØ�c˜$¸5Ð J × 1Ò 1°$Ñ 7Ô 7Ð 7ÀdÑKÔKÐKÐKÐKÐKð	Lð 	LrE   c              #   ó:   K  — |D ]\  }}} | |d|¦  «        V — ŒdS )zÔRemove all styles from an iterable of segments.

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

        Yields:
            Segment: Segments with styles replace with None
        NrD   )rb   ro   rI   rO   rK   s        rF   Ústrip_styleszSegment.strip_styles)  sE   è è € ð &.ð 	+ð 	+Ñ!ˆD�&˜'Ø�#�d˜D 'Ñ*Ô*Ð*Ð*Ð*Ð*ð	+ð 	+rE   c              #   ó¨   K  — i }|D ]J\  }}}|r3|                      |¦  «        }|€|j        }|||<    | |||¦  «        V — Œ; | |d|¦  «        V — ŒKdS )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)rb   ro   ÚcacherI   rJ   rK   Úcolorless_styles          rF   Úremove_colorzSegment.remove_color6  s—   è è € ð %'ˆØ$,ð 	/ð 	/Ñ ˆD�%˜Øð /Ø"'§)¢)¨EÑ"2Ô"2�Ø"Ð*Ø&+Ô&9�OØ#2�E˜%‘LØ�c˜$ °Ñ9Ô9Ð9Ð9Ð9Ð9à�c˜$  gÑ.Ô.Ð.Ð.Ð.Ð.ð	/ð 	/rE   Úcutsc              #   ó¬  K  — g }|j         }t          |¦  «        }	 t          |d¦  «        }|dk    rg S |dk    rng V — Œ$d}|j        }|j        }	t
          }
|D ]î}|\  }}}|rä|r|n| |
|¦  «        z   }||k     r ||¦  «         |}n¾||k    rK ||¦  «          |	¦   «         V —  |¦   «          |}t          |d¦  «        }|dk    r|r |	¦   «         V —  dS nm|                     ||z
  ¦  «        \  }}|\  }}} ||¦  «          |	¦   «         V —  |¦   «          |}t          |d¦  «        }|dk    r|r |	¦   «         V —  dS |°äŒï |	¦   «         V — dS )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.
        Téÿÿÿÿr   N)r~   r³   r´   ÚclearÚcopyr   rk   )rb   ro   rÅ   Úsplit_segmentsÚadd_segmentÚ	iter_cutsr[   re   Úsegments_clearÚsegments_copyr”   rZ   rI   rO   rK   Úend_posrf   s                    rF   ÚdividezSegment.divideL  s  è è € ð +-ˆØ$Ô+ˆå˜‘J”Jˆ	ð	Ý�y "Ñ%Ô%ˆCØ�bŠyˆyØ�	Ø�aŠxˆxØØˆHˆHˆHð	ð ˆà'Ô-ˆØ&Ô+ˆå#ˆ	Øð #	ð #	ˆGØ$+Ñ!ˆD�&˜'Øð !Ø!(ÐC˜#˜#¨c°I°I¸d±O´OÑ.C�Ø˜S’=�=Ø�K Ñ(Ô(Ð(Ø!�CØà˜c’>�>Ø�K Ñ(Ô(Ð(Ø'˜-™/œ/Ð)Ð)Ð)Ø"�NÑ$Ô$Ð$Ø!�Cå˜y¨"Ñ-Ô-�CØ˜b’y�yØ)ð 2Ø"/ -¡/¤/Ð1Ð1Ð1Ø˜˜àð '.×&9Ò&9¸#À¹)Ñ&DÔ&D‘O�F˜GØ,3Ñ)�D˜& 'Ø�K Ñ'Ô'Ð'Ø'˜-™/œ/Ð)Ð)Ð)Ø"�NÑ$Ô$Ð$Ø�Cå˜9 bÑ)Ô)�Ø˜"’9�9Ø%ð .Ø+˜m™oœoÐ-Ð-Ð-Ø�F�FðC ð !øðF ˆm‰oŒoÐÐÐÐÐrE   )rL   rH   )NN©F)NTT)NT)NNF)-r0   r1   r2   r3   ÚstrÚ__annotations__rJ   r   r   rK   r   ÚControlCodeÚpropertyr_   rP   r   rT   rV   rW   rY   Úclassmethodr   r   ri   rk   rn   r
   ry   r|   r   rƒ   rŒ   rˆ   r•   r›   r¦   r   r«   r­   r±   r¸   r¼   r¾   rÄ   rÐ   rD   rE   rF   rH   rH   ?   s  € € € € € € ð
ð 
ð €I€I�IØ!€Eˆ8�EŒ?Ð!Ð!Ñ!Ø/3€GˆX�h˜{Ô+Ô,Ð3Ð3Ñ3àð0˜Sð 0ð 0ð 0ñ „Xð0ð˜vð ð ð ð ð˜$ð ð ð ð ð ð(˜Dð (ð (ð (ñ „Xð(ð Ø€YˆyÑÔð$6 9ð $6°3ð $6¸5ÐAUÔ;Vð $6ð $6ð $6ñ Ôñ „[ð$6ðL,˜sð , uÐ-AÔ'Bð ,ð ,ð ,ð ,ð, ðð ð ñ „[ðð ð "&Ø&*ð	&ð &à˜9Ô%ð&ð ˜Œð&ð ˜U”Oð	&ð
 
�)Ô	ð&ð &ð &ñ „[ð&ðP à?Dð@ð @Ø 	Ô*ð@Ø8<ð@à	�)Ô	ð@ð @ð @ñ „[ð@ð$ ð 8¨IÔ#6ð ¸8ÀDÈÄOÔ;Tð ð ð ñ „[ðð8 ð
 "&ØØ"&ð,Ið ,Ià˜9Ô%ð,Ið ð,Ið ˜Œð	,Ið
 ð,Ið  ð,Ið 
�$�y”/Ô	"ð,Ið ,Ið ,Iñ „[ð,Ið\ ð
 "&Øð*ð *à�9Œoð*ð ð*ð ˜Œð	*ð
 ð*ð 
ˆiŒð*ð *ð *ñ „[ð*ðX ð
@ 4¨	¤?ð 
@°sð 
@ð 
@ð 
@ñ „[ð
@ð ð'˜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ð Lñ „[ðLð  ð
+ H¨YÔ$7ð 
+¸HÀYÔ<Oð 
+ð 
+ð 
+ñ „[ð
+ð ð/ H¨YÔ$7ð /¸HÀYÔ<Oð /ð /ð /ñ „[ð/ð* ðBØ 	Ô*ðBØ2:¸3´-ðBà	�$�y”/Ô	"ðBð Bð Bñ „[ðBð Bð BrE   rH   c                   óH   — e Zd ZdZddee         deddfd„Z	 	 	 	 	 	 dd„ZdS )Ú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.
    Fro   rž   rL   Nc                 ó<   — t          |¦  «        | _        || _        d S rR   )Úlistro   rž   )rN   ro   rž   s      rF   Ú__init__zSegments.__init__›  s   € Ý˜X™œˆŒØ"ˆŒˆˆrE   Úconsoler   Úoptionsr   r   c              #   óŒ   K  — | j         r-t                               ¦   «         }| j        D ]
}|V — |V — Œd S | j        E d {V —† d S rR   )rž   rH   rn   ro   )rN   rÜ   rÝ   rn   rZ   s        rF   Ú__rich_console__zSegments.__rich_console__Ÿ  sp   è è € ð Œ>ð 	%Ý—<’<‘>”>ˆDØœ=ð ð �Ø���Ø�
�
�
�
ðð ð ”}Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$rE   rÑ   ©rÜ   r   rÝ   r   rL   r   )	r0   r1   r2   r3   r
   rH   rV   rÛ   rß   rD   rE   rF   rØ   rØ   ’  s~   € € € € € ðð ð#ð # ¨'Ô!2ð #¸tð #ÐPTð #ð #ð #ð #ð	%Ø ð	%Ø+;ð	%à	ð	%ð 	%ð 	%ð 	%ð 	%ð 	%rE   rØ   c                   óP   — e Zd Zddeee                  deddfd„Z	 	 	 	 	 	 dd„ZdS )ÚSegmentLinesFr–   rž   rL   Nc                 ó<   — t          |¦  «        | _        || _        dS )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ž   )rN   r–   rž   s      rF   rÛ   zSegmentLines.__init__¬  s   € õ ˜%‘[”[ˆŒ
Ø"ˆŒˆˆrE   rÜ   r   rÝ   r   r   c              #   óž   K  — | j         r1t                               ¦   «         }| j        D ]}|E d {V —† |V — Œd S | j        D ]
}|E d {V —† Œd S rR   )rž   rH   rn   r–   )rN   rÜ   rÝ   r‚   rn   s        rF   rß   zSegmentLines.__rich_console__·  s†   è è € ð Œ>ð 	 Ý—|’|‘~”~ˆHØœ
ð ð �Ø�������Ø����ðð ð œ
ð  ð  �Ø��������ð ð  rE   rÑ   rà   )	r0   r1   r2   r
   r   rH   rV   rÛ   rß   rD   rE   rF   râ   râ   «  sx   € € € € € ð	#ð 	#˜h t¨G¤}Ô5ð 	#À$ð 	#ÐSWð 	#ð 	#ð 	#ð 	#ð
 Ø ð
 Ø+;ð
 à	ð
 ð 
 ð 
 ð 
 ð 
 ð 
 rE   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_numberszVWhen you call [b]print()[/b], Rich [i]renders[/i] the object in to the 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):Úenumr   Ú	functoolsr   Ú	itertoolsr   Úloggingr   Úoperatorr   Útypingr   r	   r
   r   r   r   r   r   r   r   Úcellsr   r   r   r   r   Úreprr   r   rJ   r   rÜ   r   r   r   Úlogr    r_   rÒ   rÔ   rH   rØ   râ   r0   Úpip._vendor.rich.consoleÚpip._vendor.rich.syntaxræ   Úpip._vendor.rich.textrç   ÚcodeÚfrom_markuprI   ÚruleÚprintrÚ   ÚrenderÚ	fragmentsrD   rE   rF   ú<module>rü      sù  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð àð ?Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>à€i�ÑÔ€ðð ð ð ð �'ñ ô ð ð* Ø	ˆ+ÔØ	ˆ+�u˜S #˜X”Ð
&Ô'Ø	ˆ+�s˜CÐ
Ô ð"ô€ð €�„ðO	ð O	ð O	ð O	ð O	ˆjñ O	ô O	ñ „ðO	ðd%ð %ð %ð %ð %ñ %ô %ð %ð2 ð  ð  ð  ð  ñ  ô  ð  ð2 ˆzÒÑØ0Ð0Ð0Ð0Ð0Ð0Ø.Ð.Ð.Ð.Ð.Ð.Ø*Ð*Ð*Ð*Ð*Ð*ð€Dð
 ˆ4ÔÐ<Ñ=Ô=€Dàˆg‰iŒi€Gà‡L‚L�Ñ Ô Ð Ø‡M‚MØgñô ð ð ‡M‚MÐ4Ñ5Ô5Ð5Ø‡M‚M�&�&˜˜x°dÐ;Ñ;Ô;Ñ<Ô<Ð<Ø‡M‚M�O„O€OØ‡M‚MØañô ð ð ��W—^’^ DÑ)Ô)Ñ*Ô*€IØ‡M‚M�)ÑÔÐØ‡M‚M�O„O€OØ‡M‚MÐVÑWÔWÐWØ‡M‚M�$ÑÔÐØ‡M‚MØ^ñô ð ð ð ð; ÐrE   