]> source.dussan.org Git - vaadin-framework.git/commitdiff
Copy unrecognized @ rules to output as is (#10486) 42/542/1
authorHenri Sara <hesara@vaadin.com>
Wed, 19 Dec 2012 14:39:56 +0000 (16:39 +0200)
committerHenri Sara <hesara@vaadin.com>
Wed, 19 Dec 2012 14:39:56 +0000 (16:39 +0200)
Also adds preliminary support for recognizing @debug and @warn so that
those are not copied.

Change-Id: Idaf80daaad78804871d128a9e804404fcf043d25

theme-compiler/src/com/vaadin/sass/internal/handler/SCSSDocumentHandlerImpl.java
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
theme-compiler/tests/resources/automatic/css/unknown_as_is.css [new file with mode: 0644]
theme-compiler/tests/resources/automatic/scss/unknown_as_is.scss [new file with mode: 0644]

index 4b98815a4b31ae756ddec22ee9a7decde362f52b..b259e7b69f51f3136716d116abd9f77e1eb5e575 100644 (file)
@@ -44,6 +44,7 @@ import com.vaadin.sass.internal.tree.MixinNode;
 import com.vaadin.sass.internal.tree.NestPropertiesNode;
 import com.vaadin.sass.internal.tree.Node;
 import com.vaadin.sass.internal.tree.RuleNode;
+import com.vaadin.sass.internal.tree.SimpleNode;
 import com.vaadin.sass.internal.tree.VariableNode;
 import com.vaadin.sass.internal.tree.WhileNode;
 import com.vaadin.sass.internal.tree.controldirective.EachDefNode;
@@ -293,6 +294,13 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
         nodeStack.peek().appendChild(node);
     }
 
+    // rule that is passed to the output as-is (except variable value
+    // substitution) - no children
+    public void unrecognizedRule(String text) {
+        SimpleNode node = new SimpleNode(text);
+        nodeStack.peek().appendChild(node);
+    }
+
     @Override
     public void endSelector(SelectorList arg0) throws CSSException {
         // TODO Auto-generated method stub
index d2575e376438507da033daac96d6570258bda5e3..83e46c34c9af8e1a9e0c15b06cd8fc35eb5e57cd 100644 (file)
@@ -567,6 +567,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           }
         }
         break;
+      case DEBUG_SYM:
+        debugDirective();
+        break;
+      case WARN_SYM:
+        warnDirective();
+        break;
       case IF_SYM:
         ifDirective();
         break;
@@ -605,9 +611,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           if ((ret == null) || (ret.length() == 0)) {
               {if (true) return;}
           }
-          reportWarningSkipText(l, ret);
           if (ret.charAt(0) == '@') {
-              documentHandler.ignorableAtRule(ret);
+              documentHandler.unrecognizedRule(ret);
+          } else {
+              reportWarningSkipText(l, ret);
           }
       }
       label_8:
@@ -803,6 +810,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         case COLON:
         case INTERPOLATION:
         case NONASCII:
+        case DEBUG_SYM:
+        case WARN_SYM:
         case STRING:
         case IDENT:
         case NUMBER:
@@ -826,6 +835,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           break label_15;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DEBUG_SYM:
+          debugDirective();
+          break;
+        case WARN_SYM:
+          warnDirective();
+          break;
         case LBRACKET:
         case ANY:
         case PARENT:
@@ -1210,9 +1225,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
  String ret;
     n = jj_consume_token(ATKEYWORD);
         ret=skipStatement();
-        reportWarningSkipText(getLocator(), ret);
         if ((ret != null) && (ret.charAt(0) == '@')) {
-            documentHandler.ignorableAtRule(ret);
+            documentHandler.unrecognizedRule(ret);
+        } else {
+            reportWarningSkipText(getLocator(), ret);
         }
   }
 
@@ -1302,9 +1318,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
      String ret;
      Locator loc = getLocator();
      ret=skipStatement();
-     reportWarningSkipText(loc, ret);
      if ((ret != null) && (n.image.charAt(0) == '@')) {
-         documentHandler.ignorableAtRule(ret);
+         documentHandler.unrecognizedRule(ret);
+     } else {
+     reportWarningSkipText(loc, ret);
      }
   }
 
@@ -1606,6 +1623,8 @@ char connector = ' ';
         case COLON:
         case INTERPOLATION:
         case INCLUDE_SYM:
+        case DEBUG_SYM:
+        case WARN_SYM:
         case EACH_SYM:
         case IF_SYM:
         case EXTEND_SYM:
@@ -1657,6 +1676,8 @@ char connector = ' ';
                 case DOT:
                 case COLON:
                 case INTERPOLATION:
+                case DEBUG_SYM:
+                case WARN_SYM:
                 case IDENT:
                 case HASH:
                   styleRuleOrDeclarationOrNestedProperties();
@@ -2485,6 +2506,8 @@ boolean isPseudoElement = false;
       case COLON:
       case INTERPOLATION:
       case INCLUDE_SYM:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case EXTEND_SYM:
       case IDENT:
       case VARIABLE:
@@ -2515,6 +2538,8 @@ boolean isPseudoElement = false;
       case DOT:
       case COLON:
       case INTERPOLATION:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case IDENT:
       case HASH:
         styleRuleOrDeclarationOrNestedProperties();
@@ -2631,6 +2656,8 @@ boolean isPseudoElement = false;
       case COLON:
       case INTERPOLATION:
       case INCLUDE_SYM:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case EXTEND_SYM:
       case IDENT:
       case VARIABLE:
@@ -2661,6 +2688,8 @@ boolean isPseudoElement = false;
       case DOT:
       case COLON:
       case INTERPOLATION:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case IDENT:
       case HASH:
         styleRuleOrDeclarationOrNestedProperties();
@@ -2829,6 +2858,8 @@ boolean isPseudoElement = false;
       case COLON:
       case INTERPOLATION:
       case INCLUDE_SYM:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case EXTEND_SYM:
       case IDENT:
       case VARIABLE:
@@ -2865,6 +2896,8 @@ boolean isPseudoElement = false;
           case DOT:
           case COLON:
           case INTERPOLATION:
+          case DEBUG_SYM:
+          case WARN_SYM:
           case IDENT:
           case HASH:
             styleRuleOrDeclarationOrNestedProperties();
@@ -3019,6 +3052,8 @@ boolean isPseudoElement = false;
       case COLON:
       case INTERPOLATION:
       case INCLUDE_SYM:
+      case DEBUG_SYM:
+      case WARN_SYM:
       case EACH_SYM:
       case IF_SYM:
       case EXTEND_SYM:
@@ -3065,6 +3100,8 @@ boolean isPseudoElement = false;
           case DOT:
           case COLON:
           case INTERPOLATION:
+          case DEBUG_SYM:
+          case WARN_SYM:
           case IDENT:
           case HASH:
             styleRuleOrDeclarationOrNestedProperties();
@@ -3955,10 +3992,42 @@ boolean isPseudoElement = false;
     throw new Error("Missing return statement in function");
   }
 
-  void debugDirective() throws ParseException {
+  final public void debugDirective() throws ParseException {
+    jj_consume_token(DEBUG_SYM);
+    String content = skipStatementUntilSemiColon();
+    // TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
+    System.out.println(content);
+    label_127:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[182] = jj_gen;
+        break label_127;
+      }
+      jj_consume_token(S);
+    }
   }
 
-  void warnDirective() throws ParseException {
+  final public void warnDirective() throws ParseException {
+    jj_consume_token(WARN_SYM);
+    String content = skipStatementUntilSemiColon();
+    // TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
+    System.err.println(content);
+    label_128:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[183] = jj_gen;
+        break label_128;
+      }
+      jj_consume_token(S);
+    }
   }
 
   final public Node forDirective() throws ParseException {
@@ -3981,20 +4050,20 @@ boolean isPseudoElement = false;
                        exclusive = false;
       break;
     default:
-      jj_la1[182] = jj_gen;
+      jj_la1[184] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     to = skipStatementUntilLeftBrace();
-    label_127:
+    label_129:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[183] = jj_gen;
-        break label_127;
+        jj_la1[185] = jj_gen;
+        break label_129;
       }
       jj_consume_token(S);
     }
@@ -4015,31 +4084,31 @@ boolean isPseudoElement = false;
   final public void extendDirective() throws ParseException {
  ArrayList<String> list;
     jj_consume_token(EXTEND_SYM);
-    label_128:
+    label_130:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[184] = jj_gen;
-        break label_128;
+        jj_la1[186] = jj_gen;
+        break label_130;
       }
       jj_consume_token(S);
     }
     list = selectorList();
-    label_129:
+    label_131:
     while (true) {
       jj_consume_token(SEMICOLON);
-      label_130:
+      label_132:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[185] = jj_gen;
-          break label_130;
+          jj_la1[187] = jj_gen;
+          break label_132;
         }
         jj_consume_token(S);
       }
@@ -4048,8 +4117,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[186] = jj_gen;
-        break label_129;
+        jj_la1[188] = jj_gen;
+        break label_131;
       }
     }
      documentHandler.extendDirective(list);
@@ -4076,28 +4145,28 @@ boolean isPseudoElement = false;
 LexicalUnit exp;
     name = property();
     jj_consume_token(COLON);
-    label_131:
+    label_133:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[187] = jj_gen;
-        break label_131;
+        jj_la1[189] = jj_gen;
+        break label_133;
       }
       jj_consume_token(S);
     }
     jj_consume_token(LBRACE);
-    label_132:
+    label_134:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[188] = jj_gen;
-        break label_132;
+        jj_la1[190] = jj_gen;
+        break label_134;
       }
       jj_consume_token(S);
     }
@@ -4107,29 +4176,29 @@ LexicalUnit exp;
       declaration();
       break;
     default:
-      jj_la1[189] = jj_gen;
+      jj_la1[191] = jj_gen;
       ;
     }
-    label_133:
+    label_135:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[190] = jj_gen;
-        break label_133;
+        jj_la1[192] = jj_gen;
+        break label_135;
       }
       jj_consume_token(SEMICOLON);
-      label_134:
+      label_136:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[191] = jj_gen;
-          break label_134;
+          jj_la1[193] = jj_gen;
+          break label_136;
         }
         jj_consume_token(S);
       }
@@ -4138,21 +4207,21 @@ LexicalUnit exp;
         declaration();
         break;
       default:
-        jj_la1[192] = jj_gen;
+        jj_la1[194] = jj_gen;
         ;
       }
     }
     jj_consume_token(RBRACE);
       documentHandler.endNestedProperties(name);
-    label_135:
+    label_137:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[193] = jj_gen;
-        break label_135;
+        jj_la1[195] = jj_gen;
+        break label_137;
       }
       jj_consume_token(S);
     }
@@ -4167,11 +4236,17 @@ LexicalUnit exp;
         styleRule();
       } else {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DEBUG_SYM:
+          debugDirective();
+          break;
+        case WARN_SYM:
+          warnDirective();
+          break;
         case IDENT:
           declarationOrNestedProperties();
           break;
         default:
-          jj_la1[194] = jj_gen;
+          jj_la1[196] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -4215,15 +4290,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_136:
+      label_138:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[195] = jj_gen;
-          break label_136;
+          jj_la1[197] = jj_gen;
+          break label_138;
         }
         jj_consume_token(S);
       }
@@ -4262,7 +4337,7 @@ LexicalUnit exp;
           important = prio();
           break;
         default:
-          jj_la1[196] = jj_gen;
+          jj_la1[198] = jj_gen;
           ;
         }
          Token next = getToken(1);
@@ -4280,15 +4355,15 @@ LexicalUnit exp;
         break;
       case LBRACE:
         jj_consume_token(LBRACE);
-        label_137:
+        label_139:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[197] = jj_gen;
-            break label_137;
+            jj_la1[199] = jj_gen;
+            break label_139;
           }
           jj_consume_token(S);
         }
@@ -4298,29 +4373,29 @@ LexicalUnit exp;
           declaration();
           break;
         default:
-          jj_la1[198] = jj_gen;
+          jj_la1[200] = jj_gen;
           ;
         }
-        label_138:
+        label_140:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case SEMICOLON:
             ;
             break;
           default:
-            jj_la1[199] = jj_gen;
-            break label_138;
+            jj_la1[201] = jj_gen;
+            break label_140;
           }
           jj_consume_token(SEMICOLON);
-          label_139:
+          label_141:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case S:
               ;
               break;
             default:
-              jj_la1[200] = jj_gen;
-              break label_139;
+              jj_la1[202] = jj_gen;
+              break label_141;
             }
             jj_consume_token(S);
           }
@@ -4329,27 +4404,27 @@ LexicalUnit exp;
             declaration();
             break;
           default:
-            jj_la1[201] = jj_gen;
+            jj_la1[203] = jj_gen;
             ;
           }
         }
         jj_consume_token(RBRACE);
-        label_140:
+        label_142:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[202] = jj_gen;
-            break label_140;
+            jj_la1[204] = jj_gen;
+            break label_142;
           }
           jj_consume_token(S);
         }
          documentHandler.endNestedProperties(name);
         break;
       default:
-        jj_la1[203] = jj_gen;
+        jj_la1[205] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4399,15 +4474,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_141:
+      label_143:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[204] = jj_gen;
-          break label_141;
+          jj_la1[206] = jj_gen;
+          break label_143;
         }
         jj_consume_token(S);
       }
@@ -4417,7 +4492,7 @@ LexicalUnit exp;
         important = prio();
         break;
       default:
-        jj_la1[205] = jj_gen;
+        jj_la1[207] = jj_gen;
         ;
       }
          documentHandler.property(name, exp, important);
@@ -4460,15 +4535,15 @@ LexicalUnit exp;
  */
   final public boolean prio() throws ParseException {
     jj_consume_token(IMPORTANT_SYM);
-    label_142:
+    label_144:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[206] = jj_gen;
-        break label_142;
+        jj_la1[208] = jj_gen;
+        break label_144;
       }
       jj_consume_token(S);
     }
@@ -4478,15 +4553,15 @@ LexicalUnit exp;
 
   final public boolean guarded() throws ParseException {
     jj_consume_token(GUARDED_SYM);
-    label_143:
+    label_145:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[207] = jj_gen;
-        break label_143;
+        jj_la1[209] = jj_gen;
+        break label_145;
       }
       jj_consume_token(S);
     }
@@ -4502,15 +4577,15 @@ LexicalUnit exp;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DIV:
       n = jj_consume_token(DIV);
-      label_144:
+      label_146:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[208] = jj_gen;
-          break label_144;
+          jj_la1[210] = jj_gen;
+          break label_146;
         }
         jj_consume_token(S);
       }
@@ -4520,15 +4595,15 @@ LexicalUnit exp;
       break;
     case COMMA:
       n = jj_consume_token(COMMA);
-      label_145:
+      label_147:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[209] = jj_gen;
-          break label_145;
+          jj_la1[211] = jj_gen;
+          break label_147;
         }
         jj_consume_token(S);
       }
@@ -4537,7 +4612,7 @@ LexicalUnit exp;
                                                          prev);}
       break;
     default:
-      jj_la1[210] = jj_gen;
+      jj_la1[212] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4552,12 +4627,12 @@ LexicalUnit exp;
     char op;
     first = term(null);
                       res = first;
-    label_146:
+    label_148:
     while (true) {
       if (jj_2_12(2)) {
         ;
       } else {
-        break label_146;
+        break label_148;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
@@ -4565,7 +4640,7 @@ LexicalUnit exp;
         res = operator(res);
         break;
       default:
-        jj_la1[211] = jj_gen;
+        jj_la1[213] = jj_gen;
         ;
       }
       res = term(res);
@@ -4588,7 +4663,7 @@ LexicalUnit exp;
         {if (true) return '+';}
       break;
     default:
-      jj_la1[212] = jj_gen;
+      jj_la1[214] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4636,7 +4711,7 @@ LexicalUnit exp;
       result = variableTerm(prev);
       break;
     default:
-      jj_la1[213] = jj_gen;
+      jj_la1[215] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4687,7 +4762,7 @@ LexicalUnitImpl result = null;
         op = unaryOperator();
         break;
       default:
-        jj_la1[214] = jj_gen;
+        jj_la1[216] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4792,7 +4867,7 @@ LexicalUnitImpl result = null;
         result = function(op, prev);
         break;
       default:
-        jj_la1[215] = jj_gen;
+        jj_la1[217] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4819,7 +4894,7 @@ LexicalUnitImpl result = null;
                    s+=".";
           break;
         default:
-          jj_la1[216] = jj_gen;
+          jj_la1[218] = jj_gen;
           ;
         }
         n = jj_consume_token(IDENT);
@@ -4866,25 +4941,25 @@ LexicalUnitImpl result = null;
         result = unicode(prev);
         break;
       default:
-        jj_la1[217] = jj_gen;
+        jj_la1[219] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[218] = jj_gen;
+      jj_la1[220] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    label_147:
+    label_149:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[219] = jj_gen;
-        break label_147;
+        jj_la1[221] = jj_gen;
+        break label_149;
       }
       jj_consume_token(S);
     }
@@ -4900,15 +4975,15 @@ LexicalUnitImpl result = null;
  Token n;
  LexicalUnit params = null;
     n = jj_consume_token(FUNCTION);
-    label_148:
+    label_150:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[220] = jj_gen;
-        break label_148;
+        jj_la1[222] = jj_gen;
+        break label_150;
       }
       jj_consume_token(S);
     }
@@ -4950,7 +5025,7 @@ LexicalUnitImpl result = null;
       params = expr();
       break;
     default:
-      jj_la1[221] = jj_gen;
+      jj_la1[223] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -5421,15 +5496,15 @@ LexicalUnitImpl result = null;
  */
   final public void _parseRule() throws ParseException {
  String ret = null;
-    label_149:
+    label_151:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[222] = jj_gen;
-        break label_149;
+        jj_la1[224] = jj_gen;
+        break label_151;
       }
       jj_consume_token(S);
     }
@@ -5437,6 +5512,12 @@ LexicalUnitImpl result = null;
     case IMPORT_SYM:
       importDeclaration();
       break;
+    case DEBUG_SYM:
+      debugDirective();
+      break;
+    case WARN_SYM:
+      warnDirective();
+      break;
     case LBRACKET:
     case ANY:
     case PARENT:
@@ -5457,13 +5538,13 @@ LexicalUnitImpl result = null;
       fontFace();
       break;
     default:
-      jj_la1[223] = jj_gen;
+      jj_la1[225] = jj_gen;
       ret = skipStatement();
                     if ((ret == null) || (ret.length() == 0)) {
                         {if (true) return;}
                     }
                     if (ret.charAt(0) == '@') {
-                        documentHandler.ignorableAtRule(ret);
+                        documentHandler.unrecognizedRule(ret);
                     } else {
                         {if (true) throw new CSSParseException("unrecognize rule: " + ret,
                                                     getLocator());}
@@ -5472,15 +5553,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseImportRule() throws ParseException {
-    label_150:
+    label_152:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[224] = jj_gen;
-        break label_150;
+        jj_la1[226] = jj_gen;
+        break label_152;
       }
       jj_consume_token(S);
     }
@@ -5488,15 +5569,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseMediaRule() throws ParseException {
-    label_151:
+    label_153:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[225] = jj_gen;
-        break label_151;
+        jj_la1[227] = jj_gen;
+        break label_153;
       }
       jj_consume_token(S);
     }
@@ -5504,15 +5585,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseDeclarationBlock() throws ParseException {
-    label_152:
+    label_154:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[226] = jj_gen;
-        break label_152;
+        jj_la1[228] = jj_gen;
+        break label_154;
       }
       jj_consume_token(S);
     }
@@ -5521,29 +5602,29 @@ LexicalUnitImpl result = null;
       declaration();
       break;
     default:
-      jj_la1[227] = jj_gen;
+      jj_la1[229] = jj_gen;
       ;
     }
-    label_153:
+    label_155:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[228] = jj_gen;
-        break label_153;
+        jj_la1[230] = jj_gen;
+        break label_155;
       }
       jj_consume_token(SEMICOLON);
-      label_154:
+      label_156:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[229] = jj_gen;
-          break label_154;
+          jj_la1[231] = jj_gen;
+          break label_156;
         }
         jj_consume_token(S);
       }
@@ -5552,7 +5633,7 @@ LexicalUnitImpl result = null;
         declaration();
         break;
       default:
-        jj_la1[230] = jj_gen;
+        jj_la1[232] = jj_gen;
         ;
       }
     }
@@ -5561,15 +5642,15 @@ LexicalUnitImpl result = null;
   final public ArrayList<String> _parseSelectors() throws ParseException {
   ArrayList<String> p = null;
     try {
-      label_155:
+      label_157:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[231] = jj_gen;
-          break label_155;
+          jj_la1[233] = jj_gen;
+          break label_157;
         }
         jj_consume_token(S);
       }
@@ -5665,71 +5746,66 @@ LexicalUnitImpl result = null;
     finally { jj_save(11, xla); }
   }
 
-  private boolean jj_3R_310() {
-    if (jj_3R_269()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_229() {
-    if (jj_3R_251()) return true;
+  private boolean jj_3R_231() {
+    if (jj_3R_253()) return true;
     return false;
   }
 
-  private boolean jj_3R_285() {
-    if (jj_3R_279()) return true;
-    if (jj_scan_token(COLON)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_310()) {
-    jj_scanpos = xsp;
-    if (jj_3R_311()) return true;
-    }
+  private boolean jj_3_1() {
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3_1() {
-    if (jj_3R_156()) return true;
+  private boolean jj_3R_230() {
+    if (jj_3R_252()) return true;
     return false;
   }
 
-  private boolean jj_3R_270() {
-    if (jj_3R_285()) return true;
+  private boolean jj_3_11() {
+    if (jj_3R_167()) return true;
     return false;
   }
 
-  private boolean jj_3R_228() {
-    if (jj_3R_250()) return true;
+  private boolean jj_3_4() {
+    if (jj_3R_160()) return true;
+    if (jj_3R_161()) return true;
     return false;
   }
 
-  private boolean jj_3_4() {
-    if (jj_3R_158()) return true;
-    if (jj_3R_159()) return true;
+  private boolean jj_3R_257() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_11()) {
+    jj_scanpos = xsp;
+    if (jj_3R_272()) {
+    jj_scanpos = xsp;
+    if (jj_3R_273()) {
+    jj_scanpos = xsp;
+    if (jj_3R_274()) return true;
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_226() {
+  private boolean jj_3R_228() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_225()) return true;
+    if (jj_3R_227()) return true;
     return false;
   }
 
   private boolean jj_3_5() {
-    if (jj_3R_156()) return true;
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_225() {
-    if (jj_3R_159()) return true;
+  private boolean jj_3R_227() {
+    if (jj_3R_161()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -5742,55 +5818,55 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3_11() {
-    if (jj_3R_165()) return true;
+  private boolean jj_3R_262() {
+    if (jj_3R_271()) return true;
     return false;
   }
 
-  private boolean jj_3R_255() {
+  private boolean jj_3R_246() {
+    if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_11()) {
-    jj_scanpos = xsp;
-    if (jj_3R_270()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    xsp = jj_scanpos;
+    if (jj_3R_262()) jj_scanpos = xsp;
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_180() {
-    if (jj_3R_225()) return true;
+  private boolean jj_3R_182() {
+    if (jj_3R_227()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_226()) { jj_scanpos = xsp; break; }
+      if (jj_3R_228()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_260() {
-    if (jj_3R_269()) return true;
+  private boolean jj_3R_226() {
+    if (jj_3R_250()) return true;
     return false;
   }
 
   private boolean jj_3_2() {
-    if (jj_3R_156()) return true;
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_244() {
-    if (jj_scan_token(FUNCTION)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_260()) jj_scanpos = xsp;
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_225() {
+    if (jj_3R_249()) return true;
     return false;
   }
 
-  private boolean jj_3R_253() {
+  private boolean jj_3R_224() {
+    if (jj_3R_248()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_255() {
     if (jj_scan_token(EACH_SYM)) return true;
     Token xsp;
     while (true) {
@@ -5806,31 +5882,31 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_224() {
-    if (jj_3R_248()) return true;
+  private boolean jj_3R_270() {
+    if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_181() {
+  private boolean jj_3R_183() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_227()) {
+    if (jj_3R_229()) {
     jj_scanpos = xsp;
     if (jj_3_2()) {
     jj_scanpos = xsp;
-    if (jj_3R_228()) {
-    jj_scanpos = xsp;
-    if (jj_3R_229()) {
-    jj_scanpos = xsp;
     if (jj_3R_230()) {
     jj_scanpos = xsp;
     if (jj_3R_231()) {
     jj_scanpos = xsp;
     if (jj_3R_232()) {
     jj_scanpos = xsp;
+    if (jj_3R_233()) {
+    jj_scanpos = xsp;
+    if (jj_3R_234()) {
+    jj_scanpos = xsp;
     if (jj_3_3()) {
     jj_scanpos = xsp;
-    if (jj_3R_233()) return true;
+    if (jj_3R_235()) return true;
     }
     }
     }
@@ -5842,63 +5918,61 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_227() {
-    if (jj_3R_249()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_223() {
-    if (jj_3R_247()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_222() {
-    if (jj_3R_246()) return true;
+  private boolean jj_3R_229() {
+    if (jj_3R_251()) return true;
     return false;
   }
 
-  private boolean jj_3R_165() {
-    if (jj_3R_180()) return true;
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_254() {
+    if (jj_scan_token(EXTEND_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    if (jj_3R_182()) return true;
+    if (jj_3R_270()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_181()) { jj_scanpos = xsp; break; }
+      if (jj_3R_270()) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(RBRACE)) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_268() {
-    if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_252() {
-    if (jj_scan_token(EXTEND_SYM)) return true;
+  private boolean jj_3R_167() {
+    if (jj_3R_182()) return true;
+    if (jj_scan_token(LBRACE)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_180()) return true;
-    if (jj_3R_268()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_268()) { jj_scanpos = xsp; break; }
+      if (jj_3R_183()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(RBRACE)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_278() {
+  private boolean jj_3R_247() {
+    if (jj_scan_token(DOT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_223() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_247()) jj_scanpos = xsp;
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_282() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(75)) {
@@ -5953,7 +6027,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_281() {
+  private boolean jj_3R_285() {
     if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
@@ -5963,7 +6037,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_279() {
+  private boolean jj_3R_283() {
     if (jj_scan_token(IDENT)) return true;
     Token xsp;
     while (true) {
@@ -5973,7 +6047,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_256() {
+  private boolean jj_3R_222() {
+    if (jj_scan_token(STRING)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_258() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -5983,105 +6062,113 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_245() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3R_221() {
+    if (jj_3R_246()) return true;
     return false;
   }
 
-  private boolean jj_3R_221() {
+  private boolean jj_3R_181() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_245()) jj_scanpos = xsp;
-    if (jj_scan_token(IDENT)) return true;
+    if (jj_3R_222()) {
+    jj_scanpos = xsp;
+    if (jj_3R_223()) {
+    jj_scanpos = xsp;
+    if (jj_3R_224()) {
+    jj_scanpos = xsp;
+    if (jj_3R_225()) {
+    jj_scanpos = xsp;
+    if (jj_3R_226()) return true;
+    }
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_193() {
-    if (jj_scan_token(S)) return true;
+  private boolean jj_3R_220() {
+    if (jj_scan_token(DIMEN)) return true;
     return false;
   }
 
-  private boolean jj_3R_220() {
-    if (jj_scan_token(STRING)) return true;
+  private boolean jj_3R_195() {
+    if (jj_scan_token(S)) return true;
     return false;
   }
 
-  private boolean jj_3R_192() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3R_219() {
+    if (jj_scan_token(KHZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_219() {
-    if (jj_3R_244()) return true;
+  private boolean jj_3R_194() {
+    if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_191() {
+  private boolean jj_3R_193() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_179() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_220()) {
-    jj_scanpos = xsp;
-    if (jj_3R_221()) {
-    jj_scanpos = xsp;
-    if (jj_3R_222()) {
-    jj_scanpos = xsp;
-    if (jj_3R_223()) {
-    jj_scanpos = xsp;
-    if (jj_3R_224()) return true;
-    }
-    }
-    }
-    }
+  private boolean jj_3R_192() {
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_190() {
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_218() {
+    if (jj_scan_token(HZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_189() {
+  private boolean jj_3R_191() {
     if (jj_scan_token(FUNCTION)) return true;
     return false;
   }
 
-  private boolean jj_3R_188() {
+  private boolean jj_3R_190() {
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_187() {
+  private boolean jj_3R_290() {
+    if (jj_scan_token(WARN_SYM)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_189() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_186() {
+  private boolean jj_3R_217() {
+    if (jj_scan_token(MS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_188() {
     if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_261() {
-    if (jj_3R_278()) return true;
+  private boolean jj_3R_263() {
+    if (jj_3R_282()) return true;
     return false;
   }
 
-  private boolean jj_3R_185() {
+  private boolean jj_3R_187() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_168() {
+  private boolean jj_3R_170() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_185()) {
-    jj_scanpos = xsp;
-    if (jj_3R_186()) {
-    jj_scanpos = xsp;
     if (jj_3R_187()) {
     jj_scanpos = xsp;
     if (jj_3R_188()) {
@@ -6094,7 +6181,11 @@ LexicalUnitImpl result = null;
     jj_scanpos = xsp;
     if (jj_3R_192()) {
     jj_scanpos = xsp;
-    if (jj_3R_193()) return true;
+    if (jj_3R_193()) {
+    jj_scanpos = xsp;
+    if (jj_3R_194()) {
+    jj_scanpos = xsp;
+    if (jj_3R_195()) return true;
     }
     }
     }
@@ -6106,29 +6197,44 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_249() {
+  private boolean jj_3R_216() {
+    if (jj_scan_token(SECOND)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_251() {
     if (jj_scan_token(IF_SYM)) return true;
     Token xsp;
-    if (jj_3R_261()) return true;
+    if (jj_3R_263()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_261()) { jj_scanpos = xsp; break; }
+      if (jj_3R_263()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_218() {
-    if (jj_scan_token(DIMEN)) return true;
+  private boolean jj_3R_215() {
+    if (jj_scan_token(GRAD)) return true;
     return false;
   }
 
-  private boolean jj_3R_217() {
-    if (jj_scan_token(KHZ)) return true;
+  private boolean jj_3R_214() {
+    if (jj_scan_token(RAD)) return true;
     return false;
   }
 
-  private boolean jj_3R_157() {
+  private boolean jj_3R_289() {
+    if (jj_scan_token(DEBUG_SYM)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_159() {
     if (jj_scan_token(MICROSOFT_RULE)) return true;
     Token xsp;
     while (true) {
@@ -6136,47 +6242,52 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(COLON)) return true;
-    if (jj_3R_168()) return true;
+    if (jj_3R_170()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_168()) { jj_scanpos = xsp; break; }
+      if (jj_3R_170()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_239() {
-    if (jj_scan_token(SIBLING)) return true;
+  private boolean jj_3R_213() {
+    if (jj_scan_token(DEG)) return true;
     return false;
   }
 
-  private boolean jj_3R_216() {
-    if (jj_scan_token(HZ)) return true;
+  private boolean jj_3R_241() {
+    if (jj_scan_token(SIBLING)) return true;
     return false;
   }
 
-  private boolean jj_3R_238() {
+  private boolean jj_3R_240() {
     if (jj_scan_token(PRECEDES)) return true;
     return false;
   }
 
-  private boolean jj_3R_215() {
-    if (jj_scan_token(MS)) return true;
+  private boolean jj_3R_212() {
+    if (jj_scan_token(EXS)) return true;
     return false;
   }
 
-  private boolean jj_3R_237() {
+  private boolean jj_3R_239() {
     if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_194() {
+  private boolean jj_3R_211() {
+    if (jj_scan_token(EMS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_196() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_237()) {
+    if (jj_3R_239()) {
     jj_scanpos = xsp;
-    if (jj_3R_238()) {
+    if (jj_3R_240()) {
     jj_scanpos = xsp;
-    if (jj_3R_239()) return true;
+    if (jj_3R_241()) return true;
     }
     }
     while (true) {
@@ -6186,17 +6297,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_214() {
-    if (jj_scan_token(SECOND)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_213() {
-    if (jj_scan_token(GRAD)) return true;
+  private boolean jj_3R_210() {
+    if (jj_scan_token(PX)) return true;
     return false;
   }
 
-  private boolean jj_3R_171() {
+  private boolean jj_3R_173() {
     if (jj_scan_token(SIBLING)) return true;
     Token xsp;
     while (true) {
@@ -6206,7 +6312,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_170() {
+  private boolean jj_3R_172() {
     if (jj_scan_token(PRECEDES)) return true;
     Token xsp;
     while (true) {
@@ -6216,36 +6322,36 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_212() {
-    if (jj_scan_token(RAD)) return true;
+  private boolean jj_3R_209() {
+    if (jj_scan_token(IN)) return true;
     return false;
   }
 
-  private boolean jj_3R_172() {
+  private boolean jj_3R_174() {
     if (jj_scan_token(S)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_194()) jj_scanpos = xsp;
+    if (jj_3R_196()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_158() {
+  private boolean jj_3R_160() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_169()) {
+    if (jj_3R_171()) {
     jj_scanpos = xsp;
-    if (jj_3R_170()) {
+    if (jj_3R_172()) {
     jj_scanpos = xsp;
-    if (jj_3R_171()) {
+    if (jj_3R_173()) {
     jj_scanpos = xsp;
-    if (jj_3R_172()) return true;
+    if (jj_3R_174()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_169() {
+  private boolean jj_3R_171() {
     if (jj_scan_token(PLUS)) return true;
     Token xsp;
     while (true) {
@@ -6255,97 +6361,63 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_211() {
-    if (jj_scan_token(DEG)) return true;
+  private boolean jj_3R_208() {
+    if (jj_scan_token(PC)) return true;
     return false;
   }
 
-  private boolean jj_3R_210() {
-    if (jj_scan_token(EXS)) return true;
+  private boolean jj_3R_207() {
+    if (jj_scan_token(MM)) return true;
     return false;
   }
 
-  private boolean jj_3R_209() {
-    if (jj_scan_token(EMS)) return true;
+  private boolean jj_3R_206() {
+    if (jj_scan_token(CM)) return true;
     return false;
   }
 
-  private boolean jj_3R_208() {
-    if (jj_scan_token(PX)) return true;
+  private boolean jj_3R_205() {
+    if (jj_scan_token(PT)) return true;
     return false;
   }
 
-  private boolean jj_3R_254() {
-    if (jj_3R_256()) return true;
+  private boolean jj_3R_256() {
+    if (jj_3R_258()) return true;
     if (jj_scan_token(COLON)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_269()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_207() {
-    if (jj_scan_token(IN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_206() {
-    if (jj_scan_token(PC)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_205() {
-    if (jj_scan_token(MM)) return true;
+    if (jj_3R_271()) return true;
     return false;
   }
 
   private boolean jj_3R_204() {
-    if (jj_scan_token(CM)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_203() {
-    if (jj_scan_token(PT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_202() {
     if (jj_scan_token(PERCENTAGE)) return true;
     return false;
   }
 
-  private boolean jj_3R_184() {
-    if (jj_3R_236()) return true;
+  private boolean jj_3R_186() {
+    if (jj_3R_238()) return true;
     return false;
   }
 
-  private boolean jj_3R_201() {
+  private boolean jj_3R_203() {
     if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_200() {
-    if (jj_3R_243()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_196() {
-    if (jj_scan_token(HASH)) return true;
+  private boolean jj_3R_202() {
+    if (jj_3R_245()) return true;
     return false;
   }
 
-  private boolean jj_3R_178() {
+  private boolean jj_3R_180() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_200()) jj_scanpos = xsp;
+    if (jj_3R_202()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_201()) {
-    jj_scanpos = xsp;
-    if (jj_3R_202()) {
-    jj_scanpos = xsp;
     if (jj_3R_203()) {
     jj_scanpos = xsp;
     if (jj_3R_204()) {
@@ -6378,7 +6450,11 @@ LexicalUnitImpl result = null;
     jj_scanpos = xsp;
     if (jj_3R_218()) {
     jj_scanpos = xsp;
-    if (jj_3R_219()) return true;
+    if (jj_3R_219()) {
+    jj_scanpos = xsp;
+    if (jj_3R_220()) {
+    jj_scanpos = xsp;
+    if (jj_3R_221()) return true;
     }
     }
     }
@@ -6400,12 +6476,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_161() {
+  private boolean jj_3R_163() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_178()) {
+    if (jj_3R_180()) {
     jj_scanpos = xsp;
-    if (jj_3R_179()) return true;
+    if (jj_3R_181()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6414,104 +6490,124 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_299() {
-    if (jj_scan_token(IDENT)) return true;
+  private boolean jj_3R_248() {
+    if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_300() {
-    if (jj_scan_token(FUNCTION)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
+  private boolean jj_3R_238() {
+    if (jj_3R_258()) return true;
     return false;
   }
 
-  private boolean jj_3R_246() {
+  private boolean jj_3R_198() {
     if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_236() {
-    if (jj_3R_256()) return true;
+  private boolean jj_3R_305() {
+    if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_183() {
-    if (jj_3R_161()) return true;
+  private boolean jj_3R_185() {
+    if (jj_3R_163()) return true;
     return false;
   }
 
-  private boolean jj_3R_167() {
+  private boolean jj_3R_249() {
+    if (jj_scan_token(URL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_169() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_183()) {
+    if (jj_3R_185()) {
     jj_scanpos = xsp;
-    if (jj_3R_184()) return true;
+    if (jj_3R_186()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_247() {
-    if (jj_scan_token(URL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_166() {
-    if (jj_3R_182()) return true;
+  private boolean jj_3R_306() {
+    if (jj_scan_token(FUNCTION)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
     return false;
   }
 
-  private boolean jj_3R_298() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_168() {
+    if (jj_3R_184()) return true;
     return false;
   }
 
-  private boolean jj_3R_259() {
+  private boolean jj_3R_261() {
     if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_198() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_245() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_298()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_299()) {
+    if (jj_3R_260()) {
     jj_scanpos = xsp;
-    if (jj_3R_300()) return true;
+    if (jj_3R_261()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_243() {
+  private boolean jj_3R_260() {
+    if (jj_scan_token(MINUS)) return true;
+    return false;
+  }
+
+  private boolean jj_3_12() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_258()) {
-    jj_scanpos = xsp;
-    if (jj_3R_259()) return true;
+    if (jj_3R_168()) jj_scanpos = xsp;
+    if (jj_3R_169()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_271() {
+    if (jj_3R_169()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_12()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_258() {
-    if (jj_scan_token(MINUS)) return true;
+  private boolean jj_3R_304() {
+    if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3_12() {
+  private boolean jj_3R_250() {
+    if (jj_scan_token(UNICODERANGE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_200() {
+    if (jj_scan_token(COLON)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_166()) jj_scanpos = xsp;
-    if (jj_3R_167()) return true;
+    if (jj_3R_304()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_305()) {
+    jj_scanpos = xsp;
+    if (jj_3R_306()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_164() {
+  private boolean jj_3R_166() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6532,27 +6628,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_269() {
-    if (jj_3R_167()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_12()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3_10() {
-    if (jj_3R_164()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_248() {
-    if (jj_scan_token(UNICODERANGE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_235() {
+  private boolean jj_3R_237() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -6562,22 +6638,22 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_264() {
-    if (jj_3R_280()) return true;
+  private boolean jj_3_10() {
+    if (jj_3R_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_182() {
+  private boolean jj_3R_184() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_234()) {
+    if (jj_3R_236()) {
     jj_scanpos = xsp;
-    if (jj_3R_235()) return true;
+    if (jj_3R_237()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_234() {
+  private boolean jj_3R_236() {
     if (jj_scan_token(DIV)) return true;
     Token xsp;
     while (true) {
@@ -6587,7 +6663,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_162() {
+  private boolean jj_3R_266() {
+    if (jj_3R_284()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_164() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6609,61 +6690,61 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_9() {
-    if (jj_3R_163()) return true;
+    if (jj_3R_165()) return true;
     return false;
   }
 
-  private boolean jj_3R_321() {
+  private boolean jj_3R_327() {
     if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_319() {
+  private boolean jj_3R_325() {
     if (jj_scan_token(STARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_320() {
+  private boolean jj_3R_326() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_318() {
+  private boolean jj_3R_324() {
     if (jj_scan_token(DOLLARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_266() {
+  private boolean jj_3R_268() {
     if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_317() {
+  private boolean jj_3R_323() {
     if (jj_scan_token(CARETMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_316() {
+  private boolean jj_3R_322() {
     if (jj_scan_token(DASHMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_315() {
+  private boolean jj_3R_321() {
     if (jj_scan_token(INCLUDES)) return true;
     return false;
   }
 
-  private boolean jj_3R_272() {
+  private boolean jj_3R_276() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_314() {
+  private boolean jj_3R_320() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_163() {
+  private boolean jj_3R_165() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6684,20 +6765,20 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_305() {
+  private boolean jj_3R_311() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_314()) {
+    if (jj_3R_320()) {
     jj_scanpos = xsp;
-    if (jj_3R_315()) {
+    if (jj_3R_321()) {
     jj_scanpos = xsp;
-    if (jj_3R_316()) {
+    if (jj_3R_322()) {
     jj_scanpos = xsp;
-    if (jj_3R_317()) {
+    if (jj_3R_323()) {
     jj_scanpos = xsp;
-    if (jj_3R_318()) {
+    if (jj_3R_324()) {
     jj_scanpos = xsp;
-    if (jj_3R_319()) return true;
+    if (jj_3R_325()) return true;
     }
     }
     }
@@ -6708,23 +6789,18 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_320()) {
+    if (jj_3R_326()) {
     jj_scanpos = xsp;
-    if (jj_3R_321()) return true;
+    if (jj_3R_327()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_284() {
-    if (jj_scan_token(COMMA)) return true;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_199() {
+  private boolean jj_3R_201() {
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
     while (true) {
@@ -6737,17 +6813,22 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_305()) jj_scanpos = xsp;
+    if (jj_3R_311()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_233() {
-    if (jj_3R_255()) return true;
+  private boolean jj_3R_235() {
+    if (jj_3R_257()) return true;
     return false;
   }
 
-  private boolean jj_3R_283() {
+  private boolean jj_3R_288() {
+    if (jj_scan_token(COMMA)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_287() {
     if (jj_scan_token(IDENT)) return true;
     Token xsp;
     while (true) {
@@ -6757,22 +6838,22 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_313() {
+  private boolean jj_3R_319() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_263() {
-    if (jj_3R_256()) return true;
+  private boolean jj_3R_265() {
+    if (jj_3R_258()) return true;
     return false;
   }
 
-  private boolean jj_3R_242() {
+  private boolean jj_3R_244() {
     if (jj_scan_token(PARENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_156() {
+  private boolean jj_3R_158() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_8()) {
@@ -6786,80 +6867,80 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_8() {
-    if (jj_3R_162()) return true;
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_241() {
+  private boolean jj_3R_243() {
     if (jj_scan_token(ANY)) return true;
     return false;
   }
 
-  private boolean jj_3R_267() {
-    if (jj_3R_283()) return true;
+  private boolean jj_3R_269() {
+    if (jj_3R_287()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_284()) { jj_scanpos = xsp; break; }
+      if (jj_3R_288()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_257() {
+  private boolean jj_3R_259() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_271()) {
+    if (jj_3R_275()) {
     jj_scanpos = xsp;
-    if (jj_3R_272()) return true;
+    if (jj_3R_276()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_271() {
+  private boolean jj_3R_275() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_280() {
+  private boolean jj_3R_284() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_195() {
+  private boolean jj_3R_197() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_240()) {
+    if (jj_3R_242()) {
     jj_scanpos = xsp;
-    if (jj_3R_241()) {
+    if (jj_3R_243()) {
     jj_scanpos = xsp;
-    if (jj_3R_242()) return true;
+    if (jj_3R_244()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_240() {
+  private boolean jj_3R_242() {
     Token xsp;
-    if (jj_3R_257()) return true;
+    if (jj_3R_259()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_257()) { jj_scanpos = xsp; break; }
+      if (jj_3R_259()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_265() {
-    if (jj_3R_281()) return true;
-    if (jj_3R_282()) return true;
+  private boolean jj_3R_267() {
+    if (jj_3R_285()) return true;
+    if (jj_3R_286()) return true;
     return false;
   }
 
-  private boolean jj_3R_262() {
-    if (jj_3R_279()) return true;
+  private boolean jj_3R_264() {
+    if (jj_3R_283()) return true;
     return false;
   }
 
-  private boolean jj_3R_250() {
+  private boolean jj_3R_252() {
     if (jj_scan_token(INCLUDE_SYM)) return true;
     Token xsp;
     while (true) {
@@ -6867,108 +6948,108 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_262()) {
+    if (jj_3R_264()) {
     jj_scanpos = xsp;
-    if (jj_3R_263()) {
+    if (jj_3R_265()) {
     jj_scanpos = xsp;
-    if (jj_3R_264()) {
+    if (jj_3R_266()) {
     jj_scanpos = xsp;
-    if (jj_3R_265()) return true;
+    if (jj_3R_267()) return true;
     }
     }
     }
-    if (jj_3R_266()) return true;
+    if (jj_3R_268()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_266()) { jj_scanpos = xsp; break; }
+      if (jj_3R_268()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_309() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_315() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_312() {
+  private boolean jj_3R_318() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_293() {
+  private boolean jj_3R_299() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_312()) {
+    if (jj_3R_318()) {
     jj_scanpos = xsp;
-    if (jj_3R_313()) return true;
+    if (jj_3R_319()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_307() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_313() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_251() {
-    if (jj_scan_token(MEDIA_SYM)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    if (jj_3R_267()) return true;
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3_3() {
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3_3() {
-    if (jj_3R_157()) return true;
+  private boolean jj_3R_310() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_304() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_308() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_302() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_298() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_292() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_253() {
+    if (jj_scan_token(MEDIA_SYM)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_3R_269()) return true;
+    if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_197() {
+  private boolean jj_3R_199() {
     if (jj_scan_token(DOT)) return true;
     Token xsp;
-    if (jj_3R_293()) return true;
+    if (jj_3R_299()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_293()) { jj_scanpos = xsp; break; }
+      if (jj_3R_299()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_297() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_303() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_295() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_301() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_282() {
-    if (jj_3R_167()) return true;
+  private boolean jj_3R_286() {
+    if (jj_3R_169()) return true;
     return false;
   }
 
-  private boolean jj_3R_160() {
+  private boolean jj_3R_162() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -6978,200 +7059,215 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_232() {
-    if (jj_3R_254()) return true;
+  private boolean jj_3R_234() {
+    if (jj_3R_256()) return true;
     return false;
   }
 
-  private boolean jj_3R_308() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_314() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_306() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_312() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_277() {
+  private boolean jj_3R_281() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_306()) {
+    if (jj_3R_312()) {
     jj_scanpos = xsp;
-    if (jj_3R_307()) {
+    if (jj_3R_313()) {
     jj_scanpos = xsp;
-    if (jj_3R_308()) {
+    if (jj_3R_314()) {
     jj_scanpos = xsp;
-    if (jj_3R_309()) return true;
+    if (jj_3R_315()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_301() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_274() {
+    if (jj_3R_291()) return true;
     return false;
   }
 
-  private boolean jj_3R_276() {
+  private boolean jj_3R_307() {
+    if (jj_3R_198()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_280() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_301()) {
+    if (jj_3R_307()) {
     jj_scanpos = xsp;
-    if (jj_3R_302()) {
+    if (jj_3R_308()) {
     jj_scanpos = xsp;
-    if (jj_3R_303()) {
+    if (jj_3R_309()) {
     jj_scanpos = xsp;
-    if (jj_3R_304()) return true;
+    if (jj_3R_310()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_289() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_295() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
   private boolean jj_3_7() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_160()) jj_scanpos = xsp;
-    if (jj_3R_161()) return true;
+    if (jj_3R_162()) jj_scanpos = xsp;
+    if (jj_3R_163()) return true;
     return false;
   }
 
-  private boolean jj_3R_303() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_309() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_294() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_300() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_275() {
+  private boolean jj_3R_279() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_294()) {
+    if (jj_3R_300()) {
     jj_scanpos = xsp;
-    if (jj_3R_295()) {
+    if (jj_3R_301()) {
     jj_scanpos = xsp;
-    if (jj_3R_296()) {
+    if (jj_3R_302()) {
     jj_scanpos = xsp;
-    if (jj_3R_297()) return true;
+    if (jj_3R_303()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_291() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_297() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_296() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_302() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_290() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_317() {
+    if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_287() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_296() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_274() {
+  private boolean jj_3R_293() {
+    if (jj_3R_199()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_278() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_290()) {
+    if (jj_3R_296()) {
     jj_scanpos = xsp;
-    if (jj_3R_291()) {
+    if (jj_3R_297()) {
     jj_scanpos = xsp;
-    if (jj_3R_292()) return true;
+    if (jj_3R_298()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_231() {
-    if (jj_3R_253()) return true;
+  private boolean jj_3R_233() {
+    if (jj_3R_255()) return true;
     return false;
   }
 
-  private boolean jj_3R_177() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_273() {
+    if (jj_3R_290()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_179() {
+    if (jj_3R_201()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_277()) { jj_scanpos = xsp; break; }
+      if (jj_3R_281()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_176() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_178() {
+    if (jj_3R_200()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_276()) { jj_scanpos = xsp; break; }
+      if (jj_3R_280()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_288() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_316() {
+    if (jj_3R_271()) return true;
     return false;
   }
 
-  private boolean jj_3R_311() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_294() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_175() {
-    if (jj_3R_197()) return true;
+  private boolean jj_3R_177() {
+    if (jj_3R_199()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_275()) { jj_scanpos = xsp; break; }
+      if (jj_3R_279()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_286() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_292() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_174() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_176() {
+    if (jj_3R_198()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_274()) { jj_scanpos = xsp; break; }
+      if (jj_3R_278()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_273() {
+  private boolean jj_3R_277() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_286()) {
+    if (jj_3R_292()) {
     jj_scanpos = xsp;
-    if (jj_3R_287()) {
+    if (jj_3R_293()) {
     jj_scanpos = xsp;
-    if (jj_3R_288()) {
+    if (jj_3R_294()) {
     jj_scanpos = xsp;
-    if (jj_3R_289()) return true;
+    if (jj_3R_295()) return true;
     }
     }
     }
@@ -7179,32 +7275,48 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_6() {
-    if (jj_3R_156()) return true;
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_173() {
-    if (jj_3R_195()) return true;
+  private boolean jj_3R_175() {
+    if (jj_3R_197()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_273()) { jj_scanpos = xsp; break; }
+      if (jj_3R_277()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_159() {
+  private boolean jj_3R_291() {
+    if (jj_3R_283()) return true;
+    if (jj_scan_token(COLON)) return true;
     Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     xsp = jj_scanpos;
-    if (jj_3R_173()) {
-    jj_scanpos = xsp;
-    if (jj_3R_174()) {
+    if (jj_3R_316()) {
     jj_scanpos = xsp;
+    if (jj_3R_317()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_161() {
+    Token xsp;
+    xsp = jj_scanpos;
     if (jj_3R_175()) {
     jj_scanpos = xsp;
     if (jj_3R_176()) {
     jj_scanpos = xsp;
-    if (jj_3R_177()) return true;
+    if (jj_3R_177()) {
+    jj_scanpos = xsp;
+    if (jj_3R_178()) {
+    jj_scanpos = xsp;
+    if (jj_3R_179()) return true;
     }
     }
     }
@@ -7212,8 +7324,13 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_230() {
-    if (jj_3R_252()) return true;
+  private boolean jj_3R_232() {
+    if (jj_3R_254()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_272() {
+    if (jj_3R_289()) return true;
     return false;
   }
 
@@ -7227,7 +7344,7 @@ LexicalUnitImpl result = null;
   private Token jj_scanpos, jj_lastpos;
   private int jj_la;
   private int jj_gen;
-  final private int[] jj_la1 = new int[232];
+  final private int[] jj_la1 = new int[234];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -7239,16 +7356,16 @@ LexicalUnitImpl result = null;
       jj_la1_init_3();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x80002,0x80002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x4d380002,0x2,0xd0000000,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
+      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x80002,0x80002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x4d380002,0x2,0xd0000000,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x381,0x381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x50400181,0x40000000,0x10400000,0x181,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x400181,0x400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x400181,0x400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x400181,0x400000,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50400181,0x400000,0x50000181,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000381,0x6000381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x56400181,0x40000000,0x10400000,0x6000181,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x6400181,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x400000,0x6000181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56400181,0x400000,0x56000181,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x6000181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x800,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x980,0x0,0xa0000881,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x80000000,0x20000881,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x800,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x980,0x0,0xa0000881,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x80000000,0x20000881,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
   final private JJCalls[] jj_2_rtns = new JJCalls[12];
   private boolean jj_rescan = false;
@@ -7260,7 +7377,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 232; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7270,7 +7387,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 232; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7280,7 +7397,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 232; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7290,7 +7407,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 232; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7407,7 +7524,7 @@ LexicalUnitImpl result = null;
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 232; i++) {
+    for (int i = 0; i < 234; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
index dfb12de6d63ee605a8160c2c6337cd06f9e30e3f..efd1ce28571a9f51c7d23a00ae8865155561e3a3 100644 (file)
@@ -743,15 +743,16 @@ void afterImportDeclaration() :
 }
 {
   ( 
-     ( (LOOKAHEAD(5)listModifyDirective()|variable()) | ifDirective()|mixinDirective()| eachDirective() | includeDirective() | styleRule() | media()| page() | fontFace() 
+     ( (LOOKAHEAD(5)listModifyDirective()|variable()) | debugDirective() | warnDirective() | ifDirective()|mixinDirective()| eachDirective() | includeDirective() | styleRule() | media()| page() | fontFace() 
       | { l = getLocator(); } ret=skipStatement() 
       {
          if ((ret == null) || (ret.length() == 0)) {
              return; 
          }
-         reportWarningSkipText(l, ret);
          if (ret.charAt(0) == '@') {
-             documentHandler.ignorableAtRule(ret);
+             documentHandler.unrecognizedRule(ret);
+         } else {
+             reportWarningSkipText(l, ret);
          }
       }
       )
@@ -820,7 +821,7 @@ void media() :
   <MEDIA_SYM> ( <S> )*
    mediaStatement(ml)
    { start = true; documentHandler.startMedia(ml); }
-   <LBRACE> ( <S> )* ( styleRule() | skipUnknownRule() )* <RBRACE> ( <S> )*
+   <LBRACE> ( <S> )* ( debugDirective() | warnDirective() | styleRule() | skipUnknownRule() )* <RBRACE> ( <S> )*
  } catch (ParseException e) {
      reportError(getLocator(), e);
      skipStatement();
@@ -933,9 +934,10 @@ void atRuleDeclaration() :
  n=<ATKEYWORD>
     {
        ret=skipStatement();
-       reportWarningSkipText(getLocator(), ret);
        if ((ret != null) && (ret.charAt(0) == '@')) {
-           documentHandler.ignorableAtRule(ret);
+           documentHandler.unrecognizedRule(ret);
+       } else {
+           reportWarningSkipText(getLocator(), ret);
        }
     }
 }
@@ -972,9 +974,10 @@ void skipUnknownRule() :
      String ret;
      Locator loc = getLocator();
      ret=skipStatement();
-     reportWarningSkipText(loc, ret);
      if ((ret != null) && (n.image.charAt(0) == '@')) {
-        documentHandler.ignorableAtRule(ret);
+        documentHandler.unrecognizedRule(ret);
+     } else {
+     reportWarningSkipText(loc, ret);
      }
  }
 }
@@ -1717,12 +1720,28 @@ Node returnDirective() :
        {return null;}
 }
 
-JAVACODE
-void debugDirective(){
+void debugDirective() :
+{}
+{
+    <DEBUG_SYM>
+    { 
+    String content = skipStatementUntilSemiColon();
+    // TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
+    System.out.println(content);
+    }
+    (<S>)*
 }
 
-JAVACODE
-void warnDirective(){
+void warnDirective() :
+{}
+{
+    <WARN_SYM>
+    { 
+    String content = skipStatementUntilSemiColon();
+    // TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
+    System.err.println(content);
+    }
+    (<S>)*
 }
 
 Node forDirective() :
@@ -1816,7 +1835,7 @@ void styleRuleOrDeclarationOrNestedProperties() :
 {
   try {
     // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property 
-    (LOOKAHEAD(5) styleRule() | declarationOrNestedProperties())
+    (LOOKAHEAD(5) styleRule() | debugDirective() | warnDirective() | declarationOrNestedProperties())
   } catch (JumpException e) {
      skipAfterExpression();
      // reportWarningSkipText(getLocator(), skipAfterExpression());
@@ -2686,14 +2705,14 @@ void _parseRule() :
 }
 {
        ( <S> )*
-          ( importDeclaration() | styleRule() | media() | page() 
+          ( importDeclaration() | debugDirective() | warnDirective() | styleRule() | media() | page() 
             | fontFace() | ret=skipStatement() 
                {
                    if ((ret == null) || (ret.length() == 0)) {
                        return; 
                    }
                    if (ret.charAt(0) == '@') {
-                       documentHandler.ignorableAtRule(ret);
+                       documentHandler.unrecognizedRule(ret);
                    } else {
                        throw new CSSParseException("unrecognize rule: " + ret,
                                                    getLocator());
diff --git a/theme-compiler/tests/resources/automatic/css/unknown_as_is.css b/theme-compiler/tests/resources/automatic/css/unknown_as_is.css
new file mode 100644 (file)
index 0000000..bfe7685
--- /dev/null
@@ -0,0 +1,3 @@
+@-webkit-keyframes fade-in {
+       0% { opacity: 0; }
+}
diff --git a/theme-compiler/tests/resources/automatic/scss/unknown_as_is.scss b/theme-compiler/tests/resources/automatic/scss/unknown_as_is.scss
new file mode 100644 (file)
index 0000000..bfe7685
--- /dev/null
@@ -0,0 +1,3 @@
+@-webkit-keyframes fade-in {
+       0% { opacity: 0; }
+}