o 7]hz @sddlmZddlmZddlZddlmZmZmZm Z m Z m Z m Z m Z ddlmZddlmZddlmZmZdd lmZdd lmZed ejZed ZGd dde Ze eZeegefZeeegefZ edj!fdede defddZ"dedee e#e ee effddZ$   d&dede eefde%de edef ddZ&e'dkrgdZ(dd l)m*Z*dd!l+m,Z,e*d"d#d$d%Z-e(D] Z.e-/ee.e.qe,e-dSdS)') literal_eval) attrgetterN)CallableIterableListMatch NamedTupleOptionalTupleUnion) MarkupError)Style)SpanText) EmojiVariant)_emoji_replacez((\\*)\[([a-z#\/@].*?)\])z^([\w\.]*?)(\(.*?\))?$c@sJeZdZUdZeed< eeed< defddZedefddZ d S) TagzA tag in console markup.name parametersreturncCs"|jdur|jS|jd|jS)N rrselfr9/usr/lib/python3/dist-packages/pip/_vendor/rich/markup.py__str__sz Tag.__str__cCs.|jdur d|jdSd|jd|jdS)z*Get the string representation of this tag.N[]=rrrrrmarkup"s  z Tag.markupN) __name__ __module__ __qualname____doc__str__annotations__r rpropertyr!rrrrrs  rz(\\*)(\[[a-z#\/@].*?\])r!_escapercCs$dttdtfdd}|||}|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. matchrcSs|\}}||d|S)z!Called by re.sub replace matches.\)groups)r* backslashestextrrrescape_backslashes=s z"escape..escape_backslashes)rr&)r!r)r/rrrescape1s r0ccsd}t}t}t|D]`}|\}}}|\}} ||kr)||||dfV|rU|t|d\} } | rD|d| dfV|| d7}| rU||t|ddfV| }q |d\} } }|d|| | re|ndfV| }q |t|kr|||ddfVdSdS)zParse markup in to an iterable of tuples of (position, text, tag). Args: markup (str): A string containing console markup rNr+r )divmodrRE_TAGSfinditerr,spanlen partition)r!position_divmod_Tagr* full_textescapestag_textstartendr-escapedr.equalsrrrr_parseFs0   rBTstyleemoji emoji_variantc st}d|vrt|r|||d|dS||dSt|d}|j}tj}gjg}|j} t} t} dtdt t tfffdd } t |D] \} }}|durY||rU||n|qD|durO|j d r=|j d d}|r||}z| |\}}Wn,tytd |jd | d dwz\}}Wntytd| ddw|j dr0|jrd}|j}t|}|dur|\}}|durdn|}zt|}Wn3ty}ztd|d|jd|jd}~wty }z td|jd|dd}~ww|r|t|tr|n|ff}nd}| | |t|t|j |idqD| | |t|t|qD| ||j |j}t||fqDt|}ro\}}t|}|rl| | |||sWt|dddtdd|_ |S)a9Render console markup in to a Text instance. Args: markup (str): A string containing console markup. emoji (bool, optional): Also render emoji code. Defaults to True. Raises: MarkupError: If there is a syntax error in the markup. Returns: Text: A test instance. r)default_variant)rD style_namercs<ttdD]\}\}}|j|kr| Sqt|)z"Pop tag matching given style name.r ) enumeratereversedrKeyError)rHindex_tagpop style_stackrr pop_styles  zrender..pop_styleN/r z closing tag 'z' at position z doesn't match any open tagzclosing tag '[/]' at position z has nothing to close@rCz()zerror parsing z in z; r)metar>)key)!rrappendr normalizerPrrr&r intrBr startswithstriprKr r! IndexErrorr RE_HANDLERr*r,r SyntaxErrormsg Exception isinstancetupler6sortedrspans)r!rDrErF emoji_replacer.rXrYre append_span_Spanr:rRr8 plain_textrNrHr>open_tag handler_namer handler_matchmatch_parameters meta_paramserrornormalized_tag text_lengthrrOrrendergs           rr__main__)z[red]Hello World[/red]zagenta]Hello [b]World[/b]z9[bold]Bold[italic] bold and italic [/bold]italic[/italic]zDClick [link=https://www.willmcgugan.com]here[/link] to visit my Blogz+:warning-emoji: [bold red blink] DANGER![/])Table)printMarkupResult)rr )padding)rCTN)0astroperatorrretypingrrrrrr r r errorsr rDrr.rrrErrcompileVERBOSEr3r^rr&_ReStringMatch_ReSubCallable_EscapeSubMethodsubr0rZrBboolrrr"MARKUPpip._vendor.rich.tablertpip._vendor.richrugridr!add_rowrrrrsd (       (#  {