
    kj+                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S S	K	Jr  S S
KJr  S\S\4S jr " S S5      rg)    )inf)Keyword)NumericTypeRangeRestriction)Type) is_dimension_percentage_mix_type)is_dimension_type)is_numeric_type)Token)	TokenType)Lexerchreturnc                 h    U R                  5       =(       a    U R                  5       =(       d    U S:H  $ )N-)isasciiisalnumr   s    X/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Meta/Utils/CSSGrammar/Parser/tokenizer.pyis_identifier_characterr      s"    ::<7RZZ\6R3Y7    c                       \ rS rSrS\SS4S jr\S\S\\   4S j5       r	S\\   4S jr
SS jrS\4S	 jrS\4S
 jrS\\   4S jrS\S\4S jrS\S\4S jrS\4S jrS\4S jrS\4S jrSrg)	Tokenizer   inputr   Nc                 $    [        U5      U l        g N)r   lexer)selfr   s     r   __init__Tokenizer.__init__   s    5\
r   c                 .    U " U5      R                  5       $ r   )tokenize_impl)clsr   s     r   tokenizeTokenizer.tokenize   s    5z''))r   c                    / n U R                  5         U R                  R                  5       (       a5  UR                  [        R
                  " [        R                  5      5        U$ UR                  U R                  5       5        M  r   )	discard_whitespacer   is_eofappendr
   creater   END_OF_FILEconsume_a_token)r   tokenss     r   r"   Tokenizer.tokenize_impl   sc     ##%zz  ""ell9+@+@ABMM$..01 r   c                 <    U R                   R                  S 5        g )Nc                 P    U R                  5       =(       a    U R                  5       $ r   )isspacer   r   s    r   <lambda>.Tokenizer.discard_whitespace.<locals>.<lambda>&   s    2::<+HBJJL+Hr   )r   ignore_whiler   s    r   r'   Tokenizer.discard_whitespace%   s    

 HIr   c                 @    U R                   R                  [        5      $ r   )r   consume_whiler   r5   s    r   consume_an_identifierTokenizer.consume_an_identifier(   s    zz''(?@@r   c                    U R                   R                  5       nUS:X  a>  U R                   R                  5         [        R                  " [
        R                  5      $ US:X  a>  U R                   R                  5         [        R                  " [
        R                  5      $ US:X  a>  U R                   R                  5         [        R                  " [
        R                  5      $ US:X  a>  U R                   R                  5         [        R                  " [
        R                  5      $ US:X  a  U R                  5       $ [        U5      (       a  U R                  5       $ [        S5      e)N|[]?<z+CSSGrammar::Tokenizer: Unexpected character)r   peekconsumer
   r*   r   
SINGLE_BAROPEN_SQUARE_BRACKETCLOSE_SQUARE_BRACKETQUESTION_MARKconsume_a_non_terminal_tokenr   consume_a_keyword_tokenSyntaxError)r   peekeds     r   r,   Tokenizer.consume_a_token+   s    "S=JJ <<	 4 455S=JJ <<	 = =>>S=JJ <<	 > >??S=JJ <<	 7 788S=4466"6**//11GHHr   c                    U R                  5         U R                  R                  S5      (       d  / $ / n U R                  5         U R                  5       nU(       d  [	        S5      eUR                  U5        U R                  5         U R                  R                  S5      (       a  U$ U R                  R                  S5      (       d  [	        S5      eM  )Nz![z-Expected identifier in custom-ident blacklistr>   ,z&Expected ',' in custom-ident blacklist)r'   r   consume_specificr9   rI   r)   )r   	blacklistidents      r   consume_custom_ident_blacklist(Tokenizer.consume_custom_ident_blacklistA   s     	!zz**400I!	##%..0E!"QRRU###%zz**3//  ::..s33!"JKK r   	type_namec                    U R                  5         U R                  R                  S5      (       d  [        [        * [        5      $ U R                  5         U R                  U5      nU R                  5         U R                  R                  S5      (       d  [        S5      eU R                  5         U R                  U5      nU R                  5         U R                  R                  S5      (       d  [        S5      e[        X#5      $ )Nr=   rM   z(Expected ',' in bracketed range notationr>   z.Expected ']' to close bracketed range notation)r'   r   rN   r   r   consume_bracketed_range_boundrI   )r   rS   minimummaximums       r    consume_bracketed_range_notation*Tokenizer.consume_bracketed_range_notation]   s    ! zz**3//.tS99!44Y?!zz**3//HII!44Y?!zz**3//NOO*7<<r   c                    U R                   R                  S5      (       a  [        * $ U R                   R                  S5      (       a  [        $ U R                  5       nUS:w  a!  [	        U5      (       d  US:X  a  [        S5      eU R                   R                  [        5      nU(       a+  [        U5      (       d  [	        U5      (       d  [        S5      eU(       d!  US:w  a  [        U5      (       a  [        S5      e[        U5      $ )Nu   -∞u   ∞r   lengthzSTypes with units not resolvable at parse time only support zero and infinite boundsz(Unexpected unit for unitless bound valuez4Expected unit for non-zero, non-infinite bound value)
r   rN   r   consume_decimal_integerr   rI   r8   r   r   float)r   rS   bound_valueunits       r   rU   'Tokenizer.consume_bracketed_range_boundu   s    ::&&v..4K::&&u--J 224!!A)!L!LPY]ePestt zz''(?@))44=]^g=h=hHIIq(->y-I-ITUU[!!r   c                     SnU R                   R                  S5      (       a  SnU R                   R                  S 5      nU(       d  [        S5      eU[	        U5      -  $ )N   r   c                 "    U R                  5       $ r   )isdigitr   s    r   r2   3Tokenizer.consume_decimal_integer.<locals>.<lambda>   s
    RZZ\r   zExpected decimal integer)r   rN   r8   rI   int)r   signdigitss      r   r\   !Tokenizer.consume_decimal_integer   sT    ::&&s++D))*AB899c&k!!r   c                    U R                   R                  S5      (       d   eU R                  5       nU(       d  [        S5      e/ nUS:X  a  U R	                  5       nS n[        U5      (       d  [        U5      (       a  U R                  U5      nU R                   R                  S5      (       d  [        S5      e[        R                  " [        XU5      5      $ )Nr@   z+CSSGrammar::Tokenizer: Expected a type namezcustom-ident>z#CSSGrammar::Tokenizer: Expected '>')r   rN   r9   rI   rQ   r	   r   rX   r
   create_component_valuer   )r   namecustom_ident_blacklistnumeric_type_accepted_ranges       r   rG   &Tokenizer.consume_a_non_terminal_token   s    zz**3////))+KLL!#>!%)%H%H%J"&*#4  $DT$J$J*.*O*OPT*U'zz**3//CDD++DOj,kllr   c                 r    U R                  5       nU(       d   e[        R                  " [        U5      5      $ r   )r9   r
   rm   r   )r   values     r   rH   !Tokenizer.consume_a_keyword_token   s,    **,u++GEN;;r   )r   )r   N)__name__
__module____qualname____firstlineno__strr   classmethodlistr
   r$   r"   r'   r9   r,   rQ   r   rX   r]   rU   rg   r\   rG   rH   __static_attributes__ r   r   r   r      s    "c "d " *S *T%[ * *	2tE{ 	2JAs AI I,LS	 L8=# =B] =0"s "u "2	" 	"me m*< <r   r   N)mathr   (Utils.CSSGrammar.Parser.component_valuesr   r   r   r   r   r	   Utils.CSSGrammar.Parser.tokenr
   r   Utils.lexerr   ry   boolr   r   r}   r   r   <module>r      sB     < P 9 U F D / 3 8 8 8a< a<r   