]> source.dussan.org Git - vaadin-framework.git/commitdiff
support interpolation in property name (#9410) 76/576/2
authorHaijian Wang <haijian@vaadin.com>
Fri, 4 Jan 2013 15:19:52 +0000 (17:19 +0200)
committerHaijian Wang <haijian@vaadin.com>
Fri, 4 Jan 2013 15:19:52 +0000 (17:19 +0200)
Change-Id: Idfb058daf796875cadf0262a2b8150fc1c103915

theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
theme-compiler/src/com/vaadin/sass/internal/parser/ParserConstants.java
theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
theme-compiler/src/com/vaadin/sass/internal/tree/RuleNode.java
theme-compiler/tests/resources/automatic/css/interpolation-in-property-name.css [new file with mode: 0644]
theme-compiler/tests/resources/automatic/scss/interpolation-in-property-name.scss [new file with mode: 0644]

index 019e6c8e7a81a583df810ebfc0f52fe23628146c..4ae614bd17f865fca112ee5c50fd0a55b003d934 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright 2000-2013 Vaadin Ltd.
- * 
- * Licensed 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.
- */
 /* Generated By:JavaCC: Do not edit this line. Parser.java */
 package com.vaadin.sass.internal.parser;
 
@@ -1033,6 +1018,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           start = true;
           documentHandler.startPage(page, pseudo);
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTERPOLATION:
       case IDENT:
         declaration();
         break;
@@ -1064,6 +1050,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           jj_consume_token(S);
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case INTERPOLATION:
         case IDENT:
           declaration();
           break;
@@ -1154,6 +1141,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
       }
         start = true; documentHandler.startFontFace();
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTERPOLATION:
       case IDENT:
         declaration();
         break;
@@ -1185,6 +1173,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           jj_consume_token(S);
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case INTERPOLATION:
         case IDENT:
           declaration();
           break;
@@ -1543,36 +1532,61 @@ char connector = ' ';
  * @exception ParseException exception during the parse
  */
   final public String property() throws ParseException {
- Token n;
-    n = jj_consume_token(IDENT);
+ Token t;String s = "";
     label_39:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
+      case IDENT:
+        t = jj_consume_token(IDENT);
+                 s += t.image;
+        break;
+      case INTERPOLATION:
+        t = jj_consume_token(INTERPOLATION);
+                                                        s += t.image;
         break;
       default:
         jj_la1[55] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTERPOLATION:
+      case IDENT:
+        ;
+        break;
+      default:
+        jj_la1[56] = jj_gen;
         break label_39;
       }
+    }
+    label_40:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[57] = jj_gen;
+        break label_40;
+      }
       jj_consume_token(S);
     }
-                                 {if (true) return convertIdent(n.image);}
+      {if (true) return s;}
     throw new Error("Missing return statement in function");
   }
 
   final public String variableName() throws ParseException {
  Token n;
     n = jj_consume_token(VARIABLE);
-    label_40:
+    label_41:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[56] = jj_gen;
-        break label_40;
+        jj_la1[58] = jj_gen;
+        break label_41;
       }
       jj_consume_token(S);
     }
@@ -1583,15 +1597,15 @@ char connector = ' ';
   final public String functionName() throws ParseException {
  Token n;
     n = jj_consume_token(FUNCTION);
-    label_41:
+    label_42:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[57] = jj_gen;
-        break label_41;
+        jj_la1[59] = jj_gen;
+        break label_42;
       }
       jj_consume_token(S);
     }
@@ -1611,21 +1625,21 @@ char connector = ' ';
       l = selectorList();
                         save = token;
       jj_consume_token(LBRACE);
-      label_42:
+      label_43:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[58] = jj_gen;
-          break label_42;
+          jj_la1[60] = jj_gen;
+          break label_43;
         }
         jj_consume_token(S);
       }
          start = true;
          documentHandler.startSelector(l);
-      label_43:
+      label_44:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1648,8 +1662,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[59] = jj_gen;
-          break label_43;
+          jj_la1[61] = jj_gen;
+          break label_44;
         }
         if (jj_2_2(5)) {
           ifContentStatement();
@@ -1663,22 +1677,22 @@ char connector = ' ';
             microsoftExtension();
             break;
           default:
-            jj_la1[60] = jj_gen;
+            jj_la1[62] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
         }
       }
       jj_consume_token(RBRACE);
-      label_44:
+      label_45:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[61] = jj_gen;
-          break label_44;
+          jj_la1[63] = jj_gen;
+          break label_45;
         }
         jj_consume_token(S);
       }
@@ -1707,26 +1721,26 @@ char connector = ' ';
      ArrayList<String> selectors = new  ArrayList<String>();
      String selector;
     selector = selector();
-    label_45:
+    label_46:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[62] = jj_gen;
-        break label_45;
+        jj_la1[64] = jj_gen;
+        break label_46;
       }
       jj_consume_token(COMMA);
-      label_46:
+      label_47:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[63] = jj_gen;
-          break label_46;
+          jj_la1[65] = jj_gen;
+          break label_47;
         }
         jj_consume_token(S);
       }
@@ -1746,25 +1760,25 @@ char connector = ' ';
     char    comb;
     try {
       selector = simple_selector(null, ' ');
-      label_47:
+      label_48:
       while (true) {
         if (jj_2_3(2)) {
           ;
         } else {
-          break label_47;
+          break label_48;
         }
         comb = combinator();
         selector = simple_selector(selector, comb);
       }
-      label_48:
+      label_49:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[64] = jj_gen;
-          break label_48;
+          jj_la1[66] = jj_gen;
+          break label_49;
         }
         jj_consume_token(S);
       }
@@ -1808,7 +1822,7 @@ char connector = ' ';
     case INTERPOLATION:
     case IDENT:
       simple_current = element_name();
-      label_49:
+      label_50:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1818,8 +1832,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[65] = jj_gen;
-          break label_49;
+          jj_la1[67] = jj_gen;
+          break label_50;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case HASH:
@@ -1835,7 +1849,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[66] = jj_gen;
+          jj_la1[68] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1843,7 +1857,7 @@ char connector = ' ';
       break;
     case HASH:
       cond = hash(cond);
-      label_50:
+      label_51:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1852,8 +1866,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[67] = jj_gen;
-          break label_50;
+          jj_la1[69] = jj_gen;
+          break label_51;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case DOT:
@@ -1866,7 +1880,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[68] = jj_gen;
+          jj_la1[70] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1874,7 +1888,7 @@ char connector = ' ';
       break;
     case DOT:
       cond = _class(cond);
-      label_51:
+      label_52:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1884,8 +1898,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[69] = jj_gen;
-          break label_51;
+          jj_la1[71] = jj_gen;
+          break label_52;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case HASH:
@@ -1901,7 +1915,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[70] = jj_gen;
+          jj_la1[72] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1909,7 +1923,7 @@ char connector = ' ';
       break;
     case COLON:
       cond = pseudo(cond);
-      label_52:
+      label_53:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1919,8 +1933,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[71] = jj_gen;
-          break label_52;
+          jj_la1[73] = jj_gen;
+          break label_53;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case HASH:
@@ -1936,7 +1950,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[72] = jj_gen;
+          jj_la1[74] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1944,7 +1958,7 @@ char connector = ' ';
       break;
     case LBRACKET:
       cond = attrib(cond);
-      label_53:
+      label_54:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LBRACKET:
@@ -1954,8 +1968,8 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[73] = jj_gen;
-          break label_53;
+          jj_la1[75] = jj_gen;
+          break label_54;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case HASH:
@@ -1971,14 +1985,14 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[74] = jj_gen;
+          jj_la1[76] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
       }
       break;
     default:
-      jj_la1[75] = jj_gen;
+      jj_la1[77] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2018,7 +2032,7 @@ char connector = ' ';
  Token t;
 String s = ".";
     jj_consume_token(DOT);
-    label_54:
+    label_55:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IDENT:
@@ -2030,7 +2044,7 @@ String s = ".";
                                                            s += t.image;
         break;
       default:
-        jj_la1[76] = jj_gen;
+        jj_la1[78] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2040,8 +2054,8 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[77] = jj_gen;
-        break label_54;
+        jj_la1[79] = jj_gen;
+        break label_55;
       }
     }
           if (pred == null) {
@@ -2060,7 +2074,7 @@ String s = ".";
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case INTERPOLATION:
     case IDENT:
-      label_55:
+      label_56:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case IDENT:
@@ -2072,7 +2086,7 @@ String s = ".";
                                                         s += t.image;
           break;
         default:
-          jj_la1[78] = jj_gen;
+          jj_la1[80] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2082,8 +2096,8 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[79] = jj_gen;
-          break label_55;
+          jj_la1[81] = jj_gen;
+          break label_56;
         }
       }
       {if (true) return s;}
@@ -2097,7 +2111,7 @@ String s = ".";
       {if (true) return "&";}
       break;
     default:
-      jj_la1[80] = jj_gen;
+      jj_la1[82] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2113,28 +2127,28 @@ String s = ".";
     Token val = null;
     String attValue = null;
     jj_consume_token(LBRACKET);
-    label_56:
+    label_57:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[81] = jj_gen;
-        break label_56;
+        jj_la1[83] = jj_gen;
+        break label_57;
       }
       jj_consume_token(S);
     }
     att = jj_consume_token(IDENT);
-    label_57:
+    label_58:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[82] = jj_gen;
-        break label_57;
+        jj_la1[84] = jj_gen;
+        break label_58;
       }
       jj_consume_token(S);
     }
@@ -2171,19 +2185,19 @@ String s = ".";
                           cases = 6;
         break;
       default:
-        jj_la1[83] = jj_gen;
+        jj_la1[85] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-      label_58:
+      label_59:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[84] = jj_gen;
-          break label_58;
+          jj_la1[86] = jj_gen;
+          break label_59;
         }
         jj_consume_token(S);
       }
@@ -2197,25 +2211,25 @@ String s = ".";
                            attValue = val.image;
         break;
       default:
-        jj_la1[85] = jj_gen;
+        jj_la1[87] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-      label_59:
+      label_60:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[86] = jj_gen;
-          break label_59;
+          jj_la1[88] = jj_gen;
+          break label_60;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[87] = jj_gen;
+      jj_la1[89] = jj_gen;
       ;
     }
     jj_consume_token(RBRACKET);
@@ -2271,7 +2285,7 @@ boolean isPseudoElement = false;
              isPseudoElement=true;
       break;
     default:
-      jj_la1[88] = jj_gen;
+      jj_la1[90] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2297,15 +2311,15 @@ boolean isPseudoElement = false;
       break;
     case FUNCTION:
       n = jj_consume_token(FUNCTION);
-      label_60:
+      label_61:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[89] = jj_gen;
-          break label_60;
+          jj_la1[91] = jj_gen;
+          break label_61;
         }
         jj_consume_token(S);
       }
@@ -2322,7 +2336,7 @@ boolean isPseudoElement = false;
                   }
       break;
     default:
-      jj_la1[90] = jj_gen;
+      jj_la1[92] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2352,15 +2366,15 @@ boolean isPseudoElement = false;
     try {
       name = variableName();
       jj_consume_token(COLON);
-      label_61:
+      label_62:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[91] = jj_gen;
-          break label_61;
+          jj_la1[93] = jj_gen;
+          break label_62;
         }
         jj_consume_token(S);
       }
@@ -2370,21 +2384,21 @@ boolean isPseudoElement = false;
         guarded = guarded();
         break;
       default:
-        jj_la1[92] = jj_gen;
+        jj_la1[94] = jj_gen;
         ;
       }
-      label_62:
+      label_63:
       while (true) {
         jj_consume_token(SEMICOLON);
-        label_63:
+        label_64:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[93] = jj_gen;
-            break label_63;
+            jj_la1[95] = jj_gen;
+            break label_64;
           }
           jj_consume_token(S);
         }
@@ -2393,8 +2407,8 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[94] = jj_gen;
-          break label_62;
+          jj_la1[96] = jj_gen;
+          break label_63;
         }
       }
                     documentHandler.variable(name, exp, guarded);
@@ -2434,7 +2448,7 @@ boolean isPseudoElement = false;
       eachDirective();
       break;
     default:
-      jj_la1[95] = jj_gen;
+      jj_la1[97] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2470,7 +2484,7 @@ boolean isPseudoElement = false;
         styleRuleOrDeclarationOrNestedProperties();
         break;
       default:
-        jj_la1[96] = jj_gen;
+        jj_la1[98] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2481,7 +2495,7 @@ boolean isPseudoElement = false;
   Token n = null;
   String evaluator = "";
     jj_consume_token(IF_SYM);
-    label_64:
+    label_65:
     while (true) {
       n = booleanExpressionToken();
                                    evaluator += n.image;
@@ -2506,26 +2520,26 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[97] = jj_gen;
-        break label_64;
+        jj_la1[99] = jj_gen;
+        break label_65;
       }
     }
     jj_consume_token(LBRACE);
-    label_65:
+    label_66:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[98] = jj_gen;
-        break label_65;
+        jj_la1[100] = jj_gen;
+        break label_66;
       }
       jj_consume_token(S);
     }
     documentHandler.startIfElseDirective();
     documentHandler.ifDirective(evaluator);
-    label_66:
+    label_67:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LBRACKET:
@@ -2545,33 +2559,33 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[99] = jj_gen;
-        break label_66;
+        jj_la1[101] = jj_gen;
+        break label_67;
       }
       ifContentStatement();
     }
     jj_consume_token(RBRACE);
-    label_67:
+    label_68:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[100] = jj_gen;
-        break label_67;
+        jj_la1[102] = jj_gen;
+        break label_68;
       }
       jj_consume_token(S);
     }
-    label_68:
+    label_69:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case ELSE_SYM:
         ;
         break;
       default:
-        jj_la1[101] = jj_gen;
-        break label_68;
+        jj_la1[103] = jj_gen;
+        break label_69;
       }
       elseDirective();
     }
@@ -2582,22 +2596,22 @@ boolean isPseudoElement = false;
   String evaluator = "";
   Token n = null;
     jj_consume_token(ELSE_SYM);
-    label_69:
+    label_70:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[102] = jj_gen;
-        break label_69;
+        jj_la1[104] = jj_gen;
+        break label_70;
       }
       jj_consume_token(S);
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IF:
       jj_consume_token(IF);
-      label_70:
+      label_71:
       while (true) {
         n = booleanExpressionToken();
                                             evaluator += n.image;
@@ -2622,31 +2636,31 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[103] = jj_gen;
-          break label_70;
+          jj_la1[105] = jj_gen;
+          break label_71;
         }
       }
       break;
     default:
-      jj_la1[104] = jj_gen;
+      jj_la1[106] = jj_gen;
       ;
     }
     jj_consume_token(LBRACE);
-    label_71:
+    label_72:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[105] = jj_gen;
-        break label_71;
+        jj_la1[107] = jj_gen;
+        break label_72;
       }
       jj_consume_token(S);
     }
     if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
     else{ documentHandler.elseDirective(); }
-    label_72:
+    label_73:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LBRACKET:
@@ -2666,21 +2680,21 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[106] = jj_gen;
-        break label_72;
+        jj_la1[108] = jj_gen;
+        break label_73;
       }
       ifContentStatement();
     }
     jj_consume_token(RBRACE);
-    label_73:
+    label_74:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[107] = jj_gen;
-        break label_73;
+        jj_la1[109] = jj_gen;
+        break label_74;
       }
       jj_consume_token(S);
     }
@@ -2741,7 +2755,7 @@ boolean isPseudoElement = false;
       n = jj_consume_token(NOT_EQ);
       break;
     default:
-      jj_la1[108] = jj_gen;
+      jj_la1[110] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2754,41 +2768,41 @@ boolean isPseudoElement = false;
   ArrayList<String> list = null;
   String listVariable = null;
     jj_consume_token(EACH_SYM);
-    label_74:
+    label_75:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[109] = jj_gen;
-        break label_74;
+        jj_la1[111] = jj_gen;
+        break label_75;
       }
       jj_consume_token(S);
     }
     var = jj_consume_token(VARIABLE);
-    label_75:
+    label_76:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[110] = jj_gen;
-        break label_75;
+        jj_la1[112] = jj_gen;
+        break label_76;
       }
       jj_consume_token(S);
     }
     jj_consume_token(EACH_IN);
-    label_76:
+    label_77:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[111] = jj_gen;
-        break label_76;
+        jj_la1[113] = jj_gen;
+        break label_77;
       }
       jj_consume_token(S);
     }
@@ -2802,24 +2816,24 @@ boolean isPseudoElement = false;
    documentHandler.startEachDirective(var.image, listVariable);
       break;
     default:
-      jj_la1[112] = jj_gen;
+      jj_la1[114] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     jj_consume_token(LBRACE);
-    label_77:
+    label_78:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[113] = jj_gen;
-        break label_77;
+        jj_la1[115] = jj_gen;
+        break label_78;
       }
       jj_consume_token(S);
     }
-    label_78:
+    label_79:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LBRACKET:
@@ -2839,21 +2853,21 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[114] = jj_gen;
-        break label_78;
+        jj_la1[116] = jj_gen;
+        break label_79;
       }
       ifContentStatement();
     }
     jj_consume_token(RBRACE);
-    label_79:
+    label_80:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[115] = jj_gen;
-        break label_79;
+        jj_la1[117] = jj_gen;
+        break label_80;
       }
       jj_consume_token(S);
     }
@@ -2864,53 +2878,53 @@ boolean isPseudoElement = false;
         ArrayList<String > strings = new ArrayList<String >();
         Token input;
     input = jj_consume_token(IDENT);
-    label_80:
+    label_81:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[116] = jj_gen;
-        break label_80;
+        jj_la1[118] = jj_gen;
+        break label_81;
       }
       jj_consume_token(S);
     }
           strings.add(input.image);
-    label_81:
+    label_82:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[117] = jj_gen;
-        break label_81;
+        jj_la1[119] = jj_gen;
+        break label_82;
       }
       jj_consume_token(COMMA);
-      label_82:
+      label_83:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[118] = jj_gen;
-          break label_82;
+          jj_la1[120] = jj_gen;
+          break label_83;
         }
         jj_consume_token(S);
       }
       input = jj_consume_token(IDENT);
                                                strings.add(input.image);
-      label_83:
+      label_84:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[119] = jj_gen;
-          break label_83;
+          jj_la1[121] = jj_gen;
+          break label_84;
         }
         jj_consume_token(S);
       }
@@ -2924,19 +2938,20 @@ boolean isPseudoElement = false;
     ArrayList<VariableNode> args = null;
     String body;
     jj_consume_token(MIXIN_SYM);
-    label_84:
+    label_85:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[120] = jj_gen;
-        break label_84;
+        jj_la1[122] = jj_gen;
+        break label_85;
       }
       jj_consume_token(S);
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTERPOLATION:
     case IDENT:
       name = property();
       break;
@@ -2944,39 +2959,39 @@ boolean isPseudoElement = false;
       name = functionName();
       args = arglist();
       jj_consume_token(RPARAN);
-      label_85:
+      label_86:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[121] = jj_gen;
-          break label_85;
+          jj_la1[123] = jj_gen;
+          break label_86;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[122] = jj_gen;
+      jj_la1[124] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     jj_consume_token(LBRACE);
-    label_86:
+    label_87:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[123] = jj_gen;
-        break label_86;
+        jj_la1[125] = jj_gen;
+        break label_87;
       }
       jj_consume_token(S);
     }
      documentHandler.startMixinDirective(name, args);
-    label_87:
+    label_88:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LBRACKET:
@@ -3000,8 +3015,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[124] = jj_gen;
-        break label_87;
+        jj_la1[126] = jj_gen;
+        break label_88;
       }
       if (jj_2_5(5)) {
         ifContentStatement();
@@ -3018,22 +3033,22 @@ boolean isPseudoElement = false;
           page();
           break;
         default:
-          jj_la1[125] = jj_gen;
+          jj_la1[127] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
       }
     }
     jj_consume_token(RBRACE);
-    label_88:
+    label_89:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[126] = jj_gen;
-        break label_88;
+        jj_la1[128] = jj_gen;
+        break label_89;
       }
       jj_consume_token(S);
     }
@@ -3045,26 +3060,26 @@ boolean isPseudoElement = false;
     VariableNode arg;
     boolean hasNonOptionalArgument = false;
     arg = mixinArg();
-    label_89:
+    label_90:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[127] = jj_gen;
-        break label_89;
+        jj_la1[129] = jj_gen;
+        break label_90;
       }
       jj_consume_token(COMMA);
-      label_90:
+      label_91:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[128] = jj_gen;
-          break label_90;
+          jj_la1[130] = jj_gen;
+          break label_91;
         }
         jj_consume_token(S);
       }
@@ -3105,45 +3120,45 @@ boolean isPseudoElement = false;
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COLON:
         jj_consume_token(COLON);
-        label_91:
+        label_92:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[129] = jj_gen;
-            break label_91;
+            jj_la1[131] = jj_gen;
+            break label_92;
           }
           jj_consume_token(S);
         }
         first = nonVariableTerm(null);
         prev = first;
-        label_92:
+        label_93:
         while (true) {
           if (jj_2_6(3)) {
             ;
           } else {
-            break label_92;
+            break label_93;
           }
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case COMMA:
             jj_consume_token(COMMA);
-            label_93:
+            label_94:
             while (true) {
               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
               case S:
                 ;
                 break;
               default:
-                jj_la1[130] = jj_gen;
-                break label_93;
+                jj_la1[132] = jj_gen;
+                break label_94;
               }
               jj_consume_token(S);
             }
             break;
           default:
-            jj_la1[131] = jj_gen;
+            jj_la1[133] = jj_gen;
             ;
           }
           prev = nonVariableTerm(prev);
@@ -3155,13 +3170,13 @@ boolean isPseudoElement = false;
                  prev, variable.image);
         break;
       default:
-        jj_la1[132] = jj_gen;
+        jj_la1[134] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[133] = jj_gen;
+      jj_la1[135] = jj_gen;
       ;
     }
         VariableNode arg = new VariableNode(name, first, false);
@@ -3176,7 +3191,7 @@ boolean isPseudoElement = false;
     LexicalUnitImpl prev = null;
     first = term(null);
                          args.add(first); prev = first;
-    label_94:
+    label_95:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PLUS:
@@ -3211,58 +3226,58 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[134] = jj_gen;
-        break label_94;
+        jj_la1[136] = jj_gen;
+        break label_95;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COLON:
         jj_consume_token(COLON);
-        label_95:
+        label_96:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[135] = jj_gen;
-            break label_95;
+            jj_la1[137] = jj_gen;
+            break label_96;
           }
           jj_consume_token(S);
         }
         break;
       default:
-        jj_la1[136] = jj_gen;
+        jj_la1[138] = jj_gen;
         ;
       }
       next = term(prev);
                                                                                               prev.setNextLexicalUnit(next); prev = next;
     }
-    label_96:
+    label_97:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[137] = jj_gen;
-        break label_96;
+        jj_la1[139] = jj_gen;
+        break label_97;
       }
       jj_consume_token(COMMA);
-      label_97:
+      label_98:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[138] = jj_gen;
-          break label_97;
+          jj_la1[140] = jj_gen;
+          break label_98;
         }
         jj_consume_token(S);
       }
       first = term(null);
                          args.add(first); prev = first;
-      label_98:
+      label_99:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case PLUS:
@@ -3297,27 +3312,27 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[139] = jj_gen;
-          break label_98;
+          jj_la1[141] = jj_gen;
+          break label_99;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case COLON:
           jj_consume_token(COLON);
-          label_99:
+          label_100:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case S:
               ;
               break;
             default:
-              jj_la1[140] = jj_gen;
-              break label_99;
+              jj_la1[142] = jj_gen;
+              break label_100;
             }
             jj_consume_token(S);
           }
           break;
         default:
-          jj_la1[141] = jj_gen;
+          jj_la1[143] = jj_gen;
           ;
         }
         next = term(prev);
@@ -3332,19 +3347,20 @@ boolean isPseudoElement = false;
     String name;
     ArrayList<LexicalUnitImpl> args=null;
     jj_consume_token(INCLUDE_SYM);
-    label_100:
+    label_101:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[142] = jj_gen;
-        break label_100;
+        jj_la1[144] = jj_gen;
+        break label_101;
       }
       jj_consume_token(S);
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTERPOLATION:
     case IDENT:
       name = property();
       break;
@@ -3352,31 +3368,28 @@ boolean isPseudoElement = false;
       name = variableName();
                                               name = "$"+name;
       break;
-    case INTERPOLATION:
-      name = interpolation();
-      break;
     case FUNCTION:
       name = functionName();
       args = argValuelist();
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[143] = jj_gen;
+      jj_la1[145] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    label_101:
+    label_102:
     while (true) {
       jj_consume_token(SEMICOLON);
-      label_102:
+      label_103:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[144] = jj_gen;
-          break label_102;
+          jj_la1[146] = jj_gen;
+          break label_103;
         }
         jj_consume_token(S);
       }
@@ -3385,8 +3398,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[145] = jj_gen;
-        break label_101;
+        jj_la1[147] = jj_gen;
+        break label_102;
       }
     }
             documentHandler.includeDirective(name, args);
@@ -3423,41 +3436,41 @@ boolean isPseudoElement = false;
         Token n = null;
     n = jj_consume_token(VARIABLE);
                     variable = n.image;
-    label_103:
+    label_104:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[146] = jj_gen;
-        break label_103;
+        jj_la1[148] = jj_gen;
+        break label_104;
       }
       jj_consume_token(S);
     }
     jj_consume_token(COLON);
-    label_104:
+    label_105:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[147] = jj_gen;
-        break label_104;
+        jj_la1[149] = jj_gen;
+        break label_105;
       }
       jj_consume_token(S);
     }
     jj_consume_token(APPEND);
-    label_105:
+    label_106:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[148] = jj_gen;
-        break label_105;
+        jj_la1[150] = jj_gen;
+        break label_106;
       }
       jj_consume_token(S);
     }
@@ -3467,19 +3480,19 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[149] = jj_gen;
+      jj_la1[151] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
-    label_106:
+    label_107:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[150] = jj_gen;
-        break label_106;
+        jj_la1[152] = jj_gen;
+        break label_107;
       }
       jj_consume_token(S);
     }
@@ -3487,60 +3500,60 @@ boolean isPseudoElement = false;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_107:
+      label_108:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[151] = jj_gen;
-          break label_107;
+          jj_la1[153] = jj_gen;
+          break label_108;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_108:
+      label_109:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[152] = jj_gen;
-          break label_108;
+          jj_la1[154] = jj_gen;
+          break label_109;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[153] = jj_gen;
+      jj_la1[155] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_109:
+    label_110:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[154] = jj_gen;
-        break label_109;
+        jj_la1[156] = jj_gen;
+        break label_110;
       }
       jj_consume_token(S);
     }
     jj_consume_token(SEMICOLON);
-    label_110:
+    label_111:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[155] = jj_gen;
-        break label_110;
+        jj_la1[157] = jj_gen;
+        break label_111;
       }
       jj_consume_token(S);
     }
@@ -3558,41 +3571,41 @@ boolean isPseudoElement = false;
         Token n = null;
     n = jj_consume_token(VARIABLE);
                     variable = n.image;
-    label_111:
+    label_112:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[156] = jj_gen;
-        break label_111;
+        jj_la1[158] = jj_gen;
+        break label_112;
       }
       jj_consume_token(S);
     }
     jj_consume_token(COLON);
-    label_112:
+    label_113:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[157] = jj_gen;
-        break label_112;
+        jj_la1[159] = jj_gen;
+        break label_113;
       }
       jj_consume_token(S);
     }
     jj_consume_token(REMOVE);
-    label_113:
+    label_114:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[158] = jj_gen;
-        break label_113;
+        jj_la1[160] = jj_gen;
+        break label_114;
       }
       jj_consume_token(S);
     }
@@ -3602,19 +3615,19 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[159] = jj_gen;
+      jj_la1[161] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
-    label_114:
+    label_115:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[160] = jj_gen;
-        break label_114;
+        jj_la1[162] = jj_gen;
+        break label_115;
       }
       jj_consume_token(S);
     }
@@ -3622,60 +3635,60 @@ boolean isPseudoElement = false;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_115:
+      label_116:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[161] = jj_gen;
-          break label_115;
+          jj_la1[163] = jj_gen;
+          break label_116;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_116:
+      label_117:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[162] = jj_gen;
-          break label_116;
+          jj_la1[164] = jj_gen;
+          break label_117;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[163] = jj_gen;
+      jj_la1[165] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_117:
+    label_118:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[164] = jj_gen;
-        break label_117;
+        jj_la1[166] = jj_gen;
+        break label_118;
       }
       jj_consume_token(S);
     }
     jj_consume_token(SEMICOLON);
-    label_118:
+    label_119:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[165] = jj_gen;
-        break label_118;
+        jj_la1[167] = jj_gen;
+        break label_119;
       }
       jj_consume_token(S);
     }
@@ -3693,41 +3706,41 @@ boolean isPseudoElement = false;
         Token n = null;
     n = jj_consume_token(VARIABLE);
                     variable = n.image;
-    label_119:
+    label_120:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[166] = jj_gen;
-        break label_119;
+        jj_la1[168] = jj_gen;
+        break label_120;
       }
       jj_consume_token(S);
     }
     jj_consume_token(COLON);
-    label_120:
+    label_121:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[167] = jj_gen;
-        break label_120;
+        jj_la1[169] = jj_gen;
+        break label_121;
       }
       jj_consume_token(S);
     }
     jj_consume_token(CONTAINS);
-    label_121:
+    label_122:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[168] = jj_gen;
-        break label_121;
+        jj_la1[170] = jj_gen;
+        break label_122;
       }
       jj_consume_token(S);
     }
@@ -3737,19 +3750,19 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[169] = jj_gen;
+      jj_la1[171] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
-    label_122:
+    label_123:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[170] = jj_gen;
-        break label_122;
+        jj_la1[172] = jj_gen;
+        break label_123;
       }
       jj_consume_token(S);
     }
@@ -3757,60 +3770,60 @@ boolean isPseudoElement = false;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_123:
+      label_124:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[171] = jj_gen;
-          break label_123;
+          jj_la1[173] = jj_gen;
+          break label_124;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_124:
+      label_125:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[172] = jj_gen;
-          break label_124;
+          jj_la1[174] = jj_gen;
+          break label_125;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[173] = jj_gen;
+      jj_la1[175] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_125:
+    label_126:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[174] = jj_gen;
-        break label_125;
+        jj_la1[176] = jj_gen;
+        break label_126;
       }
       jj_consume_token(S);
     }
     jj_consume_token(SEMICOLON);
-    label_126:
+    label_127:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[175] = jj_gen;
-        break label_126;
+        jj_la1[177] = jj_gen;
+        break label_127;
       }
       jj_consume_token(S);
     }
@@ -3905,7 +3918,7 @@ boolean isPseudoElement = false;
       warnDirective();
       break;
     default:
-      jj_la1[176] = jj_gen;
+      jj_la1[178] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3916,15 +3929,15 @@ boolean isPseudoElement = false;
     String content = skipStatementUntilSemiColon();
     // TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
     System.out.println(content);
-    label_127:
+    label_128:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[177] = jj_gen;
-        break label_127;
+        jj_la1[179] = jj_gen;
+        break label_128;
       }
       jj_consume_token(S);
     }
@@ -3935,15 +3948,15 @@ boolean isPseudoElement = false;
     String content = skipStatementUntilSemiColon();
     // TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
     System.err.println(content);
-    label_128:
+    label_129:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[178] = jj_gen;
-        break label_128;
+        jj_la1[180] = jj_gen;
+        break label_129;
       }
       jj_consume_token(S);
     }
@@ -3969,20 +3982,20 @@ boolean isPseudoElement = false;
                        exclusive = false;
       break;
     default:
-      jj_la1[179] = jj_gen;
+      jj_la1[181] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     to = skipStatementUntilLeftBrace();
-    label_129:
+    label_130:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[180] = jj_gen;
-        break label_129;
+        jj_la1[182] = jj_gen;
+        break label_130;
       }
       jj_consume_token(S);
     }
@@ -4003,31 +4016,31 @@ boolean isPseudoElement = false;
   final public void extendDirective() throws ParseException {
  ArrayList<String> list;
     jj_consume_token(EXTEND_SYM);
-    label_130:
+    label_131:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[181] = jj_gen;
-        break label_130;
+        jj_la1[183] = jj_gen;
+        break label_131;
       }
       jj_consume_token(S);
     }
     list = selectorList();
-    label_131:
+    label_132:
     while (true) {
       jj_consume_token(SEMICOLON);
-      label_132:
+      label_133:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[182] = jj_gen;
-          break label_132;
+          jj_la1[184] = jj_gen;
+          break label_133;
         }
         jj_consume_token(S);
       }
@@ -4036,8 +4049,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[183] = jj_gen;
-        break label_131;
+        jj_la1[185] = jj_gen;
+        break label_132;
       }
     }
      documentHandler.extendDirective(list);
@@ -4064,83 +4077,85 @@ boolean isPseudoElement = false;
 LexicalUnit exp;
     name = property();
     jj_consume_token(COLON);
-    label_133:
+    label_134:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[184] = jj_gen;
-        break label_133;
+        jj_la1[186] = jj_gen;
+        break label_134;
       }
       jj_consume_token(S);
     }
     jj_consume_token(LBRACE);
-    label_134:
+    label_135:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[185] = jj_gen;
-        break label_134;
+        jj_la1[187] = jj_gen;
+        break label_135;
       }
       jj_consume_token(S);
     }
       documentHandler.startNestedProperties(name);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTERPOLATION:
     case IDENT:
       declaration();
       break;
     default:
-      jj_la1[186] = jj_gen;
+      jj_la1[188] = jj_gen;
       ;
     }
-    label_135:
+    label_136:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[187] = jj_gen;
-        break label_135;
+        jj_la1[189] = jj_gen;
+        break label_136;
       }
       jj_consume_token(SEMICOLON);
-      label_136:
+      label_137:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[188] = jj_gen;
-          break label_136;
+          jj_la1[190] = jj_gen;
+          break label_137;
         }
         jj_consume_token(S);
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTERPOLATION:
       case IDENT:
         declaration();
         break;
       default:
-        jj_la1[189] = jj_gen;
+        jj_la1[191] = jj_gen;
         ;
       }
     }
     jj_consume_token(RBRACE);
       documentHandler.endNestedProperties(name);
-    label_137:
+    label_138:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[190] = jj_gen;
-        break label_137;
+        jj_la1[192] = jj_gen;
+        break label_138;
       }
       jj_consume_token(S);
     }
@@ -4159,11 +4174,12 @@ LexicalUnit exp;
         case WARN_SYM:
           debuggingDirective();
           break;
+        case INTERPOLATION:
         case IDENT:
           declarationOrNestedProperties();
           break;
         default:
-          jj_la1[191] = jj_gen;
+          jj_la1[193] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -4207,15 +4223,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_138:
+      label_139:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[192] = jj_gen;
-          break label_138;
+          jj_la1[194] = jj_gen;
+          break label_139;
         }
         jj_consume_token(S);
       }
@@ -4254,7 +4270,7 @@ LexicalUnit exp;
           important = prio();
           break;
         default:
-          jj_la1[193] = jj_gen;
+          jj_la1[195] = jj_gen;
           ;
         }
          Token next = getToken(1);
@@ -4272,76 +4288,78 @@ LexicalUnit exp;
         break;
       case LBRACE:
         jj_consume_token(LBRACE);
-        label_139:
+        label_140:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[194] = jj_gen;
-            break label_139;
+            jj_la1[196] = jj_gen;
+            break label_140;
           }
           jj_consume_token(S);
         }
          documentHandler.startNestedProperties(name);
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case INTERPOLATION:
         case IDENT:
           declaration();
           break;
         default:
-          jj_la1[195] = jj_gen;
+          jj_la1[197] = jj_gen;
           ;
         }
-        label_140:
+        label_141:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case SEMICOLON:
             ;
             break;
           default:
-            jj_la1[196] = jj_gen;
-            break label_140;
+            jj_la1[198] = jj_gen;
+            break label_141;
           }
           jj_consume_token(SEMICOLON);
-          label_141:
+          label_142:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case S:
               ;
               break;
             default:
-              jj_la1[197] = jj_gen;
-              break label_141;
+              jj_la1[199] = jj_gen;
+              break label_142;
             }
             jj_consume_token(S);
           }
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case INTERPOLATION:
           case IDENT:
             declaration();
             break;
           default:
-            jj_la1[198] = jj_gen;
+            jj_la1[200] = jj_gen;
             ;
           }
         }
         jj_consume_token(RBRACE);
-        label_142:
+        label_143:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[199] = jj_gen;
-            break label_142;
+            jj_la1[201] = jj_gen;
+            break label_143;
           }
           jj_consume_token(S);
         }
          documentHandler.endNestedProperties(name);
         break;
       default:
-        jj_la1[200] = jj_gen;
+        jj_la1[202] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4391,15 +4409,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_143:
+      label_144:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[201] = jj_gen;
-          break label_143;
+          jj_la1[203] = jj_gen;
+          break label_144;
         }
         jj_consume_token(S);
       }
@@ -4409,7 +4427,7 @@ LexicalUnit exp;
         important = prio();
         break;
       default:
-        jj_la1[202] = jj_gen;
+        jj_la1[204] = jj_gen;
         ;
       }
          documentHandler.property(name, exp, important);
@@ -4452,15 +4470,15 @@ LexicalUnit exp;
  */
   final public boolean prio() throws ParseException {
     jj_consume_token(IMPORTANT_SYM);
-    label_144:
+    label_145:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[203] = jj_gen;
-        break label_144;
+        jj_la1[205] = jj_gen;
+        break label_145;
       }
       jj_consume_token(S);
     }
@@ -4470,15 +4488,15 @@ LexicalUnit exp;
 
   final public boolean guarded() throws ParseException {
     jj_consume_token(GUARDED_SYM);
-    label_145:
+    label_146:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[204] = jj_gen;
-        break label_145;
+        jj_la1[206] = jj_gen;
+        break label_146;
       }
       jj_consume_token(S);
     }
@@ -4494,15 +4512,15 @@ LexicalUnit exp;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DIV:
       n = jj_consume_token(DIV);
-      label_146:
+      label_147:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[205] = jj_gen;
-          break label_146;
+          jj_la1[207] = jj_gen;
+          break label_147;
         }
         jj_consume_token(S);
       }
@@ -4512,15 +4530,15 @@ LexicalUnit exp;
       break;
     case COMMA:
       n = jj_consume_token(COMMA);
-      label_147:
+      label_148:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[206] = jj_gen;
-          break label_147;
+          jj_la1[208] = jj_gen;
+          break label_148;
         }
         jj_consume_token(S);
       }
@@ -4529,7 +4547,7 @@ LexicalUnit exp;
                                                          prev);}
       break;
     default:
-      jj_la1[207] = jj_gen;
+      jj_la1[209] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4544,12 +4562,12 @@ LexicalUnit exp;
     char op;
     first = term(null);
                       res = first;
-    label_148:
+    label_149:
     while (true) {
       if (jj_2_11(2)) {
         ;
       } else {
-        break label_148;
+        break label_149;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
@@ -4557,7 +4575,7 @@ LexicalUnit exp;
         res = operator(res);
         break;
       default:
-        jj_la1[208] = jj_gen;
+        jj_la1[210] = jj_gen;
         ;
       }
       res = term(res);
@@ -4580,7 +4598,7 @@ LexicalUnit exp;
         {if (true) return '+';}
       break;
     default:
-      jj_la1[209] = jj_gen;
+      jj_la1[211] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4628,7 +4646,7 @@ LexicalUnit exp;
       result = variableTerm(prev);
       break;
     default:
-      jj_la1[210] = jj_gen;
+      jj_la1[212] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4679,7 +4697,7 @@ LexicalUnitImpl result = null;
         op = unaryOperator();
         break;
       default:
-        jj_la1[211] = jj_gen;
+        jj_la1[213] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4784,7 +4802,7 @@ LexicalUnitImpl result = null;
         result = function(op, prev);
         break;
       default:
-        jj_la1[212] = jj_gen;
+        jj_la1[214] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4811,7 +4829,7 @@ LexicalUnitImpl result = null;
                    s+=".";
           break;
         default:
-          jj_la1[213] = jj_gen;
+          jj_la1[215] = jj_gen;
           ;
         }
         n = jj_consume_token(IDENT);
@@ -4858,25 +4876,25 @@ LexicalUnitImpl result = null;
         result = unicode(prev);
         break;
       default:
-        jj_la1[214] = jj_gen;
+        jj_la1[216] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[215] = jj_gen;
+      jj_la1[217] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    label_149:
+    label_150:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[216] = jj_gen;
-        break label_149;
+        jj_la1[218] = jj_gen;
+        break label_150;
       }
       jj_consume_token(S);
     }
@@ -4892,15 +4910,15 @@ LexicalUnitImpl result = null;
  Token n;
  LexicalUnit params = null;
     n = jj_consume_token(FUNCTION);
-    label_150:
+    label_151:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[217] = jj_gen;
-        break label_150;
+        jj_la1[219] = jj_gen;
+        break label_151;
       }
       jj_consume_token(S);
     }
@@ -4942,7 +4960,7 @@ LexicalUnitImpl result = null;
       params = expr();
       break;
     default:
-      jj_la1[218] = jj_gen;
+      jj_la1[220] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -5413,15 +5431,15 @@ LexicalUnitImpl result = null;
  */
   final public void _parseRule() throws ParseException {
  String ret = null;
-    label_151:
+    label_152:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[219] = jj_gen;
-        break label_151;
+        jj_la1[221] = jj_gen;
+        break label_152;
       }
       jj_consume_token(S);
     }
@@ -5453,7 +5471,7 @@ LexicalUnitImpl result = null;
       fontFace();
       break;
     default:
-      jj_la1[220] = jj_gen;
+      jj_la1[222] = jj_gen;
       ret = skipStatement();
                     if ((ret == null) || (ret.length() == 0)) {
                         {if (true) return;}
@@ -5468,15 +5486,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseImportRule() throws ParseException {
-    label_152:
+    label_153:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[221] = jj_gen;
-        break label_152;
+        jj_la1[223] = jj_gen;
+        break label_153;
       }
       jj_consume_token(S);
     }
@@ -5484,15 +5502,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseMediaRule() throws ParseException {
-    label_153:
+    label_154:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[222] = jj_gen;
-        break label_153;
+        jj_la1[224] = jj_gen;
+        break label_154;
       }
       jj_consume_token(S);
     }
@@ -5500,55 +5518,57 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseDeclarationBlock() throws ParseException {
-    label_154:
+    label_155:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[223] = jj_gen;
-        break label_154;
+        jj_la1[225] = jj_gen;
+        break label_155;
       }
       jj_consume_token(S);
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTERPOLATION:
     case IDENT:
       declaration();
       break;
     default:
-      jj_la1[224] = jj_gen;
+      jj_la1[226] = jj_gen;
       ;
     }
-    label_155:
+    label_156:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[225] = jj_gen;
-        break label_155;
+        jj_la1[227] = jj_gen;
+        break label_156;
       }
       jj_consume_token(SEMICOLON);
-      label_156:
+      label_157:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[226] = jj_gen;
-          break label_156;
+          jj_la1[228] = jj_gen;
+          break label_157;
         }
         jj_consume_token(S);
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTERPOLATION:
       case IDENT:
         declaration();
         break;
       default:
-        jj_la1[227] = jj_gen;
+        jj_la1[229] = jj_gen;
         ;
       }
     }
@@ -5557,15 +5577,15 @@ LexicalUnitImpl result = null;
   final public ArrayList<String> _parseSelectors() throws ParseException {
   ArrayList<String> p = null;
     try {
-      label_157:
+      label_158:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[228] = jj_gen;
-          break label_157;
+          jj_la1[230] = jj_gen;
+          break label_158;
         }
         jj_consume_token(S);
       }
@@ -5654,17 +5674,12 @@ LexicalUnitImpl result = null;
     finally { jj_save(10, xla); }
   }
 
-  private boolean jj_3_10() {
-    if (jj_3R_167()) return true;
-    return false;
-  }
-
   private boolean jj_3_5() {
-    if (jj_3R_159()) return true;
+    if (jj_3R_160()) return true;
     return false;
   }
 
-  private boolean jj_3R_195() {
+  private boolean jj_3R_196() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_10()) {
@@ -5678,28 +5693,28 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_1() {
-    if (jj_3R_158()) return true;
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3R_230() {
+  private boolean jj_3R_231() {
     if (jj_3R_261()) return true;
     return false;
   }
 
-  private boolean jj_3R_277() {
+  private boolean jj_3R_276() {
     if (jj_3R_243()) return true;
     return false;
   }
 
-  private boolean jj_3R_174() {
-    if (jj_3R_195()) return true;
+  private boolean jj_3R_175() {
+    if (jj_3R_196()) return true;
     return false;
   }
 
   private boolean jj_3_3() {
-    if (jj_3R_160()) return true;
     if (jj_3R_161()) return true;
+    if (jj_3R_162()) return true;
     return false;
   }
 
@@ -5711,24 +5726,24 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_277()) jj_scanpos = xsp;
+    if (jj_3R_276()) jj_scanpos = xsp;
     if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_228() {
+  private boolean jj_3R_229() {
     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_227()) return true;
+    if (jj_3R_228()) return true;
     return false;
   }
 
-  private boolean jj_3R_227() {
-    if (jj_3R_161()) return true;
+  private boolean jj_3R_228() {
+    if (jj_3R_162()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -5741,27 +5756,27 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_173() {
-    if (jj_3R_194()) return true;
+  private boolean jj_3R_174() {
+    if (jj_3R_195()) return true;
     return false;
   }
 
-  private boolean jj_3R_229() {
+  private boolean jj_3R_230() {
     if (jj_3R_260()) return true;
     return false;
   }
 
-  private boolean jj_3R_226() {
+  private boolean jj_3R_227() {
     if (jj_3R_259()) return true;
     return false;
   }
 
-  private boolean jj_3R_225() {
+  private boolean jj_3R_226() {
     if (jj_3R_258()) return true;
     return false;
   }
 
-  private boolean jj_3R_224() {
+  private boolean jj_3R_225() {
     if (jj_3R_257()) return true;
     return false;
   }
@@ -5782,12 +5797,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_186() {
-    if (jj_3R_227()) return true;
+  private boolean jj_3R_187() {
+    if (jj_3R_228()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_228()) { jj_scanpos = xsp; break; }
+      if (jj_3R_229()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -5802,19 +5817,19 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_172() {
-    if (jj_3R_193()) return true;
+  private boolean jj_3R_173() {
+    if (jj_3R_194()) return true;
     return false;
   }
 
-  private boolean jj_3R_193() {
+  private boolean jj_3R_194() {
     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_186()) return true;
+    if (jj_3R_187()) return true;
     if (jj_3R_241()) return true;
     while (true) {
       xsp = jj_scanpos;
@@ -5823,26 +5838,26 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_171() {
-    if (jj_3R_192()) return true;
+  private boolean jj_3R_172() {
+    if (jj_3R_193()) return true;
     return false;
   }
 
-  private boolean jj_3R_187() {
+  private boolean jj_3R_188() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_2()) {
     jj_scanpos = xsp;
-    if (jj_3R_229()) {
+    if (jj_3R_230()) {
     jj_scanpos = xsp;
-    if (jj_3R_230()) return true;
+    if (jj_3R_231()) return true;
     }
     }
     return false;
   }
 
   private boolean jj_3_2() {
-    if (jj_3R_159()) return true;
+    if (jj_3R_160()) return true;
     return false;
   }
 
@@ -5851,7 +5866,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_223() {
+  private boolean jj_3R_224() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_256()) jj_scanpos = xsp;
@@ -5859,7 +5874,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_352() {
+  private boolean jj_3R_309() {
+    if (jj_scan_token(INTERPOLATION)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_354() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(75)) {
@@ -5914,28 +5934,28 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_222() {
+  private boolean jj_3R_223() {
     if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_221() {
+  private boolean jj_3R_222() {
     if (jj_3R_255()) return true;
     return false;
   }
 
-  private boolean jj_3R_185() {
+  private boolean jj_3R_186() {
     Token xsp;
     xsp = jj_scanpos;
-    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;
+    if (jj_3R_226()) {
+    jj_scanpos = xsp;
+    if (jj_3R_227()) return true;
     }
     }
     }
@@ -5943,8 +5963,8 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_167() {
-    if (jj_3R_186()) return true;
+  private boolean jj_3R_168() {
+    if (jj_3R_187()) return true;
     if (jj_scan_token(LBRACE)) return true;
     Token xsp;
     while (true) {
@@ -5953,7 +5973,7 @@ LexicalUnitImpl result = null;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_187()) { jj_scanpos = xsp; break; }
+      if (jj_3R_188()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RBRACE)) return true;
     while (true) {
@@ -5963,12 +5983,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_170() {
-    if (jj_3R_191()) return true;
+  private boolean jj_3R_171() {
+    if (jj_3R_192()) return true;
     return false;
   }
 
-  private boolean jj_3R_264() {
+  private boolean jj_3R_263() {
     if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
@@ -5978,26 +5998,16 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_220() {
+  private boolean jj_3R_221() {
     if (jj_scan_token(DIMEN)) return true;
     return false;
   }
 
-  private boolean jj_3R_219() {
+  private boolean jj_3R_220() {
     if (jj_scan_token(KHZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_262() {
-    if (jj_scan_token(IDENT)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
   private boolean jj_3R_242() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
@@ -6008,7 +6018,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_218() {
+  private boolean jj_3R_219() {
     if (jj_scan_token(HZ)) return true;
     return false;
   }
@@ -6023,7 +6033,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_310() {
+  private boolean jj_3R_312() {
     if (jj_scan_token(WARN_SYM)) return true;
     Token xsp;
     while (true) {
@@ -6033,37 +6043,66 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_217() {
+  private boolean jj_3R_218() {
     if (jj_scan_token(MS)) return true;
     return false;
   }
 
   private boolean jj_3R_285() {
-    if (jj_3R_310()) return true;
+    if (jj_3R_312()) return true;
     return false;
   }
 
-  private boolean jj_3R_216() {
+  private boolean jj_3R_217() {
     if (jj_scan_token(SECOND)) return true;
     return false;
   }
 
-  private boolean jj_3R_215() {
+  private boolean jj_3R_308() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_280() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_308()) {
+    jj_scanpos = xsp;
+    if (jj_3R_309()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_262() {
+    Token xsp;
+    if (jj_3R_280()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_280()) { jj_scanpos = xsp; break; }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_216() {
     if (jj_scan_token(GRAD)) return true;
     return false;
   }
 
-  private boolean jj_3R_338() {
-    if (jj_3R_352()) return true;
+  private boolean jj_3R_340() {
+    if (jj_3R_354()) return true;
     return false;
   }
 
-  private boolean jj_3R_279() {
+  private boolean jj_3R_278() {
     if (jj_3R_296()) return true;
     return false;
   }
 
-  private boolean jj_3R_214() {
+  private boolean jj_3R_215() {
     if (jj_scan_token(RAD)) return true;
     return false;
   }
@@ -6071,16 +6110,16 @@ LexicalUnitImpl result = null;
   private boolean jj_3R_295() {
     if (jj_scan_token(IF_SYM)) return true;
     Token xsp;
-    if (jj_3R_338()) return true;
+    if (jj_3R_340()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_338()) { jj_scanpos = xsp; break; }
+      if (jj_3R_340()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_309() {
+  private boolean jj_3R_311() {
     if (jj_scan_token(DEBUG_SYM)) return true;
     Token xsp;
     while (true) {
@@ -6090,13 +6129,18 @@ LexicalUnitImpl result = null;
     return false;
   }
 
+  private boolean jj_3R_214() {
+    if (jj_scan_token(DEG)) return true;
+    return false;
+  }
+
   private boolean jj_3R_307() {
     if (jj_scan_token(S)) return true;
     return false;
   }
 
   private boolean jj_3R_213() {
-    if (jj_scan_token(DEG)) return true;
+    if (jj_scan_token(EXS)) return true;
     return false;
   }
 
@@ -6116,7 +6160,7 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_212() {
-    if (jj_scan_token(EXS)) return true;
+    if (jj_scan_token(EMS)) return true;
     return false;
   }
 
@@ -6125,40 +6169,20 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_302() {
-    if (jj_scan_token(COLON)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_301() {
-    if (jj_scan_token(INTERPOLATION)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_211() {
-    if (jj_scan_token(EMS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_300() {
-    if (jj_scan_token(COMMA)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_159() {
+  private boolean jj_3R_160() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_4()) {
     jj_scanpos = xsp;
-    if (jj_3R_170()) {
-    jj_scanpos = xsp;
     if (jj_3R_171()) {
     jj_scanpos = xsp;
     if (jj_3R_172()) {
     jj_scanpos = xsp;
     if (jj_3R_173()) {
     jj_scanpos = xsp;
-    if (jj_3R_174()) return true;
+    if (jj_3R_174()) {
+    jj_scanpos = xsp;
+    if (jj_3R_175()) return true;
     }
     }
     }
@@ -6168,21 +6192,21 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_4() {
-    if (jj_3R_158()) return true;
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3R_299() {
-    if (jj_scan_token(STRING)) return true;
+  private boolean jj_3R_302() {
+    if (jj_scan_token(COLON)) return true;
     return false;
   }
 
   private boolean jj_3R_244() {
-    if (jj_3R_271()) return true;
+    if (jj_3R_270()) return true;
     return false;
   }
 
-  private boolean jj_3R_272() {
+  private boolean jj_3R_271() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_284()) {
@@ -6193,7 +6217,27 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_284() {
-    if (jj_3R_309()) return true;
+    if (jj_3R_311()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_301() {
+    if (jj_scan_token(INTERPOLATION)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_211() {
+    if (jj_scan_token(PX)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_300() {
+    if (jj_scan_token(COMMA)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_299() {
+    if (jj_scan_token(STRING)) return true;
     return false;
   }
 
@@ -6203,7 +6247,22 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_210() {
-    if (jj_scan_token(PX)) return true;
+    if (jj_scan_token(IN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_260() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_277()) {
+    jj_scanpos = xsp;
+    if (jj_3R_278()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_277() {
+    if (jj_3R_295()) return true;
     return false;
   }
 
@@ -6212,7 +6271,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_280() {
+  private boolean jj_3R_279() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_297()) {
@@ -6250,32 +6309,17 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_209() {
-    if (jj_scan_token(IN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_260() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_278()) {
-    jj_scanpos = xsp;
-    if (jj_3R_279()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_278() {
-    if (jj_3R_295()) return true;
+    if (jj_scan_token(PC)) return true;
     return false;
   }
 
   private boolean jj_3R_208() {
-    if (jj_scan_token(PC)) return true;
+    if (jj_scan_token(MM)) return true;
     return false;
   }
 
   private boolean jj_3R_207() {
-    if (jj_scan_token(MM)) return true;
+    if (jj_scan_token(CM)) return true;
     return false;
   }
 
@@ -6287,16 +6331,16 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(COLON)) return true;
-    if (jj_3R_280()) return true;
+    if (jj_3R_279()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_280()) { jj_scanpos = xsp; break; }
+      if (jj_3R_279()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
   private boolean jj_3R_206() {
-    if (jj_scan_token(CM)) return true;
+    if (jj_scan_token(PT)) return true;
     return false;
   }
 
@@ -6311,7 +6355,7 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_205() {
-    if (jj_scan_token(PT)) return true;
+    if (jj_scan_token(PERCENTAGE)) return true;
     return false;
   }
 
@@ -6320,12 +6364,17 @@ LexicalUnitImpl result = null;
     return false;
   }
 
+  private boolean jj_3R_191() {
+    if (jj_3R_234()) return true;
+    return false;
+  }
+
   private boolean jj_3R_204() {
-    if (jj_scan_token(PERCENTAGE)) return true;
+    if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_196() {
+  private boolean jj_3R_197() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_248()) {
@@ -6342,17 +6391,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_190() {
-    if (jj_3R_233()) return true;
-    return false;
-  }
-
   private boolean jj_3R_203() {
-    if (jj_scan_token(NUMBER)) return true;
+    if (jj_3R_254()) return true;
     return false;
   }
 
-  private boolean jj_3R_177() {
+  private boolean jj_3R_178() {
     if (jj_scan_token(SIBLING)) return true;
     Token xsp;
     while (true) {
@@ -6362,12 +6406,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_202() {
-    if (jj_3R_254()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_176() {
+  private boolean jj_3R_177() {
     if (jj_scan_token(PRECEDES)) return true;
     Token xsp;
     while (true) {
@@ -6377,52 +6416,16 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_178() {
-    if (jj_scan_token(S)) return true;
+  private boolean jj_3R_185() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_196()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_160() {
-    Token xsp;
+    if (jj_3R_203()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_175()) {
+    if (jj_3R_204()) {
     jj_scanpos = xsp;
-    if (jj_3R_176()) {
+    if (jj_3R_205()) {
     jj_scanpos = xsp;
-    if (jj_3R_177()) {
-    jj_scanpos = xsp;
-    if (jj_3R_178()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_175() {
-    if (jj_scan_token(PLUS)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_184() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_202()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_203()) {
-    jj_scanpos = xsp;
-    if (jj_3R_204()) {
-    jj_scanpos = xsp;
-    if (jj_3R_205()) {
-    jj_scanpos = xsp;
-    if (jj_3R_206()) {
+    if (jj_3R_206()) {
     jj_scanpos = xsp;
     if (jj_3R_207()) {
     jj_scanpos = xsp;
@@ -6452,7 +6455,9 @@ LexicalUnitImpl result = null;
     jj_scanpos = xsp;
     if (jj_3R_220()) {
     jj_scanpos = xsp;
-    if (jj_3R_221()) return true;
+    if (jj_3R_221()) {
+    jj_scanpos = xsp;
+    if (jj_3R_222()) return true;
     }
     }
     }
@@ -6474,12 +6479,20 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_163() {
+  private boolean jj_3R_179() {
+    if (jj_scan_token(S)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_184()) {
+    if (jj_3R_197()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_164() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_185()) {
     jj_scanpos = xsp;
-    if (jj_3R_185()) return true;
+    if (jj_3R_186()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6488,7 +6501,33 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_194() {
+  private boolean jj_3R_161() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_176()) {
+    jj_scanpos = xsp;
+    if (jj_3R_177()) {
+    jj_scanpos = xsp;
+    if (jj_3R_178()) {
+    jj_scanpos = xsp;
+    if (jj_3R_179()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_176() {
+    if (jj_scan_token(PLUS)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_195() {
     if (jj_3R_242()) return true;
     if (jj_scan_token(COLON)) return true;
     Token xsp;
@@ -6512,22 +6551,22 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_233() {
+  private boolean jj_3R_234() {
     if (jj_3R_242()) return true;
     return false;
   }
 
-  private boolean jj_3R_189() {
-    if (jj_3R_163()) return true;
+  private boolean jj_3R_190() {
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_169() {
+  private boolean jj_3R_170() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_189()) {
+    if (jj_3R_190()) {
     jj_scanpos = xsp;
-    if (jj_3R_190()) return true;
+    if (jj_3R_191()) return true;
     }
     return false;
   }
@@ -6537,22 +6576,22 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_168() {
-    if (jj_3R_188()) return true;
+  private boolean jj_3R_169() {
+    if (jj_3R_189()) return true;
     return false;
   }
 
-  private boolean jj_3R_198() {
+  private boolean jj_3R_199() {
     if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_327() {
+  private boolean jj_3R_329() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_276() {
+  private boolean jj_3R_275() {
     if (jj_scan_token(PLUS)) return true;
     return false;
   }
@@ -6560,19 +6599,19 @@ LexicalUnitImpl result = null;
   private boolean jj_3R_254() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_275()) {
+    if (jj_3R_274()) {
     jj_scanpos = xsp;
-    if (jj_3R_276()) return true;
+    if (jj_3R_275()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_275() {
+  private boolean jj_3R_274() {
     if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_328() {
+  private boolean jj_3R_330() {
     if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
@@ -6586,8 +6625,18 @@ LexicalUnitImpl result = null;
   private boolean jj_3_11() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_168()) jj_scanpos = xsp;
-    if (jj_3R_169()) return true;
+    if (jj_3R_169()) jj_scanpos = xsp;
+    if (jj_3R_170()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_243() {
+    if (jj_3R_170()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_11()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
@@ -6670,22 +6719,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_243() {
-    if (jj_3R_169()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_11()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
   private boolean jj_3R_259() {
     if (jj_scan_token(UNICODERANGE)) return true;
     return false;
   }
 
-  private boolean jj_3R_232() {
+  private boolean jj_3R_233() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -6695,12 +6734,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_326() {
+  private boolean jj_3R_328() {
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_166() {
+  private boolean jj_3R_167() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6721,17 +6760,17 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_188() {
+  private boolean jj_3R_189() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_231()) {
+    if (jj_3R_232()) {
     jj_scanpos = xsp;
-    if (jj_3R_232()) return true;
+    if (jj_3R_233()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_231() {
+  private boolean jj_3R_232() {
     if (jj_scan_token(DIV)) return true;
     Token xsp;
     while (true) {
@@ -6741,25 +6780,25 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_200() {
+  private boolean jj_3R_201() {
     if (jj_scan_token(COLON)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_326()) jj_scanpos = xsp;
+    if (jj_3R_328()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3R_327()) {
+    if (jj_3R_329()) {
     jj_scanpos = xsp;
-    if (jj_3R_328()) return true;
+    if (jj_3R_330()) return true;
     }
     return false;
   }
 
   private boolean jj_3_9() {
-    if (jj_3R_166()) return true;
+    if (jj_3R_167()) return true;
     return false;
   }
 
-  private boolean jj_3R_271() {
+  private boolean jj_3R_270() {
     if (jj_scan_token(GUARDED_SYM)) return true;
     Token xsp;
     while (true) {
@@ -6769,7 +6808,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_339() {
+  private boolean jj_3R_341() {
     if (jj_scan_token(IMPORTANT_SYM)) return true;
     Token xsp;
     while (true) {
@@ -6779,12 +6818,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_236() {
-    if (jj_3R_263()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_164() {
+  private boolean jj_3R_165() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6806,7 +6840,7 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_8() {
-    if (jj_3R_165()) return true;
+    if (jj_3R_166()) return true;
     return false;
   }
 
@@ -6820,7 +6854,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_308() {
+  private boolean jj_3R_310() {
     if (jj_scan_token(COLON)) return true;
     Token xsp;
     while (true) {
@@ -6833,17 +6867,12 @@ LexicalUnitImpl result = null;
   private boolean jj_3R_281() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_308()) jj_scanpos = xsp;
-    if (jj_3R_169()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_270() {
-    if (jj_3R_283()) return true;
+    if (jj_3R_310()) jj_scanpos = xsp;
+    if (jj_3R_170()) return true;
     return false;
   }
 
-  private boolean jj_3R_165() {
+  private boolean jj_3R_166() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6864,37 +6893,42 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_351() {
+  private boolean jj_3R_269() {
+    if (jj_3R_283()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_353() {
     if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_349() {
+  private boolean jj_3R_351() {
     if (jj_scan_token(STARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_350() {
+  private boolean jj_3R_352() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_348() {
+  private boolean jj_3R_350() {
     if (jj_scan_token(DOLLARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_347() {
+  private boolean jj_3R_349() {
     if (jj_scan_token(CARETMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_346() {
+  private boolean jj_3R_348() {
     if (jj_scan_token(DASHMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_345() {
+  private boolean jj_3R_347() {
     if (jj_scan_token(INCLUDES)) return true;
     return false;
   }
@@ -6904,30 +6938,25 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_344() {
+  private boolean jj_3R_346() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_269() {
-    if (jj_3R_167()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_333() {
+  private boolean jj_3R_335() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_344()) {
-    jj_scanpos = xsp;
-    if (jj_3R_345()) {
-    jj_scanpos = xsp;
     if (jj_3R_346()) {
     jj_scanpos = xsp;
     if (jj_3R_347()) {
     jj_scanpos = xsp;
     if (jj_3R_348()) {
     jj_scanpos = xsp;
-    if (jj_3R_349()) return true;
+    if (jj_3R_349()) {
+    jj_scanpos = xsp;
+    if (jj_3R_350()) {
+    jj_scanpos = xsp;
+    if (jj_3R_351()) return true;
     }
     }
     }
@@ -6938,9 +6967,9 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_350()) {
+    if (jj_3R_352()) {
     jj_scanpos = xsp;
-    if (jj_3R_351()) return true;
+    if (jj_3R_353()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6949,18 +6978,23 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_340() {
+  private boolean jj_3R_342() {
     if (jj_3R_262()) return true;
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_235() {
+  private boolean jj_3R_268() {
+    if (jj_3R_168()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_236() {
     if (jj_3R_242()) return true;
     return false;
   }
 
-  private boolean jj_3R_158() {
+  private boolean jj_3R_159() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_7()) {
@@ -6974,11 +7008,11 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_7() {
-    if (jj_3R_164()) return true;
+    if (jj_3R_165()) return true;
     return false;
   }
 
-  private boolean jj_3R_201() {
+  private boolean jj_3R_202() {
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
     while (true) {
@@ -6991,50 +7025,35 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_333()) jj_scanpos = xsp;
+    if (jj_3R_335()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_341() {
-    if (jj_3R_340()) return true;
-    return false;
-  }
-
   private boolean jj_3R_343() {
-    if (jj_scan_token(INTERPOLATION)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_267() {
-    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_266()) return true;
+    if (jj_3R_342()) return true;
     return false;
   }
 
-  private boolean jj_3R_263() {
+  private boolean jj_3R_345() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
   private boolean jj_3R_266() {
-    if (jj_scan_token(IDENT)) return true;
+    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_265()) return true;
     return false;
   }
 
   private boolean jj_3R_237() {
+    if (jj_3R_263()) return true;
     if (jj_3R_264()) return true;
-    if (jj_3R_265()) return true;
     if (jj_scan_token(RPARAN)) return true;
     return false;
   }
@@ -7044,35 +7063,27 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_252() {
-    if (jj_scan_token(ANY)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_234() {
-    if (jj_3R_262()) return true;
+  private boolean jj_3R_265() {
+    if (jj_scan_token(IDENT)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_240() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_268()) {
-    jj_scanpos = xsp;
-    if (jj_3R_269()) {
-    jj_scanpos = xsp;
-    if (jj_3R_270()) return true;
-    }
-    }
+  private boolean jj_3R_252() {
+    if (jj_scan_token(ANY)) return true;
     return false;
   }
 
-  private boolean jj_3R_268() {
-    if (jj_3R_272()) return true;
+  private boolean jj_3R_235() {
+    if (jj_3R_262()) return true;
     return false;
   }
 
-  private boolean jj_3R_191() {
+  private boolean jj_3R_192() {
     if (jj_scan_token(INCLUDE_SYM)) return true;
     Token xsp;
     while (true) {
@@ -7080,8 +7091,6 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_234()) {
-    jj_scanpos = xsp;
     if (jj_3R_235()) {
     jj_scanpos = xsp;
     if (jj_3R_236()) {
@@ -7089,7 +7098,6 @@ LexicalUnitImpl result = null;
     if (jj_3R_237()) return true;
     }
     }
-    }
     if (jj_3R_238()) return true;
     while (true) {
       xsp = jj_scanpos;
@@ -7098,17 +7106,25 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_239() {
-    if (jj_3R_266()) return true;
+  private boolean jj_3R_240() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_267()) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_267()) {
+    jj_scanpos = xsp;
+    if (jj_3R_268()) {
+    jj_scanpos = xsp;
+    if (jj_3R_269()) return true;
+    }
     }
     return false;
   }
 
-  private boolean jj_3R_274() {
+  private boolean jj_3R_267() {
+    if (jj_3R_271()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_273() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_288()) {
@@ -7123,7 +7139,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_313() {
+  private boolean jj_3R_315() {
     if (jj_scan_token(SEMICOLON)) return true;
     Token xsp;
     while (true) {
@@ -7131,11 +7147,11 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_341()) jj_scanpos = xsp;
+    if (jj_3R_343()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_197() {
+  private boolean jj_3R_198() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3R_251()) {
@@ -7150,10 +7166,20 @@ LexicalUnitImpl result = null;
 
   private boolean jj_3R_251() {
     Token xsp;
-    if (jj_3R_274()) return true;
+    if (jj_3R_273()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_274()) { jj_scanpos = xsp; break; }
+      if (jj_3R_273()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_239() {
+    if (jj_3R_265()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_266()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -7165,17 +7191,17 @@ LexicalUnitImpl result = null;
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_169()) return true;
+    if (jj_3R_170()) return true;
     return false;
   }
 
-  private boolean jj_3R_337() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_339() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_265() {
-    if (jj_3R_169()) return true;
+  private boolean jj_3R_264() {
+    if (jj_3R_170()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -7188,7 +7214,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_162() {
+  private boolean jj_3R_163() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -7198,83 +7224,79 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_342() {
+  private boolean jj_3R_344() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_321() {
+  private boolean jj_3R_323() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_342()) {
+    if (jj_3R_344()) {
     jj_scanpos = xsp;
-    if (jj_3R_343()) return true;
+    if (jj_3R_345()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_335() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_337() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_332() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_334() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_330() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_332() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_320() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_322() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_312() {
-    if (jj_3R_340()) return true;
+  private boolean jj_3R_314() {
+    if (jj_3R_342()) return true;
     return false;
   }
 
-  private boolean jj_3R_199() {
+  private boolean jj_3R_200() {
     if (jj_scan_token(DOT)) return true;
     Token xsp;
-    if (jj_3R_321()) return true;
+    if (jj_3R_323()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_321()) { jj_scanpos = xsp; break; }
+      if (jj_3R_323()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_325() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_327() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_323() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_325() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_192() {
-    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_239()) return true;
+  private boolean jj_3R_287() {
     if (jj_scan_token(LBRACE)) return true;
+    Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    xsp = jj_scanpos;
+    if (jj_3R_314()) jj_scanpos = xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_240()) { jj_scanpos = xsp; break; }
+      if (jj_3R_315()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RBRACE)) return true;
     while (true) {
@@ -7284,18 +7306,22 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_287() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_193() {
+    if (jj_scan_token(MEDIA_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    xsp = jj_scanpos;
-    if (jj_3R_312()) jj_scanpos = xsp;
+    if (jj_3R_239()) return true;
+    if (jj_scan_token(LBRACE)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_313()) { jj_scanpos = xsp; break; }
+      if (jj_3R_240()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RBRACE)) return true;
     while (true) {
@@ -7308,101 +7334,101 @@ LexicalUnitImpl result = null;
   private boolean jj_3_6() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_162()) jj_scanpos = xsp;
-    if (jj_3R_163()) return true;
+    if (jj_3R_163()) jj_scanpos = xsp;
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_311() {
-    if (jj_3R_339()) return true;
+  private boolean jj_3R_313() {
+    if (jj_3R_341()) return true;
     return false;
   }
 
   private boolean jj_3R_247() {
-    if (jj_3R_273()) return true;
+    if (jj_3R_272()) return true;
     return false;
   }
 
-  private boolean jj_3R_336() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_338() {
+    if (jj_3R_202()) return true;
     return false;
   }
 
-  private boolean jj_3R_334() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_336() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
   private boolean jj_3R_294() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_334()) {
+    if (jj_3R_336()) {
     jj_scanpos = xsp;
-    if (jj_3R_335()) {
+    if (jj_3R_337()) {
     jj_scanpos = xsp;
-    if (jj_3R_336()) {
+    if (jj_3R_338()) {
     jj_scanpos = xsp;
-    if (jj_3R_337()) return true;
+    if (jj_3R_339()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_329() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_331() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
   private boolean jj_3R_293() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_329()) {
+    if (jj_3R_331()) {
     jj_scanpos = xsp;
-    if (jj_3R_330()) {
+    if (jj_3R_332()) {
     jj_scanpos = xsp;
-    if (jj_3R_331()) {
+    if (jj_3R_333()) {
     jj_scanpos = xsp;
-    if (jj_3R_332()) return true;
+    if (jj_3R_334()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_317() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_319() {
+    if (jj_3R_201()) return true;
     return false;
   }
 
-  private boolean jj_3R_331() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_333() {
+    if (jj_3R_202()) return true;
     return false;
   }
 
-  private boolean jj_3R_322() {
-    if (jj_3R_198()) return true;
+  private boolean jj_3R_324() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
   private boolean jj_3R_292() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_322()) {
+    if (jj_3R_324()) {
     jj_scanpos = xsp;
-    if (jj_3R_323()) {
+    if (jj_3R_325()) {
     jj_scanpos = xsp;
-    if (jj_3R_324()) {
+    if (jj_3R_326()) {
     jj_scanpos = xsp;
-    if (jj_3R_325()) return true;
+    if (jj_3R_327()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_319() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_321() {
+    if (jj_3R_202()) return true;
     return false;
   }
 
@@ -7410,39 +7436,39 @@ LexicalUnitImpl result = null;
     if (jj_3R_243()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_311()) jj_scanpos = xsp;
+    if (jj_3R_313()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_324() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_326() {
+    if (jj_3R_202()) return true;
     return false;
   }
 
-  private boolean jj_3R_318() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_320() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_315() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_317() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
   private boolean jj_3R_291() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_318()) {
+    if (jj_3R_320()) {
     jj_scanpos = xsp;
-    if (jj_3R_319()) {
+    if (jj_3R_321()) {
     jj_scanpos = xsp;
-    if (jj_3R_320()) return true;
+    if (jj_3R_322()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_273() {
+  private boolean jj_3R_272() {
     if (jj_3R_262()) return true;
     if (jj_scan_token(COLON)) return true;
     Token xsp;
@@ -7459,7 +7485,17 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3R_246() {
-    if (jj_3R_272()) return true;
+    if (jj_3R_271()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_184() {
+    if (jj_3R_202()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_294()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
@@ -7468,23 +7504,28 @@ LexicalUnitImpl result = null;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_294()) { jj_scanpos = xsp; break; }
+      if (jj_3R_293()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
+  private boolean jj_3R_318() {
+    if (jj_3R_202()) return true;
+    return false;
+  }
+
   private boolean jj_3R_182() {
     if (jj_3R_200()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_293()) { jj_scanpos = xsp; break; }
+      if (jj_3R_292()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
   private boolean jj_3R_316() {
-    if (jj_3R_201()) return true;
+    if (jj_3R_199()) return true;
     return false;
   }
 
@@ -7493,26 +7534,21 @@ LexicalUnitImpl result = null;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_292()) { jj_scanpos = xsp; break; }
+      if (jj_3R_291()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_314() {
-    if (jj_3R_198()) return true;
-    return false;
-  }
-
   private boolean jj_3R_290() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_314()) {
+    if (jj_3R_316()) {
     jj_scanpos = xsp;
-    if (jj_3R_315()) {
+    if (jj_3R_317()) {
     jj_scanpos = xsp;
-    if (jj_3R_316()) {
+    if (jj_3R_318()) {
     jj_scanpos = xsp;
-    if (jj_3R_317()) return true;
+    if (jj_3R_319()) return true;
     }
     }
     }
@@ -7522,16 +7558,6 @@ LexicalUnitImpl result = null;
   private boolean jj_3R_180() {
     if (jj_3R_198()) return true;
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_291()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_179() {
-    if (jj_3R_197()) return true;
-    Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_3R_290()) { jj_scanpos = xsp; break; }
@@ -7539,18 +7565,18 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_161() {
+  private boolean jj_3R_162() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_179()) {
-    jj_scanpos = xsp;
     if (jj_3R_180()) {
     jj_scanpos = xsp;
     if (jj_3R_181()) {
     jj_scanpos = xsp;
     if (jj_3R_182()) {
     jj_scanpos = xsp;
-    if (jj_3R_183()) return true;
+    if (jj_3R_183()) {
+    jj_scanpos = xsp;
+    if (jj_3R_184()) return true;
     }
     }
     }
@@ -7558,6 +7584,11 @@ LexicalUnitImpl result = null;
     return false;
   }
 
+  private boolean jj_3_10() {
+    if (jj_3R_168()) return true;
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ParserTokenManager token_source;
   /** Current token. */
@@ -7568,7 +7599,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[229];
+  final private int[] jj_la1 = new int[231];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -7580,16 +7611,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,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,0x480002,0x480002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,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,0x0,0xd0000000,0x4d380002,0x2,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,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,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,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,0x480002,0x480002,0x2,0x0,0x0,0x2,0x2,0x2,0x2,0xd0000000,0x0,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,0x0,0xd0000000,0x4d380002,0x2,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,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,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,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,0x50000000,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,0x50000000,0x6400181,0x7e,0x0,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56400181,0x50000000,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,0x6000000,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,};
+      jj_la1_1 = new int[] {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,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x56400181,0x50000000,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,0x50000000,0x6400181,0x7e,0x0,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x56400181,0x50000000,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,0x6000000,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x6000100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,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,0x100,0x0,0x0,0x100,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,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,0x1c0,0x1c0,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x8,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,0x0,0xa0000881,0x980,0x0,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x0,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,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,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,0x1c0,0x1c0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0xa0000889,0x8,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,0x0,0xa0000881,0x980,0x0,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x0,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,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,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,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,0x40000,0x0,0x6,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,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,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,0x40000,0x0,0x6,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,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[11];
   private boolean jj_rescan = false;
@@ -7601,7 +7632,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 229; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7611,7 +7642,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 229; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7621,7 +7652,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 229; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7631,7 +7662,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 229; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7748,7 +7779,7 @@ LexicalUnitImpl result = null;
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 229; i++) {
+    for (int i = 0; i < 231; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
index 8d7cc4c32d15364486b4148ba7be1d8719b29b96..7b74b6b0aa033b97fe8292ad826b67561782ed56 100644 (file)
@@ -907,10 +907,10 @@ void fontFace() :
 }
 {
  try {
-  <FONT_FACE_SYM> ( <S> )* 
-     <LBRACE> (<S>)* 
+  <FONT_FACE_SYM> ( <S> )*
+     <LBRACE> (<S>)*
       { start = true; documentHandler.startFontFace(); }
-     ( declaration() )? ( ";" ( <S> )* ( declaration() )? )* 
+     ( declaration() )? ( ";" ( <S> )* ( declaration() )? )*
      <RBRACE> (<S>)*
  } catch (ParseException e) {
      reportError(getLocator(), e);
@@ -928,7 +928,7 @@ void fontFace() :
  */
 void atRuleDeclaration() :
 {Token n;
- String ret; 
+ String ret;
 }
 {
  n=<ATKEYWORD>
@@ -993,7 +993,7 @@ char connector = ' ';
     "+" ( <S> )* { return '+'; }
     | ">" ( <S> )* { return '>'; }
     | "~" ( <S> )* { return '~'; }
-| <S>  ( ( "+" { connector = '+'; } 
+| <S>  ( ( "+" { connector = '+'; }
            | ">" { connector = '>'; }
            | "~" { connector = '~'; } )
  ( <S> )* )? { return connector; }
@@ -1032,10 +1032,13 @@ void microsoftExtension() :
  * @exception ParseException exception during the parse
  */
 String property() :
-{Token n;
+{Token t;String s = "";
 }
 {
-           n=<IDENT> ( <S> )* { return convertIdent(n.image); }
+    (t = <IDENT>{s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+(< S >)*
+    {
+        return s;
+    }
 }
 
 String variableName() :
@@ -1595,7 +1598,7 @@ void includeDirective() :
 {
     <INCLUDE_SYM>
     (<S>)*
-    (name = property()|name = variableName(){ name = "$"+name;}|name = interpolation()
+    (name = property()|name = variableName(){ name = "$"+name;}
          |(name = functionName() 
            args = argValuelist()) <RPARAN>)(";"(<S>)*)+
            {documentHandler.includeDirective(name, args);}
@@ -1603,7 +1606,9 @@ void includeDirective() :
 
 String interpolation() :
 {
-  Token n;\r}\r{
+  Token n;
+}
+{
   n = < INTERPOLATION >
   {
     return n.image;\r  }\r}
@@ -2759,12 +2764,12 @@ void _parseDeclarationBlock() :
 {
 }
 {
-    ( <S> )* 
+    ( <S> )*
        ( declaration() )? ( ";" ( <S> )* ( declaration() )? )* 
  }
 
 ArrayList<String> _parseSelectors() :
-{ ArrayList<String> p = null; 
+{ ArrayList<String> p = null;
 }
 {
     try {
index 4555e79d9f599472734d516fa79c5a01ae1ac5e9..4a04851a5dbdcb741d3a688d2322fd42f9bcb701 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright 2000-2013 Vaadin Ltd.
- * 
- * Licensed 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.
- */
 /* Generated By:JavaCC: Do not edit this line. ParserConstants.java */
 package com.vaadin.sass.internal.parser;
 
index 5e7c9535102f3a9096d06c03b13dc5519381ff3c..57b67459968845c63452522fce0d747661417c81 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright 2000-2013 Vaadin Ltd.
- * 
- * Licensed 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.
- */
 /* Generated By:JavaCC: Do not edit this line. ParserTokenManager.java */
 package com.vaadin.sass.internal.parser;
 import java.io.*;
index 939c68c2f608927ddeddb4c8a01fd6c70f9b0502..73ab31b4a1930a89ade64e240e96e5cf48f5109a 100644 (file)
@@ -87,6 +87,11 @@ public class RuleNode extends Node implements IVariableNode {
 
             String interpolation = "#{$" + node.getName() + "}";
 
+            if (variable != null && variable.contains(interpolation)) {
+                variable = variable.replaceAll(Pattern.quote(interpolation),
+                        node.getExpr().toString());
+            }
+
             if (value.getLexicalUnitType() == LexicalUnitImpl.SAC_FUNCTION) {
 
                 if (value.getParameters() != null) {
diff --git a/theme-compiler/tests/resources/automatic/css/interpolation-in-property-name.css b/theme-compiler/tests/resources/automatic/css/interpolation-in-property-name.css
new file mode 100644 (file)
index 0000000..61f0abb
--- /dev/null
@@ -0,0 +1,6 @@
+.rounded-top {
+  border-top-radius: 10px;
+  -moz-border-radius-top: 10px;
+  top-radius: 10px;
+  no-interpolation: no-interpolation;
+}
\ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/scss/interpolation-in-property-name.scss b/theme-compiler/tests/resources/automatic/scss/interpolation-in-property-name.scss
new file mode 100644 (file)
index 0000000..9fc2e7c
--- /dev/null
@@ -0,0 +1,9 @@
+$side: top;
+$radius: 10px;
+
+.rounded-#{$side} {
+  border-#{$side}-radius: $radius;
+  -moz-border-radius-#{$side}: $radius;
+  #{$side}-radius: $radius;
+  no-interpolation: no-interpolation;
+}
\ No newline at end of file