o 7]h@sPUddlZddlmZmZddlmZddlmZddlm Z ddl m Z m Z m Z mZmZmZmZmZmZmZddlmZdd lmZdd lmZdd lmZdd lmZmZdd l m!Z!ddl"m#Z#ddl$m Z ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-e rddl.m/Z/m0Z0m1Z1m2Z2dZ3de4d<dZ5de4d<e6dZ7ee8dfZ9e e8gee-fZ:GdddeZ;Gddde&Zm/Z/er?r3r3r3r4r(.s   r(c@sfeZdZdZgdZ  ddddddddded eeefd ed d ed dee dedee dee e ddfddZ de fddZde fddZdefddZdefddZdeddfddZdede fd d!Zdede fd"d#Zd$ee efddfd%d&Zede fd'd(Zedefd)d*Zedd+dddd,ded eeefd-e d.eed ed d ed ddfd/d0Zeddddddd1ded eeefd ed d ed dee dedee ddfd2d3Ze dddd4ded e d ed d ed ddf d5d6Z!edddddddd7d8eede"ee ffd eeefd ed d ed dee dede d9ee#eefddfd:d;Z$edefdeddfd?d=Z%ede e fd@dAZ'e'j&de e ddfdBdAZ'ddCeddfdDdEZ(ddFdGZ) H dd eeefdIe dee ddfdJdKZ* dd9e#eefdIe dee ddfdLdMZ+dd9ee#eefdNeddfdOdPZ,dQeddfdRdSZ-dTdUdVe defdWdXZ. dddYdZed eee/e fd[ede fd\d]Z0d+d^d_e1ed eeefd`e de fdadbZ2ddcddZ3dee ddfdfdgZ4dhe ddfdidjZ5dTdUdkdlde1e6fdmdnZ7dTdUdkdlde8fdodpZ9ddTdUdede1dqfdrdsZ:dte1dddfdudvZ;ddee ddfdwdxZdde deddfddZ?dde deddfddZ@dde deddfddZAddeBde deddfddZC ddedefd eeedfddfddZDdddZEde1e"eee fddfddZFdddZG ddydyddede de deHfddZIde1e deHfddZJdde ddfddZKddddddTdUde d ed d ed de dee deHfddZLde deHfddZMde fddZN dddddee ded e ddfddZOdS)r'aText with color / style. Args: text (str, optional): Default unstyled text. Defaults to "". style (Union[str, Style], optional): Base style for text. Defaults to "". justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. end (str, optional): Character to end text with. Defaults to "\\n". tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to 8. spans (List[Span], optional). A list of predefined style spans. Defaults to None. ) _textr+justifyoverflowno_wrapr*tab_size_spans_lengthN )rIrJrKr*rLspanstextr+rIr!rJr"rKr*rLrRr,c CsHt|g|_||_||_||_||_||_||_|pg|_t ||_ dSr6) rrHr+rIrJrKr*rLrMlenrN) r2rSr+rIrJrKr*rLrRr3r3r4__init__s  z Text.__init__cC|jSr6)rNr1r3r3r4__len__z Text.__len__cC t|jSr6)rGrNr1r3r3r4r7s z Text.__bool__cCrVr6plainr1r3r3r4__str__rXz Text.__str__cCsd|jd|jdS)Nz)r[rMr1r3r3r4r5sz Text.__repr__othercCs(t|ttfr|}|||StSr6)r.rFr'copyappendNotImplemented)r2r_resultr3r3r4__add__s  z Text.__add__cCs&t|tstS|j|jko|j|jkSr6)r.r'rbr[rMr2r_r3r3r4__eq__s z Text.__eq__cCs.t|tr ||jvSt|tr|j|jvSdS)NF)r.rFr[r'rer3r3r4 __contains__s    zText.__contains__slicecsddtddffdd }t|tr||S|tj\}}}|dkr.||g}|dStd)Nr8r,r'cs.ttjfddjDdd}|S)Ncs6g|]\}}}|kr|krnndd|qS)rrr3.0r)r*r+_Spanr8r3r4 s  z9Text.__getitem__..get_text_at..rO)rRr*)r(r'r[rM)r8rSr1rkr4 get_text_ats  z%Text.__getitem__..get_text_atrz%slices with step!=1 are not supported)rDr.indicesrTr[divide TypeError)r2rhrnr)stopsteplinesr3r1r4 __getitem__s zText.__getitem__cCrY)z5Get the number of cells required to render this text.)rr[r1r3r3r4rs z Text.cell_lenc Csddlm}g}|j}dd|jfgdd|jDdd|jDt|d|jf}|jtddd d}|j}|D]'\}}} ||krO||||||}| ra||rZd | d nd | d q:d |} | S)z~Get console markup to render this Text. Returns: str: A string potentially creating markup tags. r)escaperFcs|] }|jd|jfVqdSFN)r)r+rjspanr3r3r4 zText.markup..csrwTN)r*r+ryr3r3r4r{r|Tkeyz[/][rO) markuprvr[r+rMrTsortrrajoin) r2rvoutputr[ markup_spanspositionrar8closingr+rr3r3r4rs.    z Text.markupT)r+emoji emoji_variantrIrJrrc Cs,ddlm}|||||d}||_||_|S)aCreate Text instance from markup. Args: text (str): A string containing console markup. emoji (bool, optional): Also render emoji code. Defaults to True. justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. Returns: Text: A Text instance with markup rendered. r)render)rr)rrrIrJ) clsrSr+rrrIrJr rendered_textr3r3r4 from_markups zText.from_markupr+rIrJrKr*rLc CsFddlm}td||||||d} |} | dd| |D} | S)aCreate a Text object from a string containing ANSI escape codes. Args: text (str): A string containing escape codes. style (Union[str, Style], optional): Base style for text. Defaults to "". justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. end (str, optional): Character to end text with. Defaults to "\\n". tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to 8. r) AnsiDecoderrP)rIrJrKr*rLr+css|]}|VqdSr6r3rjliner3r3r4r{6sz!Text.from_ansi..)ansirr'rdecode) rrSr+rIrJrKr*rLrjoinerdecoderrcr3r3r4 from_ansis  zText.from_ansirIrJcCs||||d}|||S)aaConstruct a Text instance with a pre-applied styled. A style applied in this way won't be used to pad the text when it is justified. Args: text (str): A string containing console markup. style (Union[str, Style]): Style to apply to the text. Defaults to "". justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. Returns: Text: A text instance with a style applied to the entire string. r)stylize)rrSr+rIrJ styled_textr3r3r4styled9s z Text.styled)r+rIrJrKr*rLmetapartsrc GsZ|||||||d} | j} t} |D]} t| | tfr| | q| | q|r+| || S)aRConstruct a text instance by combining a sequence of strings with optional styles. The positional arguments should be either strings, or a tuple of string + style. Args: style (Union[str, Style], optional): Base style for text. Defaults to "". justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. end (str, optional): Character to end text with. Defaults to "\\n". tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to 8. meta (Dict[str, Any], optional). Meta data to apply to text, or None for no meta data. Default to None Returns: Text: A new text instance. r)rar'r.rF apply_meta) rr+rIrJrKr*rLrrrSra_Textpartr3r3r4assembleRs"   z Text.assemblecCs0t|jdkrd|jg|jdd<|jdS)z Get the text as a single string.rrONr)rTrHrr1r3r3r4r[s z Text.plainnew_textcCsH||jkr |g|jdd<|j}t||_||jkr"|dSdSdS)zSet the text to a new value.N)r[rHrNrT _trim_spans)r2r old_lengthr3r3r4r[s    cCrV)z.Get a reference to the internal list of spans.rMr1r3r3r4rRsz Text.spanscCs|dd|_dS)z Set spans.Nr)r2rRr3r3r4rRsr[c Cs&t||j|j|j|j|j|jd}|S)zOReturn a new Text instance with copied meta data (but not the string or spans).r)r'r+rIrJrKr*rL)r2r[ copy_selfr3r3r4 blank_copys zText.blank_copyc Cs8t|j|j|j|j|j|j|jd}|j|jdd<|S)zReturn a copy of this instance.rN) r'r[r+rIrJrKr*rLrM)r2rr3r3r4r`s z Text.copyrr)cCsn|r5t|}|dkr||}|dur|}|dkr||}||ks$||kr&dS|jt|t|||dSdS)a{Apply a style to the text, or a portion of the text. Args: style (Union[str, Style]): Style instance or style definition to apply. start (int): Start offset (negative indexing is supported). Defaults to 0. end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. rN)rTrMrar(r9)r2r+r)r*lengthr3r3r4rsz Text.stylizecCst|}|j|||ddS)ahApply meta data to the text, or a portion of the text. Args: meta (Dict[str, Any]): A dict of meta information. start (int): Start offset (negative indexing is supported). Defaults to 0. end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. )r)r*N)r from_metar)r2rr)r*r+r3r3r4rs zText.apply_metahandlerscKs<|durin|}|dd|D|t||S)aApply event handlers (used by Textual project). Example: >>> from rich.text import Text >>> text = Text("hello world") >>> text.on(click="view.toggle('world')") Args: meta (Dict[str, Any]): Mapping of meta information. **handlers: Keyword args are prefixed with "@" to defined handlers. Returns: Text: Self is returned to method may be chained. NcSsi|] \}}d||qS)@r3)rjrvaluer3r3r4 zText.on..)updateitemsrrr)r2rrr3r3r4onszText.onsuffixcCs"|j|r|t|dSdS)zaRemove a suffix if it exists. Args: suffix (str): Suffix to remove. N)r[endswithr?rT)r2rr3r3r4 remove_suffixs zText.remove_suffixconsolerr8cCsf|dkr t||}|j}||j}|jD]\}}}||kr&|kr0nq|||dd7}q|S)a Get the style of a character at give offset. Args: console (~Console): Console where text will be rendered. offset (int): Offset in to text (negative indexing supported) Returns: Style: A Style instance. rrOr#)rT get_styler+r`rM)r2rr8rr+r)r* span_styler3r3r4get_style_at_offsets zText.get_style_at_offset) style_prefix re_highlightrcCsd}|jj}t}|j}t||D]Q}|j} |r;| \} } t|r)||| | n|} | dur;| | kr;||| | | |d7}| D]} | | \} } | dkra| | kra||| | || qEq|S)aHighlight text with a regular expression, where group names are translated to styles. Args: re_highlight (str): A regular expression. style (Union[GetStyleCallable, StyleType]): Optional style to apply to whole match, or a callable which accepts the matched text and returns a style. Defaults to None. style_prefix (str, optional): Optional prefix to add to style group names. Returns: int: Number of regex matches rNr) rMrar(r[refinditerrzcallable groupdictkeys)r2rr+rcount append_spanrlr[matchget_spanr)r* match_stylenamer3r3r4highlight_regexs&  zText.highlight_regex)case_sensitivewordsrc Cspddd|D}|jj}d}t}tj||j|rdntjdD]}|d\} } ||| | ||d7}q |S)aDHighlight words with a style. Args: words (Iterable[str]): Worlds to highlight. style (Union[str, Style]): Style to apply. case_sensitive (bool, optional): Enable case sensitive matchings. Defaults to True. Returns: int: Number of words highlighted. |css|]}t|VqdSr6)rrvrjwordr3r3r4r{Fsz'Text.highlight_words..rflagsr) rrMrar(rrr[ IGNORECASErz) r2rr+rre_wordsadd_spanrrlrr)r*r3r3r4highlight_words5s  zText.highlight_wordscCs|j|_dS)z"Strip whitespace from end of text.N)r[rstripr1r3r3r4rRsz Text.rstripsizecCsVt|}||kr'||}t|j}|dur)t|d}|t||dSdSdS)zRemove whitespace beyond a certain width at the end of the text. Args: size (int): The desired size of the text. Nr)rT_re_whitespacesearchr[groupr?r9)r2r text_lengthexcesswhitespace_matchwhitespace_countr3r3r4 rstrip_endVs zText.rstrip_end new_lengthcCs@t|}||kr||kr|||dS|||dSdS)z.rcsrr6rrr3r3r4r{r)r[ splitlinesmaxr<r)r2rrrSrtmax_text_widthrmin_text_widthr3r3r4__rich_measure__s zText.__rich_measure__rc#s^t}|j}|jst|V|r||VdSt|jtdtt|jd}fdd|D|j d<dgdd |Dd d |Dt |d df}|j t ddd gj }j}ijtjd tffdd } t||ddD]$\\} } } \} }}| r|| n|| | | kr||| | | Vq|r||VdSdS)aRender the text as Segments. Args: console (Console): Console instance. end (Optional[str], optional): Optional end character. Returns: Iterable[Segment]: Result of render that may be written to the console. Nrrcsi|] \}}||jqSr3r+rjindexrz)rr3r4rrzText.render..r)rFrcs |] \}}|jd|fVqdSrx)r)rr3r3r4r{zText.render..csrr}rrr3r3r4r{rTr~r,csBtfddtD}|}|dur|S|}||<|S)z#Construct current style from stack.c3s|]}|VqdSr6r3)rj _style_id) style_mapr3r4r{rz9Text.render..get_current_style..N)tuplesorted)styles cached_style current_style)combinestack style_cachestyle_cache_getrr3r4get_current_stylesz&Text.render..get_current_style)rr[rMrrrnulllist enumerater+rTrrraremovegetrzip)r2rr*_SegmentrSenumerated_spansrR stack_append stack_poprr8leavingstyle_id next_offset_r3)rrrrrrr4rsL      &  z Text.renderrtcs}dtdffdd }|jj}|jj}|jj}dt|D]*}||j|jr:|t||j|fdd|jDt|7q#|_ |S)zJoin text together with this instance as the separator. Args: lines (Iterable[Text]): An iterable of Text instances to join. Returns: Text: A new text instance containing join text. r,r'c3s<jrtD] \}}|V|sVqdSEdHdSr6)r[r)lastr)rtr2r3r4 iter_textszText.join..iter_textrc3s*|]\}}}|||VqdSr6r3rirkr3r4r{  zText.join..) rr rHextendrMrar(r+rTrN)r2rtrr extend_textr extend_spansrSr3)rlrtr8r2r4rs"    z Text.joinc Csd|jvrdSd}|dur|j}|dusJ|}|j}|j}|jdddD]E}|jddd}|D]9}|jdrg|jdddg|_|||t|7}||d |d } | rf|d| ||| 7}q2||q2q'|jg|_t|j|_ |j |j dd<dS) ztConverts tabs to spaces. Args: tab_size (int, optional): Size of tabs. Defaults to 8.  NrrPT)include_separatorrr]r) r[rLrrar+r<rrHrTrNrM) r2rLposrcra_stylerrrspacesr3r3r4 expand_tabss4      zText.expand_tabsF)rJpadrrcCs|p|jpt}|dkrHt|j}||kr+|dkr$t|j|dd|_nt|j||_|rJ||krL||}|jd|g|_t|j|_dSdSdSdS)auTruncate text if it is longer that a given width. Args: max_width (int): Maximum number of characters in text. overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None, to use self.overflow. pad (bool, optional): Pad with spaces if the length is less than max_width. Defaults to False. ignoreellipsisru…r]N)rJr&rr[rrHrTrN)r2rrJr _overflowrrr3r3r4truncates  z Text.truncatecs2t|jtfdd|jD|jdd<dS)z=Remove or modify any spans that are over the end of the text.c<g|]}|jkr|jkr|n |jt|j|jqSr3r)r*r9r+ryrl max_offsetr3r4rm/  z$Text._trim_spans..NrTr[r(rMr1r3r"r4r+s  zText._trim_spansr]r charactercs`t|dks Jdr.|}||j||_tfdd|jD|jdd<dSdS)zxPad left and right with a given number of characters. Args: count (int): Width of padding. r&Character must be a string of length 1c&g|]\}}}|||qSr3r3rirlrr3r4rmDzText.pad..Nr%)r2rr&pad_charactersr3r)r4r9s zText.padcsXt|dks Jdr*||j|_tfdd|jD|jdd<dSdS)zPad the left with a given character. Args: count (int): Number of characters to pad. character (str, optional): Character to pad with. Defaults to " ". rr'cr(r3r3rir)r3r4rmTr*z!Text.pad_left..Nr%r2rr&r3r)r4pad_leftIs z Text.pad_leftcCs4t|dks Jd|r|j|||_dSdS)zPad the right with a given character. Args: count (int): Number of characters to pad. character (str, optional): Character to pad with. Defaults to " ". rr'N)rTr[r,r3r3r4rYszText.pad_rightalignwidthcCsx|||t|j}|r:|dkr|||dS|dkr2|d}|||||||dS|||dSdS)zAlign text to a given width. Args: align (AlignMethod): One of "left", "center", or "right". width (int): Desired width. character (str, optional): Character to pad with. Defaults to " ". leftcenterN)rrr[rr-)r2r.r/r& excess_spacer0r3r3r4r.ds  z Text.alignrcs t|ttfs tdt|rt|tr?t|}|j|t|}t||dur6|jt ||||j 7_ |St|trt |durNt d|j |j dure|jt||j |j|j |jfdd|jD|j t|7_ |S)zAdd text with an optional style. Args: text (Union[Text, str]): A str or Text to append. style (str, optional): A style name. Defaults to None. Returns: Text: Returns self for chaining. z(Only str or Text can be appended to TextNz2style must not be set when appending Text instancec3*|]\}}}|||VqdSr6r3rirlrr3r4r{rzText.append..)r.rFr'rqrTrrHrarMr(rN ValueErrorr+r[r)r2rSr+r8r3r5r4raxs:     z Text.appendcstt|j|jdur|jt||j|j|j|jfdd|jD|jt|7_|S)zAppend another Text instance. This method is more performant that Text.append, but only works for Text. Returns: Text: Returns self for chaining. Nc3r4r6r3rir5r3r4r{rz#Text.append_text..) r(rNr+rMrarTrHr[rr2rSr3r5r4 append_texts zText.append_texttokenscCsh|jj}|jj}t}t|}|D]\}}|||dur(||||t|||t|7}q||_|S)a(Append iterable of str and style. Style may be a Style instance or a str style definition. Args: pairs (Iterable[Tuple[str, Optional[StyleType]]]): An iterable of tuples containing str content and style. Returns: Text: Returns self for chaining. N)rHrarMr(rTrN)r2r9r8rrlr8contentr+r3r3r4 append_tokenss  zText.append_tokenscCs|j|jdS)zCopy styles from another Text instance. Args: text (Text): A Text instance to copy styles from, must be the same length. N)rMrr7r3r3r4 copy_stylesszText.copy_styles)r allow_blank separatorrr=cssJd|jvrt|gS|r(|ddttD}ndttffdd }tfdd||D}|sN rN| |S)aSplit rich text in to lines, preserving styles. Args: separator (str, optional): String to split on. Defaults to "\\n". include_separator (bool, optional): Include the separator in the lines. Defaults to False. allow_blank (bool, optional): Return a blank line if the text ends with a separator. Defaults to False. Returns: List[RichText]: A list of rich text, one per line of the original. zseparator must not be emptycss|]}|VqdSr6rrjrr3r3r4r{s zText.split..r,c3s6ttD]}|\}}|V|Vq dSr6)rrrvrz)rr)r*r>rSr3r4 flatten_spanss  z!Text.split..flatten_spansc3s|] }|jkr|VqdSr6rZr)r>r3r4r{s) r[rr`rprrrvr rDrpop)r2r>rr=rtrAr3r@r4r<s     z Text.splitoffsetscst|}|s t|gS|jt}dg||}tt||dd}|j|j|jt tfdd|D}|j sE|Sdd|j D}t|}t } |j D]\} } d} |} | | d} ||\}}| |kru|d} n | |kr~|d} nn| | d}qf| |kr|}n'|}} |} ||\}}| |kr|d} n | |kr|d} nn| | d}qt ||dD]&}||\}}td| |}t| |||}||kr||| ||qqV|S) zDivide text in to a number of lines at given offsets. Args: offsets (Iterable[int]): Offsets used to divide text. Returns: Lines: New RichText instances between offsets. rrNc3s,|]\}}||dVqdS))r+rIrJNr3)rjr)r*rrIrJr+rSr3r4r{s  zText.divide..cSsg|]}|jjqSr3)rMrarr3r3r4rm%szText.divide..r2)rrr`r[rTrr+rIrJr'rM_linesr(rangerr9)r2rC_offsetsrdivide_offsets line_ranges new_lines _line_appends line_countrl span_startspan_end lower_bound upper_bound start_line_no line_startline_end end_line_noline_no new_startnew_endr3rDr4rpsl             z Text.divideramountcsXt|j|tfdd|jD|jdd<|jd| g|_|j|8_dS)z7Remove a number of characters from the end of the text.cr r3r!ryr"r3r4rmVr$z#Text.right_crop..N)rTr[r(rMrHrN)r2rXr3r"r4r?Rs  zText.right_croprc Cs|p|jpt}|p |jp t}t||jdp|dk}t} |jddD]I} d| vr-| ||r5t| g} nt t | ||dkd} | | } | D]} | |qG|rZ| j||||d| D] } | j ||d q\| | q"| S) aWord wrap the text. Args: console (Console): Console instance. width (int): Number of characters per line. emoji (bool, optional): Also render emoji code. Defaults to True. justify (str, optional): Justify method: "default", "left", "center", "full", "right". Defaults to "default". overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None. tab_size (int, optional): Default tab size. Defaults to 8. no_wrap (bool, optional): Disable wrapping, Defaults to False. Returns: Lines: Number of lines. FrTr=rr%)r%r)rJ)rIr$rJr&rrKrr<rrrFrprrr) r2rr/rIrJrLrK wrap_justify wrap_overflowrtrrJrCr3r3r4rbs*     z Text.wrapcCs0t}|j}|D] }||||q |S)zFit the text in to given width by chopping in to lines. Args: width (int): Maximum characters in a line. Returns: Lines: List of lines. )rrar<r)r2r/rtrarr3r3r4fits     zText.fitcCsVddtjd|jtjdD}zttdd|Dpd}W|Sty*d}Y|Sw)zrAuto-detect indentation of code. Returns: int: Number of spaces used to indent code. cSsh|] }t|dqSr)rTrr?r3r3r4 s z*Text.detect_indentation.. ^( *)(.*)$rcSsg|]}|ds|qS)r2r3)rjindentr3r3r4rmsz+Text.detect_indentation..r)rrr[ MULTILINErrrq)r2 _indentations indentationr3r3r4detect_indentations zText.detect_indentationu│z dim green)r&r+ indent_sizecCs8|dur|n|}|}||d|d}td}g}|j} d} |jddD]U} || j} | r=| dsB| d7} q.| d} t t | |\}}||d|}|| jt |d| _| |dt || r| t||d g| d} | | q.| r| td |d g| |d |}|S) uAdds indent guide lines to text. Args: indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None. character (str, optional): Character to use for indentation. Defaults to "│". style (Union[Style, str], optional): Style of indent guides. Returns: Text: New text with indentation guides. Nr]rr_rTrYr2rrOrP)rdr`rrcompilerar<rr[rdivmodrTrrr'rr)r2rer&r+ _indent_sizerS indent_line re_indentrJadd_line blank_linesrrr` full_indentsremaining_space new_indentrr3r3r4with_indent_guidess4    zText.with_indent_guides)rOrO)rO)r,r')rNr6)r,N)r])rSr'r,r')rSr'r,N)rPr])Pr@rArBrC __slots__rFrrrrGrDr r(rUrWr7r\r5rrdobjectrfrgrhrupropertyrr classmethodrrrrrrr rr[setterrRrr`rrrrrGetStyleCallablerr rrrrrrrrrrrrrrr-rrr.rar8r;r<rr<rpr?rr\rdrpr3r3r3r4r'js>          %    ,      $  +      ;'&    ,   ,P 1__main__)ra Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Loremboldipsumitaliczjustify='left'redrzjustify='center'greenr1)r+rIzjustify='right'bluerightzjustify='full'magentafull)Cr functoolsrrmathroperatorrpip._vendor.rich.emojirtypingrrr r r r r rrr_loopr_pickr_wraprr.rcellsrr containersrcontrolrrjupyterrmeasurersegmentrr+rrrrr r!r"r$rEr&rfrrFTextTypervr(r'r@pip._vendor.rich.consolerSrruleprintr3r3r3r4sr    0             <