All Downloads are FREE. Search and download functionalities are using the official Maven repository.

yale.compiler.compiler.0.9.12.source-code.CSSTree Maven / Gradle / Ivy

The newest version!
// $ANTLR 3.5.2 CSSTree.g

/*
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
	
package org.apache.royale.compiler.internal.css;

import java.util.Map;
import java.util.HashMap;
import org.apache.royale.compiler.common.ISourceLocation;
import org.apache.royale.compiler.common.SourceLocation;
import org.apache.royale.compiler.css.*;
import org.apache.royale.compiler.problems.CSSParserProblem;
import org.apache.royale.compiler.problems.ICompilerProblem;
import org.apache.royale.compiler.problems.CSSStrictFlexSyntaxProblem;



import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

/**
 * This is a tree grammar for advanced CSS in Flex. It walks the AST generated 
 * by the CSS parser and builds CSS DOM objects.
 */
@SuppressWarnings("all")
public class CSSTree extends TreeParser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "ALPHA_VALUE", "ARGUMENTS", "AT_FONT_FACE", 
		"AT_KEYFRAMES", "AT_MEDIA", "AT_NAMESPACE", "AT_WEBKIT_KEYFRAMES", "BEGINS_WITH", 
		"BLOCK_END", "BLOCK_OPEN", "CALC", "CHILD", "CLASS_REFERENCE", "COLON", 
		"COMMA", "COMMENT", "CONTAINS", "DASHED_ID", "DIGIT", "DOT", "DOUBLE_COLON", 
		"EMBED", "ENDS_WITH", "EQUALS", "ESCAPED_HEX", "FORMAT", "FUNCTIONS", 
		"HASH_WORD", "HEX_DIGIT", "HREFLANG_MATCH", "ID", "IMPORTANT", "I_ARRAY", 
		"I_CHILD_SELECTOR", "I_DECL", "I_MEDIUM_CONDITIONS", "I_MULTIVALUE", "I_PRECEDED_SELECTOR", 
		"I_RULE", "I_RULES", "I_SELECTOR", "I_SELECTOR_GROUP", "I_SIBLING_SELECTOR", 
		"I_SIMPLE_SELECTOR", "LETTER", "LIST_MATCH", "LOCAL", "MATRIX3D_VALUE", 
		"MATRIX_VALUE", "NOT", "NULL", "NUMBER", "NUMBER_WITH_PERCENT", "NUMBER_WITH_UNIT", 
		"ONLY", "OPERATOR", "PERCENT", "PIPE", "PRECEDED", "PROPERTY_REFERENCE", 
		"RECT_VALUE", "RGB", "RGBA", "ROTATE_VALUE", "SCALE", "SCALE_VALUE", "SEMI_COLONS", 
		"SQUARE_END", "SQUARE_OPEN", "STAR", "STRING", "STRING_QUOTE", "TILDE", 
		"TRANSLATE3D_VALUE", "URL", "VAR", "WS", "'and'"
	};
	public static final int EOF=-1;
	public static final int T__81=81;
	public static final int ALPHA_VALUE=4;
	public static final int ARGUMENTS=5;
	public static final int AT_FONT_FACE=6;
	public static final int AT_KEYFRAMES=7;
	public static final int AT_MEDIA=8;
	public static final int AT_NAMESPACE=9;
	public static final int AT_WEBKIT_KEYFRAMES=10;
	public static final int BEGINS_WITH=11;
	public static final int BLOCK_END=12;
	public static final int BLOCK_OPEN=13;
	public static final int CALC=14;
	public static final int CHILD=15;
	public static final int CLASS_REFERENCE=16;
	public static final int COLON=17;
	public static final int COMMA=18;
	public static final int COMMENT=19;
	public static final int CONTAINS=20;
	public static final int DASHED_ID=21;
	public static final int DIGIT=22;
	public static final int DOT=23;
	public static final int DOUBLE_COLON=24;
	public static final int EMBED=25;
	public static final int ENDS_WITH=26;
	public static final int EQUALS=27;
	public static final int ESCAPED_HEX=28;
	public static final int FORMAT=29;
	public static final int FUNCTIONS=30;
	public static final int HASH_WORD=31;
	public static final int HEX_DIGIT=32;
	public static final int HREFLANG_MATCH=33;
	public static final int ID=34;
	public static final int IMPORTANT=35;
	public static final int I_ARRAY=36;
	public static final int I_CHILD_SELECTOR=37;
	public static final int I_DECL=38;
	public static final int I_MEDIUM_CONDITIONS=39;
	public static final int I_MULTIVALUE=40;
	public static final int I_PRECEDED_SELECTOR=41;
	public static final int I_RULE=42;
	public static final int I_RULES=43;
	public static final int I_SELECTOR=44;
	public static final int I_SELECTOR_GROUP=45;
	public static final int I_SIBLING_SELECTOR=46;
	public static final int I_SIMPLE_SELECTOR=47;
	public static final int LETTER=48;
	public static final int LIST_MATCH=49;
	public static final int LOCAL=50;
	public static final int MATRIX3D_VALUE=51;
	public static final int MATRIX_VALUE=52;
	public static final int NOT=53;
	public static final int NULL=54;
	public static final int NUMBER=55;
	public static final int NUMBER_WITH_PERCENT=56;
	public static final int NUMBER_WITH_UNIT=57;
	public static final int ONLY=58;
	public static final int OPERATOR=59;
	public static final int PERCENT=60;
	public static final int PIPE=61;
	public static final int PRECEDED=62;
	public static final int PROPERTY_REFERENCE=63;
	public static final int RECT_VALUE=64;
	public static final int RGB=65;
	public static final int RGBA=66;
	public static final int ROTATE_VALUE=67;
	public static final int SCALE=68;
	public static final int SCALE_VALUE=69;
	public static final int SEMI_COLONS=70;
	public static final int SQUARE_END=71;
	public static final int SQUARE_OPEN=72;
	public static final int STAR=73;
	public static final int STRING=74;
	public static final int STRING_QUOTE=75;
	public static final int TILDE=76;
	public static final int TRANSLATE3D_VALUE=77;
	public static final int URL=78;
	public static final int VAR=79;
	public static final int WS=80;

	// delegates
	public TreeParser[] getDelegates() {
		return new TreeParser[] {};
	}

	// delegators


	public CSSTree(TreeNodeStream input) {
		this(input, new RecognizerSharedState());
	}
	public CSSTree(TreeNodeStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return CSSTree.tokenNames; }
	@Override public String getGrammarFileName() { return "CSSTree.g"; }



	/**
	 * CSS DOM object.
	 */
	protected CSSDocument model;

	/**
	 * Every definition object needs the token stream to compute source location.
	 */
	private final TokenStream tokenStream = getTreeNodeStream().getTokenStream();

	/**
	 * Tree walker problems.
	 */
	protected List problems = new ArrayList();

	/**
	 * Used for building up attribute selector strings until we implement a data
	 * structure for it.
	 */
	protected String curAttribute;

	/**
	 * Determines if problems should be reported for CSS syntax that would not be
	 * recognized by the Flex SDK compiler.
	 */
	protected boolean strictFlexCSS = false;

	public boolean getStrictFlexCSS()
	{
	    return strictFlexCSS;
	}

	public void setStrictFlexCSS(boolean value)
	{
	    strictFlexCSS = value;
	}


	/**
	 * Collect problems.
	 */
	@Override
	public void displayRecognitionError(String[] tokenNames, RecognitionException e)
	{
	    problems.add(CSSParserProblem.create(this, tokenNames, e));
	}


	/**
	 * Collect strict Flex CSS problems.
	 */
	public void displayStrictFlexSyntaxError(String syntax, CommonTree tree)
	{
	    final ISourceLocation location = new SourceLocation(
	        getSourceName(),
	        -1, -1, // TODO Need start and end info from CSS
	        tree.getLine(), tree.getCharPositionInLine());
	    problems.add(new CSSStrictFlexSyntaxProblem(location, syntax));
	}


	protected static class stylesheet_scope {
		List namespaces;
		List rules;
		List fontFaces;
		List keyFrames;
	}
	protected Stack stylesheet_stack = new Stack();

	public static class stylesheet_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "stylesheet"
	// CSSTree.g:131:1: stylesheet : ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )* ;
	public final CSSTree.stylesheet_return stylesheet() throws RecognitionException {
		stylesheet_stack.push(new stylesheet_scope());
		CSSTree.stylesheet_return retval = new CSSTree.stylesheet_return();
		retval.start = input.LT(1);


		    stylesheet_stack.peek().rules = new ArrayList();
		    stylesheet_stack.peek().namespaces = new ArrayList();
		    stylesheet_stack.peek().fontFaces = new ArrayList();
		    stylesheet_stack.peek().keyFrames = new ArrayList();

		try {
			// CSSTree.g:158:5: ( ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )* )
			// CSSTree.g:158:9: ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )*
			{
			// CSSTree.g:158:9: ( namespaceStatement | fontFace | keyframes | mediaQuery | ruleset )*
			loop1:
			while (true) {
				int alt1=6;
				switch ( input.LA(1) ) {
				case AT_NAMESPACE:
					{
					alt1=1;
					}
					break;
				case AT_FONT_FACE:
					{
					alt1=2;
					}
					break;
				case AT_KEYFRAMES:
				case AT_WEBKIT_KEYFRAMES:
					{
					alt1=3;
					}
					break;
				case AT_MEDIA:
					{
					alt1=4;
					}
					break;
				case I_RULE:
					{
					alt1=5;
					}
					break;
				}
				switch (alt1) {
				case 1 :
					// CSSTree.g:158:11: namespaceStatement
					{
					pushFollow(FOLLOW_namespaceStatement_in_stylesheet94);
					namespaceStatement();
					state._fsp--;

					}
					break;
				case 2 :
					// CSSTree.g:158:32: fontFace
					{
					pushFollow(FOLLOW_fontFace_in_stylesheet98);
					fontFace();
					state._fsp--;

					}
					break;
				case 3 :
					// CSSTree.g:158:43: keyframes
					{
					pushFollow(FOLLOW_keyframes_in_stylesheet102);
					keyframes();
					state._fsp--;

					}
					break;
				case 4 :
					// CSSTree.g:158:55: mediaQuery
					{
					pushFollow(FOLLOW_mediaQuery_in_stylesheet106);
					mediaQuery();
					state._fsp--;

					}
					break;
				case 5 :
					// CSSTree.g:158:68: ruleset
					{
					pushFollow(FOLLOW_ruleset_in_stylesheet110);
					ruleset();
					state._fsp--;

					}
					break;

				default :
					break loop1;
				}
			}

			}


			    model = new CSSDocument(stylesheet_stack.peek().rules, 
			                            stylesheet_stack.peek().namespaces, 
			                            stylesheet_stack.peek().fontFaces,
			                            ((CommonTree)retval.start),
			                            tokenStream);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			stylesheet_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "stylesheet"


	public static class namespaceStatement_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "namespaceStatement"
	// CSSTree.g:161:1: namespaceStatement : ^( AT_NAMESPACE (id= ID )? uri= STRING ) ;
	public final CSSTree.namespaceStatement_return namespaceStatement() throws RecognitionException {
		CSSTree.namespaceStatement_return retval = new CSSTree.namespaceStatement_return();
		retval.start = input.LT(1);

		CommonTree id=null;
		CommonTree uri=null;

		try {
			// CSSTree.g:175:5: ( ^( AT_NAMESPACE (id= ID )? uri= STRING ) )
			// CSSTree.g:175:9: ^( AT_NAMESPACE (id= ID )? uri= STRING )
			{
			match(input,AT_NAMESPACE,FOLLOW_AT_NAMESPACE_in_namespaceStatement146); 
			match(input, Token.DOWN, null); 
			// CSSTree.g:175:26: (id= ID )?
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==ID) ) {
				alt2=1;
			}
			switch (alt2) {
				case 1 :
					// CSSTree.g:175:26: id= ID
					{
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_namespaceStatement150); 
					}
					break;

			}

			uri=(CommonTree)match(input,STRING,FOLLOW_STRING_in_namespaceStatement155); 
			match(input, Token.UP, null); 

			}

			 
			    final CSSNamespaceDefinition ns = new CSSNamespaceDefinition(
			            (id!=null?id.getText():null), (uri!=null?uri.getText():null), ((CommonTree)retval.start), tokenStream);
			    if (ns.getProblems().size() == 0)
			    {
			        stylesheet_stack.peek().namespaces.add(ns); 
			    }
			    else
			    {
			        problems.addAll(ns.getProblems());
			    }

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "namespaceStatement"


	public static class keyframes_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "keyframes"
	// CSSTree.g:178:1: keyframes : ( ^( AT_KEYFRAMES id= ID ( ruleset )* ) | ^( AT_WEBKIT_KEYFRAMES id= ID ( ruleset )* ) );
	public final CSSTree.keyframes_return keyframes() throws RecognitionException {
		CSSTree.keyframes_return retval = new CSSTree.keyframes_return();
		retval.start = input.LT(1);

		CommonTree id=null;

		try {
			// CSSTree.g:179:5: ( ^( AT_KEYFRAMES id= ID ( ruleset )* ) | ^( AT_WEBKIT_KEYFRAMES id= ID ( ruleset )* ) )
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==AT_KEYFRAMES) ) {
				alt5=1;
			}
			else if ( (LA5_0==AT_WEBKIT_KEYFRAMES) ) {
				alt5=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 5, 0, input);
				throw nvae;
			}

			switch (alt5) {
				case 1 :
					// CSSTree.g:179:9: ^( AT_KEYFRAMES id= ID ( ruleset )* )
					{
					match(input,AT_KEYFRAMES,FOLLOW_AT_KEYFRAMES_in_keyframes178); 
					match(input, Token.DOWN, null); 
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_keyframes182); 
					// CSSTree.g:179:30: ( ruleset )*
					loop3:
					while (true) {
						int alt3=2;
						int LA3_0 = input.LA(1);
						if ( (LA3_0==I_RULE) ) {
							alt3=1;
						}

						switch (alt3) {
						case 1 :
							// CSSTree.g:179:30: ruleset
							{
							pushFollow(FOLLOW_ruleset_in_keyframes184);
							ruleset();
							state._fsp--;

							}
							break;

						default :
							break loop3;
						}
					}

					match(input, Token.UP, null); 

					 stylesheet_stack.peek().keyFrames.add(new CSSKeyFrames((id!=null?id.getText():null), CSSModelTreeType.KEYFRAMES, ((CommonTree)retval.start), tokenStream)); 
					}
					break;
				case 2 :
					// CSSTree.g:181:9: ^( AT_WEBKIT_KEYFRAMES id= ID ( ruleset )* )
					{
					match(input,AT_WEBKIT_KEYFRAMES,FOLLOW_AT_WEBKIT_KEYFRAMES_in_keyframes208); 
					match(input, Token.DOWN, null); 
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_keyframes212); 
					// CSSTree.g:181:37: ( ruleset )*
					loop4:
					while (true) {
						int alt4=2;
						int LA4_0 = input.LA(1);
						if ( (LA4_0==I_RULE) ) {
							alt4=1;
						}

						switch (alt4) {
						case 1 :
							// CSSTree.g:181:37: ruleset
							{
							pushFollow(FOLLOW_ruleset_in_keyframes214);
							ruleset();
							state._fsp--;

							}
							break;

						default :
							break loop4;
						}
					}

					match(input, Token.UP, null); 

					 stylesheet_stack.peek().keyFrames.add(new CSSKeyFrames((id!=null?id.getText():null), CSSModelTreeType.KEYFRAMES_WEBKIT, ((CommonTree)retval.start), tokenStream)); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "keyframes"


	protected static class mediaQuery_scope {
		List conditions;
	}
	protected Stack mediaQuery_stack = new Stack();


	// $ANTLR start "mediaQuery"
	// CSSTree.g:186:1: mediaQuery : ^( AT_MEDIA medium ( ruleset )* ) ;
	public final void mediaQuery() throws RecognitionException {
		mediaQuery_stack.push(new mediaQuery_scope());
		 
		    mediaQuery_stack.peek().conditions = new ArrayList(); 

		try {
			// CSSTree.g:196:5: ( ^( AT_MEDIA medium ( ruleset )* ) )
			// CSSTree.g:196:9: ^( AT_MEDIA medium ( ruleset )* )
			{
			match(input,AT_MEDIA,FOLLOW_AT_MEDIA_in_mediaQuery261); 
			match(input, Token.DOWN, null); 
			pushFollow(FOLLOW_medium_in_mediaQuery263);
			medium();
			state._fsp--;

			// CSSTree.g:196:27: ( ruleset )*
			loop6:
			while (true) {
				int alt6=2;
				int LA6_0 = input.LA(1);
				if ( (LA6_0==I_RULE) ) {
					alt6=1;
				}

				switch (alt6) {
				case 1 :
					// CSSTree.g:196:27: ruleset
					{
					pushFollow(FOLLOW_ruleset_in_mediaQuery265);
					ruleset();
					state._fsp--;

					}
					break;

				default :
					break loop6;
				}
			}

			match(input, Token.UP, null); 

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			mediaQuery_stack.pop();
		}
	}
	// $ANTLR end "mediaQuery"



	// $ANTLR start "medium"
	// CSSTree.g:199:1: medium : ^( I_MEDIUM_CONDITIONS ( mediumCondition )* ) ;
	public final void medium() throws RecognitionException {
		try {
			// CSSTree.g:200:5: ( ^( I_MEDIUM_CONDITIONS ( mediumCondition )* ) )
			// CSSTree.g:200:9: ^( I_MEDIUM_CONDITIONS ( mediumCondition )* )
			{
			match(input,I_MEDIUM_CONDITIONS,FOLLOW_I_MEDIUM_CONDITIONS_in_medium290); 
			if ( input.LA(1)==Token.DOWN ) {
				match(input, Token.DOWN, null); 
				// CSSTree.g:200:31: ( mediumCondition )*
				loop7:
				while (true) {
					int alt7=2;
					int LA7_0 = input.LA(1);
					if ( (LA7_0==ARGUMENTS||LA7_0==COMMA||LA7_0==ID||LA7_0==ONLY) ) {
						alt7=1;
					}

					switch (alt7) {
					case 1 :
						// CSSTree.g:200:31: mediumCondition
						{
						pushFollow(FOLLOW_mediumCondition_in_medium292);
						mediumCondition();
						state._fsp--;

						}
						break;

					default :
						break loop7;
					}
				}

				match(input, Token.UP, null); 
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "medium"


	public static class mediumCondition_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "mediumCondition"
	// CSSTree.g:203:1: mediumCondition : ( ID | ONLY id= ID | ARGUMENTS | COMMA );
	public final CSSTree.mediumCondition_return mediumCondition() throws RecognitionException {
		CSSTree.mediumCondition_return retval = new CSSTree.mediumCondition_return();
		retval.start = input.LT(1);

		CommonTree id=null;

		try {
			// CSSTree.g:204:5: ( ID | ONLY id= ID | ARGUMENTS | COMMA )
			int alt8=4;
			switch ( input.LA(1) ) {
			case ID:
				{
				alt8=1;
				}
				break;
			case ONLY:
				{
				alt8=2;
				}
				break;
			case ARGUMENTS:
				{
				alt8=3;
				}
				break;
			case COMMA:
				{
				alt8=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}
			switch (alt8) {
				case 1 :
					// CSSTree.g:204:9: ID
					{
					match(input,ID,FOLLOW_ID_in_mediumCondition315); 
					 
					        mediaQuery_stack.peek().conditions.add(new CSSMediaQueryCondition(((CommonTree)retval.start), tokenStream)); 
					    
					}
					break;
				case 2 :
					// CSSTree.g:208:7: ONLY id= ID
					{
					match(input,ONLY,FOLLOW_ONLY_in_mediumCondition331); 
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_mediumCondition335); 
					 
					        mediaQuery_stack.peek().conditions.add(new CSSMediaQueryCondition(((CommonTree)retval.start), tokenStream)); 
					        mediaQuery_stack.peek().conditions.add(new CSSMediaQueryCondition(id, tokenStream)); 
					    
					}
					break;
				case 3 :
					// CSSTree.g:213:7: ARGUMENTS
					{
					match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_mediumCondition351); 
					 
					        mediaQuery_stack.peek().conditions.add(new CSSMediaQueryCondition(((CommonTree)retval.start), tokenStream)); 
					    
					}
					break;
				case 4 :
					// CSSTree.g:217:7: COMMA
					{
					match(input,COMMA,FOLLOW_COMMA_in_mediumCondition366); 
					 
					        mediaQuery_stack.peek().conditions.add(new CSSMediaQueryCondition(((CommonTree)retval.start), tokenStream)); 
					    
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "mediumCondition"


	public static class fontFace_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "fontFace"
	// CSSTree.g:223:1: fontFace : ^( AT_FONT_FACE d= declarationsBlock ) ;
	public final CSSTree.fontFace_return fontFace() throws RecognitionException {
		CSSTree.fontFace_return retval = new CSSTree.fontFace_return();
		retval.start = input.LT(1);

		List d =null;

		try {
			// CSSTree.g:241:5: ( ^( AT_FONT_FACE d= declarationsBlock ) )
			// CSSTree.g:241:9: ^( AT_FONT_FACE d= declarationsBlock )
			{
			match(input,AT_FONT_FACE,FOLLOW_AT_FONT_FACE_in_fontFace402); 
			match(input, Token.DOWN, null); 
			pushFollow(FOLLOW_declarationsBlock_in_fontFace406);
			d=declarationsBlock();
			state._fsp--;

			match(input, Token.UP, null); 

			}


			    List properties = d;
			    if (properties == null)
			    {
			        properties = new ArrayList();
			    }
			    final CSSFontFace fontFace = new CSSFontFace(properties, ((CommonTree)retval.start), tokenStream);
			    if (fontFace.getProblems().size() == 0)
			    {
			        stylesheet_stack.peek().fontFaces.add(fontFace);
			    }
			    else
			    {
			        problems.addAll(fontFace.getProblems());
			    }

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "fontFace"


	protected static class ruleset_scope {
		List subjects;
	}
	protected Stack ruleset_stack = new Stack();

	public static class ruleset_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "ruleset"
	// CSSTree.g:244:1: ruleset : ^( I_RULE selectorGroup d= declarationsBlock ) ;
	public final CSSTree.ruleset_return ruleset() throws RecognitionException {
		ruleset_stack.push(new ruleset_scope());
		CSSTree.ruleset_return retval = new CSSTree.ruleset_return();
		retval.start = input.LT(1);

		List d =null;


		    ruleset_stack.peek().subjects = new ArrayList();

		try {
			// CSSTree.g:270:5: ( ^( I_RULE selectorGroup d= declarationsBlock ) )
			// CSSTree.g:270:9: ^( I_RULE selectorGroup d= declarationsBlock )
			{
			match(input,I_RULE,FOLLOW_I_RULE_in_ruleset446); 
			match(input, Token.DOWN, null); 
			pushFollow(FOLLOW_selectorGroup_in_ruleset448);
			selectorGroup();
			state._fsp--;

			pushFollow(FOLLOW_declarationsBlock_in_ruleset452);
			d=declarationsBlock();
			state._fsp--;

			match(input, Token.UP, null); 

			}


			    final List mediaQueryConditions;
			    if (mediaQuery_stack.isEmpty())
			        mediaQueryConditions = null;
			    else
			        mediaQueryConditions = mediaQuery_stack.peek().conditions;
			    
			    final CSSRule cssRule = new CSSRule(
			            mediaQueryConditions,
			            ruleset_stack.peek().subjects,
			            d, 
			            ((CommonTree)retval.start), 
			            tokenStream);
			    stylesheet_stack.peek().rules.add(cssRule);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			ruleset_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "ruleset"



	// $ANTLR start "selectorGroup"
	// CSSTree.g:273:1: selectorGroup : ^( I_SELECTOR_GROUP ( compoundSelector )+ ) ;
	public final void selectorGroup() throws RecognitionException {
		try {
			// CSSTree.g:274:5: ( ^( I_SELECTOR_GROUP ( compoundSelector )+ ) )
			// CSSTree.g:274:8: ^( I_SELECTOR_GROUP ( compoundSelector )+ )
			{
			match(input,I_SELECTOR_GROUP,FOLLOW_I_SELECTOR_GROUP_in_selectorGroup472); 
			match(input, Token.DOWN, null); 
			// CSSTree.g:274:27: ( compoundSelector )+
			int cnt9=0;
			loop9:
			while (true) {
				int alt9=2;
				int LA9_0 = input.LA(1);
				if ( (LA9_0==I_SELECTOR) ) {
					alt9=1;
				}

				switch (alt9) {
				case 1 :
					// CSSTree.g:274:27: compoundSelector
					{
					pushFollow(FOLLOW_compoundSelector_in_selectorGroup474);
					compoundSelector();
					state._fsp--;

					}
					break;

				default :
					if ( cnt9 >= 1 ) break loop9;
					EarlyExitException eee = new EarlyExitException(9, input);
					throw eee;
				}
				cnt9++;
			}

			match(input, Token.UP, null); 

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "selectorGroup"



	// $ANTLR start "compoundSelector"
	// CSSTree.g:277:1: compoundSelector : ^( I_SELECTOR firstSelector[simpleSelectorStack] ( moreSelectors[simpleSelectorStack] )* ) ;
	public final void compoundSelector() throws RecognitionException {

		    final Stack simpleSelectorStack = new Stack();

		try {
			// CSSTree.g:286:5: ( ^( I_SELECTOR firstSelector[simpleSelectorStack] ( moreSelectors[simpleSelectorStack] )* ) )
			// CSSTree.g:286:9: ^( I_SELECTOR firstSelector[simpleSelectorStack] ( moreSelectors[simpleSelectorStack] )* )
			{
			match(input,I_SELECTOR,FOLLOW_I_SELECTOR_in_compoundSelector510); 
			match(input, Token.DOWN, null); 
			pushFollow(FOLLOW_firstSelector_in_compoundSelector512);
			firstSelector(simpleSelectorStack);
			state._fsp--;

			// CSSTree.g:286:57: ( moreSelectors[simpleSelectorStack] )*
			loop10:
			while (true) {
				int alt10=2;
				int LA10_0 = input.LA(1);
				if ( (LA10_0==I_CHILD_SELECTOR||LA10_0==I_PRECEDED_SELECTOR||(LA10_0 >= I_SIBLING_SELECTOR && LA10_0 <= I_SIMPLE_SELECTOR)) ) {
					alt10=1;
				}

				switch (alt10) {
				case 1 :
					// CSSTree.g:286:57: moreSelectors[simpleSelectorStack]
					{
					pushFollow(FOLLOW_moreSelectors_in_compoundSelector515);
					moreSelectors(simpleSelectorStack);
					state._fsp--;

					}
					break;

				default :
					break loop10;
				}
			}

			match(input, Token.UP, null); 

			}


			    ruleset_stack.peek().subjects.add(simpleSelectorStack.peek());

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "compoundSelector"



	// $ANTLR start "moreSelectors"
	// CSSTree.g:289:1: moreSelectors[Stack simpleSelectorStack] : ( ^( I_CHILD_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.CHILD] ) | ^( I_PRECEDED_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.PRECEDED] ) | ^( I_SIBLING_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.SIBLING] ) | ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] ) );
	public final void moreSelectors(Stack simpleSelectorStack) throws RecognitionException {
		try {
			// CSSTree.g:290:5: ( ^( I_CHILD_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.CHILD] ) | ^( I_PRECEDED_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.PRECEDED] ) | ^( I_SIBLING_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.SIBLING] ) | ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] ) )
			int alt11=4;
			switch ( input.LA(1) ) {
			case I_CHILD_SELECTOR:
				{
				alt11=1;
				}
				break;
			case I_PRECEDED_SELECTOR:
				{
				alt11=2;
				}
				break;
			case I_SIBLING_SELECTOR:
				{
				alt11=3;
				}
				break;
			case I_SIMPLE_SELECTOR:
				{
				alt11=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 11, 0, input);
				throw nvae;
			}
			switch (alt11) {
				case 1 :
					// CSSTree.g:290:9: ^( I_CHILD_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.CHILD] )
					{
					match(input,I_CHILD_SELECTOR,FOLLOW_I_CHILD_SELECTOR_in_moreSelectors547); 
					match(input, Token.DOWN, null); 
					pushFollow(FOLLOW_simpleSelector_in_moreSelectors549);
					simpleSelector(simpleSelectorStack, CombinatorType.CHILD);
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;
				case 2 :
					// CSSTree.g:291:9: ^( I_PRECEDED_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.PRECEDED] )
					{
					match(input,I_PRECEDED_SELECTOR,FOLLOW_I_PRECEDED_SELECTOR_in_moreSelectors562); 
					match(input, Token.DOWN, null); 
					pushFollow(FOLLOW_simpleSelector_in_moreSelectors564);
					simpleSelector(simpleSelectorStack, CombinatorType.PRECEDED);
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;
				case 3 :
					// CSSTree.g:292:9: ^( I_SIBLING_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.SIBLING] )
					{
					match(input,I_SIBLING_SELECTOR,FOLLOW_I_SIBLING_SELECTOR_in_moreSelectors577); 
					match(input, Token.DOWN, null); 
					pushFollow(FOLLOW_simpleSelector_in_moreSelectors579);
					simpleSelector(simpleSelectorStack, CombinatorType.SIBLING);
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;
				case 4 :
					// CSSTree.g:293:9: ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] )
					{
					match(input,I_SIMPLE_SELECTOR,FOLLOW_I_SIMPLE_SELECTOR_in_moreSelectors592); 
					match(input, Token.DOWN, null); 
					pushFollow(FOLLOW_simpleSelector_in_moreSelectors594);
					simpleSelector(simpleSelectorStack, CombinatorType.DESCENDANT);
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "moreSelectors"



	// $ANTLR start "firstSelector"
	// CSSTree.g:296:1: firstSelector[Stack simpleSelectorStack] : ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] ) ;
	public final void firstSelector(Stack simpleSelectorStack) throws RecognitionException {
		try {
			// CSSTree.g:297:5: ( ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] ) )
			// CSSTree.g:297:9: ^( I_SIMPLE_SELECTOR simpleSelector[simpleSelectorStack, CombinatorType.DESCENDANT] )
			{
			match(input,I_SIMPLE_SELECTOR,FOLLOW_I_SIMPLE_SELECTOR_in_firstSelector619); 
			match(input, Token.DOWN, null); 
			pushFollow(FOLLOW_simpleSelector_in_firstSelector621);
			simpleSelector(simpleSelectorStack, CombinatorType.DESCENDANT);
			state._fsp--;

			match(input, Token.UP, null); 

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "firstSelector"


	protected static class simpleSelector_scope {
		String namespace;
		String element;
		List conditions;
	}
	protected Stack simpleSelector_stack = new Stack();

	public static class simpleSelector_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "simpleSelector"
	// CSSTree.g:300:1: simpleSelector[Stack simpleSelectorStack, CombinatorType combinatorType] : ( simpleSelectorFraction )+ ;
	public final CSSTree.simpleSelector_return simpleSelector(Stack simpleSelectorStack, CombinatorType combinatorType) throws RecognitionException {
		simpleSelector_stack.push(new simpleSelector_scope());
		CSSTree.simpleSelector_return retval = new CSSTree.simpleSelector_return();
		retval.start = input.LT(1);


		    simpleSelector_stack.peek().conditions = new ArrayList();
		    final CSSCombinator combinator ;
		    if (simpleSelectorStack.isEmpty())
		        combinator = null;
		    else                    
		        combinator = new CSSCombinator(simpleSelectorStack.peek(), combinatorType, ((CommonTree)retval.start), tokenStream);

		try {
			// CSSTree.g:332:5: ( ( simpleSelectorFraction )+ )
			// CSSTree.g:332:9: ( simpleSelectorFraction )+
			{
			// CSSTree.g:332:9: ( simpleSelectorFraction )+
			int cnt12=0;
			loop12:
			while (true) {
				int alt12=2;
				int LA12_0 = input.LA(1);
				if ( (LA12_0==COLON||(LA12_0 >= DOT && LA12_0 <= DOUBLE_COLON)||LA12_0==HASH_WORD||LA12_0==ID||LA12_0==NUMBER_WITH_PERCENT||LA12_0==PIPE||(LA12_0 >= SQUARE_OPEN && LA12_0 <= STAR)) ) {
					alt12=1;
				}

				switch (alt12) {
				case 1 :
					// CSSTree.g:332:9: simpleSelectorFraction
					{
					pushFollow(FOLLOW_simpleSelectorFraction_in_simpleSelector658);
					simpleSelectorFraction();
					state._fsp--;

					}
					break;

				default :
					if ( cnt12 >= 1 ) break loop12;
					EarlyExitException eee = new EarlyExitException(12, input);
					throw eee;
				}
				cnt12++;
			}

			}


			    if (strictFlexCSS && !CombinatorType.DESCENDANT.equals(combinatorType))
			    {
			        // Flex supported only the DESCENDANT combinator type
			        problems.add(new CSSStrictFlexSyntaxProblem(combinator, combinatorType.text));
			    }
			    final CSSSelector simpleSelector = new CSSSelector(
			        combinator,
			        simpleSelector_stack.peek().element,
			        simpleSelector_stack.peek().namespace,
			        simpleSelector_stack.peek().conditions, 
			        ((CommonTree)retval.start), 
			        tokenStream);
			    simpleSelectorStack.push(simpleSelector);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			simpleSelector_stack.pop();
		}
		return retval;
	}
	// $ANTLR end "simpleSelector"



	// $ANTLR start "simpleSelectorFraction"
	// CSSTree.g:336:1: simpleSelectorFraction : ( elementSelector | conditionSelector );
	public final void simpleSelectorFraction() throws RecognitionException {
		try {
			// CSSTree.g:337:5: ( elementSelector | conditionSelector )
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==ID||LA13_0==NUMBER_WITH_PERCENT||LA13_0==PIPE||LA13_0==STAR) ) {
				alt13=1;
			}
			else if ( (LA13_0==COLON||(LA13_0 >= DOT && LA13_0 <= DOUBLE_COLON)||LA13_0==HASH_WORD||LA13_0==SQUARE_OPEN) ) {
				alt13=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 13, 0, input);
				throw nvae;
			}

			switch (alt13) {
				case 1 :
					// CSSTree.g:337:9: elementSelector
					{
					pushFollow(FOLLOW_elementSelector_in_simpleSelectorFraction690);
					elementSelector();
					state._fsp--;

					}
					break;
				case 2 :
					// CSSTree.g:338:9: conditionSelector
					{
					pushFollow(FOLLOW_conditionSelector_in_simpleSelectorFraction700);
					conditionSelector();
					state._fsp--;

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "simpleSelectorFraction"


	public static class conditionSelector_return extends TreeRuleReturnScope {
	};


	// $ANTLR start "conditionSelector"
	// CSSTree.g:341:1: conditionSelector : ( ^( DOT c= ID ) | HASH_WORD | ^( COLON NOT arg= ARGUMENTS ) | ^( COLON s= ID ) | ^( DOUBLE_COLON dc= ID ) | attributeSelector );
	public final CSSTree.conditionSelector_return conditionSelector() throws RecognitionException {
		CSSTree.conditionSelector_return retval = new CSSTree.conditionSelector_return();
		retval.start = input.LT(1);

		CommonTree c=null;
		CommonTree arg=null;
		CommonTree s=null;
		CommonTree dc=null;
		CommonTree HASH_WORD1=null;
		CommonTree COLON2=null;
		CommonTree NOT3=null;
		CommonTree DOUBLE_COLON4=null;


		    ConditionType type = null;
		    String name = null;

		try {
			// CSSTree.g:352:5: ( ^( DOT c= ID ) | HASH_WORD | ^( COLON NOT arg= ARGUMENTS ) | ^( COLON s= ID ) | ^( DOUBLE_COLON dc= ID ) | attributeSelector )
			int alt14=6;
			switch ( input.LA(1) ) {
			case DOT:
				{
				alt14=1;
				}
				break;
			case HASH_WORD:
				{
				alt14=2;
				}
				break;
			case COLON:
				{
				int LA14_3 = input.LA(2);
				if ( (LA14_3==DOWN) ) {
					int LA14_6 = input.LA(3);
					if ( (LA14_6==NOT) ) {
						alt14=3;
					}
					else if ( (LA14_6==ID) ) {
						alt14=4;
					}

					else {
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 14, 6, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 14, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DOUBLE_COLON:
				{
				alt14=5;
				}
				break;
			case SQUARE_OPEN:
				{
				alt14=6;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 14, 0, input);
				throw nvae;
			}
			switch (alt14) {
				case 1 :
					// CSSTree.g:352:9: ^( DOT c= ID )
					{
					match(input,DOT,FOLLOW_DOT_in_conditionSelector734); 
					match(input, Token.DOWN, null); 
					c=(CommonTree)match(input,ID,FOLLOW_ID_in_conditionSelector738); 
					match(input, Token.UP, null); 

					 type = ConditionType.CLASS; name = (c!=null?c.getText():null); 
					}
					break;
				case 2 :
					// CSSTree.g:353:9: HASH_WORD
					{
					HASH_WORD1=(CommonTree)match(input,HASH_WORD,FOLLOW_HASH_WORD_in_conditionSelector755); 
					 type = ConditionType.ID; name = (HASH_WORD1!=null?HASH_WORD1.getText():null).substring(1); 
					}
					break;
				case 3 :
					// CSSTree.g:354:9: ^( COLON NOT arg= ARGUMENTS )
					{
					COLON2=(CommonTree)match(input,COLON,FOLLOW_COLON_in_conditionSelector770); 
					match(input, Token.DOWN, null); 
					NOT3=(CommonTree)match(input,NOT,FOLLOW_NOT_in_conditionSelector772); 
					arg=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_conditionSelector776); 
					match(input, Token.UP, null); 


					            if (strictFlexCSS)
					            {
					                // Flex didn't support the CSS :not() pseudo-class
					                displayStrictFlexSyntaxError((COLON2!=null?COLON2.getText():null) + (NOT3!=null?NOT3.getText():null), NOT3);
					            }
					            type = ConditionType.NOT;
					            name = (arg!=null?arg.getText():null);
					        
					}
					break;
				case 4 :
					// CSSTree.g:364:9: ^( COLON s= ID )
					{
					match(input,COLON,FOLLOW_COLON_in_conditionSelector798); 
					match(input, Token.DOWN, null); 
					s=(CommonTree)match(input,ID,FOLLOW_ID_in_conditionSelector802); 
					match(input, Token.UP, null); 

					 type = ConditionType.PSEUDO; name = (s!=null?s.getText():null); 
					}
					break;
				case 5 :
					// CSSTree.g:365:9: ^( DOUBLE_COLON dc= ID )
					{
					DOUBLE_COLON4=(CommonTree)match(input,DOUBLE_COLON,FOLLOW_DOUBLE_COLON_in_conditionSelector817); 
					match(input, Token.DOWN, null); 
					dc=(CommonTree)match(input,ID,FOLLOW_ID_in_conditionSelector821); 
					match(input, Token.UP, null); 


					            if (strictFlexCSS)
					            {
					                // Flex didn't support CSS pseudo elements (but did support non-function pseudo-classes)
					                displayStrictFlexSyntaxError((DOUBLE_COLON4!=null?DOUBLE_COLON4.getText():null), DOUBLE_COLON4);
					            }
					            type = ConditionType.PSEUDO_ELEMENT;
					            name = (dc!=null?dc.getText():null);
					        
					}
					break;
				case 6 :
					// CSSTree.g:375:9: attributeSelector
					{
					pushFollow(FOLLOW_attributeSelector_in_conditionSelector843);
					attributeSelector();
					state._fsp--;

					 type = ConditionType.ATTRIBUTE; name = curAttribute.substring(1); 
					}
					break;

			}

			    simpleSelector_stack.peek().conditions.add(
			        new CSSSelectorCondition(name, type, ((CommonTree)retval.start), tokenStream));

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "conditionSelector"



	// $ANTLR start "elementSelector"
	// CSSTree.g:378:1: elementSelector : ( ^( PIPE ns= ID e1= ID ) |e2= ID |np= NUMBER_WITH_PERCENT | STAR );
	public final void elementSelector() throws RecognitionException {
		CommonTree ns=null;
		CommonTree e1=null;
		CommonTree e2=null;
		CommonTree np=null;
		CommonTree STAR5=null;

		try {
			// CSSTree.g:379:5: ( ^( PIPE ns= ID e1= ID ) |e2= ID |np= NUMBER_WITH_PERCENT | STAR )
			int alt15=4;
			switch ( input.LA(1) ) {
			case PIPE:
				{
				alt15=1;
				}
				break;
			case ID:
				{
				alt15=2;
				}
				break;
			case NUMBER_WITH_PERCENT:
				{
				alt15=3;
				}
				break;
			case STAR:
				{
				alt15=4;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 15, 0, input);
				throw nvae;
			}
			switch (alt15) {
				case 1 :
					// CSSTree.g:379:9: ^( PIPE ns= ID e1= ID )
					{
					match(input,PIPE,FOLLOW_PIPE_in_elementSelector867); 
					match(input, Token.DOWN, null); 
					ns=(CommonTree)match(input,ID,FOLLOW_ID_in_elementSelector871); 
					e1=(CommonTree)match(input,ID,FOLLOW_ID_in_elementSelector875); 
					match(input, Token.UP, null); 

					 simpleSelector_stack.peek().element = (e1!=null?e1.getText():null); 
					          simpleSelector_stack.peek().namespace = (ns!=null?ns.getText():null); 
					}
					break;
				case 2 :
					// CSSTree.g:382:9: e2= ID
					{
					e2=(CommonTree)match(input,ID,FOLLOW_ID_in_elementSelector900); 
					 simpleSelector_stack.peek().element = (e2!=null?e2.getText():null); 
					}
					break;
				case 3 :
					// CSSTree.g:384:9: np= NUMBER_WITH_PERCENT
					{
					np=(CommonTree)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_elementSelector935); 
					 simpleSelector_stack.peek().element = (np!=null?np.getText():null); 
					}
					break;
				case 4 :
					// CSSTree.g:386:9: STAR
					{
					STAR5=(CommonTree)match(input,STAR,FOLLOW_STAR_in_elementSelector968); 
					 simpleSelector_stack.peek().element = (STAR5!=null?STAR5.getText():null); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "elementSelector"



	// $ANTLR start "attributeSelector"
	// CSSTree.g:390:1: attributeSelector : open= SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* close= SQUARE_END ;
	public final void attributeSelector() throws RecognitionException {
		CommonTree open=null;
		CommonTree close=null;

		try {
			// CSSTree.g:391:5: (open= SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* close= SQUARE_END )
			// CSSTree.g:391:9: open= SQUARE_OPEN attributeName ( attributeOperator )* ( attributeValue )* close= SQUARE_END
			{
			open=(CommonTree)match(input,SQUARE_OPEN,FOLLOW_SQUARE_OPEN_in_attributeSelector1016); 
			pushFollow(FOLLOW_attributeName_in_attributeSelector1018);
			attributeName();
			state._fsp--;

			// CSSTree.g:391:42: ( attributeOperator )*
			loop16:
			while (true) {
				int alt16=2;
				int LA16_0 = input.LA(1);
				if ( (LA16_0==BEGINS_WITH||LA16_0==CONTAINS||(LA16_0 >= ENDS_WITH && LA16_0 <= EQUALS)||LA16_0==HREFLANG_MATCH||LA16_0==LIST_MATCH) ) {
					alt16=1;
				}

				switch (alt16) {
				case 1 :
					// CSSTree.g:391:42: attributeOperator
					{
					pushFollow(FOLLOW_attributeOperator_in_attributeSelector1020);
					attributeOperator();
					state._fsp--;

					}
					break;

				default :
					break loop16;
				}
			}

			// CSSTree.g:391:61: ( attributeValue )*
			loop17:
			while (true) {
				int alt17=2;
				int LA17_0 = input.LA(1);
				if ( (LA17_0==ID||LA17_0==STRING) ) {
					alt17=1;
				}

				switch (alt17) {
				case 1 :
					// CSSTree.g:391:61: attributeValue
					{
					pushFollow(FOLLOW_attributeValue_in_attributeSelector1023);
					attributeValue();
					state._fsp--;

					}
					break;

				default :
					break loop17;
				}
			}

			close=(CommonTree)match(input,SQUARE_END,FOLLOW_SQUARE_END_in_attributeSelector1030); 

			            if (strictFlexCSS)
			            {
			                // Flex didn't support CSS attributes
			                displayStrictFlexSyntaxError((open!=null?open.getText():null), open);
			            }
			            curAttribute = (open!=null?open.getText():null) + curAttribute + (close!=null?close.getText():null);
			        
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attributeSelector"



	// $ANTLR start "attributeName"
	// CSSTree.g:402:1: attributeName : n1= ID ;
	public final void attributeName() throws RecognitionException {
		CommonTree n1=null;

		try {
			// CSSTree.g:403:5: (n1= ID )
			// CSSTree.g:403:10: n1= ID
			{
			n1=(CommonTree)match(input,ID,FOLLOW_ID_in_attributeName1068); 
			 curAttribute = (n1!=null?n1.getText():null); 
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attributeName"



	// $ANTLR start "attributeOperator"
	// CSSTree.g:407:1: attributeOperator : (o1= BEGINS_WITH |o2= ENDS_WITH |o3= CONTAINS |o4= LIST_MATCH |o5= HREFLANG_MATCH |o6= EQUALS );
	public final void attributeOperator() throws RecognitionException {
		CommonTree o1=null;
		CommonTree o2=null;
		CommonTree o3=null;
		CommonTree o4=null;
		CommonTree o5=null;
		CommonTree o6=null;

		try {
			// CSSTree.g:408:5: (o1= BEGINS_WITH |o2= ENDS_WITH |o3= CONTAINS |o4= LIST_MATCH |o5= HREFLANG_MATCH |o6= EQUALS )
			int alt18=6;
			switch ( input.LA(1) ) {
			case BEGINS_WITH:
				{
				alt18=1;
				}
				break;
			case ENDS_WITH:
				{
				alt18=2;
				}
				break;
			case CONTAINS:
				{
				alt18=3;
				}
				break;
			case LIST_MATCH:
				{
				alt18=4;
				}
				break;
			case HREFLANG_MATCH:
				{
				alt18=5;
				}
				break;
			case EQUALS:
				{
				alt18=6;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 18, 0, input);
				throw nvae;
			}
			switch (alt18) {
				case 1 :
					// CSSTree.g:408:10: o1= BEGINS_WITH
					{
					o1=(CommonTree)match(input,BEGINS_WITH,FOLLOW_BEGINS_WITH_in_attributeOperator1107); 
					 curAttribute += (o1!=null?o1.getText():null); 
					}
					break;
				case 2 :
					// CSSTree.g:410:10: o2= ENDS_WITH
					{
					o2=(CommonTree)match(input,ENDS_WITH,FOLLOW_ENDS_WITH_in_attributeOperator1133); 
					 curAttribute += (o2!=null?o2.getText():null); 
					}
					break;
				case 3 :
					// CSSTree.g:412:10: o3= CONTAINS
					{
					o3=(CommonTree)match(input,CONTAINS,FOLLOW_CONTAINS_in_attributeOperator1159); 
					 curAttribute += (o3!=null?o3.getText():null); 
					}
					break;
				case 4 :
					// CSSTree.g:414:10: o4= LIST_MATCH
					{
					o4=(CommonTree)match(input,LIST_MATCH,FOLLOW_LIST_MATCH_in_attributeOperator1185); 
					 curAttribute += (o4!=null?o4.getText():null); 
					}
					break;
				case 5 :
					// CSSTree.g:416:10: o5= HREFLANG_MATCH
					{
					o5=(CommonTree)match(input,HREFLANG_MATCH,FOLLOW_HREFLANG_MATCH_in_attributeOperator1211); 
					 curAttribute += (o5!=null?o5.getText():null); 
					}
					break;
				case 6 :
					// CSSTree.g:418:10: o6= EQUALS
					{
					o6=(CommonTree)match(input,EQUALS,FOLLOW_EQUALS_in_attributeOperator1237); 
					 curAttribute += (o6!=null?o6.getText():null); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attributeOperator"



	// $ANTLR start "attributeValue"
	// CSSTree.g:422:1: attributeValue : (s= STRING |s1= ID );
	public final void attributeValue() throws RecognitionException {
		CommonTree s=null;
		CommonTree s1=null;

		try {
			// CSSTree.g:423:5: (s= STRING |s1= ID )
			int alt19=2;
			int LA19_0 = input.LA(1);
			if ( (LA19_0==STRING) ) {
				alt19=1;
			}
			else if ( (LA19_0==ID) ) {
				alt19=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 19, 0, input);
				throw nvae;
			}

			switch (alt19) {
				case 1 :
					// CSSTree.g:423:10: s= STRING
					{
					s=(CommonTree)match(input,STRING,FOLLOW_STRING_in_attributeValue1276); 
					 curAttribute += (s!=null?s.getText():null); 
					}
					break;
				case 2 :
					// CSSTree.g:425:10: s1= ID
					{
					s1=(CommonTree)match(input,ID,FOLLOW_ID_in_attributeValue1302); 
					 curAttribute = (s1!=null?s1.getText():null); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attributeValue"



	// $ANTLR start "declarationsBlock"
	// CSSTree.g:430:1: declarationsBlock returns [List properties] : ^( I_DECL ( declaration )* ) ;
	public final List declarationsBlock() throws RecognitionException {
		List properties = null;


		TreeRuleReturnScope declaration6 =null;


		    properties = new ArrayList();

		try {
			// CSSTree.g:435:5: ( ^( I_DECL ( declaration )* ) )
			// CSSTree.g:435:9: ^( I_DECL ( declaration )* )
			{
			match(input,I_DECL,FOLLOW_I_DECL_in_declarationsBlock1349); 
			if ( input.LA(1)==Token.DOWN ) {
				match(input, Token.DOWN, null); 
				// CSSTree.g:435:18: ( declaration )*
				loop20:
				while (true) {
					int alt20=2;
					int LA20_0 = input.LA(1);
					if ( (LA20_0==COLON) ) {
						alt20=1;
					}

					switch (alt20) {
					case 1 :
						// CSSTree.g:435:19: declaration
						{
						pushFollow(FOLLOW_declaration_in_declarationsBlock1352);
						declaration6=declaration();
						state._fsp--;

						 
						             if ((declaration6!=null?((CSSTree.declaration_return)declaration6).property:null) != null)
						                 properties.add((declaration6!=null?((CSSTree.declaration_return)declaration6).property:null)); 
						         
						}
						break;

					default :
						break loop20;
					}
				}

				match(input, Token.UP, null); 
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return properties;
	}
	// $ANTLR end "declarationsBlock"


	public static class declaration_return extends TreeRuleReturnScope {
		public CSSProperty property;
	};


	// $ANTLR start "declaration"
	// CSSTree.g:443:1: declaration returns [CSSProperty property] : ( ^( COLON id= ID v= value ) | ^( COLON id= DASHED_ID v= value ) );
	public final CSSTree.declaration_return declaration() throws RecognitionException {
		CSSTree.declaration_return retval = new CSSTree.declaration_return();
		retval.start = input.LT(1);

		CommonTree id=null;
		TreeRuleReturnScope v =null;

		try {
			// CSSTree.g:454:5: ( ^( COLON id= ID v= value ) | ^( COLON id= DASHED_ID v= value ) )
			int alt21=2;
			int LA21_0 = input.LA(1);
			if ( (LA21_0==COLON) ) {
				int LA21_1 = input.LA(2);
				if ( (LA21_1==DOWN) ) {
					int LA21_2 = input.LA(3);
					if ( (LA21_2==ID) ) {
						alt21=1;
					}
					else if ( (LA21_2==DASHED_ID) ) {
						alt21=2;
					}

					else {
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 21, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 21, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 21, 0, input);
				throw nvae;
			}

			switch (alt21) {
				case 1 :
					// CSSTree.g:454:9: ^( COLON id= ID v= value )
					{
					match(input,COLON,FOLLOW_COLON_in_declaration1406); 
					match(input, Token.DOWN, null); 
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_declaration1410); 
					pushFollow(FOLLOW_value_in_declaration1414);
					v=value();
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;
				case 2 :
					// CSSTree.g:455:9: ^( COLON id= DASHED_ID v= value )
					{
					match(input,COLON,FOLLOW_COLON_in_declaration1426); 
					match(input, Token.DOWN, null); 
					id=(CommonTree)match(input,DASHED_ID,FOLLOW_DASHED_ID_in_declaration1430); 
					pushFollow(FOLLOW_value_in_declaration1434);
					v=value();
					state._fsp--;

					match(input, Token.UP, null); 

					}
					break;

			}

			    if (strictFlexCSS && (id!=null?id.getText():null).startsWith("--"))
			    {
			        // Flex didn't support CSS custom properties (CSS variables)
			        displayStrictFlexSyntaxError((id!=null?id.getText():null), id);
			    }
			    if ((id!=null?id.getText():null) != null && (v!=null?((CSSTree.value_return)v).propertyValue:null) != null)
			        retval.property = new CSSProperty((id!=null?id.getText():null), (v!=null?((CSSTree.value_return)v).propertyValue:null), ((CommonTree)retval.start), tokenStream);  

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declaration"


	public static class value_return extends TreeRuleReturnScope {
		public CSSPropertyValue propertyValue;
	};


	// $ANTLR start "value"
	// CSSTree.g:458:1: value returns [CSSPropertyValue propertyValue] : ( ^( I_ARRAY (s1= multiValue )+ ) |s2= multiValue );
	public final CSSTree.value_return value() throws RecognitionException {
		CSSTree.value_return retval = new CSSTree.value_return();
		retval.start = input.LT(1);

		TreeRuleReturnScope s1 =null;
		TreeRuleReturnScope s2 =null;

		try {
			// CSSTree.g:459:5: ( ^( I_ARRAY (s1= multiValue )+ ) |s2= multiValue )
			int alt23=2;
			int LA23_0 = input.LA(1);
			if ( (LA23_0==I_ARRAY) ) {
				alt23=1;
			}
			else if ( (LA23_0==ALPHA_VALUE||LA23_0==CALC||LA23_0==CLASS_REFERENCE||LA23_0==EMBED||(LA23_0 >= FUNCTIONS && LA23_0 <= HASH_WORD)||(LA23_0 >= ID && LA23_0 <= IMPORTANT)||LA23_0==I_MULTIVALUE||(LA23_0 >= LOCAL && LA23_0 <= MATRIX_VALUE)||(LA23_0 >= NUMBER_WITH_PERCENT && LA23_0 <= NUMBER_WITH_UNIT)||LA23_0==OPERATOR||(LA23_0 >= PROPERTY_REFERENCE && LA23_0 <= ROTATE_VALUE)||LA23_0==SCALE_VALUE||LA23_0==STRING||(LA23_0 >= TRANSLATE3D_VALUE && LA23_0 <= VAR)) ) {
				alt23=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 23, 0, input);
				throw nvae;
			}

			switch (alt23) {
				case 1 :
					// CSSTree.g:459:9: ^( I_ARRAY (s1= multiValue )+ )
					{
					match(input,I_ARRAY,FOLLOW_I_ARRAY_in_value1464); 
					 final List array = new ArrayList(); 
					match(input, Token.DOWN, null); 
					// CSSTree.g:461:12: (s1= multiValue )+
					int cnt22=0;
					loop22:
					while (true) {
						int alt22=2;
						int LA22_0 = input.LA(1);
						if ( (LA22_0==ALPHA_VALUE||LA22_0==CALC||LA22_0==CLASS_REFERENCE||LA22_0==EMBED||(LA22_0 >= FUNCTIONS && LA22_0 <= HASH_WORD)||(LA22_0 >= ID && LA22_0 <= IMPORTANT)||LA22_0==I_MULTIVALUE||(LA22_0 >= LOCAL && LA22_0 <= MATRIX_VALUE)||(LA22_0 >= NUMBER_WITH_PERCENT && LA22_0 <= NUMBER_WITH_UNIT)||LA22_0==OPERATOR||(LA22_0 >= PROPERTY_REFERENCE && LA22_0 <= ROTATE_VALUE)||LA22_0==SCALE_VALUE||LA22_0==STRING||(LA22_0 >= TRANSLATE3D_VALUE && LA22_0 <= VAR)) ) {
							alt22=1;
						}

						switch (alt22) {
						case 1 :
							// CSSTree.g:461:14: s1= multiValue
							{
							pushFollow(FOLLOW_multiValue_in_value1514);
							s1=multiValue();
							state._fsp--;

							 array.add((s1!=null?((CSSTree.multiValue_return)s1).propertyValue:null)); 
							}
							break;

						default :
							if ( cnt22 >= 1 ) break loop22;
							EarlyExitException eee = new EarlyExitException(22, input);
							throw eee;
						}
						cnt22++;
					}

					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSArrayPropertyValue(array, ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 2 :
					// CSSTree.g:463:9: s2= multiValue
					{
					pushFollow(FOLLOW_multiValue_in_value1566);
					s2=multiValue();
					state._fsp--;

					 retval.propertyValue = (s2!=null?((CSSTree.multiValue_return)s2).propertyValue:null); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "value"


	public static class multiValue_return extends TreeRuleReturnScope {
		public CSSPropertyValue propertyValue;
	};


	// $ANTLR start "multiValue"
	// CSSTree.g:466:1: multiValue returns [CSSPropertyValue propertyValue] : ( ^( I_MULTIVALUE (s1= singleValue )+ ) |s2= singleValue );
	public final CSSTree.multiValue_return multiValue() throws RecognitionException {
		CSSTree.multiValue_return retval = new CSSTree.multiValue_return();
		retval.start = input.LT(1);

		TreeRuleReturnScope s1 =null;
		TreeRuleReturnScope s2 =null;

		try {
			// CSSTree.g:467:5: ( ^( I_MULTIVALUE (s1= singleValue )+ ) |s2= singleValue )
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==I_MULTIVALUE) ) {
				alt25=1;
			}
			else if ( (LA25_0==ALPHA_VALUE||LA25_0==CALC||LA25_0==CLASS_REFERENCE||LA25_0==EMBED||(LA25_0 >= FUNCTIONS && LA25_0 <= HASH_WORD)||(LA25_0 >= ID && LA25_0 <= IMPORTANT)||(LA25_0 >= LOCAL && LA25_0 <= MATRIX_VALUE)||(LA25_0 >= NUMBER_WITH_PERCENT && LA25_0 <= NUMBER_WITH_UNIT)||LA25_0==OPERATOR||(LA25_0 >= PROPERTY_REFERENCE && LA25_0 <= ROTATE_VALUE)||LA25_0==SCALE_VALUE||LA25_0==STRING||(LA25_0 >= TRANSLATE3D_VALUE && LA25_0 <= VAR)) ) {
				alt25=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 25, 0, input);
				throw nvae;
			}

			switch (alt25) {
				case 1 :
					// CSSTree.g:467:9: ^( I_MULTIVALUE (s1= singleValue )+ )
					{
					match(input,I_MULTIVALUE,FOLLOW_I_MULTIVALUE_in_multiValue1605); 
					 final List array = new ArrayList(); 
					match(input, Token.DOWN, null); 
					// CSSTree.g:469:12: (s1= singleValue )+
					int cnt24=0;
					loop24:
					while (true) {
						int alt24=2;
						int LA24_0 = input.LA(1);
						if ( (LA24_0==ALPHA_VALUE||LA24_0==CALC||LA24_0==CLASS_REFERENCE||LA24_0==EMBED||(LA24_0 >= FUNCTIONS && LA24_0 <= HASH_WORD)||(LA24_0 >= ID && LA24_0 <= IMPORTANT)||(LA24_0 >= LOCAL && LA24_0 <= MATRIX_VALUE)||(LA24_0 >= NUMBER_WITH_PERCENT && LA24_0 <= NUMBER_WITH_UNIT)||LA24_0==OPERATOR||(LA24_0 >= PROPERTY_REFERENCE && LA24_0 <= ROTATE_VALUE)||LA24_0==SCALE_VALUE||LA24_0==STRING||(LA24_0 >= TRANSLATE3D_VALUE && LA24_0 <= VAR)) ) {
							alt24=1;
						}

						switch (alt24) {
						case 1 :
							// CSSTree.g:469:14: s1= singleValue
							{
							pushFollow(FOLLOW_singleValue_in_multiValue1655);
							s1=singleValue();
							state._fsp--;

							 array.add((s1!=null?((CSSTree.singleValue_return)s1).propertyValue:null)); 
							}
							break;

						default :
							if ( cnt24 >= 1 ) break loop24;
							EarlyExitException eee = new EarlyExitException(24, input);
							throw eee;
						}
						cnt24++;
					}

					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSMultiValuePropertyValue(array, ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 2 :
					// CSSTree.g:471:9: s2= singleValue
					{
					pushFollow(FOLLOW_singleValue_in_multiValue1706);
					s2=singleValue();
					state._fsp--;

					 retval.propertyValue = (s2!=null?((CSSTree.singleValue_return)s2).propertyValue:null); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "multiValue"


	public static class singleValue_return extends TreeRuleReturnScope {
		public CSSPropertyValue propertyValue;
	};


	// $ANTLR start "singleValue"
	// CSSTree.g:474:1: singleValue returns [CSSPropertyValue propertyValue] : ( NUMBER_WITH_PERCENT | NUMBER_WITH_UNIT | HASH_WORD | ALPHA_VALUE | RECT_VALUE | ROTATE_VALUE | SCALE_VALUE | TRANSLATE3D_VALUE | MATRIX_VALUE | MATRIX3D_VALUE | RGB | RGBA | ^( CLASS_REFERENCE cr= ARGUMENTS ) | ^( PROPERTY_REFERENCE pr= ARGUMENTS ) | ^( EMBED es= ARGUMENTS ) | ^( URL url= ARGUMENTS (format= formatOption )* ) | ^( LOCAL l= ARGUMENTS ) | ^( CALC l= ARGUMENTS ) | ^( VAR l= ARGUMENTS ) | ^( FUNCTIONS l= ARGUMENTS ) |s= STRING | ID | OPERATOR | IMPORTANT );
	public final CSSTree.singleValue_return singleValue() throws RecognitionException {
		CSSTree.singleValue_return retval = new CSSTree.singleValue_return();
		retval.start = input.LT(1);

		CommonTree cr=null;
		CommonTree pr=null;
		CommonTree es=null;
		CommonTree url=null;
		CommonTree l=null;
		CommonTree s=null;
		CommonTree NUMBER_WITH_PERCENT7=null;
		CommonTree NUMBER_WITH_UNIT8=null;
		CommonTree ALPHA_VALUE9=null;
		CommonTree ROTATE_VALUE10=null;
		CommonTree SCALE_VALUE11=null;
		CommonTree TRANSLATE3D_VALUE12=null;
		CommonTree MATRIX_VALUE13=null;
		CommonTree MATRIX3D_VALUE14=null;
		CommonTree RGB15=null;
		CommonTree RGBA16=null;
		CommonTree CLASS_REFERENCE17=null;
		CommonTree PROPERTY_REFERENCE18=null;
		CommonTree EMBED19=null;
		CommonTree URL20=null;
		CommonTree LOCAL21=null;
		CommonTree CALC22=null;
		CommonTree VAR23=null;
		CommonTree FUNCTIONS24=null;
		TreeRuleReturnScope format =null;

		try {
			// CSSTree.g:475:5: ( NUMBER_WITH_PERCENT | NUMBER_WITH_UNIT | HASH_WORD | ALPHA_VALUE | RECT_VALUE | ROTATE_VALUE | SCALE_VALUE | TRANSLATE3D_VALUE | MATRIX_VALUE | MATRIX3D_VALUE | RGB | RGBA | ^( CLASS_REFERENCE cr= ARGUMENTS ) | ^( PROPERTY_REFERENCE pr= ARGUMENTS ) | ^( EMBED es= ARGUMENTS ) | ^( URL url= ARGUMENTS (format= formatOption )* ) | ^( LOCAL l= ARGUMENTS ) | ^( CALC l= ARGUMENTS ) | ^( VAR l= ARGUMENTS ) | ^( FUNCTIONS l= ARGUMENTS ) |s= STRING | ID | OPERATOR | IMPORTANT )
			int alt27=24;
			switch ( input.LA(1) ) {
			case NUMBER_WITH_PERCENT:
				{
				alt27=1;
				}
				break;
			case NUMBER_WITH_UNIT:
				{
				alt27=2;
				}
				break;
			case HASH_WORD:
				{
				alt27=3;
				}
				break;
			case ALPHA_VALUE:
				{
				alt27=4;
				}
				break;
			case RECT_VALUE:
				{
				alt27=5;
				}
				break;
			case ROTATE_VALUE:
				{
				alt27=6;
				}
				break;
			case SCALE_VALUE:
				{
				alt27=7;
				}
				break;
			case TRANSLATE3D_VALUE:
				{
				alt27=8;
				}
				break;
			case MATRIX_VALUE:
				{
				alt27=9;
				}
				break;
			case MATRIX3D_VALUE:
				{
				alt27=10;
				}
				break;
			case RGB:
				{
				alt27=11;
				}
				break;
			case RGBA:
				{
				alt27=12;
				}
				break;
			case CLASS_REFERENCE:
				{
				alt27=13;
				}
				break;
			case PROPERTY_REFERENCE:
				{
				alt27=14;
				}
				break;
			case EMBED:
				{
				alt27=15;
				}
				break;
			case URL:
				{
				alt27=16;
				}
				break;
			case LOCAL:
				{
				alt27=17;
				}
				break;
			case CALC:
				{
				alt27=18;
				}
				break;
			case VAR:
				{
				alt27=19;
				}
				break;
			case FUNCTIONS:
				{
				alt27=20;
				}
				break;
			case STRING:
				{
				alt27=21;
				}
				break;
			case ID:
				{
				alt27=22;
				}
				break;
			case OPERATOR:
				{
				alt27=23;
				}
				break;
			case IMPORTANT:
				{
				alt27=24;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 27, 0, input);
				throw nvae;
			}
			switch (alt27) {
				case 1 :
					// CSSTree.g:475:9: NUMBER_WITH_PERCENT
					{
					NUMBER_WITH_PERCENT7=(CommonTree)match(input,NUMBER_WITH_PERCENT,FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1740); 
					 retval.propertyValue = new CSSNumberPropertyValue((NUMBER_WITH_PERCENT7!=null?NUMBER_WITH_PERCENT7.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 2 :
					// CSSTree.g:477:9: NUMBER_WITH_UNIT
					{
					NUMBER_WITH_UNIT8=(CommonTree)match(input,NUMBER_WITH_UNIT,FOLLOW_NUMBER_WITH_UNIT_in_singleValue1763); 
					 retval.propertyValue = new CSSNumberPropertyValue((NUMBER_WITH_UNIT8!=null?NUMBER_WITH_UNIT8.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 3 :
					// CSSTree.g:479:9: HASH_WORD
					{
					match(input,HASH_WORD,FOLLOW_HASH_WORD_in_singleValue1786); 
					 retval.propertyValue = new CSSColorPropertyValue(((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 4 :
					// CSSTree.g:481:9: ALPHA_VALUE
					{
					ALPHA_VALUE9=(CommonTree)match(input,ALPHA_VALUE,FOLLOW_ALPHA_VALUE_in_singleValue1815); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((ALPHA_VALUE9!=null?ALPHA_VALUE9.getText():null), ALPHA_VALUE9);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 5 :
					// CSSTree.g:489:9: RECT_VALUE
					{
					match(input,RECT_VALUE,FOLLOW_RECT_VALUE_in_singleValue1835); 
					 retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 6 :
					// CSSTree.g:491:9: ROTATE_VALUE
					{
					ROTATE_VALUE10=(CommonTree)match(input,ROTATE_VALUE,FOLLOW_ROTATE_VALUE_in_singleValue1855); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((ROTATE_VALUE10!=null?ROTATE_VALUE10.getText():null), ROTATE_VALUE10);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 7 :
					// CSSTree.g:499:9: SCALE_VALUE
					{
					SCALE_VALUE11=(CommonTree)match(input,SCALE_VALUE,FOLLOW_SCALE_VALUE_in_singleValue1875); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((SCALE_VALUE11!=null?SCALE_VALUE11.getText():null), SCALE_VALUE11);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 8 :
					// CSSTree.g:507:9: TRANSLATE3D_VALUE
					{
					TRANSLATE3D_VALUE12=(CommonTree)match(input,TRANSLATE3D_VALUE,FOLLOW_TRANSLATE3D_VALUE_in_singleValue1895); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((TRANSLATE3D_VALUE12!=null?TRANSLATE3D_VALUE12.getText():null), TRANSLATE3D_VALUE12);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 9 :
					// CSSTree.g:515:9: MATRIX_VALUE
					{
					MATRIX_VALUE13=(CommonTree)match(input,MATRIX_VALUE,FOLLOW_MATRIX_VALUE_in_singleValue1915); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((MATRIX_VALUE13!=null?MATRIX_VALUE13.getText():null), MATRIX_VALUE13);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 10 :
					// CSSTree.g:523:9: MATRIX3D_VALUE
					{
					MATRIX3D_VALUE14=(CommonTree)match(input,MATRIX3D_VALUE,FOLLOW_MATRIX3D_VALUE_in_singleValue1935); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((MATRIX3D_VALUE14!=null?MATRIX3D_VALUE14.getText():null), MATRIX3D_VALUE14);
					            }
					            retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 11 :
					// CSSTree.g:531:9: RGB
					{
					RGB15=(CommonTree)match(input,RGB,FOLLOW_RGB_in_singleValue1955); 
					 retval.propertyValue = new CSSRgbColorPropertyValue((RGB15!=null?RGB15.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 12 :
					// CSSTree.g:533:9: RGBA
					{
					RGBA16=(CommonTree)match(input,RGBA,FOLLOW_RGBA_in_singleValue1972); 

					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((RGBA16!=null?RGBA16.getText():null), RGBA16);
					            }
					            retval.propertyValue = new CSSRgbaColorPropertyValue((RGBA16!=null?RGBA16.getText():null), ((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 13 :
					// CSSTree.g:541:9: ^( CLASS_REFERENCE cr= ARGUMENTS )
					{
					CLASS_REFERENCE17=(CommonTree)match(input,CLASS_REFERENCE,FOLLOW_CLASS_REFERENCE_in_singleValue1990); 
					match(input, Token.DOWN, null); 
					cr=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue1994); 
					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSFunctionCallPropertyValue((CLASS_REFERENCE17!=null?CLASS_REFERENCE17.getText():null), (cr!=null?cr.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 14 :
					// CSSTree.g:543:9: ^( PROPERTY_REFERENCE pr= ARGUMENTS )
					{
					PROPERTY_REFERENCE18=(CommonTree)match(input,PROPERTY_REFERENCE,FOLLOW_PROPERTY_REFERENCE_in_singleValue2016); 
					match(input, Token.DOWN, null); 
					pr=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2020); 
					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSFunctionCallPropertyValue((PROPERTY_REFERENCE18!=null?PROPERTY_REFERENCE18.getText():null), (pr!=null?pr.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 15 :
					// CSSTree.g:545:9: ^( EMBED es= ARGUMENTS )
					{
					EMBED19=(CommonTree)match(input,EMBED,FOLLOW_EMBED_in_singleValue2042); 
					match(input, Token.DOWN, null); 
					es=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2046); 
					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSFunctionCallPropertyValue((EMBED19!=null?EMBED19.getText():null), (es!=null?es.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 16 :
					// CSSTree.g:547:9: ^( URL url= ARGUMENTS (format= formatOption )* )
					{
					URL20=(CommonTree)match(input,URL,FOLLOW_URL_in_singleValue2068); 
					match(input, Token.DOWN, null); 
					url=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2072); 
					// CSSTree.g:547:35: (format= formatOption )*
					loop26:
					while (true) {
						int alt26=2;
						int LA26_0 = input.LA(1);
						if ( (LA26_0==FORMAT) ) {
							alt26=1;
						}

						switch (alt26) {
						case 1 :
							// CSSTree.g:547:35: format= formatOption
							{
							pushFollow(FOLLOW_formatOption_in_singleValue2076);
							format=formatOption();
							state._fsp--;

							}
							break;

						default :
							break loop26;
						}
					}

					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSURLAndFormatPropertyValue((URL20!=null?URL20.getText():null), (url!=null?url.getText():null), (format!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(format.start),input.getTreeAdaptor().getTokenStopIndex(format.start))):null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 17 :
					// CSSTree.g:549:9: ^( LOCAL l= ARGUMENTS )
					{
					LOCAL21=(CommonTree)match(input,LOCAL,FOLLOW_LOCAL_in_singleValue2099); 
					match(input, Token.DOWN, null); 
					l=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2103); 
					match(input, Token.UP, null); 

					 retval.propertyValue = new CSSFunctionCallPropertyValue((LOCAL21!=null?LOCAL21.getText():null), (l!=null?l.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 18 :
					// CSSTree.g:551:9: ^( CALC l= ARGUMENTS )
					{
					CALC22=(CommonTree)match(input,CALC,FOLLOW_CALC_in_singleValue2125); 
					match(input, Token.DOWN, null); 
					l=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2129); 
					match(input, Token.UP, null); 


					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((CALC22!=null?CALC22.getText():null), CALC22);
					            }
					            retval.propertyValue = new CSSFunctionCallPropertyValue((CALC22!=null?CALC22.getText():null), (l!=null?l.getText():null), ((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 19 :
					// CSSTree.g:559:9: ^( VAR l= ARGUMENTS )
					{
					VAR23=(CommonTree)match(input,VAR,FOLLOW_VAR_in_singleValue2151); 
					match(input, Token.DOWN, null); 
					l=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2155); 
					match(input, Token.UP, null); 


					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((VAR23!=null?VAR23.getText():null), VAR23);
					            }
					            retval.propertyValue = new CSSFunctionCallPropertyValue((VAR23!=null?VAR23.getText():null), (l!=null?l.getText():null), ((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 20 :
					// CSSTree.g:567:9: ^( FUNCTIONS l= ARGUMENTS )
					{
					FUNCTIONS24=(CommonTree)match(input,FUNCTIONS,FOLLOW_FUNCTIONS_in_singleValue2177); 
					match(input, Token.DOWN, null); 
					l=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_singleValue2181); 
					match(input, Token.UP, null); 


					            if (strictFlexCSS)
					            {
					                displayStrictFlexSyntaxError((FUNCTIONS24!=null?FUNCTIONS24.getText():null), FUNCTIONS24);
					            }
					            retval.propertyValue = new CSSFunctionCallPropertyValue((FUNCTIONS24!=null?FUNCTIONS24.getText():null), (l!=null?l.getText():null), ((CommonTree)retval.start), tokenStream);
					        
					}
					break;
				case 21 :
					// CSSTree.g:575:9: s= STRING
					{
					s=(CommonTree)match(input,STRING,FOLLOW_STRING_in_singleValue2204); 
					 retval.propertyValue = new CSSStringPropertyValue((s!=null?s.getText():null), ((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 22 :
					// CSSTree.g:577:9: ID
					{
					match(input,ID,FOLLOW_ID_in_singleValue2246); 
					 retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 23 :
					// CSSTree.g:579:9: OPERATOR
					{
					match(input,OPERATOR,FOLLOW_OPERATOR_in_singleValue2267); 
					 retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream); 
					}
					break;
				case 24 :
					// CSSTree.g:581:9: IMPORTANT
					{
					match(input,IMPORTANT,FOLLOW_IMPORTANT_in_singleValue2288); 
					 retval.propertyValue = CSSKeywordPropertyValue.create(((CommonTree)retval.start), tokenStream); 
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "singleValue"


	public static class formatOption_return extends TreeRuleReturnScope {
		public CSSPropertyValue propertyValue;
	};


	// $ANTLR start "formatOption"
	// CSSTree.g:585:1: formatOption returns [CSSPropertyValue propertyValue] : ^( FORMAT format= ARGUMENTS ) ;
	public final CSSTree.formatOption_return formatOption() throws RecognitionException {
		CSSTree.formatOption_return retval = new CSSTree.formatOption_return();
		retval.start = input.LT(1);

		CommonTree format=null;
		CommonTree FORMAT25=null;

		try {
			// CSSTree.g:586:5: ( ^( FORMAT format= ARGUMENTS ) )
			// CSSTree.g:586:9: ^( FORMAT format= ARGUMENTS )
			{
			FORMAT25=(CommonTree)match(input,FORMAT,FOLLOW_FORMAT_in_formatOption2327); 
			match(input, Token.DOWN, null); 
			format=(CommonTree)match(input,ARGUMENTS,FOLLOW_ARGUMENTS_in_formatOption2331); 
			match(input, Token.UP, null); 

			 retval.propertyValue = new CSSFunctionCallPropertyValue((FORMAT25!=null?FORMAT25.getText():null), (format!=null?format.getText():null), ((CommonTree)retval.start), tokenStream); 
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "formatOption"


	public static class argumentList_return extends TreeRuleReturnScope {
		public List labels;
		public List values;
	};


	// $ANTLR start "argumentList"
	// CSSTree.g:590:1: argumentList returns [List labels, List values] : ( argument[$labels, $values] )+ ;
	public final CSSTree.argumentList_return argumentList() throws RecognitionException {
		CSSTree.argumentList_return retval = new CSSTree.argumentList_return();
		retval.start = input.LT(1);


		    retval.labels = new ArrayList(3);
		    retval.values = new ArrayList(3);

		try {
			// CSSTree.g:596:5: ( ( argument[$labels, $values] )+ )
			// CSSTree.g:596:9: ( argument[$labels, $values] )+
			{
			// CSSTree.g:596:9: ( argument[$labels, $values] )+
			int cnt28=0;
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==EQUALS) ) {
					alt28=1;
				}

				switch (alt28) {
				case 1 :
					// CSSTree.g:596:9: argument[$labels, $values]
					{
					pushFollow(FOLLOW_argument_in_argumentList2372);
					argument(retval.labels, retval.values);
					state._fsp--;

					}
					break;

				default :
					if ( cnt28 >= 1 ) break loop28;
					EarlyExitException eee = new EarlyExitException(28, input);
					throw eee;
				}
				cnt28++;
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "argumentList"



	// $ANTLR start "argument"
	// CSSTree.g:599:1: argument[List labels, List values] : ^( EQUALS (l= ID )? v= STRING ) ;
	public final void argument(List labels, List values) throws RecognitionException {
		CommonTree l=null;
		CommonTree v=null;

		try {
			// CSSTree.g:606:5: ( ^( EQUALS (l= ID )? v= STRING ) )
			// CSSTree.g:606:9: ^( EQUALS (l= ID )? v= STRING )
			{
			match(input,EQUALS,FOLLOW_EQUALS_in_argument2405); 
			match(input, Token.DOWN, null); 
			// CSSTree.g:606:19: (l= ID )?
			int alt29=2;
			int LA29_0 = input.LA(1);
			if ( (LA29_0==ID) ) {
				alt29=1;
			}
			switch (alt29) {
				case 1 :
					// CSSTree.g:606:19: l= ID
					{
					l=(CommonTree)match(input,ID,FOLLOW_ID_in_argument2409); 
					}
					break;

			}

			v=(CommonTree)match(input,STRING,FOLLOW_STRING_in_argument2414); 
			match(input, Token.UP, null); 

			}


			    // Use null for argument without label.
			    labels.add((l!=null?l.getText():null));
			    values.add((v!=null?v.getText():null)); 

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "argument"

	// Delegated rules



	public static final BitSet FOLLOW_namespaceStatement_in_stylesheet94 = new BitSet(new long[]{0x00000400000007C2L});
	public static final BitSet FOLLOW_fontFace_in_stylesheet98 = new BitSet(new long[]{0x00000400000007C2L});
	public static final BitSet FOLLOW_keyframes_in_stylesheet102 = new BitSet(new long[]{0x00000400000007C2L});
	public static final BitSet FOLLOW_mediaQuery_in_stylesheet106 = new BitSet(new long[]{0x00000400000007C2L});
	public static final BitSet FOLLOW_ruleset_in_stylesheet110 = new BitSet(new long[]{0x00000400000007C2L});
	public static final BitSet FOLLOW_AT_NAMESPACE_in_namespaceStatement146 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_namespaceStatement150 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_STRING_in_namespaceStatement155 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_AT_KEYFRAMES_in_keyframes178 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_keyframes182 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_ruleset_in_keyframes184 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_AT_WEBKIT_KEYFRAMES_in_keyframes208 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_keyframes212 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_ruleset_in_keyframes214 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_AT_MEDIA_in_mediaQuery261 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_medium_in_mediaQuery263 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_ruleset_in_mediaQuery265 = new BitSet(new long[]{0x0000040000000008L});
	public static final BitSet FOLLOW_I_MEDIUM_CONDITIONS_in_medium290 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_mediumCondition_in_medium292 = new BitSet(new long[]{0x0400000400040028L});
	public static final BitSet FOLLOW_ID_in_mediumCondition315 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ONLY_in_mediumCondition331 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_ID_in_mediumCondition335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ARGUMENTS_in_mediumCondition351 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_mediumCondition366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_FONT_FACE_in_fontFace402 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_declarationsBlock_in_fontFace406 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_RULE_in_ruleset446 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_selectorGroup_in_ruleset448 = new BitSet(new long[]{0x0000004000000000L});
	public static final BitSet FOLLOW_declarationsBlock_in_ruleset452 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_SELECTOR_GROUP_in_selectorGroup472 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_compoundSelector_in_selectorGroup474 = new BitSet(new long[]{0x0000100000000008L});
	public static final BitSet FOLLOW_I_SELECTOR_in_compoundSelector510 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_firstSelector_in_compoundSelector512 = new BitSet(new long[]{0x0000C22000000008L});
	public static final BitSet FOLLOW_moreSelectors_in_compoundSelector515 = new BitSet(new long[]{0x0000C22000000008L});
	public static final BitSet FOLLOW_I_CHILD_SELECTOR_in_moreSelectors547 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_simpleSelector_in_moreSelectors549 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_PRECEDED_SELECTOR_in_moreSelectors562 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_simpleSelector_in_moreSelectors564 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_SIBLING_SELECTOR_in_moreSelectors577 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_simpleSelector_in_moreSelectors579 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_SIMPLE_SELECTOR_in_moreSelectors592 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_simpleSelector_in_moreSelectors594 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_SIMPLE_SELECTOR_in_firstSelector619 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_simpleSelector_in_firstSelector621 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_simpleSelectorFraction_in_simpleSelector658 = new BitSet(new long[]{0x2100000481820002L,0x0000000000000300L});
	public static final BitSet FOLLOW_elementSelector_in_simpleSelectorFraction690 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionSelector_in_simpleSelectorFraction700 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_conditionSelector734 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_conditionSelector738 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_HASH_WORD_in_conditionSelector755 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_conditionSelector770 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_NOT_in_conditionSelector772 = new BitSet(new long[]{0x0000000000000020L});
	public static final BitSet FOLLOW_ARGUMENTS_in_conditionSelector776 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_COLON_in_conditionSelector798 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_conditionSelector802 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_DOUBLE_COLON_in_conditionSelector817 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_conditionSelector821 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_attributeSelector_in_conditionSelector843 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PIPE_in_elementSelector867 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_elementSelector871 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_ID_in_elementSelector875 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_ID_in_elementSelector900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_elementSelector935 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_elementSelector968 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SQUARE_OPEN_in_attributeSelector1016 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_attributeName_in_attributeSelector1018 = new BitSet(new long[]{0x000200060C100800L,0x0000000000000480L});
	public static final BitSet FOLLOW_attributeOperator_in_attributeSelector1020 = new BitSet(new long[]{0x000200060C100800L,0x0000000000000480L});
	public static final BitSet FOLLOW_attributeValue_in_attributeSelector1023 = new BitSet(new long[]{0x0000000400000000L,0x0000000000000480L});
	public static final BitSet FOLLOW_SQUARE_END_in_attributeSelector1030 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_attributeName1068 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BEGINS_WITH_in_attributeOperator1107 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENDS_WITH_in_attributeOperator1133 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTAINS_in_attributeOperator1159 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LIST_MATCH_in_attributeOperator1185 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HREFLANG_MATCH_in_attributeOperator1211 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQUALS_in_attributeOperator1237 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_attributeValue1276 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_attributeValue1302 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_I_DECL_in_declarationsBlock1349 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_declaration_in_declarationsBlock1352 = new BitSet(new long[]{0x0000000000020008L});
	public static final BitSet FOLLOW_COLON_in_declaration1406 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_declaration1410 = new BitSet(new long[]{0x8B1C011CC2014010L,0x000000000000E42FL});
	public static final BitSet FOLLOW_value_in_declaration1414 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_COLON_in_declaration1426 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_DASHED_ID_in_declaration1430 = new BitSet(new long[]{0x8B1C011CC2014010L,0x000000000000E42FL});
	public static final BitSet FOLLOW_value_in_declaration1434 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_I_ARRAY_in_value1464 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_multiValue_in_value1514 = new BitSet(new long[]{0x8B1C010CC2014018L,0x000000000000E42FL});
	public static final BitSet FOLLOW_multiValue_in_value1566 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_I_MULTIVALUE_in_multiValue1605 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_singleValue_in_multiValue1655 = new BitSet(new long[]{0x8B1C000CC2014018L,0x000000000000E42FL});
	public static final BitSet FOLLOW_singleValue_in_multiValue1706 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_PERCENT_in_singleValue1740 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_WITH_UNIT_in_singleValue1763 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_WORD_in_singleValue1786 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALPHA_VALUE_in_singleValue1815 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RECT_VALUE_in_singleValue1835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ROTATE_VALUE_in_singleValue1855 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCALE_VALUE_in_singleValue1875 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRANSLATE3D_VALUE_in_singleValue1895 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MATRIX_VALUE_in_singleValue1915 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MATRIX3D_VALUE_in_singleValue1935 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGB_in_singleValue1955 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RGBA_in_singleValue1972 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_REFERENCE_in_singleValue1990 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue1994 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_PROPERTY_REFERENCE_in_singleValue2016 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2020 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_EMBED_in_singleValue2042 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2046 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_URL_in_singleValue2068 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2072 = new BitSet(new long[]{0x0000000020000008L});
	public static final BitSet FOLLOW_formatOption_in_singleValue2076 = new BitSet(new long[]{0x0000000020000008L});
	public static final BitSet FOLLOW_LOCAL_in_singleValue2099 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2103 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_CALC_in_singleValue2125 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2129 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_VAR_in_singleValue2151 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2155 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_FUNCTIONS_in_singleValue2177 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_singleValue2181 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_STRING_in_singleValue2204 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_singleValue2246 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPERATOR_in_singleValue2267 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPORTANT_in_singleValue2288 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FORMAT_in_formatOption2327 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ARGUMENTS_in_formatOption2331 = new BitSet(new long[]{0x0000000000000008L});
	public static final BitSet FOLLOW_argument_in_argumentList2372 = new BitSet(new long[]{0x0000000008000002L});
	public static final BitSet FOLLOW_EQUALS_in_argument2405 = new BitSet(new long[]{0x0000000000000004L});
	public static final BitSet FOLLOW_ID_in_argument2409 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_STRING_in_argument2414 = new BitSet(new long[]{0x0000000000000008L});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy