"Te jddlZddlmZddlmZddlmZmZmZm Z m Z m Z m Z m Z ddlmZddlmZddlmZdd lmZdd lmZmZej0d ej2Zej0d ZGd de Ze eZeegefZeeegefZ ej0djBfdede defdZ"dedee e#e ee effdZ$ d!dede eefde%de edef dZ&e'dk(rCgdZ(ddl)m*Z*ddl+m,Z,e,ddd Z-e(D]Z.e-j_ee.e.e*e-yy)"N) literal_eval) attrgetter)CallableIterableListMatch NamedTupleOptionalTupleUnion)_emoji_replace) EmojiVariant) MarkupError)Style)SpanTextz((\\*)\[([a-z#/@][^[]*?)])z^([\w.]*?)(\(.*?\))?$cReZdZUdZeed< eeed< defdZedefdZ y)TagzA tag in console markup.name parametersreturnch|j |jS|jd|jS)N rrselfs -/usr/lib/python3/dist-packages/rich/markup.py__str__z Tag.__str__s30DII 9= 1T__DU6V ct|jd|jdSd|jd|jdS)z*Get the string representation of this tag.[]=rrs rmarkupz Tag.markup!sG & {!  TYYKq 13 r N) __name__ __module__ __qualname____doc__str__annotations__r rpropertyr%r rrrsA" I$ 3     r rz(\\*)(\[[a-z#/@][^[]*?])r%_escapercdttdtfd}|||}|jdr|jds|dzS|S)zEscapes text so that it won't be interpreted as markup. Args: markup (str): Content to be inserted in to markup. Returns: str: Markup with square brackets escaped. matchrc:|j\}}||d|S)z!Called by re.sub replace matches.\)groups)r0 backslashestexts rescape_backslashesz"escape..escape_backslashes=s'!LLN T{m2dV44r r2z\\)rr*endswith)r%r.r6s rescaper80sN5%*55 ' 0F tV__V%<} Mr c#Kd}t}t}tj|D]}|j \}}}|j \}} ||kDr ||||df|rA|t |d\} } | r|d| zdf|| dzz }| r||t |ddf| }||jd\} } }|d|| | r|ndf| }|t |kr |||ddfyyw)zParse markup in to an iterable of tuples of (position, text, tag). Args: markup (str): A string containing console markup rNr2r$)divmodrRE_TAGSfinditerr3spanlen partition)r%position_divmod_Tagr0 full_textescapestag_textstartendr4escapedr5equalsrs r_parserKIs'HG D!!&)',||~$ 7HZZ\ s 8 /5 5 #*3w<#; KTK/55q(Ys7|~6<<#+#5#5c#: fjT4FjEEE%&#f+xy)4//sC%C'styleemoji emoji_variantc t}d|vrt|r||||S||St|}|j}tj}gj g}|j} t } t} dtdtttfffd } t|D]\} }}|%|jdd}||r||n|/|2|jjd r/|jd dj}|r||} | |\}}n \}}|jjdr|j(rrd}|j(j}t*j-|}||j/\}}|dn|} t1|}|r|t9|t:r|n|ff}nd}| | |t=|t|j|iY| | |t=|t|}| ||j|j(}jt=||ft=|}r3j \}}t|}|r| | |||r3t?|dddtAd|_!|S#t $rt#d |j$d | d dwxYw#t&$rt#d| ddwxYw#t2$r-}t#d|d|j(d|j4d}~wt6$r!}t#d|j(d|dd}~wwxYw)aRender console markup in to a Text instance. Args: markup (str): A string containing console markup. style: (Union[str, Style]): The style to use. emoji (bool, optional): Also render emoji code. Defaults to True. emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. Raises: MarkupError: If there is a syntax error in the markup. Returns: Text: A test instance. r")default_variant)rL style_namercttdD]"\}\}}|j|k(s| cSt|)z"Pop tag matching given style name.r ) enumeratereversedrKeyError)rQindex_tagpop style_stacks r pop_stylezrender..pop_stylesK(+)>B #OE8Asxx:%E6{" #z""r Nz\[/r z closing tag 'z' at position z doesn't match any open tagzclosing tag '[/]' at position z has nothing to close@z()zerror parsing z in z; r-)metarG)key)"rrappendr normalizerYrrr*r intrKreplacer startswithstriprUrr% IndexErrorr RE_HANDLERr0r3r SyntaxErrormsg Exception isinstancetupler?sortedrspans)r%rLrMrN emoji_replacer5rbrcrp append_span_SpanrCr[rA plain_textrXrQrGopen_tag handler_namer handler_matchmatch_parameters meta_paramserrornormalized_tag text_lengthrYrZs @@rrenderr}js*#M &DIM&- @  OU   e D [[FI)+K //CE,,K E D#c#eCHo#&,F^D@!*c  !#++E37J =,: F _xx""3' XXab\//1 !*:!6J$*3J*?x $*-%x ==++C0**') %-%8%8%>%>%@ (2(8(8(D (4=J=Q=Q=S:L*:(8(@FV' (*6z*BK( ,#-k5#A!,&1^ +K') !3t9e(--9U.V  eSYH FG"&i&93>>!J""CI~#>?ID@Ld)K  __& sC  e[%8 9  dd G)<=DJ KC$$)+CJJ<~hZOjk#$$&$)rs VVV* "**%JJ  RZZ0 1  * .s>*C/0^S1367 !+ +F G K K   20308E#x}hsm*K$LM0F ",0 } } e } }L) }  }@ zF 8V 4D+ T&\6*+ $K#r