
    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5      rS\S\4S jrg)    )CombinatorGrammarNode)CombinatorType)ComponentValueGrammarNode)GrammarNode)GroupGrammarNode)OptionalGrammarNode)Token)	TokenType)	Tokenizerc                       \ 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\	4S	 jrS\	4S
 jrS\4S jrSS\S\4S jjrS\4S jrSrg)Parser   tokensreturnNc                     Xl         SU l        g )Nr   )r   index)selfr   s     U/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Meta/Utils/CSSGrammar/Parser/parser.py__init__Parser.__init__   s    
    inputc                     U " [         R                  " U5      5      nUR                  5       nUR                  5       R	                  [
        R                  5      (       d  [        S5      eU$ )Nz-CSSGrammar::Parser: Unexpected trailing input)r   tokenizeparse_alternativespeekis_token_typer
   END_OF_FILESyntaxError)clsr   parservalues       r   parse_value_definition_grammar%Parser.parse_value_definition_grammar   sS    Y''./))+{{}**9+@+@AAMNNr   c                    U R                  5       /nU R                  5       R                  [        R                  5      (       ac  U R                  5         UR                  U R                  5       5        U R                  5       R                  [        R                  5      (       a  Mc  [        U5      S:X  a  US   $ [        [        R                  U5      $ N   r   )parse_juxtapositionr   r   r
   
SINGLE_BARconsumeappendlenr   r   ALTERNATIVESr   childrens     r   r   Parser.parse_alternatives   s    ,,./iik''	(<(<==LLNOOD4467 iik''	(<(<== x=AA;$^%@%@(KKr   c                    U R                  5       /nU R                  5       (       a6  UR                  U R                  5       5        U R                  5       (       a  M6  [        U5      S:X  a  US   $ [	        [
        R                  U5      $ r&   )parse_component_value!next_token_starts_component_valuer+   r,   r   r   JUXTAPOSITIONr.   s     r   r(   Parser.parse_juxtaposition(   ss    ..014466OOD6689 4466 x=AA;$^%A%A8LLr   c                    U R                  5       nS nUR                  [        R                  5      (       ax  U R	                  5         U R                  5       nU R                  5       R                  [        R                  5      (       d  [        S5      eU R	                  5         [        U5      nUR                  [        R                  5      (       a'  [        U R	                  5       R                  5       5      nUc  [        S5      eU R                  5       R                  [        R                  5      (       a  U R	                  5         [        U5      nU$ )Nz CSSGrammar::Parser: Expected ']'z.CSSGrammar::Parser: Expected a component value)r   r   r
   OPEN_SQUARE_BRACKETr*   r   CLOSE_SQUARE_BRACKETr   r   COMPONENT_VALUEr   component_valueQUESTION_MARKr   )r   peekedr:   groups       r   r2   Parser.parse_component_value3   s     	 = =>>LLN++-E99;,,Y-K-KLL!"DEE LLN.u5O	 9 9::78V8V8XYO"NOO99;$$Y%<%<==LLN1/BOr   c                 x    U R                  5       R                  [        R                  [        R                  4;   $ N)r   
token_typer
   r7   r9   )r   s    r   r3   (Parser.next_token_starts_component_valueQ   s2    yy{%%))%%*
 
 	
r   offsetc                 ~    [        U R                  U-   [        U R                  5      S-
  5      nU R                  U   $ Nr'   )minr   r,   r   )r   rC   r   s      r   r   Parser.peekW   s4    DJJ'T[[)9A)=>{{5!!r   c                     U R                  5       nUR                  [        R                  5      (       d  U =R                  S-  sl        U$ rE   )r   r   r
   r   r   )r   tokens     r   r*   Parser.consume[   s6    		""9#8#899JJ!OJr   )r   r   )r   )__name__
__module____qualname____firstlineno__listr	   r   classmethodstrr   r#   r   r(   r2   boolr3   intr   r*   __static_attributes__ r   r   r   r      s    tE{ t  3 ;  
LK 
L	M[ 	M{ <
4 
"3 "u " r   r   r   r   c                 ,    [         R                  U 5      $ r@   )r   r#   )r   s    r   r#   r#   d   s    0077r   N)$Utils.CSSGrammar.Parser.grammar_noder   r   r   r   r   r   Utils.CSSGrammar.Parser.tokenr	   r
   !Utils.CSSGrammar.Parser.tokenizerr   r   rQ   r#   rU   r   r   <module>rZ      s@    F ? J < A D / 3 7U Up8# 8+ 8r   