
    Cj\4                    x   S r SSKJr  SSKJr  SSKJr  SSKJr  / SQr	SSK
r
SSKJr  SS	KJrJrJrJr  SS
KJr  SSKJr  SSKJrJrJrJrJrJrJr  SSKJr  \(       a  SSK J!r!   " S S\"5      r#\" SSS\\\\SS9RI                  S5      RK                  S5      RM                  S5      r'\" SSSS9RM                  5       r(\" SSSSSS S!S"S#S$SS%S&S'9RI                  S5      RK                  S5      r) " S( S)\5      r*\" S*SS\\\\SS%S&S+9
RK                  S5      r+ " S, S-\5      r,1 S.kr-S/S0S1S2S3S4S5S6.r.\\/   r0\\0/\/4   r1\\1\//\/4   r2\
Rf                  " S75      Rh                  4     S>S8 jjr5S?S@S9 jjr6  SA       SBS: jjr7  SA       SBS; jjr8\9S<:X  a  SS=K:J;r;  \;" 5       r<\<R{                  5         gg)Cz'
Utilities related to content markup.

    )annotations)
itemgetter)substitute_references)UnexpectedEnd)MarkupErrorescape
to_contentN)Template)TYPE_CHECKINGCallableMappingMatch)
active_app)Color)COLORPERCENTTOKENVARIABLE_REFExpectTokenizerStatetokenize_values)Style)Contentc                      \ rS rSrSrSrg)r   $   z)An error occurred parsing content markup. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       `/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/markup.pyr   r   $   s    3r#   r   zmarkup style valuez	(?<!\\)\]z[@a-zA-Z_-][a-zA-Z0-9_-]*=z\s+)end_tagkeypercentcolortokenvariable_ref
whitespaceTFz
markup tagz
(?<!\\)\[/z	(?<!\\)\[)open_closing_tagopen_tagzmarkup valuez[\w\.]+z\(z\)\[z\]z\{z\},z\".*?\"z'.*?')r%   wordround_start	round_endsquare_start
square_endcurly_start	curly_endcommar+   double_stringsingle_stringc                  ^    \ rS rSrSr\R                  5       r\\\\	S.r
\	\	\	S.rSSSS.rS	rg
)MarkupTokenizerS   zTokenizes content markup.)r-   r,   r%   r&   r1   r3   r5   r1   r3   r5   )r2   r4   r6   r   N)r   r   r   r    r!   expect_markup
expect_eofEXPECTexpect_markup_tagexpect_markup_expression	STATE_MAP
STATE_PUSH	STATE_POPr"   r   r#   r$   r;   r;   S   sJ    #%%'F%- '	I 00/J #$"Ir#   r;   zstyle token)	r%   r&   r'   r(   r)   r*   r+   r8   r9   c                  L    \ rS rSrSr\R                  5       rS\0r	\\\S.r
Srg)StyleTokenizerw   zTokenizes a styler&   r=   r   N)r   r   r   r    r!   expect_styler?   r@   rB   rC   rD   r"   r   r#   r$   rG   rG   w   s.    $$&F01I/0/Jr#   rG   >   dimboldblinkitalicstrikereverse	underline
underline2rK   rJ   rM   rP   rQ   rO   rN   )bdiuuursz(\\*)(\[[a-z#/@][^[]*?])c                    SS jnU" X 5      n U R                  S5      (       a  U R                  S5      (       d  U S-   $ U $ )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.
c                8    U R                  5       u  pU U SU 3$ )z!Called by re.sub replace matches.\)groups)matchbackslashestexts      r$   escape_backslashes"escape.<locals>.escape_backslashes   s%    !LLN{m2dV44r#   r[   z\\)r]   z
Match[str]returnstr)endswith)markup_escaper`   s      r$   r   r      s@    5
 '0FtV__V%<%<}Mr#   c                :   0 nSnSnSnSn[        5       n0 nUc-   [        R                  " 5       n	U	R                  R                  n
O[        U5      n
[        [        U" U S5      U
5      5      nU GH  nUR                  nUR                  nUS:X  Ga+  UR                  S5      n/ n/ n[        U5      nUR                  S;   a  UR                  SS	 X'     GOsUR                  UR                  5        U H  nUR                  S
:X  a	  U(       d    OwUR                  UR                  5        UR                  S;   a  UR                  UR                  5        Md  UR                  S;   d  Mv  UR                  5         U(       a  M    O   UR                  [         R                   5        SR#                  U5      nUX'   GMN  US:X  aM  U(       a#  [$        R&                  " UR                  5      nGM~  [$        R&                  " UR                  5      nGM  US:X  a  US:X  a  SU;  a  SUS'   GM  GM  US:X  a  SnGM  US:X  a7  U(       a  [$        R(                  " 5       nGM  [$        R(                  " 5       nGM  US:X  a  SnGM  U[*        ;   a	  XbU'   SnGM$  U[,        ;   a  Xb[,        U   '   SnGM>  U(       a  [$        R&                  " U5      nGM^  [$        R&                  " U5      nGMw  US:X  d  GM  [/        UR                  S5      5      S-  nU(       a  Ub  UR1                  U5      nGM  GM  Uc  GM  UR1                  U5      nGM     [3        XC4SUR                  SS5      0UD6nU(       a  U[2        R4                  " U5      -  nU$ ! [
         a    0 n
 GNGf = f)zParse a style with substituted variables.

Args:
    style: Style encoded in a string.
    variables: Mapping of variables, or `None` to import from active app.

Returns:
    A Style object.
NFT)zinline style r&   =>   r8   r9      r+   >   r5   r1   r3   >   r6   r2   r4   rh   r(   r)   linkonautonotr'   %g      Y@)rG   r   get
stylesheet_variable_tokensLookupErrorr   iterr   namevaluerstripnextappendpopexpectr@   joinr   parse	automaticSTYLESSTYLE_ABBREVIATIONSintmultiply_alphar   	from_meta)style	variablesstylesr(   
backgroundis_backgroundstyle_state	tokenizermetaappreference_tokensiter_tokensr)   
token_nametoken_valuer&   parenthesis
value_textfirst_tokenrw   r'   parsed_styles                         r$   parse_styler      s)    &(FE#JMK ID	?.."C  #~~>>*95e12	
K ZZ
kk$$S)C%'K$&J{+K#EE'--a3	!!+"3"34(Ezz\1+%%ekk2zz%SS#**5;;7'OO#)*{! )   !6!67
+!	7""[[5
EKK07"f$%#%DL &$ $& !&!2J!OO-E%#&&1{#" 33;F*;78" !&[!9J!KK4E9$+,,S12U:G)!+!:!:7!CJ * $!009EE H R&$1GR6RL--m  	"!	"s   N
 
NNc                    Sn [        XU5      $ ! [         a    [        S5      Se[         a  n[        [	        U5      5      SeSnAff = f)a  Convert markup to Content.

Args:
    markup: String containing markup.
    style: Optional base style.
    template_variables: Mapping of string.Template variables

Raises:
    MarkupError: If the markup is invalid.

Returns:
    Content that renders the markup.
TzCUnexpected end of markup; are you missing a closing square bracket?N)_to_contentr   r   	Exceptionrc   )re   r   template_variables_rich_traceback_omiterrors        r$   r	   r	   %  s[    $  06*<== Q
	  0#e*%4/0s    A	AA	c                t  ^ SSK JnJn  [        5       n/ nUR                  n[        U" U S5      5      n/ n	/ n
Sn[        R                  nTc  S nOSU4S jjnU GH  nUR                  nUS:X  a:  U" UR                  R                  SS5      5      nU" U5        U[        U5      -  nMP  US	:X  Ga  / nS
nS
nU HU  nUR                  S:X  a    ODUR                  S:X  a  SnOUR                  S:X  a  SnUR	                  UR                  5        MW     U(       d  U(       a8  SSR                  U5       3U(       a  SOS-   nU" U5        U[        U5      -  nM  SR                  U5      nUR                  5       (       d  SU S3nU" U5        U[        U5      -  nGMC  U	R	                  UUU" UR                  5       5      45        GMn  US:X  d  GMw  / nU H0  nUR                  S:X  a    OUR	                  UR                  5        M2     SR                  U5      R                  5       nU" U5      nU(       am  [        [        U	5      S5       HE  u  nu  nnnUU:X  d  M  U	R!                  U* 5        UU:w  a  U
R	                  U" UUU5      5          GM9     [#        SU S35      eU	(       d  [#        S5      eU	R!                  5       u  nnnUU:w  d  GMy  U
R	                  U" UUU5      5        GM     SR                  U5      n[        U5      n U	(       aJ  U (       aC  U
R%                  [        U	5       VVVs/ s H  u  nnnUU :w  d  M  U" UU U5      PM     snnn5        U
R'                  5         U
R)                  [+        S5      S9  U" UU(       a  U (       a  U" SU U5      /U
Q5      n!U!$ U
5      n!U!$ s  snnnf )a  Internal function to convert markup to Content.

Args:
    markup: String containing markup.
    style: Optional base style.
    template_variables: Mapping of string.Template variables

Raises:
    MarkupError: If the markup is invalid.

Returns:
    Content that renders the markup.
r   )r   Span)inlinerh   c                    U $ Nr   )r_   s    r$   <lambda>_to_content.<locals>.<lambda>g  s    Dr#   c               H   > SU ;   a  [        U 5      R                  T5      $ U $ )N$)r
   safe_substitute)template_textr   s    r$   process_text!_to_content.<locals>.process_textk  s(    m#.>>?QRR  r#   r_   r.   [r-   Fr%   Teofrh   ]r,   rj   zclosing tag '[/z]' does not match any open tagz-auto closing tag ('[/]') has nothing to close)r&   )r   rc   rb   rc   )textual.contentr   r   r;   rz   ru   r   _normalize_markup_tagrv   rw   replacelenr}   strip	enumeratereversedr{   r   extendrO   sortr   )"re   r   r   r   r   r   r_   text_appendr   style_stackspanspositionnormalize_markup_tagr   r)   r   rw   tag_textr   contains_texttext_contentopening_tag	blank_tagclosing_tagnormalized_closing_tagindextag_positiontag_bodynormalized_tag_bodyopen_position_content_texttext_lengthcontents"     `                               r$   r   r   C  s   & .!ID++Ky89K.0KEH !66!(	!
 ZZ
 !4!4UC!@AEE
"H:%HC!M$::*ZZ6)$(MZZ5(C, % !"2778#4"56"ML)C-- ggh/"((**"#K= 2I	*I.H&&$'01B1B1DE --H$::*, % ''(+113K%9+%F"%LU[)1MHEHL(4G +.DD#/'83!LLlHh)OPM &)+6TU 
 #%&UVV-8__->*x H,LLmXx!HII L 774=Ll#K{ .6k-B-B)Hh{* 6X{H5-B	
 
MMO	JJ:a=J!27Kae	$-u-G
 N OTG
 Ns   6N3N3__main__)MarkupPlayground)re   rc   rf   _EscapeSubMethodrb   rc   r   )r   rc   r   zdict[str, str] | Nonerb   r   )rh   N)re   rc   r   zstr | Styler   zMapping[str, object] | Nonerb   r   )>r!   
__future__r   operatorr   textual.css.parser   textual.css.tokenizerr   __all__restringr
   typingr   r   r   r   textual._contextr   textual.colorr   textual.css.tokenizer   r   r   r   r   r   r   textual.styler   r   r   r   r   r?   expect_semicolonextract_textrA   r>   rB   r;   rI   rG   r   r   rc   _ReStringMatch_ReSubCallabler   compilesubr   r   r	   r   r   textual._markup_playgroundr   r   runr   r#   r$   <module>r      s|  
 #  3 /
1 	  : : '     '4) 4
 )!	 Ze\$   " ,.	    Ze# *n , %

 5 	^ 		
 
			
		  s>*C/0^S1367 
 !#

+F G K K 	2md 6:000 40 	0@ 6:EEE 4E 	EP z;

CGGI	 r#   