
    AHj\4                    t   d Z ddlmZ ddlmZ ddlmZ ddlmZ g dZ	ddl
Z
ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZmZmZmZmZmZmZ ddlmZ erddl m!Z!  G d de"      Z# edddeeeed      jI                  d      jK                  d      jM                  d      Z' eddd      jM                         Z( edddddd d!d"d#d$dd%d&'      jI                  d      jK                  d      Z) G d( d)e      Z* ed*ddeeeedd%d&+
      jK                  d      Z+ G d, d-e      Z,h d.Z-d/d0d1d2d3d4d5d6Z.ee/   Z0ee0ge/f   Z1ee1e/ge/f   Z2 e
jf                  d7      jh                  f	 	 	 	 	 d>d8Z5d?d@d9Z6	 	 dA	 	 	 	 	 	 	 dBd:Z7	 	 dA	 	 	 	 	 	 	 dBd;Z8e9d<k(  rdd=l:m;Z;  e;       Z<e<j{                          yy)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                      e Zd ZdZy)r   z)An error occurred parsing content markup.N)__name__
__module____qualname____doc__     F/root/tools/cai/cai_env/lib/python3.12/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                  V    e Zd ZdZej                         ZeeeedZ	eeedZ
ddddZy)	MarkupTokenizerzTokenizes content markup.)r*   r)   r"   r#   r.   r0   r2   r.   r0   r2   )r/   r1   r3   N)r   r   r   r   expect_markup
expect_eofEXPECTexpect_markup_tagexpect_markup_expression	STATE_MAP
STATE_PUSH	STATE_POPr   r    r!   r8   r8   S   sJ    #%%'F%- '	I 00/J #$"Ir    r8   zstyle token)	r"   r#   r$   r%   r&   r'   r(   r5   r6   c                  D    e Zd ZdZej                         ZdeiZeeedZ	y)StyleTokenizerzTokenizes a styler#   r9   N)
r   r   r   r   expect_styler;   r<   r>   r?   r@   r   r    r!   rC   rC   w   s.    $$&F01I/0/Jr    rC   >   dimboldblinkitalicstrikereverse	underline
underline2rF   rE   rH   rK   rL   rJ   rI   )bdiuuursz(\\*)(\[[a-z#/@][^[]*?])c                n    dd} |||       } | j                  d      r| j                  d      s| dz   S | 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.
    c                :    | j                         \  }}| | d| S )z!Called by re.sub replace matches.\)groups)matchbackslashestexts      r!   escape_backslashesz"escape.<locals>.escape_backslashes   s'    !LLNT{m2dV44r    rV   z\\)rX   z
Match[str]returnstr)endswith)markup_escaper[   s      r!   r   r      s<    5
 '0FtV__V%<}Mr    c                   i }d}d}d}d}t               }i }|,	 t        j                         }	|	j                  j                  }
nt        |      }
t        t         || d      |
            }|D ]  }|j                  }|j                  }|dk(  r|j                  d      }g }g }t        |      }|j                  dv r|j                  dd	 ||<    n'|j                  |j                         |D ]}  }|j                  d
k(  r|s nj|j                  |j                         |j                  dv r|j                  |j                         [|j                  dv sj|j                          |r} n |j                  t         j                          dj#                  |      }|||<   9|dk(  rD|r!t%        j&                  |j                        }at%        j&                  |j                        }|dk(  r|dk(  rd|vsd|d<   |dk(  rd}|dk(  r.|rt%        j(                         }t%        j(                         }|dk(  rd}|t*        v r	|||<   d}|t,        v r||t,        |   <   d}|rt%        j&                  |      } t%        j&                  |      }7|dk(  s>t/        |j                  d            dz  }|r|a|j1                  |      }t|x|j1                  |      } t3        ||fd|j                  dd      i|}|r|t3        j4                  |      z  }|S # t
        $ r i }
Y w xY w)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#   =>   r5   r6      r(   >   r2   r.   r0   >   r3   r/   r1   rb   r%   r&   linkonautonotr$   %g      Y@)rC   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_tokenrq   r$   parsed_styles                         r!   parse_styler      s1    &(FE#JMK ID	?.."C  #~~>>*95e12	
K  B:ZZ
kk$$S)C%'K$&J{+K#EE'--a3S	!!+"3"34( 	"Ezz\1+%%ekk2zz%SS#**5;;7'OO#)*!	"   !6!67
+!S	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B:H UR&$1GR6RL--m  	"!	"s   L5 5MMc                    d}	 t        | ||      S # t        $ r t        d      dt        $ r}t        t	        |            dd}~ww xY w)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   	Exceptionr]   )r_   r   template_variables_rich_traceback_omiterrors        r!   r	   r	   %  s]    $  065*<== Q
	  0#e*%4/0s    AAAc                   ddl m}m} t               }g }|j                  }t         || d            }g }	g }
d}t        j                  }d }ndfd}|D ][  }|j                  }|dk(  r9 ||j                  j                  dd            } ||       |t        |      z  }N|d	k(  rg }d
}d
}|D ]Q  }|j                  dk(  r n@|j                  dk(  rd}n|j                  dk(  rd}|j	                  |j                         S |s|r2ddj                  |       |rdndz   } ||       |t        |      z  }dj                  |      }|j                         sd| d} ||       |t        |      z  }$|	j	                  || ||j                               f       N|dk(  sUg }|D ].  }|j                  dk(  r n|j	                  |j                         0 dj                  |      j                         } ||      }|rht        t        |	      d      D ]A  \  }\  }}}||k(  s|	j!                  |        ||k7  r|
j	                   ||||               t#        d| d      |	st#        d      |	j!                         \  }}}||k7  sC|
j	                   ||||             ^ dj                  |      }t        |      } |	r?| r=|
j%                  t        |	      D cg c]  \  }}}|| k7  r
 ||| |       c}}}       |
j'                          |
j)                  t+        d              |||r| r |d| |      g|
      }!|!S |
      }!|!S c c}}}w )aA  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)inlinerb   c                    | S Nr   )rZ   s    r!   <lambda>z_to_content.<locals>.<lambda>g  s    D r    c               D    d| v rt        |       j                        S | S )N$)r
   safe_substitute)template_textr   s    r!   process_textz!_to_content.<locals>.process_textk  s(    m#.>>?QRR  r    rZ   r+   [r*   Fr"   Teofrb   ]r)   rd   zclosing tag '[/z]' does not match any open tagz-auto closing tag ('[/]') has nothing to close)r#   )r   r]   r\   r]   )textual.contentr   r   r8   rt   ro   r   _normalize_markup_tagrp   rq   replacelenrw   strip	enumeratereversedru   r   extendrJ   sortr   )"r_   r   r   r   r   r   rZ   text_appendr   style_stackspanspositionnormalize_markup_tagr   r&   r   rq   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!(	!
  DJ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 &)+6TU 
 #%&UVV-8__->*x H,LLmXx!HIIDJL 774=Ll#K{ .6k-B )Hh{* X{H5	
 
MMO	JJ:a=J!27Kae	$-u-G
 N OTG
 Ns   1M!__main__)MarkupPlayground)r_   r]   r`   _EscapeSubMethodr\   r]   r   )r   r]   r   zdict[str, str] | Noner\   r   )rb   N)r_   r]   r   zstr | Styler   zMapping[str, object] | Noner\   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_textr=   r:   r>   r8   rD   rC   rz   r{   r]   _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    