§
    .çiŒ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	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.j0        d¦  «        Z1 e¦   «         Ze 2                    d¦  «         e 3                    d¦  «         e 3                    d¦  «         e 3                     e,e/dd¬¦  «        ¦  «         e 3                    ¦   «          e 3                    d¦  «          e4e 5                    e1¦  «        ¦  «        Z6e 3                    e6¦  «         e 3                    ¦   «          e 3                    d ¦  «         e 3                    e1¦  «         e 3                    d!¦  «         d"S d"S )#é    )Ú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                   ó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© ó    úQ/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/rich/segment.pyr   r       sj   € € € € € ØNÐ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d2d„¦   «         Ze	 	 d3ded          dee         dee         ded          fd„¦   «         Ze	 d4d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	 	 	 d5ded          dedee         dededeed                   fd„¦   «         Z e	 	 d6d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	 	 	 d7d"eed                   d$ed%ee         dee         d&edeed                   fd'„¦   «         Z$e	 d4d(e%d          d"eed                   d$ed%eded&edeed                   fd)„¦   «         Z&e	 d4d(e%d          d"eed                   d$ed%eded&edeed                   fd*„¦   «         Z'e	 d4d(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          d0ee         deed                   fd1„¦   «         Z-dS )8Ú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   )ÚselfrG   Ú_stylerI   s       rD   Úcell_lengthzSegment.cell_lengthN   s%   € ð !%Ñˆˆf�gØÐ/ˆqˆq¥¨$¡¤Ð/rC   c              #   óv   K  — | j         V — | j        €| j        �| j        V — d S d S | j        V — | j        V — d S ©N)rG   rI   rH   ©rL   s    rD   Ú__rich_repr__zSegment.__rich_repr__X   sa   è è € ØŒiˆˆˆØŒ<ÐØŒzÐ%Ø”jÐ Ð Ð Ð Ð ð &Ð%ð ”*ÐÐÐØ”,ÐÐÐÐÐrC   c                 ó*   — t          | j        ¦  «        S )z#Check if the segment contains text.)ÚboolrG   rQ   s    rD   Ú__bool__zSegment.__bool__a   s   € å�D”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    rH |||	         ¦  «        dk    r3 ||d|	…         dz   ||¦  «         |d||	dz   d…         z   ||¦  «        fS |dk    rK |||	dz
           ¦  «        dk    r3 ||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.
        Ú TNéÿÿÿÿ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   sÉ  € ð  'Ñˆˆe�WÝˆØÔ)ˆØ�+ÒÐØ˜H˜H R¨°Ñ8Ô8Ð8Ð8å+ˆ	å�3˜Ñ$­¨D©	¬	Ñ1Ñ2Ô2ˆð	Ø˜$˜3˜$”ZˆFÝ Ñ'Ô'ˆHØ ‘^ˆFØð à�H˜V U¨GÑ4Ô4Ø�H˜T # $ $œZ¨°Ñ8Ô8ðð ð ˜Š|ˆ| 	 	¨$¨s¬)Ñ 4Ô 4¸Ò 9Ð 9à�H˜T $ 3 $œZ¨#Ñ-¨u°gÑ>Ô>Ø�H˜S 4¨¨a©¨	¨	¤?Ñ2°E¸7ÑCÔCðð ð ˜Š|ˆ| 	 	¨$¨s°Q©w¬-Ñ 8Ô 8¸AÒ =Ð =à�H˜T ) C¨!¡G )œ_¨sÑ2°E¸7ÑCÔCØ�H˜S 4¨¨¨¤:Ñ-¨u°gÑ>Ô>ðð ð ˜#Š~ˆ~Ø�q‘��à�q‘�ð-	rC   c                 ó  — | \  }}}|dk    sJ ‚t          |¦  «        rX|t          |¦  «        k    r| t          d||¦  «        fS t          |d|…         ||¦  «        t          ||d…         ||¦  «        fS |                      | |¦  «        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ˆxˆxå! $Ñ'Ô'ð 	à•c˜$‘i”iÒÐØ�W R¨°Ñ8Ô8Ð8Ð8å˜˜T˜c˜Tœ
 E¨7Ñ3Ô3Ý˜˜S˜T˜Tœ
 E¨7Ñ3Ô3ðð ð
 × Ò   sÑ+Ô+Ð+rC   c                 ó   —  | d¦  «        S )zMake a new line segment.Ú
rB   )r`   s    rD   ÚlinezSegment.lineµ   s   € ð ˆs�4‰yŒyÐrC   Ú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 rP   rB   )Ú.0rG   rM   rI   Úapplyr`   s       €€rD   ú	<genexpr>z&Segment.apply_style.<locals>.<genexpr>Ð   s\   øè è € ð ð á)�D˜& 'ð ��D 'Ð<˜$˜$¨u¨u°V©}¬}¸gÑFÔFðð ð ð ð ð rC   c              3   óP   •K  — | ] \  }}} ‰||rd n|r|‰z   n‰|¦  «        V — Œ!d S rP   rB   )rq   rG   rM   rI   r`   rn   s       €€rD   rs   z&Segment.apply_style.<locals>.<genexpr>Õ   sr   øè è € ð ð ñ *�D˜& 'ð �Øð #ðM˜˜à5;ÐK˜f zÑ1Ð1Ààñô ðð ð ð ð ð rC   )Ú__add__)r`   rm   rH   rn   Úresult_segmentsrr   s   `  ` @rD   Úapply_stylezSegment.apply_styleº   s‰   øøø€ ð& #ˆØð 	Ø”MˆEðð ð ð ð à-<ðñ ô ˆOð ð 	ðð ð ð ð ð .=ðñ ô ˆOð ÐrC   FrW   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Ô4°hÑ?Ô?Ð?rC   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.
        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Ð#Ø!(‘��e˜QØð -Ø,0¯NªN¸4Ñ,@Ô,@Ñ)�E˜8 TØð 2Ø˜˜s˜s 5¨%Ñ0Ô0Ñ1Ô1Ð1Øð -Ø"˜
˜
˜
Ø!˜Ø!%¤˜ð ð -øð ��w‘”��Øð 	ØˆJˆJˆJˆJˆJð	ð 	rC   c              #   ó  K  — g }|j         }|D ]i}d|j        v rS|j        sL|\  }}}|rC|                     d¦  «        \  }}	}|r | | ||¦  «        ¦  «         |	r|dfV — g }|j         }|°CŒ^ ||¦  «         Œj|r|dfV — dS dS )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Ð#Ø!(‘��e˜QØð -Ø,0¯NªN¸4Ñ,@Ô,@Ñ)�E˜8 TØð 2Ø˜˜s˜s 5¨%Ñ0Ô0Ñ1Ô1Ð1Øð -Ø# T˜lÐ*Ð*Ð*Ø!˜Ø!%¤˜ð ð -øð ��w‘”��Øð 	 Ø˜�-ÐÐÐÐÐð	 ð 	 rC   TÚlengthÚpadÚinclude_new_linesc              #   ó   K  — g }|j         }| j        } | d¦  «        }	|D ]˜}
d|
j        v r‚|
j        s{|
\  }}}|rr|                     d¦  «        \  }}}|r | | ||¦  «        ¦  «         |r> |||||¬¦  «        }|r|                      |	¦  «         |V — |                     ¦   «          |°rŒ� ||
¦  «         Œ™|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.
        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  sV  è è € ð* !ˆØ”ˆà Ô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Ø*Ð*Ð*Ð*ØŸ
š
™œ˜ð ð %øð ��w‘”��Øð 	IØ$Ð$ T¨6¸ÀCÐHÑHÔHÐHÐHÐHÐHÐHð	Ið 	IrC   rl   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 rP   )rN   )rq   rX   s     rD   rs   z-Segment.adjust_line_length.<locals>.<genexpr>t  s%   è è € ÐBÐB°'˜'Ô-ÐBÐBÐBÐBÐBÐBrC   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Ð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ØˆrC   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   ó:   •K  — | ]\  }}}|° ‰|¦  «        V — Œd S rP   rB   )rq   rG   rH   rI   Ú	_cell_lens       €rD   rs   z*Segment.get_line_length.<locals>.<genexpr>™  s7   øè è € ÐSÐSÑ'; t¨U°GÈ7ÐS�9�9˜T‘?”?ÐSÐSÐSÐSÐSÐSrC   )r   r’   )r`   rl   r—   s     @rD   Úget_line_lengthzSegment.get_line_lengthŽ  s-   ø€ õ ˆ	ÝÐSÐSÐSÐS¸tÐSÑSÔSÑSÔSÐSrC   Ú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 rP   rB   )rq   rl   r˜   s     €rD   rs   z$Segment.get_shape.<locals>.<genexpr>¦  s-   øè è € Ð@Ð@°$˜˜¨Ñ-Ô-Ð@Ð@Ð@Ð@Ð@Ð@rC   r   )r˜   Úmaxr_   )r`   r™   Ú	max_widthr˜   s      @rD   Ú	get_shapezSegment.get_shape›  sJ   ø€ ð Ô-ˆØDIÐP•CÐ@Ð@Ð@Ð@¸%Ð@Ñ@Ô@Ñ@Ô@Ð@Èqˆ	Ø�3˜u™:œ:Ð&Ð&rC   Ú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]   rk   Nc                 ó,   •— g | ]} ‰|‰‰¬ ¦  «        ‘ŒS ))rH   rB   )rq   rl   rŠ   rH   rŸ   s     €€€rD   ú
<listcomp>z%Segment.set_shape.<locals>.<listcomp>Æ  s9   ø€ ð 
ð 
ð 
Ø=AÐÐ˜t U°%Ð8Ñ8Ô8ð
ð 
ð 
rC   )r_   rŠ   Úextend)
r`   r™   rŸ   r    rH   r¡   Ú_heightÚblankÚshaped_linesrŠ   s
     ` `    @rD   Ú	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ØÐrC   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Í  sƒ   € ð* �s 5™zœzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔ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ê  sƒ   € ð* �s 5™zœzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔ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œzÑ)ˆØð 	Ø˜˜˜”8ˆOØ�g�v�g”ˆØ2;ÐX���C˜%‘K $Ñ&¨Ñ.Ô.Ð.ÀÀÀSÈ5Á[ÐRWÑAXÔAXˆØ 1Ñ$ˆ	Ø" YÑ.ˆØ��	˜IÑ%¨Ñ-°%°°	¸LÑ0HÑHˆØˆrC   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ÚStopIterationrF   rH   rI   rG   )r`   rm   Úiter_segmentsÚlast_segmentra   rX   s         rD   Ú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)rI   rH   Úupdate_link)r`   rm   rX   rG   rH   Ú_controls         rD   Ústrip_linkszSegment.strip_linksA  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rC   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
        NrB   )r`   rm   rG   rM   rI   s        rD   Ústrip_styleszSegment.strip_stylesR  sE   è è € ð &.ð 	+ð 	+Ñ!ˆD�&˜'Ø�#�d˜D 'Ñ*Ô*Ð*Ð*Ð*Ð*ð	+ð 	+rC   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)r`   rm   ÚcacherG   rH   rI   Úcolorless_styles          rD   Úremove_colorzSegment.remove_color_  s—   è è € ð %'ˆØ$,ð 	/ð 	/Ñ ˆD�%˜Øð /Ø"'§)¢)¨EÑ"2Ô"2�Ø"Ð*Ø&+Ô&9�OØ#2�E˜%‘LØ�c˜$ °Ñ9Ô9Ð9Ð9Ð9Ð9à�c˜$  gÑ.Ô.Ð.Ð.Ð.Ð.ð	/ð 	/rC   Úcutsc              #   ó¬  K  — g }|j         }t          |¦  «        }	 t          |d¦  «        }|dk    rd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.
        Tr\   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  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ÐÐÐÐÐrC   )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€I�IØ!€Eˆ8�EŒ?Ð!Ð!Ñ!Ø/3€GˆX�h˜{Ô+Ô,Ð3Ð3Ñ3àð0˜Sð 0ð 0ð 0ñ „Xð0ð˜vð ð ð ð ð˜$ð ð ð ð ð ð(˜Dð (ð (ð (ñ „Xð(ð Ø€Yˆ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ð ,Ià˜9Ô%ð,Ið ð,Ið ˜Œð	,Ið
 ð,Ið  ð,Ið 
�$�y”/Ô	"ð,Ið ,Ið ,Iñ „[ð,Ið\ ð
 "&Øð*ð *à�9Œoð*ð ð*ð ˜Œð	*ð
 ð*ð 
ˆiŒð*ð *ð *ñ „[ð*ðX ð
T 4¨	¤?ð 
T°sð 
Tð 
Tð 
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ð 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rC   rF   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.
    Frm   r¡   rJ   Nc                 ó<   — t          |¦  «        | _        || _        d S rP   )Úlistrm   r¡   )rL   rm   r¡   s      rD   Ú__init__zSegments.__init__Ä  s   € Ý˜X™œˆŒØ"ˆŒˆˆrC   Úconsoler   Úoptionsr   r   c              #   óŒ   K  — | j         r-t                               ¦   «         }| j        D ]
}|V — |V — Œd S | j        E d {V —† d S rP   )r¡   rF   rl   rm   )rL   rÝ   rÞ   rl   rX   s        rD   Ú__rich_console__zSegments.__rich_console__È  sp   è è € ð Œ>ð 	%Ý—<’<‘>”>ˆDØœ=ð ð �Ø���Ø�
�
�
�
ðð ð ”}Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$rC   rÒ   ©rÝ   r   rÞ   r   rJ   r   )	r.   r/   r0   r1   r	   rF   rT   rÜ   rà   rB   rC   rD   rÙ   rÙ   »  s~   € € € € € ðð ð#ð # ¨'Ô!2ð #¸tð #ÐPTð #ð #ð #ð #ð	%Ø ð	%Ø+;ð	%à	ð	%ð 	%ð 	%ð 	%ð 	%ð 	%rC   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¡   rJ   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¡   )rL   r™   r¡   s      rD   rÜ   zSegmentLines.__init__Õ  s   € õ ˜%‘[”[ˆŒ
Ø"ˆŒˆˆrC   rÝ   r   rÞ   r   r   c              #   óž   K  — | j         r1t                               ¦   «         }| j        D ]}|E d {V —† |V — Œd S | j        D ]
}|E d {V —† Œd S rP   )r¡   rF   rl   r™   )rL   rÝ   rÞ   r‚   rl   s        rD   rà   zSegmentLines.__rich_console__à  s†   è è € ð Œ>ð 	 Ý—|’|‘~”~ˆHØœ
ð ð �Ø�������Ø����ðð ð œ
ð  ð  �Ø��������ð ð  rC   rÒ   rá   )	r.   r/   r0   r	   r
   rF   rT   rÜ   rà   rB   rC   rD   rã   rã   Ô  sx   € € € € € ð	#ð 	#˜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àˆ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Ø]ñô ð ð ��W—^’^ DÑ)Ô)Ñ*Ô*€IØ‡M‚M�)ÑÔÐØ‡M‚M�O„O€OØ‡M‚MÐVÑWÔWÐWØ‡M‚M�$ÑÔÐØ‡M‚MØ^ñô ð ð ð ð; ÐrC   