]> source.dussan.org Git - vaadin-framework.git/commitdiff
Eliminate ambiguity between pseudos and properties (#10406) 24/424/1
authorHenri Sara <hesara@vaadin.com>
Thu, 29 Nov 2012 12:44:39 +0000 (14:44 +0200)
committerHenri Sara <hesara@vaadin.com>
Thu, 29 Nov 2012 12:45:15 +0000 (14:45 +0200)
Change-Id: I339548272ad12d961f2f81a2922f8ec58828629f

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

index f04d6fd77af7be9a57540d21f3a8aaafb4076d89..2120777b64889ea94825552916c27ed8bb043509 100644 (file)
@@ -1625,7 +1625,7 @@ char connector = ' ';
           ifDirective();
           break;
         default:
-          jj_la1[62] = jj_gen;
+          jj_la1[61] = jj_gen;
           if (jj_2_2(5)) {
             listModifyDirective();
           } else {
@@ -1646,20 +1646,9 @@ char connector = ' ';
               variable();
               break;
             default:
-              jj_la1[63] = jj_gen;
+              jj_la1[62] = jj_gen;
               if (jj_2_3(3)) {
-                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-                case MICROSOFT_RULE:
-                  microsoftExtension();
-                  break;
-                case IDENT:
-                  declarationOrNestedProperties();
-                  break;
-                default:
-                  jj_la1[61] = jj_gen;
-                  jj_consume_token(-1);
-                  throw new ParseException();
-                }
+                microsoftExtension();
               } else {
                 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
                 case LBRACKET:
@@ -1670,10 +1659,10 @@ char connector = ' ';
                 case INTERPOLATION:
                 case IDENT:
                 case HASH:
-                  styleRule();
+                  styleRuleOrDeclarationOrNestedProperties();
                   break;
                 default:
-                  jj_la1[64] = jj_gen;
+                  jj_la1[63] = jj_gen;
                   jj_consume_token(-1);
                   throw new ParseException();
                 }
@@ -1690,7 +1679,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[65] = jj_gen;
+          jj_la1[64] = jj_gen;
           break label_44;
         }
         jj_consume_token(S);
@@ -1727,7 +1716,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[66] = jj_gen;
+        jj_la1[65] = jj_gen;
         break label_45;
       }
       jj_consume_token(COMMA);
@@ -1738,7 +1727,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[67] = jj_gen;
+          jj_la1[66] = jj_gen;
           break label_46;
         }
         jj_consume_token(S);
@@ -1776,7 +1765,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[68] = jj_gen;
+          jj_la1[67] = jj_gen;
           break label_48;
         }
         jj_consume_token(S);
@@ -1831,7 +1820,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[69] = jj_gen;
+          jj_la1[68] = jj_gen;
           break label_49;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1848,7 +1837,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[70] = jj_gen;
+          jj_la1[69] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1865,7 +1854,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[71] = jj_gen;
+          jj_la1[70] = jj_gen;
           break label_50;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1879,7 +1868,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[72] = jj_gen;
+          jj_la1[71] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1897,7 +1886,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[73] = jj_gen;
+          jj_la1[72] = jj_gen;
           break label_51;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1914,7 +1903,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[74] = jj_gen;
+          jj_la1[73] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1932,7 +1921,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[75] = jj_gen;
+          jj_la1[74] = jj_gen;
           break label_52;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1949,7 +1938,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[76] = jj_gen;
+          jj_la1[75] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1967,7 +1956,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[77] = jj_gen;
+          jj_la1[76] = jj_gen;
           break label_53;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1984,14 +1973,14 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[78] = jj_gen;
+          jj_la1[77] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
       }
       break;
     default:
-      jj_la1[79] = jj_gen;
+      jj_la1[78] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2043,7 +2032,7 @@ String s = ".";
                                                            s += t.image;
         break;
       default:
-        jj_la1[80] = jj_gen;
+        jj_la1[79] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2053,7 +2042,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[81] = jj_gen;
+        jj_la1[80] = jj_gen;
         break label_54;
       }
     }
@@ -2085,7 +2074,7 @@ String s = ".";
                                                         s += t.image;
           break;
         default:
-          jj_la1[82] = jj_gen;
+          jj_la1[81] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2095,7 +2084,7 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[83] = jj_gen;
+          jj_la1[82] = jj_gen;
           break label_55;
         }
       }
@@ -2110,7 +2099,7 @@ String s = ".";
       {if (true) return "&";}
       break;
     default:
-      jj_la1[84] = jj_gen;
+      jj_la1[83] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2133,7 +2122,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[85] = jj_gen;
+        jj_la1[84] = jj_gen;
         break label_56;
       }
       jj_consume_token(S);
@@ -2146,7 +2135,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[86] = jj_gen;
+        jj_la1[85] = jj_gen;
         break label_57;
       }
       jj_consume_token(S);
@@ -2184,7 +2173,7 @@ String s = ".";
                           cases = 6;
         break;
       default:
-        jj_la1[87] = jj_gen;
+        jj_la1[86] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2195,7 +2184,7 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[88] = jj_gen;
+          jj_la1[87] = jj_gen;
           break label_58;
         }
         jj_consume_token(S);
@@ -2210,7 +2199,7 @@ String s = ".";
                            attValue = val.image;
         break;
       default:
-        jj_la1[89] = jj_gen;
+        jj_la1[88] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2221,14 +2210,14 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[90] = jj_gen;
+          jj_la1[89] = jj_gen;
           break label_59;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[91] = jj_gen;
+      jj_la1[90] = jj_gen;
       ;
     }
     jj_consume_token(RBRACKET);
@@ -2284,7 +2273,7 @@ boolean isPseudoElement = false;
              isPseudoElement=true;
       break;
     default:
-      jj_la1[92] = jj_gen;
+      jj_la1[91] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2317,7 +2306,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[93] = jj_gen;
+          jj_la1[92] = jj_gen;
           break label_60;
         }
         jj_consume_token(S);
@@ -2342,7 +2331,7 @@ boolean isPseudoElement = false;
           d = simple_selector(null, ' ');
           break;
         default:
-          jj_la1[94] = jj_gen;
+          jj_la1[93] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2354,7 +2343,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[95] = jj_gen;
+          jj_la1[94] = jj_gen;
           break label_61;
         }
         jj_consume_token(S);
@@ -2370,7 +2359,7 @@ boolean isPseudoElement = false;
                   }
       break;
     default:
-      jj_la1[96] = jj_gen;
+      jj_la1[95] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2407,7 +2396,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[97] = jj_gen;
+          jj_la1[96] = jj_gen;
           break label_62;
         }
         jj_consume_token(S);
@@ -2418,7 +2407,7 @@ boolean isPseudoElement = false;
         guarded = guarded();
         break;
       default:
-        jj_la1[98] = jj_gen;
+        jj_la1[97] = jj_gen;
         ;
       }
       label_63:
@@ -2431,7 +2420,7 @@ boolean isPseudoElement = false;
             ;
             break;
           default:
-            jj_la1[99] = jj_gen;
+            jj_la1[98] = jj_gen;
             break label_64;
           }
           jj_consume_token(S);
@@ -2441,7 +2430,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[100] = jj_gen;
+          jj_la1[99] = jj_gen;
           break label_63;
         }
       }
@@ -2502,7 +2491,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[101] = jj_gen;
+        jj_la1[100] = jj_gen;
         break label_65;
       }
     }
@@ -2514,7 +2503,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[102] = jj_gen;
+        jj_la1[101] = jj_gen;
         break label_66;
       }
       jj_consume_token(S);
@@ -2539,7 +2528,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[103] = jj_gen;
+        jj_la1[102] = jj_gen;
         break label_67;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2555,28 +2544,20 @@ boolean isPseudoElement = false;
       case VARIABLE:
         variable();
         break;
+      case LBRACKET:
+      case ANY:
+      case PARENT:
+      case DOT:
+      case COLON:
+      case INTERPOLATION:
+      case IDENT:
+      case HASH:
+        styleRuleOrDeclarationOrNestedProperties();
+        break;
       default:
-        jj_la1[104] = jj_gen;
-        if (jj_2_6(3)) {
-          declarationOrNestedProperties();
-        } else {
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LBRACKET:
-          case ANY:
-          case PARENT:
-          case DOT:
-          case COLON:
-          case INTERPOLATION:
-          case IDENT:
-          case HASH:
-            styleRule();
-            break;
-          default:
-            jj_la1[105] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-          }
-        }
+        jj_la1[103] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
       }
     }
     jj_consume_token(RBRACE);
@@ -2587,7 +2568,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[106] = jj_gen;
+        jj_la1[104] = jj_gen;
         break label_68;
       }
       jj_consume_token(S);
@@ -2599,7 +2580,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[107] = jj_gen;
+        jj_la1[105] = jj_gen;
         break label_69;
       }
       elseDirective();
@@ -2618,7 +2599,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[108] = jj_gen;
+        jj_la1[106] = jj_gen;
         break label_70;
       }
       jj_consume_token(S);
@@ -2649,7 +2630,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[109] = jj_gen;
+          jj_la1[107] = jj_gen;
           break label_71;
         }
         n = booleanExpressionToken();
@@ -2657,7 +2638,7 @@ boolean isPseudoElement = false;
       }
       break;
     default:
-      jj_la1[110] = jj_gen;
+      jj_la1[108] = jj_gen;
       ;
     }
     jj_consume_token(LBRACE);
@@ -2668,7 +2649,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[111] = jj_gen;
+        jj_la1[109] = jj_gen;
         break label_72;
       }
       jj_consume_token(S);
@@ -2693,7 +2674,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[112] = jj_gen;
+        jj_la1[110] = jj_gen;
         break label_73;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2709,28 +2690,20 @@ boolean isPseudoElement = false;
       case VARIABLE:
         variable();
         break;
+      case LBRACKET:
+      case ANY:
+      case PARENT:
+      case DOT:
+      case COLON:
+      case INTERPOLATION:
+      case IDENT:
+      case HASH:
+        styleRuleOrDeclarationOrNestedProperties();
+        break;
       default:
-        jj_la1[113] = jj_gen;
-        if (jj_2_7(3)) {
-          declarationOrNestedProperties();
-        } else {
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LBRACKET:
-          case ANY:
-          case PARENT:
-          case DOT:
-          case COLON:
-          case INTERPOLATION:
-          case IDENT:
-          case HASH:
-            styleRule();
-            break;
-          default:
-            jj_la1[114] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-          }
-        }
+        jj_la1[111] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
       }
     }
     jj_consume_token(RBRACE);
@@ -2741,7 +2714,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[115] = jj_gen;
+        jj_la1[112] = jj_gen;
         break label_74;
       }
       jj_consume_token(S);
@@ -2803,7 +2776,7 @@ boolean isPseudoElement = false;
       n = jj_consume_token(NOT_EQ);
       break;
     default:
-      jj_la1[116] = jj_gen;
+      jj_la1[113] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2823,7 +2796,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[117] = jj_gen;
+        jj_la1[114] = jj_gen;
         break label_75;
       }
       jj_consume_token(S);
@@ -2836,7 +2809,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[118] = jj_gen;
+        jj_la1[115] = jj_gen;
         break label_76;
       }
       jj_consume_token(S);
@@ -2849,7 +2822,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[119] = jj_gen;
+        jj_la1[116] = jj_gen;
         break label_77;
       }
       jj_consume_token(S);
@@ -2864,7 +2837,7 @@ boolean isPseudoElement = false;
    documentHandler.startEachDirective(var.image, listVariable);
       break;
     default:
-      jj_la1[120] = jj_gen;
+      jj_la1[117] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2876,7 +2849,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[121] = jj_gen;
+        jj_la1[118] = jj_gen;
         break label_78;
       }
       jj_consume_token(S);
@@ -2899,7 +2872,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[122] = jj_gen;
+        jj_la1[119] = jj_gen;
         break label_79;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2907,8 +2880,8 @@ boolean isPseudoElement = false;
         includeDirective();
         break;
       default:
-        jj_la1[123] = jj_gen;
-        if (jj_2_8(5)) {
+        jj_la1[120] = jj_gen;
+        if (jj_2_6(5)) {
           listModifyDirective();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2921,28 +2894,20 @@ boolean isPseudoElement = false;
           case VARIABLE:
             variable();
             break;
+          case LBRACKET:
+          case ANY:
+          case PARENT:
+          case DOT:
+          case COLON:
+          case INTERPOLATION:
+          case IDENT:
+          case HASH:
+            styleRuleOrDeclarationOrNestedProperties();
+            break;
           default:
-            jj_la1[124] = jj_gen;
-            if (jj_2_9(3)) {
-              declarationOrNestedProperties();
-            } else {
-              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-              case LBRACKET:
-              case ANY:
-              case PARENT:
-              case DOT:
-              case COLON:
-              case INTERPOLATION:
-              case IDENT:
-              case HASH:
-                styleRule();
-                break;
-              default:
-                jj_la1[125] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-              }
-            }
+            jj_la1[121] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
           }
         }
       }
@@ -2955,7 +2920,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[126] = jj_gen;
+        jj_la1[122] = jj_gen;
         break label_80;
       }
       jj_consume_token(S);
@@ -2974,7 +2939,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[127] = jj_gen;
+        jj_la1[123] = jj_gen;
         break label_81;
       }
       jj_consume_token(S);
@@ -2987,7 +2952,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[128] = jj_gen;
+        jj_la1[124] = jj_gen;
         break label_82;
       }
       jj_consume_token(COMMA);
@@ -2998,7 +2963,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[129] = jj_gen;
+          jj_la1[125] = jj_gen;
           break label_83;
         }
         jj_consume_token(S);
@@ -3012,7 +2977,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[130] = jj_gen;
+          jj_la1[126] = jj_gen;
           break label_84;
         }
         jj_consume_token(S);
@@ -3034,7 +2999,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[131] = jj_gen;
+        jj_la1[127] = jj_gen;
         break label_85;
       }
       jj_consume_token(S);
@@ -3054,14 +3019,14 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[132] = jj_gen;
+          jj_la1[128] = jj_gen;
           break label_86;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[133] = jj_gen;
+      jj_la1[129] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3073,7 +3038,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[134] = jj_gen;
+        jj_la1[130] = jj_gen;
         break label_87;
       }
       jj_consume_token(S);
@@ -3098,7 +3063,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[135] = jj_gen;
+        jj_la1[131] = jj_gen;
         break label_88;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3109,8 +3074,8 @@ boolean isPseudoElement = false;
         media();
         break;
       default:
-        jj_la1[136] = jj_gen;
-        if (jj_2_10(5)) {
+        jj_la1[132] = jj_gen;
+        if (jj_2_7(5)) {
           listModifyDirective();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3123,28 +3088,20 @@ boolean isPseudoElement = false;
           case VARIABLE:
             variable();
             break;
+          case LBRACKET:
+          case ANY:
+          case PARENT:
+          case DOT:
+          case COLON:
+          case INTERPOLATION:
+          case IDENT:
+          case HASH:
+            styleRuleOrDeclarationOrNestedProperties();
+            break;
           default:
-            jj_la1[137] = jj_gen;
-            if (jj_2_11(3)) {
-              declarationOrNestedProperties();
-            } else {
-              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-              case LBRACKET:
-              case ANY:
-              case PARENT:
-              case DOT:
-              case COLON:
-              case INTERPOLATION:
-              case IDENT:
-              case HASH:
-                styleRule();
-                break;
-              default:
-                jj_la1[138] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-              }
-            }
+            jj_la1[133] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
           }
         }
       }
@@ -3157,7 +3114,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[139] = jj_gen;
+        jj_la1[134] = jj_gen;
         break label_89;
       }
       jj_consume_token(S);
@@ -3177,7 +3134,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[140] = jj_gen;
+        jj_la1[135] = jj_gen;
         break label_90;
       }
       jj_consume_token(COMMA);
@@ -3188,7 +3145,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[141] = jj_gen;
+          jj_la1[136] = jj_gen;
           break label_91;
         }
         jj_consume_token(S);
@@ -3237,7 +3194,7 @@ boolean isPseudoElement = false;
             ;
             break;
           default:
-            jj_la1[142] = jj_gen;
+            jj_la1[137] = jj_gen;
             break label_92;
           }
           jj_consume_token(S);
@@ -3246,7 +3203,7 @@ boolean isPseudoElement = false;
         prev = first;
         label_93:
         while (true) {
-          if (jj_2_12(3)) {
+          if (jj_2_8(3)) {
             ;
           } else {
             break label_93;
@@ -3261,14 +3218,14 @@ boolean isPseudoElement = false;
                 ;
                 break;
               default:
-                jj_la1[143] = jj_gen;
+                jj_la1[138] = jj_gen;
                 break label_94;
               }
               jj_consume_token(S);
             }
             break;
           default:
-            jj_la1[144] = jj_gen;
+            jj_la1[139] = jj_gen;
             ;
           }
           prev = nonVariableTerm(prev);
@@ -3280,13 +3237,13 @@ boolean isPseudoElement = false;
                  prev, variable.image);
         break;
       default:
-        jj_la1[145] = jj_gen;
+        jj_la1[140] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[146] = jj_gen;
+      jj_la1[141] = jj_gen;
       ;
     }
         VariableNode arg = new VariableNode(name, first, false);
@@ -3336,7 +3293,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[147] = jj_gen;
+        jj_la1[142] = jj_gen;
         break label_95;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3349,14 +3306,14 @@ boolean isPseudoElement = false;
             ;
             break;
           default:
-            jj_la1[148] = jj_gen;
+            jj_la1[143] = jj_gen;
             break label_96;
           }
           jj_consume_token(S);
         }
         break;
       default:
-        jj_la1[149] = jj_gen;
+        jj_la1[144] = jj_gen;
         ;
       }
       next = term(prev);
@@ -3369,7 +3326,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[150] = jj_gen;
+        jj_la1[145] = jj_gen;
         break label_97;
       }
       jj_consume_token(COMMA);
@@ -3380,7 +3337,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[151] = jj_gen;
+          jj_la1[146] = jj_gen;
           break label_98;
         }
         jj_consume_token(S);
@@ -3422,7 +3379,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[152] = jj_gen;
+          jj_la1[147] = jj_gen;
           break label_99;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3435,14 +3392,14 @@ boolean isPseudoElement = false;
               ;
               break;
             default:
-              jj_la1[153] = jj_gen;
+              jj_la1[148] = jj_gen;
               break label_100;
             }
             jj_consume_token(S);
           }
           break;
         default:
-          jj_la1[154] = jj_gen;
+          jj_la1[149] = jj_gen;
           ;
         }
         next = term(prev);
@@ -3464,7 +3421,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[155] = jj_gen;
+        jj_la1[150] = jj_gen;
         break label_101;
       }
       jj_consume_token(S);
@@ -3486,7 +3443,7 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[156] = jj_gen;
+      jj_la1[151] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3500,7 +3457,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[157] = jj_gen;
+          jj_la1[152] = jj_gen;
           break label_103;
         }
         jj_consume_token(S);
@@ -3510,7 +3467,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[158] = jj_gen;
+        jj_la1[153] = jj_gen;
         break label_102;
       }
     }
@@ -3525,11 +3482,11 @@ boolean isPseudoElement = false;
   }
 
   final public void listModifyDirective() throws ParseException {
-    if (jj_2_13(5)) {
+    if (jj_2_9(5)) {
       removeDirective();
-    } else if (jj_2_14(5)) {
+    } else if (jj_2_10(5)) {
       appendDirective();
-    } else if (jj_2_15(5)) {
+    } else if (jj_2_11(5)) {
       containsDirective();
     } else {
       jj_consume_token(-1);
@@ -3555,7 +3512,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[159] = jj_gen;
+        jj_la1[154] = jj_gen;
         break label_104;
       }
       jj_consume_token(S);
@@ -3568,7 +3525,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[160] = jj_gen;
+        jj_la1[155] = jj_gen;
         break label_105;
       }
       jj_consume_token(S);
@@ -3581,7 +3538,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[161] = jj_gen;
+        jj_la1[156] = jj_gen;
         break label_106;
       }
       jj_consume_token(S);
@@ -3592,7 +3549,7 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[162] = jj_gen;
+      jj_la1[157] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
@@ -3603,7 +3560,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[163] = jj_gen;
+        jj_la1[158] = jj_gen;
         break label_107;
       }
       jj_consume_token(S);
@@ -3619,7 +3576,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[164] = jj_gen;
+          jj_la1[159] = jj_gen;
           break label_108;
         }
         jj_consume_token(S);
@@ -3633,14 +3590,14 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[165] = jj_gen;
+          jj_la1[160] = jj_gen;
           break label_109;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[166] = jj_gen;
+      jj_la1[161] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -3651,7 +3608,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[167] = jj_gen;
+        jj_la1[162] = jj_gen;
         break label_110;
       }
       jj_consume_token(S);
@@ -3664,7 +3621,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[168] = jj_gen;
+        jj_la1[163] = jj_gen;
         break label_111;
       }
       jj_consume_token(S);
@@ -3690,7 +3647,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[169] = jj_gen;
+        jj_la1[164] = jj_gen;
         break label_112;
       }
       jj_consume_token(S);
@@ -3703,7 +3660,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[170] = jj_gen;
+        jj_la1[165] = jj_gen;
         break label_113;
       }
       jj_consume_token(S);
@@ -3716,7 +3673,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[171] = jj_gen;
+        jj_la1[166] = jj_gen;
         break label_114;
       }
       jj_consume_token(S);
@@ -3727,7 +3684,7 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[172] = jj_gen;
+      jj_la1[167] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
@@ -3738,7 +3695,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[173] = jj_gen;
+        jj_la1[168] = jj_gen;
         break label_115;
       }
       jj_consume_token(S);
@@ -3754,7 +3711,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[174] = jj_gen;
+          jj_la1[169] = jj_gen;
           break label_116;
         }
         jj_consume_token(S);
@@ -3768,14 +3725,14 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[175] = jj_gen;
+          jj_la1[170] = jj_gen;
           break label_117;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[176] = jj_gen;
+      jj_la1[171] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -3786,7 +3743,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[177] = jj_gen;
+        jj_la1[172] = jj_gen;
         break label_118;
       }
       jj_consume_token(S);
@@ -3799,7 +3756,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[178] = jj_gen;
+        jj_la1[173] = jj_gen;
         break label_119;
       }
       jj_consume_token(S);
@@ -3825,7 +3782,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[179] = jj_gen;
+        jj_la1[174] = jj_gen;
         break label_120;
       }
       jj_consume_token(S);
@@ -3838,7 +3795,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[180] = jj_gen;
+        jj_la1[175] = jj_gen;
         break label_121;
       }
       jj_consume_token(S);
@@ -3851,7 +3808,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[181] = jj_gen;
+        jj_la1[176] = jj_gen;
         break label_122;
       }
       jj_consume_token(S);
@@ -3862,7 +3819,7 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[182] = jj_gen;
+      jj_la1[177] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
@@ -3873,7 +3830,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[183] = jj_gen;
+        jj_la1[178] = jj_gen;
         break label_123;
       }
       jj_consume_token(S);
@@ -3889,7 +3846,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[184] = jj_gen;
+          jj_la1[179] = jj_gen;
           break label_124;
         }
         jj_consume_token(S);
@@ -3903,14 +3860,14 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[185] = jj_gen;
+          jj_la1[180] = jj_gen;
           break label_125;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[186] = jj_gen;
+      jj_la1[181] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -3921,7 +3878,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[187] = jj_gen;
+        jj_la1[182] = jj_gen;
         break label_126;
       }
       jj_consume_token(S);
@@ -3934,7 +3891,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[188] = jj_gen;
+        jj_la1[183] = jj_gen;
         break label_127;
       }
       jj_consume_token(S);
@@ -4047,7 +4004,7 @@ boolean isPseudoElement = false;
                        exclusive = false;
       break;
     default:
-      jj_la1[189] = jj_gen;
+      jj_la1[184] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4059,7 +4016,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[190] = jj_gen;
+        jj_la1[185] = jj_gen;
         break label_128;
       }
       jj_consume_token(S);
@@ -4088,7 +4045,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[191] = jj_gen;
+        jj_la1[186] = jj_gen;
         break label_129;
       }
       jj_consume_token(S);
@@ -4104,7 +4061,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[192] = jj_gen;
+          jj_la1[187] = jj_gen;
           break label_131;
         }
         jj_consume_token(S);
@@ -4114,7 +4071,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[193] = jj_gen;
+        jj_la1[188] = jj_gen;
         break label_130;
       }
     }
@@ -4149,7 +4106,7 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[194] = jj_gen;
+        jj_la1[189] = jj_gen;
         break label_132;
       }
       jj_consume_token(S);
@@ -4162,7 +4119,7 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[195] = jj_gen;
+        jj_la1[190] = jj_gen;
         break label_133;
       }
       jj_consume_token(S);
@@ -4173,7 +4130,7 @@ LexicalUnit exp;
       declaration();
       break;
     default:
-      jj_la1[196] = jj_gen;
+      jj_la1[191] = jj_gen;
       ;
     }
     label_134:
@@ -4183,7 +4140,7 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[197] = jj_gen;
+        jj_la1[192] = jj_gen;
         break label_134;
       }
       jj_consume_token(SEMICOLON);
@@ -4194,7 +4151,7 @@ LexicalUnit exp;
           ;
           break;
         default:
-          jj_la1[198] = jj_gen;
+          jj_la1[193] = jj_gen;
           break label_135;
         }
         jj_consume_token(S);
@@ -4204,7 +4161,7 @@ LexicalUnit exp;
         declaration();
         break;
       default:
-        jj_la1[199] = jj_gen;
+        jj_la1[194] = jj_gen;
         ;
       }
     }
@@ -4217,13 +4174,57 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[200] = jj_gen;
+        jj_la1[195] = jj_gen;
         break label_136;
       }
       jj_consume_token(S);
     }
   }
 
+/**
+ * @exception ParseException exception during the parse
+ */
+  final public void styleRuleOrDeclarationOrNestedProperties() throws ParseException {
+    try {
+      if (jj_2_12(5)) {
+        styleRule();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case IDENT:
+          declarationOrNestedProperties();
+          break;
+        default:
+          jj_la1[196] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+    } catch (JumpException e) {
+     skipAfterExpression();
+     // reportWarningSkipText(getLocator(), skipAfterExpression());
+
+    } catch (ParseException e) {
+     if (errorHandler != null) {
+         if (e.currentToken != null) {
+             LocatorImpl li = new LocatorImpl(this,
+                                              e.currentToken.next.beginLine,
+                                              e.currentToken.next.beginColumn-1);
+             reportError(li, e);
+         } else {
+             reportError(getLocator(), e);
+         }
+         skipAfterExpression();
+         /*
+         LocatorImpl loc = (LocatorImpl) getLocator();
+         loc.column--;
+         reportWarningSkipText(loc, skipAfterExpression());
+         */
+     } else {
+         skipAfterExpression();
+     }
+    }
+  }
+
 /**
  * @exception ParseException exception during the parse
  */
@@ -4244,7 +4245,7 @@ LexicalUnit exp;
           ;
           break;
         default:
-          jj_la1[201] = jj_gen;
+          jj_la1[197] = jj_gen;
           break label_137;
         }
         jj_consume_token(S);
@@ -4284,9 +4285,10 @@ LexicalUnit exp;
           important = prio();
           break;
         default:
-          jj_la1[202] = jj_gen;
+          jj_la1[198] = jj_gen;
           ;
         }
+         // TODO allowing zero space above makes this ambiguous with pseudo()
          Token next = getToken(1);
          if(next.kind == SEMICOLON || next.kind == RBRACE){
              while(next.kind == SEMICOLON){
@@ -4309,7 +4311,7 @@ LexicalUnit exp;
             ;
             break;
           default:
-            jj_la1[203] = jj_gen;
+            jj_la1[199] = jj_gen;
             break label_138;
           }
           jj_consume_token(S);
@@ -4320,7 +4322,7 @@ LexicalUnit exp;
           declaration();
           break;
         default:
-          jj_la1[204] = jj_gen;
+          jj_la1[200] = jj_gen;
           ;
         }
         label_139:
@@ -4330,7 +4332,7 @@ LexicalUnit exp;
             ;
             break;
           default:
-            jj_la1[205] = jj_gen;
+            jj_la1[201] = jj_gen;
             break label_139;
           }
           jj_consume_token(SEMICOLON);
@@ -4341,7 +4343,7 @@ LexicalUnit exp;
               ;
               break;
             default:
-              jj_la1[206] = jj_gen;
+              jj_la1[202] = jj_gen;
               break label_140;
             }
             jj_consume_token(S);
@@ -4351,7 +4353,7 @@ LexicalUnit exp;
             declaration();
             break;
           default:
-            jj_la1[207] = jj_gen;
+            jj_la1[203] = jj_gen;
             ;
           }
         }
@@ -4363,7 +4365,7 @@ LexicalUnit exp;
             ;
             break;
           default:
-            jj_la1[208] = jj_gen;
+            jj_la1[204] = jj_gen;
             break label_141;
           }
           jj_consume_token(S);
@@ -4371,7 +4373,7 @@ LexicalUnit exp;
          documentHandler.endNestedProperties(name);
         break;
       default:
-        jj_la1[209] = jj_gen;
+        jj_la1[205] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4428,7 +4430,7 @@ LexicalUnit exp;
           ;
           break;
         default:
-          jj_la1[210] = jj_gen;
+          jj_la1[206] = jj_gen;
           break label_142;
         }
         jj_consume_token(S);
@@ -4439,7 +4441,7 @@ LexicalUnit exp;
         important = prio();
         break;
       default:
-        jj_la1[211] = jj_gen;
+        jj_la1[207] = jj_gen;
         ;
       }
          documentHandler.property(name, exp, important);
@@ -4489,7 +4491,7 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[212] = jj_gen;
+        jj_la1[208] = jj_gen;
         break label_143;
       }
       jj_consume_token(S);
@@ -4507,7 +4509,7 @@ LexicalUnit exp;
         ;
         break;
       default:
-        jj_la1[213] = jj_gen;
+        jj_la1[209] = jj_gen;
         break label_144;
       }
       jj_consume_token(S);
@@ -4531,7 +4533,7 @@ LexicalUnit exp;
           ;
           break;
         default:
-          jj_la1[214] = jj_gen;
+          jj_la1[210] = jj_gen;
           break label_145;
         }
         jj_consume_token(S);
@@ -4549,7 +4551,7 @@ LexicalUnit exp;
           ;
           break;
         default:
-          jj_la1[215] = jj_gen;
+          jj_la1[211] = jj_gen;
           break label_146;
         }
         jj_consume_token(S);
@@ -4559,7 +4561,7 @@ LexicalUnit exp;
                                                          prev);}
       break;
     default:
-      jj_la1[216] = jj_gen;
+      jj_la1[212] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4576,7 +4578,7 @@ LexicalUnit exp;
                       res = first;
     label_147:
     while (true) {
-      if (jj_2_16(2)) {
+      if (jj_2_13(2)) {
         ;
       } else {
         break label_147;
@@ -4587,7 +4589,7 @@ LexicalUnit exp;
         res = operator(res);
         break;
       default:
-        jj_la1[217] = jj_gen;
+        jj_la1[213] = jj_gen;
         ;
       }
       res = term(res);
@@ -4610,7 +4612,7 @@ LexicalUnit exp;
         {if (true) return '+';}
       break;
     default:
-      jj_la1[218] = jj_gen;
+      jj_la1[214] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4658,7 +4660,7 @@ LexicalUnit exp;
       result = variableTerm(prev);
       break;
     default:
-      jj_la1[219] = jj_gen;
+      jj_la1[215] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4709,7 +4711,7 @@ LexicalUnitImpl result = null;
         op = unaryOperator();
         break;
       default:
-        jj_la1[220] = jj_gen;
+        jj_la1[216] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4814,7 +4816,7 @@ LexicalUnitImpl result = null;
         result = function(op, prev);
         break;
       default:
-        jj_la1[221] = jj_gen;
+        jj_la1[217] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4841,7 +4843,7 @@ LexicalUnitImpl result = null;
                    s+=".";
           break;
         default:
-          jj_la1[222] = jj_gen;
+          jj_la1[218] = jj_gen;
           ;
         }
         n = jj_consume_token(IDENT);
@@ -4888,13 +4890,13 @@ LexicalUnitImpl result = null;
         result = unicode(prev);
         break;
       default:
-        jj_la1[223] = jj_gen;
+        jj_la1[219] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[224] = jj_gen;
+      jj_la1[220] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4905,7 +4907,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[225] = jj_gen;
+        jj_la1[221] = jj_gen;
         break label_148;
       }
       jj_consume_token(S);
@@ -4929,7 +4931,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[226] = jj_gen;
+        jj_la1[222] = jj_gen;
         break label_149;
       }
       jj_consume_token(S);
@@ -4972,7 +4974,7 @@ LexicalUnitImpl result = null;
       params = expr();
       break;
     default:
-      jj_la1[227] = jj_gen;
+      jj_la1[223] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -5450,7 +5452,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[228] = jj_gen;
+        jj_la1[224] = jj_gen;
         break label_150;
       }
       jj_consume_token(S);
@@ -5479,7 +5481,7 @@ LexicalUnitImpl result = null;
       fontFace();
       break;
     default:
-      jj_la1[229] = jj_gen;
+      jj_la1[225] = jj_gen;
       ret = skipStatement();
                     if ((ret == null) || (ret.length() == 0)) {
                         {if (true) return;}
@@ -5501,7 +5503,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[230] = jj_gen;
+        jj_la1[226] = jj_gen;
         break label_151;
       }
       jj_consume_token(S);
@@ -5517,7 +5519,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[231] = jj_gen;
+        jj_la1[227] = jj_gen;
         break label_152;
       }
       jj_consume_token(S);
@@ -5533,7 +5535,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[232] = jj_gen;
+        jj_la1[228] = jj_gen;
         break label_153;
       }
       jj_consume_token(S);
@@ -5543,7 +5545,7 @@ LexicalUnitImpl result = null;
       declaration();
       break;
     default:
-      jj_la1[233] = jj_gen;
+      jj_la1[229] = jj_gen;
       ;
     }
     label_154:
@@ -5553,7 +5555,7 @@ LexicalUnitImpl result = null;
         ;
         break;
       default:
-        jj_la1[234] = jj_gen;
+        jj_la1[230] = jj_gen;
         break label_154;
       }
       jj_consume_token(SEMICOLON);
@@ -5564,7 +5566,7 @@ LexicalUnitImpl result = null;
           ;
           break;
         default:
-          jj_la1[235] = jj_gen;
+          jj_la1[231] = jj_gen;
           break label_155;
         }
         jj_consume_token(S);
@@ -5574,7 +5576,7 @@ LexicalUnitImpl result = null;
         declaration();
         break;
       default:
-        jj_la1[236] = jj_gen;
+        jj_la1[232] = jj_gen;
         ;
       }
     }
@@ -5590,7 +5592,7 @@ LexicalUnitImpl result = null;
           ;
           break;
         default:
-          jj_la1[237] = jj_gen;
+          jj_la1[233] = jj_gen;
           break label_156;
         }
         jj_consume_token(S);
@@ -5694,44 +5696,24 @@ LexicalUnitImpl result = null;
     finally { jj_save(12, xla); }
   }
 
-  private boolean jj_2_14(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_14(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(13, xla); }
-  }
-
-  private boolean jj_2_15(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_15(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(14, xla); }
-  }
-
-  private boolean jj_2_16(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_16(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(15, xla); }
-  }
-
-  private boolean jj_3R_203() {
-    if (jj_scan_token(IN)) return true;
-    return false;
-  }
-
-  private boolean jj_3_5() {
-    if (jj_scan_token(IDENT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_202() {
-    if (jj_scan_token(PC)) return true;
+  private boolean jj_3R_230() {
+    if (jj_3R_252()) return true;
     return false;
   }
 
-  private boolean jj_3R_201() {
-    if (jj_scan_token(MM)) return true;
+  private boolean jj_3R_286() {
+    if (jj_3R_280()) return true;
+    if (jj_scan_token(COLON)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_311()) {
+    jj_scanpos = xsp;
+    if (jj_3R_312()) return true;
+    }
     return false;
   }
 
@@ -5740,306 +5722,849 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_200() {
-    if (jj_scan_token(CM)) return true;
+  private boolean jj_3R_271() {
+    if (jj_3R_286()) return true;
     return false;
   }
 
-  private boolean jj_3R_182() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_229() {
+    if (jj_3R_251()) return true;
     return false;
   }
 
-  private boolean jj_3R_199() {
-    if (jj_scan_token(PT)) return true;
+  private boolean jj_3_4() {
+    if (jj_3R_159()) return true;
+    if (jj_3R_160()) return true;
     return false;
   }
 
-  private boolean jj_3R_198() {
-    if (jj_scan_token(PERCENTAGE)) return true;
+  private boolean jj_3_6() {
+    if (jj_3R_157()) return true;
     return false;
   }
 
-  private boolean jj_3R_187() {
-    if (jj_3R_223()) return true;
+  private boolean jj_3R_227() {
+    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_226()) return true;
     return false;
   }
 
-  private boolean jj_3R_197() {
-    if (jj_scan_token(NUMBER)) return true;
+  private boolean jj_3R_226() {
+    if (jj_3R_160()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_4()) { jj_scanpos = xsp; break; }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_196() {
-    if (jj_3R_239()) return true;
+  private boolean jj_3_12() {
+    if (jj_3R_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_183() {
+  private boolean jj_3R_256() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_196()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_197()) {
-    jj_scanpos = xsp;
-    if (jj_3R_198()) {
-    jj_scanpos = xsp;
-    if (jj_3R_199()) {
-    jj_scanpos = xsp;
-    if (jj_3R_200()) {
-    jj_scanpos = xsp;
-    if (jj_3R_201()) {
-    jj_scanpos = xsp;
-    if (jj_3R_202()) {
-    jj_scanpos = xsp;
-    if (jj_3R_203()) {
-    jj_scanpos = xsp;
-    if (jj_3R_204()) {
-    jj_scanpos = xsp;
-    if (jj_3R_205()) {
-    jj_scanpos = xsp;
-    if (jj_3R_206()) {
-    jj_scanpos = xsp;
-    if (jj_3R_207()) {
-    jj_scanpos = xsp;
-    if (jj_3R_208()) {
-    jj_scanpos = xsp;
-    if (jj_3R_209()) {
-    jj_scanpos = xsp;
-    if (jj_3R_210()) {
-    jj_scanpos = xsp;
-    if (jj_3R_211()) {
-    jj_scanpos = xsp;
-    if (jj_3R_212()) {
-    jj_scanpos = xsp;
-    if (jj_3R_213()) {
-    jj_scanpos = xsp;
-    if (jj_3R_214()) {
+    if (jj_3_12()) {
     jj_scanpos = xsp;
-    if (jj_3R_215()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
+    if (jj_3R_271()) return true;
     }
     return false;
   }
 
-  private boolean jj_3_4() {
-    if (jj_3R_160()) return true;
-    if (jj_3R_161()) return true;
+  private boolean jj_3R_261() {
+    if (jj_3R_270()) return true;
     return false;
   }
 
   private boolean jj_3R_181() {
-    if (jj_3R_195()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_164() {
+    if (jj_3R_226()) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_183()) {
-    jj_scanpos = xsp;
-    if (jj_3R_184()) return true;
-    }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+      if (jj_3R_227()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3_8() {
+  private boolean jj_3_2() {
     if (jj_3R_157()) return true;
     return false;
   }
 
-  private boolean jj_3R_193() {
-    if (jj_scan_token(COLON)) return true;
-    return false;
-  }
-
-  private boolean jj_3_7() {
-    if (jj_3R_162()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_162() {
-    if (jj_3R_180()) return true;
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_245() {
+    if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_181()) {
-    jj_scanpos = xsp;
-    if (jj_3R_182()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_242() {
-    if (jj_scan_token(HASH)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_223() {
-    if (jj_3R_245()) return true;
+    if (jj_3R_261()) jj_scanpos = xsp;
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_167() {
-    if (jj_scan_token(VARIABLE)) return true;
+  private boolean jj_3R_254() {
+    if (jj_scan_token(EACH_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(COLON)) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    if (jj_scan_token(CONTAINS)) return true;
+    if (jj_scan_token(VARIABLE)) return true;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
+    if (jj_scan_token(EACH_IN)) return true;
     return false;
   }
 
-  private boolean jj_3_15() {
-    if (jj_3R_167()) return true;
+  private boolean jj_3R_225() {
+    if (jj_3R_249()) return true;
     return false;
   }
 
-  private boolean jj_3R_243() {
-    if (jj_scan_token(URL)) return true;
+  private boolean jj_3R_224() {
+    if (jj_3R_248()) return true;
     return false;
   }
 
-  private boolean jj_3R_186() {
-    if (jj_3R_164()) return true;
+  private boolean jj_3R_223() {
+    if (jj_3R_247()) return true;
     return false;
   }
 
-  private boolean jj_3R_169() {
+  private boolean jj_3R_182() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_186()) {
+    if (jj_3R_228()) {
+    jj_scanpos = xsp;
+    if (jj_3_2()) {
+    jj_scanpos = xsp;
+    if (jj_3R_229()) {
+    jj_scanpos = xsp;
+    if (jj_3R_230()) {
+    jj_scanpos = xsp;
+    if (jj_3R_231()) {
+    jj_scanpos = xsp;
+    if (jj_3R_232()) {
+    jj_scanpos = xsp;
+    if (jj_3R_233()) {
     jj_scanpos = xsp;
-    if (jj_3R_187()) return true;
+    if (jj_3_3()) {
+    jj_scanpos = xsp;
+    if (jj_3R_234()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
     }
     return false;
   }
 
-  private boolean jj_3_6() {
-    if (jj_3R_162()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_168() {
-    if (jj_3R_185()) return true;
-    return false;
-  }
-
-  private boolean jj_3_2() {
-    if (jj_3R_157()) return true;
+  private boolean jj_3R_228() {
+    if (jj_3R_250()) return true;
     return false;
   }
 
-  private boolean jj_3R_165() {
-    if (jj_scan_token(VARIABLE)) return true;
+  private boolean jj_3R_166() {
+    if (jj_3R_181()) return true;
+    if (jj_scan_token(LBRACE)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(COLON)) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+      if (jj_3R_182()) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(REMOVE)) return true;
+    if (jj_scan_token(RBRACE)) return true;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
-    return false;
-  }
-
-  private boolean jj_3R_248() {
-    if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_247() {
-    if (jj_scan_token(MINUS)) return true;
+  private boolean jj_3R_269() {
+    if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_239() {
+  private boolean jj_3R_253() {
+    if (jj_scan_token(EXTEND_SYM)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_247()) {
-    jj_scanpos = xsp;
-    if (jj_3R_248()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_3R_181()) return true;
+    if (jj_3R_269()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_269()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3_16() {
+  private boolean jj_3R_279() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_168()) jj_scanpos = xsp;
-    if (jj_3R_169()) return true;
-    return false;
-  }
-
-  private boolean jj_3_14() {
-    if (jj_3R_166()) return true;
-    return false;
+    if (jj_scan_token(75)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(71)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(72)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(33)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(34)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(20)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(21)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(27)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(30)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(35)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(19)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(24)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(26)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(36)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(37)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(1)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(38)) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_282() {
+    if (jj_scan_token(FUNCTION)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_280() {
+    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_257() {
+    if (jj_scan_token(VARIABLE)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_246() {
+    if (jj_scan_token(DOT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_222() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_246()) jj_scanpos = xsp;
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_221() {
+    if (jj_scan_token(STRING)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_220() {
+    if (jj_3R_245()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_180() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_221()) {
+    jj_scanpos = xsp;
+    if (jj_3R_222()) {
+    jj_scanpos = xsp;
+    if (jj_3R_223()) {
+    jj_scanpos = xsp;
+    if (jj_3R_224()) {
+    jj_scanpos = xsp;
+    if (jj_3R_225()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_194() {
+    if (jj_scan_token(S)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_193() {
+    if (jj_scan_token(DOT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_192() {
+    if (jj_scan_token(EQ)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_191() {
+    if (jj_scan_token(RPARAN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_190() {
+    if (jj_scan_token(FUNCTION)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_262() {
+    if (jj_3R_279()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_189() {
+    if (jj_scan_token(COLON)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_188() {
+    if (jj_scan_token(INTERPOLATION)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_187() {
+    if (jj_scan_token(NUMBER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_250() {
+    if (jj_scan_token(IF_SYM)) return true;
+    Token xsp;
+    if (jj_3R_262()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_262()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(LBRACE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_186() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_169() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_186()) {
+    jj_scanpos = xsp;
+    if (jj_3R_187()) {
+    jj_scanpos = xsp;
+    if (jj_3R_188()) {
+    jj_scanpos = xsp;
+    if (jj_3R_189()) {
+    jj_scanpos = xsp;
+    if (jj_3R_190()) {
+    jj_scanpos = xsp;
+    if (jj_3R_191()) {
+    jj_scanpos = xsp;
+    if (jj_3R_192()) {
+    jj_scanpos = xsp;
+    if (jj_3R_193()) {
+    jj_scanpos = xsp;
+    if (jj_3R_194()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_219() {
+    if (jj_scan_token(DIMEN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_218() {
+    if (jj_scan_token(KHZ)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_217() {
+    if (jj_scan_token(HZ)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_158() {
+    if (jj_scan_token(MICROSOFT_RULE)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(COLON)) return true;
+    if (jj_3R_169()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_169()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_240() {
+    if (jj_scan_token(SIBLING)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_216() {
+    if (jj_scan_token(MS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_239() {
+    if (jj_scan_token(PRECEDES)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_215() {
+    if (jj_scan_token(SECOND)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_238() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_195() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_238()) {
+    jj_scanpos = xsp;
+    if (jj_3R_239()) {
+    jj_scanpos = xsp;
+    if (jj_3R_240()) return true;
+    }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_214() {
+    if (jj_scan_token(GRAD)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_213() {
+    if (jj_scan_token(RAD)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_172() {
+    if (jj_scan_token(SIBLING)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_171() {
+    if (jj_scan_token(PRECEDES)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_212() {
+    if (jj_scan_token(DEG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_173() {
+    if (jj_scan_token(S)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_195()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_159() {
+    Token xsp;
+    xsp = jj_scanpos;
+    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()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_170() {
+    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_211() {
+    if (jj_scan_token(EXS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_210() {
+    if (jj_scan_token(EMS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_209() {
+    if (jj_scan_token(PX)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_255() {
+    if (jj_3R_257()) return true;
+    if (jj_scan_token(COLON)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_3R_270()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_208() {
+    if (jj_scan_token(IN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_207() {
+    if (jj_scan_token(PC)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_206() {
+    if (jj_scan_token(MM)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_205() {
+    if (jj_scan_token(CM)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_204() {
+    if (jj_scan_token(PT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_203() {
+    if (jj_scan_token(PERCENTAGE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_185() {
+    if (jj_3R_237()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_202() {
+    if (jj_scan_token(NUMBER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_201() {
+    if (jj_3R_244()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_197() {
+    if (jj_scan_token(HASH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_179() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_201()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_202()) {
+    jj_scanpos = xsp;
+    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()) {
+    jj_scanpos = xsp;
+    if (jj_3R_207()) {
+    jj_scanpos = xsp;
+    if (jj_3R_208()) {
+    jj_scanpos = xsp;
+    if (jj_3R_209()) {
+    jj_scanpos = xsp;
+    if (jj_3R_210()) {
+    jj_scanpos = xsp;
+    if (jj_3R_211()) {
+    jj_scanpos = xsp;
+    if (jj_3R_212()) {
+    jj_scanpos = xsp;
+    if (jj_3R_213()) {
+    jj_scanpos = xsp;
+    if (jj_3R_214()) {
+    jj_scanpos = xsp;
+    if (jj_3R_215()) {
+    jj_scanpos = xsp;
+    if (jj_3R_216()) {
+    jj_scanpos = xsp;
+    if (jj_3R_217()) {
+    jj_scanpos = xsp;
+    if (jj_3R_218()) {
+    jj_scanpos = xsp;
+    if (jj_3R_219()) {
+    jj_scanpos = xsp;
+    if (jj_3R_220()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_162() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_179()) {
+    jj_scanpos = xsp;
+    if (jj_3R_180()) return true;
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_316() {
+    if (jj_3R_160()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_300() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_315() {
+    if (jj_scan_token(NUMBER)) return true;
+    return false;
+  }
+
+  private boolean jj_3_5() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_247() {
+    if (jj_scan_token(HASH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_301() {
+    if (jj_scan_token(FUNCTION)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3_5()) {
+    jj_scanpos = xsp;
+    if (jj_3R_315()) {
+    jj_scanpos = xsp;
+    if (jj_3R_316()) return true;
+    }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(RPARAN)) return true;
+    return false;
   }
 
-  private boolean jj_3R_195() {
-    if (jj_3R_169()) return true;
+  private boolean jj_3R_237() {
+    if (jj_3R_257()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_184() {
+    if (jj_3R_162()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_168() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_16()) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_184()) {
+    jj_scanpos = xsp;
+    if (jj_3R_185()) return true;
     }
     return false;
   }
 
+  private boolean jj_3R_248() {
+    if (jj_scan_token(URL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_167() {
+    if (jj_3R_183()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_299() {
+    if (jj_scan_token(COLON)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_260() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
+
   private boolean jj_3R_244() {
-    if (jj_scan_token(UNICODERANGE)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_259()) {
+    jj_scanpos = xsp;
+    if (jj_3R_260()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_249() {
-    if (jj_3R_195()) return true;
+  private boolean jj_3R_259() {
+    if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_166() {
+  private boolean jj_3R_199() {
+    if (jj_scan_token(COLON)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_299()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_300()) {
+    jj_scanpos = xsp;
+    if (jj_3R_301()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3_13() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_167()) jj_scanpos = xsp;
+    if (jj_3R_168()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_165() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6051,7 +6576,7 @@ LexicalUnitImpl result = null;
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(APPEND)) return true;
+    if (jj_scan_token(CONTAINS)) return true;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -6060,40 +6585,52 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_251() {
-    if (jj_scan_token(INTERPOLATION)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_222() {
-    if (jj_scan_token(COMMA)) return true;
+  private boolean jj_3R_270() {
+    if (jj_3R_168()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+      if (jj_3_13()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_240() {
-    if (jj_scan_token(FUNCTION)) return true;
+  private boolean jj_3_11() {
+    if (jj_3R_165()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_249() {
+    if (jj_scan_token(UNICODERANGE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_236() {
+    if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    xsp = jj_scanpos;
-    if (jj_3R_249()) jj_scanpos = xsp;
-    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3_11() {
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_265() {
+    if (jj_3R_281()) return true;
     return false;
   }
 
-  private boolean jj_3R_221() {
+  private boolean jj_3R_183() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_235()) {
+    jj_scanpos = xsp;
+    if (jj_3R_236()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_235() {
     if (jj_scan_token(DIV)) return true;
     Token xsp;
     while (true) {
@@ -6103,317 +6640,389 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_185() {
+  private boolean jj_3R_163() {
+    if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_221()) {
-    jj_scanpos = xsp;
-    if (jj_3R_222()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(COLON)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(REMOVE)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
     return false;
   }
 
-  private boolean jj_3R_194() {
-    if (jj_scan_token(LBRACKET)) return true;
+  private boolean jj_3_10() {
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_159() {
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_324() {
+    if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_180() {
+  private boolean jj_3R_267() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_322() {
+    if (jj_scan_token(STARMATCH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_323() {
     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_220() {
-    if (jj_3R_244()) return true;
+  private boolean jj_3R_321() {
+    if (jj_scan_token(DOLLARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_245() {
+  private boolean jj_3R_320() {
+    if (jj_scan_token(CARETMATCH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_319() {
+    if (jj_scan_token(DASHMATCH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_318() {
+    if (jj_scan_token(INCLUDES)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_164() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    if (jj_scan_token(COLON)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(APPEND)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
     return false;
   }
 
-  private boolean jj_3R_219() {
-    if (jj_3R_243()) return true;
+  private boolean jj_3R_273() {
+    if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3_13() {
-    if (jj_3R_165()) return true;
+  private boolean jj_3R_317() {
+    if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_157() {
+  private boolean jj_3R_306() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_13()) {
+    if (jj_3R_317()) {
+    jj_scanpos = xsp;
+    if (jj_3R_318()) {
+    jj_scanpos = xsp;
+    if (jj_3R_319()) {
     jj_scanpos = xsp;
-    if (jj_3_14()) {
+    if (jj_3R_320()) {
+    jj_scanpos = xsp;
+    if (jj_3R_321()) {
+    jj_scanpos = xsp;
+    if (jj_3R_322()) return true;
+    }
+    }
+    }
+    }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_323()) {
     jj_scanpos = xsp;
-    if (jj_3_15()) return true;
+    if (jj_3R_324()) return true;
     }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_218() {
-    if (jj_3R_242()) return true;
+  private boolean jj_3R_285() {
+    if (jj_scan_token(COMMA)) return true;
     return false;
   }
 
-  private boolean jj_3R_238() {
-    if (jj_scan_token(PARENT)) return true;
+  private boolean jj_3R_200() {
+    if (jj_scan_token(LBRACKET)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(IDENT)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_306()) jj_scanpos = xsp;
+    if (jj_scan_token(RBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_237() {
-    if (jj_scan_token(ANY)) return true;
+  private boolean jj_3R_234() {
+    if (jj_3R_256()) return true;
     return false;
   }
 
-  private boolean jj_3R_250() {
+  private boolean jj_3R_284() {
     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_246() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_250()) {
-    jj_scanpos = xsp;
-    if (jj_3R_251()) return true;
-    }
+  private boolean jj_3R_314() {
+    if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_236() {
-    Token xsp;
-    if (jj_3R_246()) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_246()) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_264() {
+    if (jj_3R_257()) return true;
     return false;
   }
 
-  private boolean jj_3R_190() {
+  private boolean jj_3R_157() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_236()) {
+    if (jj_3_9()) {
     jj_scanpos = xsp;
-    if (jj_3R_237()) {
+    if (jj_3_10()) {
     jj_scanpos = xsp;
-    if (jj_3R_238()) return true;
+    if (jj_3_11()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_232() {
-    if (jj_scan_token(S)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_231() {
-    if (jj_scan_token(DOT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_158() {
-    if (jj_3R_170()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_230() {
-    if (jj_scan_token(EQ)) return true;
+  private boolean jj_3_9() {
+    if (jj_3R_163()) return true;
     return false;
   }
 
-  private boolean jj_3R_229() {
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_243() {
+    if (jj_scan_token(PARENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_228() {
-    if (jj_scan_token(FUNCTION)) return true;
+  private boolean jj_3R_242() {
+    if (jj_scan_token(ANY)) return true;
     return false;
   }
 
-  private boolean jj_3R_227() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_268() {
+    if (jj_3R_284()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_285()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_226() {
+  private boolean jj_3R_281() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_225() {
-    if (jj_scan_token(NUMBER)) return true;
+  private boolean jj_3R_266() {
+    if (jj_3R_282()) return true;
+    if (jj_3R_283()) return true;
     return false;
   }
 
-  private boolean jj_3R_224() {
+  private boolean jj_3R_258() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_272()) {
+    jj_scanpos = xsp;
+    if (jj_3R_273()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_272() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_188() {
+  private boolean jj_3R_196() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_224()) {
-    jj_scanpos = xsp;
-    if (jj_3R_225()) {
-    jj_scanpos = xsp;
-    if (jj_3R_226()) {
-    jj_scanpos = xsp;
-    if (jj_3R_227()) {
-    jj_scanpos = xsp;
-    if (jj_3R_228()) {
-    jj_scanpos = xsp;
-    if (jj_3R_229()) {
-    jj_scanpos = xsp;
-    if (jj_3R_230()) {
+    if (jj_3R_241()) {
     jj_scanpos = xsp;
-    if (jj_3R_231()) {
+    if (jj_3R_242()) {
     jj_scanpos = xsp;
-    if (jj_3R_232()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
+    if (jj_3R_243()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3_3() {
+  private boolean jj_3R_241() {
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_158()) {
-    jj_scanpos = xsp;
-    if (jj_3R_159()) return true;
+    if (jj_3R_258()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_258()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_192() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3R_263() {
+    if (jj_3R_280()) return true;
     return false;
   }
 
-  private boolean jj_3R_170() {
-    if (jj_scan_token(MICROSOFT_RULE)) return true;
+  private boolean jj_3R_251() {
+    if (jj_scan_token(INCLUDE_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(COLON)) return true;
-    if (jj_3R_188()) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_263()) {
+    jj_scanpos = xsp;
+    if (jj_3R_264()) {
+    jj_scanpos = xsp;
+    if (jj_3R_265()) {
+    jj_scanpos = xsp;
+    if (jj_3R_266()) return true;
+    }
+    }
+    }
+    if (jj_3R_267()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_188()) { jj_scanpos = xsp; break; }
+      if (jj_3R_267()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_163() {
-    if (jj_scan_token(COMMA)) return true;
+  private boolean jj_3R_310() {
+    if (jj_3R_199()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_313() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_294() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_313()) {
+    jj_scanpos = xsp;
+    if (jj_3R_314()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_241() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3R_308() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_235() {
-    if (jj_scan_token(SIBLING)) return true;
+  private boolean jj_3R_252() {
+    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_268()) return true;
+    if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_234() {
-    if (jj_scan_token(PRECEDES)) return true;
+  private boolean jj_3_3() {
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_217() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_241()) jj_scanpos = xsp;
-    if (jj_scan_token(IDENT)) return true;
+  private boolean jj_3R_305() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_233() {
-    if (jj_scan_token(PLUS)) return true;
+  private boolean jj_3R_303() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3_9() {
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_293() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_189() {
+  private boolean jj_3R_198() {
+    if (jj_scan_token(DOT)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_233()) {
-    jj_scanpos = xsp;
-    if (jj_3R_234()) {
-    jj_scanpos = xsp;
-    if (jj_3R_235()) return true;
-    }
+    if (jj_3R_294()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_294()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_216() {
-    if (jj_scan_token(STRING)) return true;
+  private boolean jj_3R_298() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_215() {
-    if (jj_3R_240()) return true;
+  private boolean jj_3R_296() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_173() {
-    if (jj_scan_token(SIBLING)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_283() {
+    if (jj_3R_168()) return true;
     return false;
   }
 
-  private boolean jj_3R_172() {
-    if (jj_scan_token(PRECEDES)) return true;
+  private boolean jj_3R_161() {
+    if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -6422,149 +7031,233 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_184() {
+  private boolean jj_3R_233() {
+    if (jj_3R_255()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_309() {
+    if (jj_3R_200()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_307() {
+    if (jj_3R_197()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_278() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_216()) {
-    jj_scanpos = xsp;
-    if (jj_3R_217()) {
+    if (jj_3R_307()) {
     jj_scanpos = xsp;
-    if (jj_3R_218()) {
+    if (jj_3R_308()) {
     jj_scanpos = xsp;
-    if (jj_3R_219()) {
+    if (jj_3R_309()) {
     jj_scanpos = xsp;
-    if (jj_3R_220()) return true;
-    }
+    if (jj_3R_310()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3_12() {
+  private boolean jj_3_8() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_163()) jj_scanpos = xsp;
-    if (jj_3R_164()) return true;
+    if (jj_3R_161()) jj_scanpos = xsp;
+    if (jj_3R_162()) return true;
     return false;
   }
 
-  private boolean jj_3R_174() {
-    if (jj_scan_token(S)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_189()) jj_scanpos = xsp;
+  private boolean jj_3R_302() {
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_171() {
-    if (jj_scan_token(PLUS)) return true;
+  private boolean jj_3R_277() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    xsp = jj_scanpos;
+    if (jj_3R_302()) {
+    jj_scanpos = xsp;
+    if (jj_3R_303()) {
+    jj_scanpos = xsp;
+    if (jj_3R_304()) {
+    jj_scanpos = xsp;
+    if (jj_3R_305()) return true;
+    }
+    }
     }
     return false;
   }
 
-  private boolean jj_3R_160() {
+  private boolean jj_3R_290() {
+    if (jj_3R_199()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_304() {
+    if (jj_3R_200()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_295() {
+    if (jj_3R_197()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_276() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_171()) {
+    if (jj_3R_295()) {
     jj_scanpos = xsp;
-    if (jj_3R_172()) {
+    if (jj_3R_296()) {
     jj_scanpos = xsp;
-    if (jj_3R_173()) {
+    if (jj_3R_297()) {
     jj_scanpos = xsp;
-    if (jj_3R_174()) return true;
+    if (jj_3R_298()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_214() {
-    if (jj_scan_token(DIMEN)) return true;
+  private boolean jj_3R_292() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_213() {
-    if (jj_scan_token(KHZ)) return true;
+  private boolean jj_3R_297() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
-  private boolean jj_3R_212() {
-    if (jj_scan_token(HZ)) return true;
+  private boolean jj_3R_291() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_211() {
-    if (jj_scan_token(MS)) return true;
+  private boolean jj_3R_288() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_179() {
-    if (jj_3R_194()) return true;
+  private boolean jj_3R_275() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_291()) {
+    jj_scanpos = xsp;
+    if (jj_3R_292()) {
+    jj_scanpos = xsp;
+    if (jj_3R_293()) return true;
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_210() {
-    if (jj_scan_token(SECOND)) return true;
+  private boolean jj_3R_232() {
+    if (jj_3R_254()) return true;
     return false;
   }
 
   private boolean jj_3R_178() {
-    if (jj_3R_193()) return true;
+    if (jj_3R_200()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_278()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_312() {
+    if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
   private boolean jj_3R_177() {
-    if (jj_3R_192()) return true;
+    if (jj_3R_199()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_277()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_209() {
-    if (jj_scan_token(GRAD)) return true;
+  private boolean jj_3R_289() {
+    if (jj_3R_200()) return true;
     return false;
   }
 
   private boolean jj_3R_176() {
-    if (jj_3R_191()) return true;
+    if (jj_3R_198()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_276()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3_10() {
-    if (jj_3R_157()) return true;
+  private boolean jj_3R_287() {
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_208() {
-    if (jj_scan_token(RAD)) return true;
+  private boolean jj_3R_175() {
+    if (jj_3R_197()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_275()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_207() {
-    if (jj_scan_token(DEG)) return true;
+  private boolean jj_3R_274() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_287()) {
+    jj_scanpos = xsp;
+    if (jj_3R_288()) {
+    jj_scanpos = xsp;
+    if (jj_3R_289()) {
+    jj_scanpos = xsp;
+    if (jj_3R_290()) return true;
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_175() {
-    if (jj_3R_190()) return true;
+  private boolean jj_3_7() {
+    if (jj_3R_157()) return true;
     return false;
   }
 
-  private boolean jj_3R_161() {
+  private boolean jj_3R_174() {
+    if (jj_3R_196()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_274()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_160() {
     Token xsp;
     xsp = jj_scanpos;
+    if (jj_3R_174()) {
+    jj_scanpos = xsp;
     if (jj_3R_175()) {
     jj_scanpos = xsp;
     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;
+    if (jj_3R_178()) return true;
     }
     }
     }
@@ -6572,23 +7265,13 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_191() {
-    if (jj_scan_token(HASH)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_206() {
-    if (jj_scan_token(EXS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_205() {
-    if (jj_scan_token(EMS)) return true;
+  private boolean jj_3R_231() {
+    if (jj_3R_253()) return true;
     return false;
   }
 
-  private boolean jj_3R_204() {
-    if (jj_scan_token(PX)) return true;
+  private boolean jj_3R_311() {
+    if (jj_3R_270()) return true;
     return false;
   }
 
@@ -6602,7 +7285,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[238];
+  final private int[] jj_la1 = new int[234];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -6614,18 +7297,18 @@ LexicalUnitImpl result = null;
       jj_la1_init_3();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x80002,0x80002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0xd0000000,0x2,0x0,0x2,0x0,0x2,0x800000,0x4d380002,0x2,0xd0000000,0x0,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
+      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x80002,0x80002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0xd0000000,0x2,0x0,0x2,0x0,0x2,0x800000,0x4d380002,0x2,0xd0000000,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x381,0x381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x50400181,0x0,0x40000000,0x10400000,0x181,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x400181,0x400000,0x181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x400181,0x400000,0x181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x400181,0x400000,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10400181,0x400000,0x10000000,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x381,0x381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x50400181,0x40000000,0x10400000,0x181,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x400181,0x400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x400181,0x400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x400181,0x400000,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10400181,0x400000,0x10000181,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x800,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x88,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x20000180,0x0,0x80,0x0,0x20,0x0,0x0,0x980,0x0,0xa0000881,0x80000801,0x20000080,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x80000801,0x20000080,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x80000000,0x801,0x20000080,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x800,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x20000180,0x0,0x80,0x0,0x20,0x0,0x0,0x980,0x0,0xa0000881,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x80000000,0x20000881,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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,0x40000,0x0,0x0,0x0,0x0,0x0,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,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[16];
+  final private JJCalls[] jj_2_rtns = new JJCalls[13];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -6635,7 +7318,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 238; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -6645,7 +7328,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 238; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -6655,7 +7338,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 238; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -6665,7 +7348,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 238; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 234; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -6782,7 +7465,7 @@ LexicalUnitImpl result = null;
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 238; i++) {
+    for (int i = 0; i < 234; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -6827,7 +7510,7 @@ LexicalUnitImpl result = null;
 
   private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 16; i++) {
+    for (int i = 0; i < 13; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -6847,9 +7530,6 @@ LexicalUnitImpl result = null;
             case 10: jj_3_11(); break;
             case 11: jj_3_12(); break;
             case 12: jj_3_13(); break;
-            case 13: jj_3_14(); break;
-            case 14: jj_3_15(); break;
-            case 15: jj_3_16(); break;
           }
         }
         p = p.next;
index b4754b092ed1b58d8418a78fb71bde1ecfd442b4..d7a74e507e77783d86ded134b2f99a7d9583a009 100644 (file)
@@ -1060,7 +1060,7 @@ void styleRule() :
         start = true;
         documentHandler.startSelector(l);
      }
-     ( ifDirective() | LOOKAHEAD(5)listModifyDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) (microsoftExtension()|declarationOrNestedProperties()) | styleRule())*
+     ( ifDirective() | LOOKAHEAD(5)listModifyDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) microsoftExtension()| styleRuleOrDeclarationOrNestedProperties())*
      <RBRACE> (<S>)*
  } catch (ThrowedParseException e) {
      if (errorHandler != null) {
@@ -1404,7 +1404,7 @@ void ifDirective() :
   { documentHandler.startIfElseDirective();
     documentHandler.ifDirective(evaluator);
    }
-  ( includeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*          
+  ( includeDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*          
   < RBRACE >(< S >)*
   (elseDirective())*
   { documentHandler.endIfElseDirective(); }
@@ -1422,7 +1422,7 @@ void elseDirective() :
   { if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
     else{ documentHandler.elseDirective(); }  
   }
-  ( includeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*  
+  ( includeDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*  
   < RBRACE >(< S >)*
 }
 
@@ -1470,7 +1470,7 @@ void eachDirective() :
   {documentHandler.startEachDirective(var.image, listVariable);}
   )
   < LBRACE >(< S >)*
-  ( includeDirective() | LOOKAHEAD(5)listModifyDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*      
+  ( includeDirective() | LOOKAHEAD(5)listModifyDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*      
   < RBRACE >(< S >)*
   { documentHandler.endEachDirective();}
 }
@@ -1502,7 +1502,7 @@ void mixinDirective() :
     |(name = functionName() 
       args = arglist()) <RPARAN> (<S>)*) <LBRACE> (<S>)*
     {documentHandler.startMixinDirective(name, args);}
-    ( includeDirective() | media() | LOOKAHEAD(5)listModifyDirective()|eachDirective() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*
+    ( includeDirective() | media() | LOOKAHEAD(5)listModifyDirective()|eachDirective() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*
     <RBRACE>(<S>)*
     {documentHandler.endMixinDirective(name, args);}
 }
@@ -1810,6 +1810,40 @@ LexicalUnit exp;}
     }
     (<S>)*
 }
+/**
+ * @exception ParseException exception during the parse
+ */
+void styleRuleOrDeclarationOrNestedProperties() :
+{
+}
+{
+  try {
+    // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property 
+    (LOOKAHEAD(5) styleRule() | declarationOrNestedProperties())
+  } catch (JumpException e) {
+     skipAfterExpression();
+     // reportWarningSkipText(getLocator(), skipAfterExpression());
+  } catch (ParseException e) {
+     if (errorHandler != null) {
+         if (e.currentToken != null) {
+             LocatorImpl li = new LocatorImpl(this,
+                                              e.currentToken.next.beginLine,
+                                              e.currentToken.next.beginColumn-1);
+             reportError(li, e);
+         } else {
+             reportError(getLocator(), e);
+         }
+         skipAfterExpression();
+         /*
+         LocatorImpl loc = (LocatorImpl) getLocator();
+         loc.column--;
+         reportWarningSkipText(loc, skipAfterExpression());
+         */
+     } else {
+         skipAfterExpression();
+     }
+  }
+}
 /**
  * @exception ParseException exception during the parse
  */
diff --git a/theme-compiler/tests/resources/automatic/css/first_selector_with_pseudo.css b/theme-compiler/tests/resources/automatic/css/first_selector_with_pseudo.css
new file mode 100644 (file)
index 0000000..bfe9832
--- /dev/null
@@ -0,0 +1,9 @@
+.root {
+  input: focus;
+  input-focus: c;
+  a: b;
+}
+
+.root input:focus {
+  background-color: #d5e6fd;
+}
diff --git a/theme-compiler/tests/resources/automatic/scss/first_selector_with_pseudo.scss b/theme-compiler/tests/resources/automatic/scss/first_selector_with_pseudo.scss
new file mode 100644 (file)
index 0000000..cd318ca
--- /dev/null
@@ -0,0 +1,16 @@
+.root {
+  // selector not starting with a dot etc. inside a block or a mixin
+  
+  // pseudo
+  input:focus {
+    background-color: #d5e6fd;
+  }
+  // simple property
+  input: focus;
+  // nested properties
+  input: {
+    focus: c;
+  }
+  // simple property
+  a:b;
+}