
    CjhB              
         % S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJr  S S
KJrJrJrJrJr  S SK J!r!J"r"  S SK#J$r$J%r%  S SK&J'r'  \RP                  S4\RP                  S4\RR                  S4\RR                  S4\RT                  S4\RT                  S4\RV                  S4\RV                  S4\RX                  S4S.	r-S\.S'   \R^                  " S\-   5      r0\" SS9S!S j5       r1      S"S jr2\" SS9S#S j5       r3  S$           S%S jjr4S&S jr5S'S jr6 S(     S)S jjr7    S*               S+S  jjr8g),    )annotationsN)	lru_cache)IterableIteratorNoReturn)HelpText)DeclarationErrorStylesBuilder)UnresolvedVariableError)CombinatorTypeDeclarationRuleSetSelectorSelectorSetSelectorType)Styles)
IDENTIFIERTokentokenizetokenize_declarationstokenize_values)ReferencedByUnexpectedEnd)CSSLocationSpecificity3)get_suggestion)r   r      )r   r   r   )r   r   r   r   r   r   )	selectorselector_startselector_classselector_start_classselector_idselector_start_idselector_universalselector_start_universalnestedz,dict[str, tuple[SelectorType, Specificity3]]SELECTOR_MAP#   )maxsizec                0    [         R                  U 5      SL$ )zIs the selector a single ID selector, i.e. "#foo"?

Args:
    selector: A CSS selector.

Returns:
    `True` if the selector is a simple ID selector, otherwise `False`.
N)RE_ID_SELECTOR	fullmatch)r   s    c/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/css/parse.pyis_id_selectorr0   .   s     ##H-T99    c                ,    U u  p#nUu  pVnX%-   X6-   XG-   4$ )zAdd specificity tuples together.

Args:
    specificity1: Specificity triple.
    specificity2: Specificity triple.

Returns:
    Combined specificity.
 )specificity1specificity2a1b1c1a2b2c2s           r/   _add_specificityr<   ;   s)     JBBJBBGRWbg&&r1   i   c           	        U R                  5       (       d  g[        [        U S5      5      n[        R                  n[
        R                  n/ n/ n  [        US 5      nUc  GO2UR                  nUS:X  a.  US   R                  UR                  R                  S5      5        OUS:X  a(  Ub  U[
        R                  :X  a  [
        R                  nOUS:X  a'  UR                  US S  5        UR                  5         S nOUS:X  a  OUS	:X  a  [
        R                   nOvU" U["        R$                  S
45      u  pUR                  ['        UR                  R                  S5      U=(       d    [
        R                  UU	S95        [
        R                  nGMD  U(       a  UR                  US S  5        [)        [*        R,                  " U5      5      n
U
$ ! [         a     MI  f = f)Nr3   ) r>   pseudo_class:
whitespacenew_selectordeclaration_set_startcombinator_childr   .#name
combinatortypespecificity)stripiterr   r(   getr   
DESCENDENTnextr   rH   _add_pseudo_classvaluelstripSAMEappendclearCHILDr   TYPEr   tupler   from_selectors)css_selectorstokensget_selectorrI   	selectorsrule_selectorstoken
token_name	_selectorrK   selector_sets              r/   parse_selectorsrd   M   s     (=(34F##L(6(A(AJ "I+-N
	&E =ZZ
'bM++EKK,>,>s,CD<'!Z>3F3F%F+66
>)!!)A,/OOJ22--'--J%1\..	:&"I ++D1)F^-F-F" +	 (,,JE F il+33NCDLI  		s   G 
GGc              #    #    [         R                  n[        R                  n/ n/ n[	        5       n	 UR
                  S:X  a/  US   R                  UR                  R                  S5      5        GO!UR
                  S:X  a(  Ub  U[        R                  :X  a  [        R                  nOUR
                  S:X  a'  UR                  US S  5        UR                  5         S nOUR
                  S:X  a  OUR
                  S:X  a  [        R                  nOU" UR
                  [        R                  S45      u  pUR                  [        UR                  R                  S	5      U=(       d    [        R                  U
US
95        [        R                  n[!        U5      nGMn  U(       as  U (       aX  US   R
                  U :w  aE  U" U [        R                  S45      u  pUR#                  S[        U [        R                  UUS
95        UR                  US S  5        [%        US5      n/ n/ n [!        U5      nUR
                  nUS;   a  M   US;   a  ['        [)        SUUUUS95      n      SS jnU H  nU H  n[+        UR,                   Vs/ s H-  n[/        U" UUR0                  5      5      R3                  5       PM/     snUR4                  UR6                  UR8                  UR:                  U-   5      nUR                  U5        M     M     M  US:X  a?   U	R=                  U5        [%        US5      nUR                  RE                  S5      Ul        O"US:X  a  OURF                  R                  U5        GMR   U	R=                  U5        [+        ['        [.        RH                  " U5      5      U	R4                  UUUS9nURK                  5         Uv   U H  nURK                  5         Uv   M     g s  snf ! [>         a2  nUR                  UR@                  URB                  45         S nAGNS nAff = f! [>         a1  nUR                  UR@                  URB                  45         S nANS nAff = f7f)Nr?   r@   rA   rB   rC   rD   rE   r   rF   rG   r   r>   )rB   declaration_end>   r'   r    r$   r"   r&   is_default_rulestie_breakerc                    U(       a  US   R                   [        R                  :X  ac  U S   nUS   n[        R                  " UUR
                  UR
                  -  [        UR                  UR                  5      S9n/ U SS QUPUSS Q$ X-   $ )zCombine lists of selectors together, processing any nesting.

Args:
    selectors1: List of selectors.
    selectors2: Second list of selectors.

Returns:
    Combined selectors.
r   r@   )pseudo_classesrK   Nr   )rJ   r   NESTEDdataclassesreplacerk   r<   rK   )
selectors1
selectors2final_selectornested_selectormerged_selectors        r/   combine_selectors)parse_rule_set.<locals>.combine_selectors   s     *Q-"4"48K8K"K%/^N&0mO&1&9&9&*99-<<= %5*668S8S%	'O PZ_OoO
12OO%22r1   declaration_namedeclaration_set_end)ro   list[Selector]rp   rx   returnrx   )&r(   rN   r   rO   r
   rH   rQ   rR   rS   rT   rU   rV   rW   r   rX   r   rP   insertr   listparse_rule_setr   rc   r   r^   _total_specificitystyleserrorsrh   ri   add_declarationr	   r`   messagerstripr\   rZ   _post_parse)scoper\   r`   rh   ri   r]   rI   r^   r_   styles_builderrb   rK   scope_selectorscope_specificitydeclarationr   nested_rulesra   recursive_parsert   rule_selectorrule_setrecursive_selectorsnested_rule_seterrors                            r/   r|   r|      s>      ##L(6(A(AJ "I+-N"_N
::'bM++EKK,>,>s,CDZZ<'!Z>3F3F%F+66
ZZ>)!!)A,/OOJZZ22ZZ--'--J%1

\..	:&"I ++D1)F^-F-F" +	 (,,JV9 < Yq\&&%/0<))951-N -88' 1	 	il+eR(K13F"$L
VZZ
:: 
 
 .2%5 +.O3*38F33: "0 /H&- 8@7L7L 8M 3 ( 1$13F3P3P!" 102	3
 8M !  11 ,,{:'O !''8 !0 "0" ++<..{; &eR0K${{11#6K00%%e,_ b4&&{3 [''78)H 
N'##% (W$ $ <u{{EMM:;;<  4u{{EMM2334si   JQ74O5AQ7O: +AQ7>P9 A+Q7:
P6'P1+Q71P66Q79
Q4'Q/*Q7/Q44Q7c                   [        [        X5      5      n[        5       nSn/ n [        US5      nUc  OUR                  nUS;   a  M%  US:X  aF  U(       a   UR                  U5        [        US5      nUR                  R                  S5      Ul        O)US:X  a  O$U(       a  UR                  R                  U5        M  U(       a   UR                  U5        UR                  $ UR                  $ ! [         a-  nUR                  UR                  UR                  45        e SnAff = f! [         a-  nUR                  UR                  UR                  45        e SnAff = f)zParse declarations and return a Styles object.

Args:
    css: String containing CSS.
    read_from: The location where the CSS was read from.

Returns:
    A styles object.
N)rB   rf   eofrv   r>   rA   rw   )rM   r   r
   rP   rH   r   r	   rU   r`   r   r   rR   r   r\   r~   )	css	read_fromr\   r   r   r   r`   ra   r   s	            r/   parse_declarationsr   '  sI    '78F"_N&*K13F
VT"=ZZ
AA++"22;? &eR0K${{11#6K00""))%0) , 	**;7
    >   % ( MM5;;">?   	MM5;;67	s0   C0 D* 0
D':(D""D'*
E!4(EE!c                    SU  S3n[        U [        U5      5      nU(       a	  USU S3-  n[        UR                  UR                  UR
                  UUR                  S9e)zRaise a TokenError regarding an unresolved variable.

Args:
    variable_name: A variable name.
    variables: Possible choices used to generate suggestion.
    token: The Token.

Raises:
    UnresolvedVariableError: Always raises a TokenError.
z"reference to undefined variable '$'z; did you mean '$z'?)end)r   r{   r   r   codestartr   )variable_name	variablesr`   r   suggested_variables        r/   _unresolvedr   W  sh     3=/CG'tIG&'9&:"==
!

II r1   c           	   #    #    U(       a  UR                  5       O0 n[        U 5      n [        US5      nUc  gUR                  S:X  Ga]  UR                  SS nUR                  U/ 5      nUv    [        US5      nUb  UR                  S:X  a  Uv   OOM'   U(       d  GOUR                  S:X  a  UR                  U5        Uv   OUR                  S:X  a  Uv   GOeUR                  S:X  a  UR                  SS nXr;   ag  X'   nUR                  U5        UR                  n	[        UR                  5      n
U H*  nUR                  [        XyXR                  5      5      v   M,     O0[        XrR                  5       U5        OUR                  U5        Uv   [        US5      nGM  UR                  S:X  a  UR                  SS nXR;   aX  X%   nUR                  n	[        UR                  5      n
UR                  nU H   nUR                  [        XYX5      5      v   M"     O[        XRR                  5       U5        OUv   GM  7f)a  Replace variable references with values by substituting variable reference
tokens with the tokens representing their values.

Args:
    tokens: Iterator of Tokens which may contain tokens
        with the name "variable_ref".

Returns:
    Yields Tokens such that any variable references (tokens where
        token.name == "variable_ref") have been replaced with the tokens representing
        the value. In other words, an Iterable of Tokens similar to the original input,
        but with variables resolved. Substituted tokens will have their referenced_by
        attribute populated with information about where the tokens are being substituted to.
Nr   r   r@   rB   variable_value_endvariable_ref)copyrM   rP   rH   rR   
setdefaultrU   extendlocationlenwith_referencer   r   r   keys)r\   css_variablesr   iter_tokensr`   r   variable_tokensref_namereference_tokensref_location
ref_length_tokenref_codes                r/   substitute_referencesr   p  s     " AN(:(:(<SUIv,K
[$'=::(!KK"-M'22="EOK[$/$|)CK  ZZ</#**51KZZ#77KZZ>1${{12H,+4+>('../?@',~~%(%5
&6F"("7"7 ,$,J

!"#  '7 $Hnn.>F#**51K[$/9 : ZZ>)!KKOM)"+":$~~ -
 ::-F //$]*W  .
 M>>+;UCK{ s   IIc              #  *  #    Ub  [        U5      O0 nU(       a  UR                  U5        [        [        [	        X5      U5      5      n [        US5      n	U	c  gU	R                  R                  S5      (       a  [        U UU	UUS9 Sh  vN   MG   N7f)a  Parse CSS by tokenizing it, performing variable substitution,
and generating rule sets from it.

Args:
    scope: CSS type name.
    css: The input CSS.
    read_from: The source location of the CSS.
    variables: Substitution variables to substitute tokens for.
    is_default_rules: True if the rules we're extracting are
        default (i.e. in Widget.DEFAULT_CSS) rules. False if they're from user defined CSS.
Nr    rg   )	r   updaterM   r   r   rP   rH   
startswithr|   )
r   r   r   r   r   rh   ri   r   r\   r`   s
             r/   parser     s     ( 6?5Jy1PR0'(@/RSF
VT"=::  !122%!1'   
s   BB
BB)r   strry   bool)r4   r   r5   r   ry   r   )r[   r   ry   ztuple[SelectorSet, ...])Fr   )r   r   r\   zIterator[Token]r`   r   rh   r   ri   intry   Iterable[RuleSet])r   r   r   r   ry   r   )r   r   r   zIterable[str]r`   r   ry   r   )N)r\   Iterable[Token]r   dict[str, list[Token]] | Nonery   r   )NNFr   )r   r   r   r   r   r   r   zdict[str, str] | Noner   r   rh   r   ri   r   ry   r   )9
__future__r   rm   re	functoolsr   typingr   r   r   textual.css._help_renderablesr   textual.css._styles_builderr	   r
   textual.css.errorsr   textual.css.modelr   r   r   r   r   r   textual.css.stylesr   textual.css.tokenizer   r   r   r   r   textual.css.tokenizerr   r   textual.css.typesr   r   textual.suggestionsr   rX   CLASSID	UNIVERSALrl   r(   __annotations__compiler-   r0   r<   rd   r|   r   r   r   r   r3   r1   r/   <module>r      s   "  	  / / 2 G 6  &  > 7 . ""I.#(()4#))95)//; OOY/&//95'119=!-!7!7 C""I.
>: 
 C*,- 3	: 	:''.:''$ 41 1p #bbb b 	b
 b bJ-!`4 MQQQ,IQQp (,59"$$	$ $ %	$
 3$ $ $ $r1   