]> source.dussan.org Git - vaadin-framework.git/commitdiff
supports contains in @if, related to Ticket #9975 93/593/2
authorHaijian Wang <haijian@vaadin.com>
Tue, 8 Jan 2013 13:47:31 +0000 (15:47 +0200)
committerHaijian Wang <haijian@vaadin.com>
Tue, 8 Jan 2013 13:47:31 +0000 (15:47 +0200)
Change-Id: Ib128801a06a03ebd4460e87a6963a01483f58cec

theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
theme-compiler/src/com/vaadin/sass/internal/tree/ListContainsNode.java
theme-compiler/tests/resources/automatic/css/contains-in-if.css [new file with mode: 0644]
theme-compiler/tests/resources/automatic/scss/contains-in-if.scss [new file with mode: 0644]

index 4ae614bd17f865fca112ee5c50fd0a55b003d934..ee0af7705c62c01b0447a8ba6e850a7cf6e8367a 100644 (file)
@@ -6,6 +6,7 @@ import java.net.*;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
 
 import org.w3c.css.sac.ConditionFactory;
 import org.w3c.css.sac.Condition;
@@ -1571,7 +1572,7 @@ char connector = ' ';
       }
       jj_consume_token(S);
     }
-      {if (true) return s;}
+        {if (true) return s;}
     throw new Error("Missing return statement in function");
   }
 
@@ -1659,6 +1660,7 @@ char connector = ' ';
         case VARIABLE:
         case HASH:
         case MEDIA_SYM:
+        case CONTAINS:
           ;
           break;
         default:
@@ -2493,12 +2495,13 @@ boolean isPseudoElement = false;
 
   final public void ifDirective() throws ParseException {
   Token n = null;
+  String s = null;
   String evaluator = "";
     jj_consume_token(IF_SYM);
     label_65:
     while (true) {
-      n = booleanExpressionToken();
-                                   evaluator += n.image;
+      s = booleanExpressionToken();
+                                   evaluator += s;
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
       case EQ:
@@ -2517,6 +2520,7 @@ boolean isPseudoElement = false;
       case IDENT:
       case NUMBER:
       case VARIABLE:
+      case CONTAINS:
         ;
         break;
       default:
@@ -2556,6 +2560,7 @@ boolean isPseudoElement = false;
       case VARIABLE:
       case HASH:
       case MEDIA_SYM:
+      case CONTAINS:
         ;
         break;
       default:
@@ -2595,6 +2600,7 @@ boolean isPseudoElement = false;
   final public void elseDirective() throws ParseException {
   String evaluator = "";
   Token n = null;
+  String s = null;
     jj_consume_token(ELSE_SYM);
     label_70:
     while (true) {
@@ -2613,8 +2619,8 @@ boolean isPseudoElement = false;
       jj_consume_token(IF);
       label_71:
       while (true) {
-        n = booleanExpressionToken();
-                                            evaluator += n.image;
+        s = booleanExpressionToken();
+                                            evaluator += s;
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
         case EQ:
@@ -2633,6 +2639,7 @@ boolean isPseudoElement = false;
         case IDENT:
         case NUMBER:
         case VARIABLE:
+        case CONTAINS:
           ;
           break;
         default:
@@ -2677,6 +2684,7 @@ boolean isPseudoElement = false;
       case VARIABLE:
       case HASH:
       case MEDIA_SYM:
+      case CONTAINS:
         ;
         break;
       default:
@@ -2700,66 +2708,72 @@ boolean isPseudoElement = false;
     }
   }
 
-  final public Token booleanExpressionToken() throws ParseException {
+  final public String booleanExpressionToken() throws ParseException {
   Token n = null;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case VARIABLE:
-      n = jj_consume_token(VARIABLE);
-      break;
-    case IDENT:
-      n = jj_consume_token(IDENT);
-      break;
-    case NUMBER:
-      n = jj_consume_token(NUMBER);
-      break;
-    case LPARAN:
-      n = jj_consume_token(LPARAN);
-      break;
-    case RPARAN:
-      n = jj_consume_token(RPARAN);
-      break;
-    case PLUS:
-      n = jj_consume_token(PLUS);
-      break;
-    case MINUS:
-      n = jj_consume_token(MINUS);
-      break;
-    case DIV:
-      n = jj_consume_token(DIV);
-      break;
-    case ANY:
-      n = jj_consume_token(ANY);
-      break;
-    case COMPARE:
-      n = jj_consume_token(COMPARE);
-      break;
-    case EQ:
-      n = jj_consume_token(EQ);
-      break;
-    case PRECEDES:
-      n = jj_consume_token(PRECEDES);
-      break;
-    case SUCCEEDS:
-      n = jj_consume_token(SUCCEEDS);
-      break;
-    case OR:
-      n = jj_consume_token(OR);
-      break;
-    case AND:
-      n = jj_consume_token(AND);
-      break;
-    case S:
-      n = jj_consume_token(S);
-      break;
-    case NOT_EQ:
-      n = jj_consume_token(NOT_EQ);
-      break;
-    default:
-      jj_la1[110] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
+  String s = null;
+    if (jj_2_5(2)) {
+      s = containsDirective();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case VARIABLE:
+        n = jj_consume_token(VARIABLE);
+        break;
+      case IDENT:
+        n = jj_consume_token(IDENT);
+        break;
+      case NUMBER:
+        n = jj_consume_token(NUMBER);
+        break;
+      case LPARAN:
+        n = jj_consume_token(LPARAN);
+        break;
+      case RPARAN:
+        n = jj_consume_token(RPARAN);
+        break;
+      case PLUS:
+        n = jj_consume_token(PLUS);
+        break;
+      case MINUS:
+        n = jj_consume_token(MINUS);
+        break;
+      case DIV:
+        n = jj_consume_token(DIV);
+        break;
+      case ANY:
+        n = jj_consume_token(ANY);
+        break;
+      case COMPARE:
+        n = jj_consume_token(COMPARE);
+        break;
+      case EQ:
+        n = jj_consume_token(EQ);
+        break;
+      case PRECEDES:
+        n = jj_consume_token(PRECEDES);
+        break;
+      case SUCCEEDS:
+        n = jj_consume_token(SUCCEEDS);
+        break;
+      case OR:
+        n = jj_consume_token(OR);
+        break;
+      case AND:
+        n = jj_consume_token(AND);
+        break;
+      case S:
+        n = jj_consume_token(S);
+        break;
+      case NOT_EQ:
+        n = jj_consume_token(NOT_EQ);
+        break;
+      default:
+        jj_la1[110] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
     }
-   {if (true) return n;}
+   if(n!=null){{if (true) return n.image;}}
+   else{{if (true) return s;}}
     throw new Error("Missing return statement in function");
   }
 
@@ -2850,6 +2864,7 @@ boolean isPseudoElement = false;
       case VARIABLE:
       case HASH:
       case MEDIA_SYM:
+      case CONTAINS:
         ;
         break;
       default:
@@ -3012,13 +3027,14 @@ boolean isPseudoElement = false;
       case MEDIA_SYM:
       case PAGE_SYM:
       case FONT_FACE_SYM:
+      case CONTAINS:
         ;
         break;
       default:
         jj_la1[126] = jj_gen;
         break label_88;
       }
-      if (jj_2_5(5)) {
+      if (jj_2_6(5)) {
         ifContentStatement();
       } else {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3136,7 +3152,7 @@ boolean isPseudoElement = false;
         prev = first;
         label_93:
         while (true) {
-          if (jj_2_6(3)) {
+          if (jj_2_7(3)) {
             ;
           } else {
             break label_93;
@@ -3413,16 +3429,41 @@ boolean isPseudoElement = false;
   }
 
   final public void listModifyDirective() throws ParseException {
-    if (jj_2_7(5)) {
+    if (jj_2_8(5)) {
       removeDirective();
-    } else if (jj_2_8(5)) {
-      appendDirective();
     } else if (jj_2_9(5)) {
+      appendDirective();
+    } else if (jj_2_10(5)) {
       containsDirective();
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
+    label_104:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[148] = jj_gen;
+        break label_104;
+      }
+      jj_consume_token(S);
+    }
+    jj_consume_token(SEMICOLON);
+    label_105:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[149] = jj_gen;
+        break label_105;
+      }
+      jj_consume_token(S);
+    }
   }
 
 /**
@@ -3436,41 +3477,41 @@ boolean isPseudoElement = false;
         Token n = null;
     n = jj_consume_token(VARIABLE);
                     variable = n.image;
-    label_104:
+    label_106:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[148] = jj_gen;
-        break label_104;
+        jj_la1[150] = jj_gen;
+        break label_106;
       }
       jj_consume_token(S);
     }
     jj_consume_token(COLON);
-    label_105:
+    label_107:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[149] = jj_gen;
-        break label_105;
+        jj_la1[151] = jj_gen;
+        break label_107;
       }
       jj_consume_token(S);
     }
     jj_consume_token(APPEND);
-    label_106:
+    label_108:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[150] = jj_gen;
-        break label_106;
+        jj_la1[152] = jj_gen;
+        break label_108;
       }
       jj_consume_token(S);
     }
@@ -3480,19 +3521,19 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[151] = jj_gen;
+      jj_la1[153] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
-    label_107:
+    label_109:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[152] = jj_gen;
-        break label_107;
+        jj_la1[154] = jj_gen;
+        break label_109;
       }
       jj_consume_token(S);
     }
@@ -3500,63 +3541,38 @@ boolean isPseudoElement = false;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_108:
+      label_110:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[153] = jj_gen;
-          break label_108;
+          jj_la1[155] = jj_gen;
+          break label_110;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_109:
+      label_111:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[154] = jj_gen;
-          break label_109;
+          jj_la1[156] = jj_gen;
+          break label_111;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[155] = jj_gen;
+      jj_la1[157] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_110:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[156] = jj_gen;
-        break label_110;
-      }
-      jj_consume_token(S);
-    }
-    jj_consume_token(SEMICOLON);
-    label_111:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[157] = jj_gen;
-        break label_111;
-      }
-      jj_consume_token(S);
-    }
     documentHandler.appendDirective(variable,list,remove,separator);
   }
 
@@ -3564,11 +3580,11 @@ boolean isPseudoElement = false;
  * @exception ParseException exception during the parse
  */
   final public void removeDirective() throws ParseException {
-        String list = null;
-        String remove = null;
-        String separator = null;
-        String variable = null;
-        Token n = null;
+    String list = null;
+    String remove = null;
+    String separator = null;
+    String variable = null;
+    Token n = null;
     n = jj_consume_token(VARIABLE);
                     variable = n.image;
     label_112:
@@ -3667,80 +3683,62 @@ boolean isPseudoElement = false;
       ;
     }
     jj_consume_token(RPARAN);
-    label_118:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[166] = jj_gen;
-        break label_118;
-      }
-      jj_consume_token(S);
-    }
-    jj_consume_token(SEMICOLON);
-    label_119:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[167] = jj_gen;
-        break label_119;
-      }
-      jj_consume_token(S);
-    }
     documentHandler.removeDirective(variable,list,remove,separator);
   }
 
 /**
  * @exception ParseException exception during the parse
  */
-  final public void containsDirective() throws ParseException {
+  final public String containsDirective() throws ParseException {
         String list = null;
         String remove = null;
         String separator = null;
         String variable = null;
         Token n = null;
-    n = jj_consume_token(VARIABLE);
-                    variable = n.image;
-    label_120:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[168] = jj_gen;
-        break label_120;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VARIABLE:
+      n = jj_consume_token(VARIABLE);
+                     variable = n.image;
+      label_118:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case S:
+          ;
+          break;
+        default:
+          jj_la1[166] = jj_gen;
+          break label_118;
+        }
+        jj_consume_token(S);
       }
-      jj_consume_token(S);
-    }
-    jj_consume_token(COLON);
-    label_121:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[169] = jj_gen;
-        break label_121;
+      jj_consume_token(COLON);
+      label_119:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case S:
+          ;
+          break;
+        default:
+          jj_la1[167] = jj_gen;
+          break label_119;
+        }
+        jj_consume_token(S);
       }
-      jj_consume_token(S);
+      break;
+    default:
+      jj_la1[168] = jj_gen;
+      ;
     }
     jj_consume_token(CONTAINS);
-    label_122:
+    label_120:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[170] = jj_gen;
-        break label_122;
+        jj_la1[169] = jj_gen;
+        break label_120;
       }
       jj_consume_token(S);
     }
@@ -3750,19 +3748,19 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[171] = jj_gen;
+      jj_la1[170] = jj_gen;
       ;
     }
     jj_consume_token(COMMA);
-    label_123:
+    label_121:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[172] = jj_gen;
-        break label_123;
+        jj_la1[171] = jj_gen;
+        break label_121;
       }
       jj_consume_token(S);
     }
@@ -3770,64 +3768,49 @@ boolean isPseudoElement = false;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_124:
+      label_122:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[173] = jj_gen;
-          break label_124;
+          jj_la1[172] = jj_gen;
+          break label_122;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_125:
+      label_123:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[174] = jj_gen;
-          break label_125;
+          jj_la1[173] = jj_gen;
+          break label_123;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[175] = jj_gen;
+      jj_la1[174] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_126:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[176] = jj_gen;
-        break label_126;
-      }
-      jj_consume_token(S);
-    }
-    jj_consume_token(SEMICOLON);
-    label_127:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case S:
-        ;
-        break;
-      default:
-        jj_la1[177] = jj_gen;
-        break label_127;
-      }
-      jj_consume_token(S);
-    }
-    documentHandler.containsDirective(variable,list,remove,separator);
+      /*
+       *if it is not in the form like "$contains : contains($items, .v-button);"
+       *for example in @if, like "@if (contains(a b c, b))", then create a temp
+       *variable for contains(a b c, b);
+       */
+      if(variable == null){
+          variable = "$var_"+UUID.randomUUID();
+      }
+      documentHandler.containsDirective(variable,list,remove,separator);
+      {if (true) return variable;}
+    throw new Error("Missing return statement in function");
   }
 
   String listModifyDirectiveArgs(int nest) throws ParseException {
@@ -3918,7 +3901,7 @@ boolean isPseudoElement = false;
       warnDirective();
       break;
     default:
-      jj_la1[178] = jj_gen;
+      jj_la1[175] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3929,15 +3912,15 @@ boolean isPseudoElement = false;
     String content = skipStatementUntilSemiColon();
     // TODO should evaluate the content expression, call documentHandler.debugDirective() etc.
     System.out.println(content);
-    label_128:
+    label_124:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[179] = jj_gen;
-        break label_128;
+        jj_la1[176] = jj_gen;
+        break label_124;
       }
       jj_consume_token(S);
     }
@@ -3948,15 +3931,15 @@ boolean isPseudoElement = false;
     String content = skipStatementUntilSemiColon();
     // TODO should evaluate the content expression, call documentHandler.warnDirective() etc.
     System.err.println(content);
-    label_129:
+    label_125:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[180] = jj_gen;
-        break label_129;
+        jj_la1[177] = jj_gen;
+        break label_125;
       }
       jj_consume_token(S);
     }
@@ -3982,20 +3965,20 @@ boolean isPseudoElement = false;
                        exclusive = false;
       break;
     default:
-      jj_la1[181] = jj_gen;
+      jj_la1[178] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     to = skipStatementUntilLeftBrace();
-    label_130:
+    label_126:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[182] = jj_gen;
-        break label_130;
+        jj_la1[179] = jj_gen;
+        break label_126;
       }
       jj_consume_token(S);
     }
@@ -4016,31 +3999,31 @@ boolean isPseudoElement = false;
   final public void extendDirective() throws ParseException {
  ArrayList<String> list;
     jj_consume_token(EXTEND_SYM);
-    label_131:
+    label_127:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[183] = jj_gen;
-        break label_131;
+        jj_la1[180] = jj_gen;
+        break label_127;
       }
       jj_consume_token(S);
     }
     list = selectorList();
-    label_132:
+    label_128:
     while (true) {
       jj_consume_token(SEMICOLON);
-      label_133:
+      label_129:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[184] = jj_gen;
-          break label_133;
+          jj_la1[181] = jj_gen;
+          break label_129;
         }
         jj_consume_token(S);
       }
@@ -4049,8 +4032,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[185] = jj_gen;
-        break label_132;
+        jj_la1[182] = jj_gen;
+        break label_128;
       }
     }
      documentHandler.extendDirective(list);
@@ -4077,28 +4060,28 @@ boolean isPseudoElement = false;
 LexicalUnit exp;
     name = property();
     jj_consume_token(COLON);
-    label_134:
+    label_130:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[186] = jj_gen;
-        break label_134;
+        jj_la1[183] = jj_gen;
+        break label_130;
       }
       jj_consume_token(S);
     }
     jj_consume_token(LBRACE);
-    label_135:
+    label_131:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[187] = jj_gen;
-        break label_135;
+        jj_la1[184] = jj_gen;
+        break label_131;
       }
       jj_consume_token(S);
     }
@@ -4109,29 +4092,29 @@ LexicalUnit exp;
       declaration();
       break;
     default:
-      jj_la1[188] = jj_gen;
+      jj_la1[185] = jj_gen;
       ;
     }
-    label_136:
+    label_132:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[189] = jj_gen;
-        break label_136;
+        jj_la1[186] = jj_gen;
+        break label_132;
       }
       jj_consume_token(SEMICOLON);
-      label_137:
+      label_133:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[190] = jj_gen;
-          break label_137;
+          jj_la1[187] = jj_gen;
+          break label_133;
         }
         jj_consume_token(S);
       }
@@ -4141,21 +4124,21 @@ LexicalUnit exp;
         declaration();
         break;
       default:
-        jj_la1[191] = jj_gen;
+        jj_la1[188] = jj_gen;
         ;
       }
     }
     jj_consume_token(RBRACE);
       documentHandler.endNestedProperties(name);
-    label_138:
+    label_134:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[192] = jj_gen;
-        break label_138;
+        jj_la1[189] = jj_gen;
+        break label_134;
       }
       jj_consume_token(S);
     }
@@ -4166,7 +4149,7 @@ LexicalUnit exp;
  */
   final public void styleRuleOrDeclarationOrNestedProperties() throws ParseException {
     try {
-      if (jj_2_10(5)) {
+      if (jj_2_11(5)) {
         styleRule();
       } else {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4179,7 +4162,7 @@ LexicalUnit exp;
           declarationOrNestedProperties();
           break;
         default:
-          jj_la1[193] = jj_gen;
+          jj_la1[190] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -4223,15 +4206,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_139:
+      label_135:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[194] = jj_gen;
-          break label_139;
+          jj_la1[191] = jj_gen;
+          break label_135;
         }
         jj_consume_token(S);
       }
@@ -4270,7 +4253,7 @@ LexicalUnit exp;
           important = prio();
           break;
         default:
-          jj_la1[195] = jj_gen;
+          jj_la1[192] = jj_gen;
           ;
         }
          Token next = getToken(1);
@@ -4288,15 +4271,15 @@ LexicalUnit exp;
         break;
       case LBRACE:
         jj_consume_token(LBRACE);
-        label_140:
+        label_136:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[196] = jj_gen;
-            break label_140;
+            jj_la1[193] = jj_gen;
+            break label_136;
           }
           jj_consume_token(S);
         }
@@ -4307,29 +4290,29 @@ LexicalUnit exp;
           declaration();
           break;
         default:
-          jj_la1[197] = jj_gen;
+          jj_la1[194] = jj_gen;
           ;
         }
-        label_141:
+        label_137:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case SEMICOLON:
             ;
             break;
           default:
-            jj_la1[198] = jj_gen;
-            break label_141;
+            jj_la1[195] = jj_gen;
+            break label_137;
           }
           jj_consume_token(SEMICOLON);
-          label_142:
+          label_138:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case S:
               ;
               break;
             default:
-              jj_la1[199] = jj_gen;
-              break label_142;
+              jj_la1[196] = jj_gen;
+              break label_138;
             }
             jj_consume_token(S);
           }
@@ -4339,27 +4322,27 @@ LexicalUnit exp;
             declaration();
             break;
           default:
-            jj_la1[200] = jj_gen;
+            jj_la1[197] = jj_gen;
             ;
           }
         }
         jj_consume_token(RBRACE);
-        label_143:
+        label_139:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[201] = jj_gen;
-            break label_143;
+            jj_la1[198] = jj_gen;
+            break label_139;
           }
           jj_consume_token(S);
         }
          documentHandler.endNestedProperties(name);
         break;
       default:
-        jj_la1[202] = jj_gen;
+        jj_la1[199] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4409,15 +4392,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_144:
+      label_140:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[203] = jj_gen;
-          break label_144;
+          jj_la1[200] = jj_gen;
+          break label_140;
         }
         jj_consume_token(S);
       }
@@ -4427,7 +4410,7 @@ LexicalUnit exp;
         important = prio();
         break;
       default:
-        jj_la1[204] = jj_gen;
+        jj_la1[201] = jj_gen;
         ;
       }
          documentHandler.property(name, exp, important);
@@ -4470,15 +4453,15 @@ LexicalUnit exp;
  */
   final public boolean prio() throws ParseException {
     jj_consume_token(IMPORTANT_SYM);
-    label_145:
+    label_141:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[205] = jj_gen;
-        break label_145;
+        jj_la1[202] = jj_gen;
+        break label_141;
       }
       jj_consume_token(S);
     }
@@ -4488,15 +4471,15 @@ LexicalUnit exp;
 
   final public boolean guarded() throws ParseException {
     jj_consume_token(GUARDED_SYM);
-    label_146:
+    label_142:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[206] = jj_gen;
-        break label_146;
+        jj_la1[203] = jj_gen;
+        break label_142;
       }
       jj_consume_token(S);
     }
@@ -4512,15 +4495,15 @@ LexicalUnit exp;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DIV:
       n = jj_consume_token(DIV);
-      label_147:
+      label_143:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[207] = jj_gen;
-          break label_147;
+          jj_la1[204] = jj_gen;
+          break label_143;
         }
         jj_consume_token(S);
       }
@@ -4530,15 +4513,15 @@ LexicalUnit exp;
       break;
     case COMMA:
       n = jj_consume_token(COMMA);
-      label_148:
+      label_144:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[208] = jj_gen;
-          break label_148;
+          jj_la1[205] = jj_gen;
+          break label_144;
         }
         jj_consume_token(S);
       }
@@ -4547,7 +4530,7 @@ LexicalUnit exp;
                                                          prev);}
       break;
     default:
-      jj_la1[209] = jj_gen;
+      jj_la1[206] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4562,12 +4545,12 @@ LexicalUnit exp;
     char op;
     first = term(null);
                       res = first;
-    label_149:
+    label_145:
     while (true) {
-      if (jj_2_11(2)) {
+      if (jj_2_12(2)) {
         ;
       } else {
-        break label_149;
+        break label_145;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
@@ -4575,7 +4558,7 @@ LexicalUnit exp;
         res = operator(res);
         break;
       default:
-        jj_la1[210] = jj_gen;
+        jj_la1[207] = jj_gen;
         ;
       }
       res = term(res);
@@ -4598,7 +4581,7 @@ LexicalUnit exp;
         {if (true) return '+';}
       break;
     default:
-      jj_la1[211] = jj_gen;
+      jj_la1[208] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4646,7 +4629,7 @@ LexicalUnit exp;
       result = variableTerm(prev);
       break;
     default:
-      jj_la1[212] = jj_gen;
+      jj_la1[209] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4697,7 +4680,7 @@ LexicalUnitImpl result = null;
         op = unaryOperator();
         break;
       default:
-        jj_la1[213] = jj_gen;
+        jj_la1[210] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4802,7 +4785,7 @@ LexicalUnitImpl result = null;
         result = function(op, prev);
         break;
       default:
-        jj_la1[214] = jj_gen;
+        jj_la1[211] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4829,7 +4812,7 @@ LexicalUnitImpl result = null;
                    s+=".";
           break;
         default:
-          jj_la1[215] = jj_gen;
+          jj_la1[212] = jj_gen;
           ;
         }
         n = jj_consume_token(IDENT);
@@ -4876,25 +4859,25 @@ LexicalUnitImpl result = null;
         result = unicode(prev);
         break;
       default:
-        jj_la1[216] = jj_gen;
+        jj_la1[213] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[217] = jj_gen;
+      jj_la1[214] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    label_150:
+    label_146:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[218] = jj_gen;
-        break label_150;
+        jj_la1[215] = jj_gen;
+        break label_146;
       }
       jj_consume_token(S);
     }
@@ -4910,15 +4893,15 @@ LexicalUnitImpl result = null;
  Token n;
  LexicalUnit params = null;
     n = jj_consume_token(FUNCTION);
-    label_151:
+    label_147:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[219] = jj_gen;
-        break label_151;
+        jj_la1[216] = jj_gen;
+        break label_147;
       }
       jj_consume_token(S);
     }
@@ -4960,7 +4943,7 @@ LexicalUnitImpl result = null;
       params = expr();
       break;
     default:
-      jj_la1[220] = jj_gen;
+      jj_la1[217] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -5431,15 +5414,15 @@ LexicalUnitImpl result = null;
  */
   final public void _parseRule() throws ParseException {
  String ret = null;
-    label_152:
+    label_148:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[221] = jj_gen;
-        break label_152;
+        jj_la1[218] = jj_gen;
+        break label_148;
       }
       jj_consume_token(S);
     }
@@ -5471,7 +5454,7 @@ LexicalUnitImpl result = null;
       fontFace();
       break;
     default:
-      jj_la1[222] = jj_gen;
+      jj_la1[219] = jj_gen;
       ret = skipStatement();
                     if ((ret == null) || (ret.length() == 0)) {
                         {if (true) return;}
@@ -5486,15 +5469,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseImportRule() throws ParseException {
-    label_153:
+    label_149:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[223] = jj_gen;
-        break label_153;
+        jj_la1[220] = jj_gen;
+        break label_149;
       }
       jj_consume_token(S);
     }
@@ -5502,15 +5485,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseMediaRule() throws ParseException {
-    label_154:
+    label_150:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[224] = jj_gen;
-        break label_154;
+        jj_la1[221] = jj_gen;
+        break label_150;
       }
       jj_consume_token(S);
     }
@@ -5518,15 +5501,15 @@ LexicalUnitImpl result = null;
   }
 
   final public void _parseDeclarationBlock() throws ParseException {
-    label_155:
+    label_151:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[225] = jj_gen;
-        break label_155;
+        jj_la1[222] = jj_gen;
+        break label_151;
       }
       jj_consume_token(S);
     }
@@ -5536,29 +5519,29 @@ LexicalUnitImpl result = null;
       declaration();
       break;
     default:
-      jj_la1[226] = jj_gen;
+      jj_la1[223] = jj_gen;
       ;
     }
-    label_156:
+    label_152:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[227] = jj_gen;
-        break label_156;
+        jj_la1[224] = jj_gen;
+        break label_152;
       }
       jj_consume_token(SEMICOLON);
-      label_157:
+      label_153:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[228] = jj_gen;
-          break label_157;
+          jj_la1[225] = jj_gen;
+          break label_153;
         }
         jj_consume_token(S);
       }
@@ -5568,7 +5551,7 @@ LexicalUnitImpl result = null;
         declaration();
         break;
       default:
-        jj_la1[229] = jj_gen;
+        jj_la1[226] = jj_gen;
         ;
       }
     }
@@ -5577,15 +5560,15 @@ LexicalUnitImpl result = null;
   final public ArrayList<String> _parseSelectors() throws ParseException {
   ArrayList<String> p = null;
     try {
-      label_158:
+      label_154:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[230] = jj_gen;
-          break label_158;
+          jj_la1[227] = jj_gen;
+          break label_154;
         }
         jj_consume_token(S);
       }
@@ -5674,76 +5657,75 @@ LexicalUnitImpl result = null;
     finally { jj_save(10, xla); }
   }
 
-  private boolean jj_3_5() {
-    if (jj_3R_160()) return true;
-    return false;
+  private boolean jj_2_12(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_12(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(11, xla); }
   }
 
-  private boolean jj_3R_196() {
+  private boolean jj_3R_252() {
+    if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_10()) {
-    jj_scanpos = xsp;
-    if (jj_3R_246()) {
-    jj_scanpos = xsp;
-    if (jj_3R_247()) return true;
-    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    xsp = jj_scanpos;
+    if (jj_3R_273()) jj_scanpos = xsp;
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
   private boolean jj_3_1() {
-    if (jj_3R_159()) return true;
+    if (jj_3R_155()) return true;
     return false;
   }
 
-  private boolean jj_3R_231() {
-    if (jj_3R_261()) return true;
+  private boolean jj_3R_228() {
+    if (jj_3R_258()) return true;
     return false;
   }
 
-  private boolean jj_3R_276() {
-    if (jj_3R_243()) return true;
+  private boolean jj_3R_224() {
+    if (jj_3R_256()) return true;
     return false;
   }
 
-  private boolean jj_3R_175() {
-    if (jj_3R_196()) return true;
+  private boolean jj_3R_171() {
+    if (jj_3R_193()) return true;
     return false;
   }
 
-  private boolean jj_3_3() {
-    if (jj_3R_161()) return true;
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_223() {
+    if (jj_3R_255()) return true;
     return false;
   }
 
-  private boolean jj_3R_255() {
-    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_276()) jj_scanpos = xsp;
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_222() {
+    if (jj_3R_254()) return true;
     return false;
   }
 
-  private boolean jj_3R_229() {
+  private boolean jj_3_3() {
+    if (jj_3R_157()) return true;
+    if (jj_3R_158()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_226() {
     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_228()) return true;
+    if (jj_3R_225()) return true;
     return false;
   }
 
-  private boolean jj_3R_228() {
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_225() {
+    if (jj_3R_158()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -5756,32 +5738,43 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_174() {
-    if (jj_3R_195()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_230() {
-    if (jj_3R_260()) return true;
+  private boolean jj_3R_170() {
+    if (jj_3R_192()) return true;
     return false;
   }
 
   private boolean jj_3R_227() {
-    if (jj_3R_259()) return true;
+    if (jj_3R_257()) return true;
     return false;
   }
 
-  private boolean jj_3R_226() {
-    if (jj_3R_258()) return true;
+  private boolean jj_3R_238() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_225() {
-    if (jj_3R_257()) return true;
+  private boolean jj_3R_191() {
+    if (jj_scan_token(EXTEND_SYM)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_3R_184()) return true;
+    if (jj_3R_238()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_238()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_296() {
+  private boolean jj_3R_293() {
     if (jj_scan_token(EACH_SYM)) return true;
     Token xsp;
     while (true) {
@@ -5797,91 +5790,96 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_187() {
-    if (jj_3R_228()) return true;
+  private boolean jj_3R_184() {
+    if (jj_3R_225()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_229()) { jj_scanpos = xsp; break; }
+      if (jj_3R_226()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_241() {
-    if (jj_scan_token(SEMICOLON)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_169() {
+    if (jj_3R_191()) return true;
     return false;
   }
 
-  private boolean jj_3R_173() {
-    if (jj_3R_194()) return true;
+  private boolean jj_3R_253() {
+    if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_194() {
-    if (jj_scan_token(EXTEND_SYM)) return true;
+  private boolean jj_3R_221() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    if (jj_3R_187()) return true;
-    if (jj_3R_241()) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_241()) { jj_scanpos = xsp; break; }
-    }
+    xsp = jj_scanpos;
+    if (jj_3R_253()) jj_scanpos = xsp;
+    if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_172() {
-    if (jj_3R_193()) return true;
+  private boolean jj_3R_168() {
+    if (jj_3R_190()) return true;
     return false;
   }
 
-  private boolean jj_3R_188() {
+  private boolean jj_3R_220() {
+    if (jj_scan_token(STRING)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_219() {
+    if (jj_3R_252()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_183() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_220()) {
+    jj_scanpos = xsp;
+    if (jj_3R_221()) {
+    jj_scanpos = xsp;
+    if (jj_3R_222()) {
+    jj_scanpos = xsp;
+    if (jj_3R_223()) {
+    jj_scanpos = xsp;
+    if (jj_3R_224()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_185() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_2()) {
     jj_scanpos = xsp;
-    if (jj_3R_230()) {
+    if (jj_3R_227()) {
     jj_scanpos = xsp;
-    if (jj_3R_231()) return true;
+    if (jj_3R_228()) return true;
     }
     }
     return false;
   }
 
   private boolean jj_3_2() {
-    if (jj_3R_160()) return true;
+    if (jj_3R_156()) return true;
     return false;
   }
 
-  private boolean jj_3R_256() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3_5() {
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3R_224() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_256()) jj_scanpos = xsp;
-    if (jj_scan_token(IDENT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_309() {
-    if (jj_scan_token(INTERPOLATION)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_354() {
+  private boolean jj_3R_351() {
     Token xsp;
     xsp = jj_scanpos;
+    if (jj_3_5()) {
+    jj_scanpos = xsp;
     if (jj_scan_token(75)) {
     jj_scanpos = xsp;
     if (jj_scan_token(71)) {
@@ -5931,40 +5929,27 @@ LexicalUnitImpl result = null;
     }
     }
     }
+    }
     return false;
   }
 
-  private boolean jj_3R_223() {
-    if (jj_scan_token(STRING)) return true;
+  private boolean jj_3R_218() {
+    if (jj_scan_token(DIMEN)) return true;
     return false;
   }
 
-  private boolean jj_3R_222() {
-    if (jj_3R_255()) return true;
+  private boolean jj_3R_306() {
+    if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_186() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_223()) {
-    jj_scanpos = xsp;
-    if (jj_3R_224()) {
-    jj_scanpos = xsp;
-    if (jj_3R_225()) {
-    jj_scanpos = xsp;
-    if (jj_3R_226()) {
-    jj_scanpos = xsp;
-    if (jj_3R_227()) return true;
-    }
-    }
-    }
-    }
+  private boolean jj_3R_217() {
+    if (jj_scan_token(KHZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_168() {
-    if (jj_3R_187()) return true;
+  private boolean jj_3R_164() {
+    if (jj_3R_184()) return true;
     if (jj_scan_token(LBRACE)) return true;
     Token xsp;
     while (true) {
@@ -5973,7 +5958,7 @@ LexicalUnitImpl result = null;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_188()) { jj_scanpos = xsp; break; }
+      if (jj_3R_185()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RBRACE)) return true;
     while (true) {
@@ -5983,13 +5968,18 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_171() {
-    if (jj_3R_192()) return true;
+  private boolean jj_3R_216() {
+    if (jj_scan_token(HZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_263() {
-    if (jj_scan_token(FUNCTION)) return true;
+  private boolean jj_3R_167() {
+    if (jj_3R_189()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_309() {
+    if (jj_scan_token(WARN_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -5998,18 +5988,28 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_221() {
-    if (jj_scan_token(DIMEN)) return true;
+  private boolean jj_3R_215() {
+    if (jj_scan_token(MS)) return true;
     return false;
   }
 
-  private boolean jj_3R_220() {
-    if (jj_scan_token(KHZ)) return true;
+  private boolean jj_3R_282() {
+    if (jj_3R_309()) return true;
     return false;
   }
 
-  private boolean jj_3R_242() {
-    if (jj_scan_token(VARIABLE)) return true;
+  private boolean jj_3R_214() {
+    if (jj_scan_token(SECOND)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_213() {
+    if (jj_scan_token(GRAD)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_260() {
+    if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -6018,13 +6018,13 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_219() {
-    if (jj_scan_token(HZ)) return true;
+  private boolean jj_3R_212() {
+    if (jj_scan_token(RAD)) return true;
     return false;
   }
 
-  private boolean jj_3R_245() {
-    if (jj_scan_token(SEMICOLON)) return true;
+  private boolean jj_3R_308() {
+    if (jj_scan_token(DEBUG_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -6033,8 +6033,13 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_312() {
-    if (jj_scan_token(WARN_SYM)) return true;
+  private boolean jj_3R_211() {
+    if (jj_scan_token(DEG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_239() {
+    if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -6043,42 +6048,72 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_218() {
-    if (jj_scan_token(MS)) return true;
+  private boolean jj_3R_242() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_285() {
-    if (jj_3R_312()) return true;
+  private boolean jj_3R_210() {
+    if (jj_scan_token(EXS)) return true;
     return false;
   }
 
-  private boolean jj_3R_217() {
-    if (jj_scan_token(SECOND)) return true;
+  private boolean jj_3R_209() {
+    if (jj_scan_token(EMS)) return true;
     return false;
   }
 
-  private boolean jj_3R_308() {
+  private boolean jj_3R_268() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_281()) {
+    jj_scanpos = xsp;
+    if (jj_3R_282()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_281() {
+    if (jj_3R_308()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_305() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_280() {
+  private boolean jj_3R_277() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_308()) {
+    if (jj_3R_305()) {
     jj_scanpos = xsp;
-    if (jj_3R_309()) return true;
+    if (jj_3R_306()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_262() {
+  private boolean jj_3R_208() {
+    if (jj_scan_token(PX)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_337() {
+    if (jj_3R_351()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_259() {
     Token xsp;
-    if (jj_3R_280()) return true;
+    if (jj_3R_277()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_280()) { jj_scanpos = xsp; break; }
+      if (jj_3R_277()) { jj_scanpos = xsp; break; }
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6087,102 +6122,82 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_216() {
-    if (jj_scan_token(GRAD)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_340() {
-    if (jj_3R_354()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_278() {
-    if (jj_3R_296()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_215() {
-    if (jj_scan_token(RAD)) return true;
+  private boolean jj_3R_207() {
+    if (jj_scan_token(IN)) return true;
     return false;
   }
 
-  private boolean jj_3R_295() {
+  private boolean jj_3R_292() {
     if (jj_scan_token(IF_SYM)) return true;
     Token xsp;
-    if (jj_3R_340()) return true;
+    if (jj_3R_337()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_340()) { jj_scanpos = xsp; break; }
+      if (jj_3R_337()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_311() {
-    if (jj_scan_token(DEBUG_SYM)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_275() {
+    if (jj_3R_293()) return true;
     return false;
   }
 
-  private boolean jj_3R_214() {
-    if (jj_scan_token(DEG)) return true;
+  private boolean jj_3R_206() {
+    if (jj_scan_token(PC)) return true;
     return false;
   }
 
-  private boolean jj_3R_307() {
-    if (jj_scan_token(S)) return true;
+  private boolean jj_3R_205() {
+    if (jj_scan_token(MM)) return true;
     return false;
   }
 
-  private boolean jj_3R_213() {
-    if (jj_scan_token(EXS)) return true;
+  private boolean jj_3R_304() {
+    if (jj_scan_token(S)) return true;
     return false;
   }
 
-  private boolean jj_3R_306() {
+  private boolean jj_3R_303() {
     if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_305() {
+  private boolean jj_3R_302() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_304() {
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_204() {
+    if (jj_scan_token(CM)) return true;
     return false;
   }
 
-  private boolean jj_3R_212() {
-    if (jj_scan_token(EMS)) return true;
+  private boolean jj_3R_301() {
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_303() {
+  private boolean jj_3R_300() {
     if (jj_scan_token(FUNCTION)) return true;
     return false;
   }
 
-  private boolean jj_3R_160() {
+  private boolean jj_3R_156() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_4()) {
     jj_scanpos = xsp;
-    if (jj_3R_171()) {
+    if (jj_3R_167()) {
     jj_scanpos = xsp;
-    if (jj_3R_172()) {
+    if (jj_3R_168()) {
     jj_scanpos = xsp;
-    if (jj_3R_173()) {
+    if (jj_3R_169()) {
     jj_scanpos = xsp;
-    if (jj_3R_174()) {
+    if (jj_3R_170()) {
     jj_scanpos = xsp;
-    if (jj_3R_175()) return true;
+    if (jj_3R_171()) return true;
     }
     }
     }
@@ -6192,88 +6207,84 @@ LexicalUnitImpl result = null;
   }
 
   private boolean jj_3_4() {
-    if (jj_3R_159()) return true;
+    if (jj_3R_155()) return true;
     return false;
   }
 
-  private boolean jj_3R_302() {
+  private boolean jj_3R_299() {
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_244() {
-    if (jj_3R_270()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_271() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_284()) {
-    jj_scanpos = xsp;
-    if (jj_3R_285()) return true;
-    }
+  private boolean jj_3R_241() {
+    if (jj_3R_267()) return true;
     return false;
   }
 
-  private boolean jj_3R_284() {
-    if (jj_3R_311()) return true;
+  private boolean jj_3R_203() {
+    if (jj_scan_token(PT)) return true;
     return false;
   }
 
-  private boolean jj_3R_301() {
+  private boolean jj_3R_298() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_211() {
-    if (jj_scan_token(PX)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_300() {
+  private boolean jj_3R_297() {
     if (jj_scan_token(COMMA)) return true;
     return false;
   }
 
-  private boolean jj_3R_299() {
+  private boolean jj_3R_296() {
     if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_298() {
-    if (jj_scan_token(NUMBER)) return true;
+  private boolean jj_3R_202() {
+    if (jj_scan_token(PERCENTAGE)) return true;
     return false;
   }
 
-  private boolean jj_3R_210() {
-    if (jj_scan_token(IN)) return true;
+  private boolean jj_3R_295() {
+    if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_260() {
+  private boolean jj_3R_257() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_277()) {
+    if (jj_3R_274()) {
     jj_scanpos = xsp;
-    if (jj_3R_278()) return true;
+    if (jj_3R_275()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_277() {
-    if (jj_3R_295()) return true;
+  private boolean jj_3R_274() {
+    if (jj_3R_292()) return true;
     return false;
   }
 
-  private boolean jj_3R_297() {
+  private boolean jj_3R_188() {
+    if (jj_3R_231()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_294() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_279() {
+  private boolean jj_3R_276() {
     Token xsp;
     xsp = jj_scanpos;
+    if (jj_3R_294()) {
+    jj_scanpos = xsp;
+    if (jj_3R_295()) {
+    jj_scanpos = xsp;
+    if (jj_3R_296()) {
+    jj_scanpos = xsp;
     if (jj_3R_297()) {
     jj_scanpos = xsp;
     if (jj_3R_298()) {
@@ -6288,13 +6299,7 @@ LexicalUnitImpl result = null;
     jj_scanpos = xsp;
     if (jj_3R_303()) {
     jj_scanpos = xsp;
-    if (jj_3R_304()) {
-    jj_scanpos = xsp;
-    if (jj_3R_305()) {
-    jj_scanpos = xsp;
-    if (jj_3R_306()) {
-    jj_scanpos = xsp;
-    if (jj_3R_307()) return true;
+    if (jj_3R_304()) return true;
     }
     }
     }
@@ -6308,119 +6313,27 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_209() {
-    if (jj_scan_token(PC)) return true;
+  private boolean jj_3R_201() {
+    if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_208() {
-    if (jj_scan_token(MM)) return true;
+  private boolean jj_3R_200() {
+    if (jj_3R_251()) return true;
     return false;
   }
 
-  private boolean jj_3R_207() {
-    if (jj_scan_token(CM)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_261() {
-    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_279()) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_279()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_206() {
-    if (jj_scan_token(PT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_250() {
-    if (jj_scan_token(SIBLING)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_249() {
-    if (jj_scan_token(PRECEDES)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_205() {
-    if (jj_scan_token(PERCENTAGE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_248() {
-    if (jj_scan_token(PLUS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_191() {
-    if (jj_3R_234()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_204() {
-    if (jj_scan_token(NUMBER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_197() {
+  private boolean jj_3R_182() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_248()) {
+    if (jj_3R_200()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_201()) {
     jj_scanpos = xsp;
-    if (jj_3R_249()) {
+    if (jj_3R_202()) {
+    jj_scanpos = xsp;
+    if (jj_3R_203()) {
     jj_scanpos = xsp;
-    if (jj_3R_250()) return true;
-    }
-    }
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_203() {
-    if (jj_3R_254()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_178() {
-    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_177() {
-    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_185() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_203()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
     if (jj_3R_204()) {
     jj_scanpos = xsp;
     if (jj_3R_205()) {
@@ -6451,13 +6364,7 @@ LexicalUnitImpl result = null;
     jj_scanpos = xsp;
     if (jj_3R_218()) {
     jj_scanpos = xsp;
-    if (jj_3R_219()) {
-    jj_scanpos = xsp;
-    if (jj_3R_220()) {
-    jj_scanpos = xsp;
-    if (jj_3R_221()) {
-    jj_scanpos = xsp;
-    if (jj_3R_222()) return true;
+    if (jj_3R_219()) return true;
     }
     }
     }
@@ -6479,20 +6386,60 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_179() {
-    if (jj_scan_token(S)) return true;
+  private boolean jj_3R_161() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_197()) jj_scanpos = xsp;
+    if (jj_3R_182()) {
+    jj_scanpos = xsp;
+    if (jj_3R_183()) return true;
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_164() {
+  private boolean jj_3R_258() {
+    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_276()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_276()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_247() {
+    if (jj_scan_token(SIBLING)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_246() {
+    if (jj_scan_token(PRECEDES)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_245() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_194() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_185()) {
+    if (jj_3R_245()) {
     jj_scanpos = xsp;
-    if (jj_3R_186()) return true;
+    if (jj_3R_246()) {
+    jj_scanpos = xsp;
+    if (jj_3R_247()) return true;
+    }
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6501,23 +6448,61 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_161() {
+  private boolean jj_3R_254() {
+    if (jj_scan_token(HASH)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_231() {
+    if (jj_3R_239()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_174() {
+    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_173() {
+    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_175() {
+    if (jj_scan_token(S)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_176()) {
+    if (jj_3R_194()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_157() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_172()) {
     jj_scanpos = xsp;
-    if (jj_3R_177()) {
+    if (jj_3R_173()) {
     jj_scanpos = xsp;
-    if (jj_3R_178()) {
+    if (jj_3R_174()) {
     jj_scanpos = xsp;
-    if (jj_3R_179()) return true;
+    if (jj_3R_175()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_176() {
+  private boolean jj_3R_172() {
     if (jj_scan_token(PLUS)) return true;
     Token xsp;
     while (true) {
@@ -6527,91 +6512,104 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_195() {
-    if (jj_3R_242()) return true;
+  private boolean jj_3R_192() {
+    if (jj_3R_239()) 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_243()) return true;
+    if (jj_3R_240()) return true;
     xsp = jj_scanpos;
-    if (jj_3R_244()) jj_scanpos = xsp;
-    if (jj_3R_245()) return true;
+    if (jj_3R_241()) jj_scanpos = xsp;
+    if (jj_3R_242()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_245()) { jj_scanpos = xsp; break; }
+      if (jj_3R_242()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_257() {
-    if (jj_scan_token(HASH)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_234() {
-    if (jj_3R_242()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_190() {
-    if (jj_3R_164()) return true;
+  private boolean jj_3R_187() {
+    if (jj_3R_161()) return true;
     return false;
   }
 
-  private boolean jj_3R_170() {
+  private boolean jj_3R_166() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_190()) {
+    if (jj_3R_187()) {
     jj_scanpos = xsp;
-    if (jj_3R_191()) return true;
+    if (jj_3R_188()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_258() {
+  private boolean jj_3R_255() {
     if (jj_scan_token(URL)) return true;
     return false;
   }
 
-  private boolean jj_3R_169() {
-    if (jj_3R_189()) return true;
+  private boolean jj_3R_165() {
+    if (jj_3R_186()) return true;
     return false;
   }
 
-  private boolean jj_3R_199() {
-    if (jj_scan_token(HASH)) return true;
+  private boolean jj_3R_272() {
+    if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_329() {
-    if (jj_scan_token(IDENT)) return true;
+  private boolean jj_3R_251() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_271()) {
+    jj_scanpos = xsp;
+    if (jj_3R_272()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_275() {
-    if (jj_scan_token(PLUS)) return true;
+  private boolean jj_3R_271() {
+    if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_254() {
+  private boolean jj_3_12() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_274()) {
-    jj_scanpos = xsp;
-    if (jj_3R_275()) return true;
+    if (jj_3R_165()) jj_scanpos = xsp;
+    if (jj_3R_166()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_240() {
+    if (jj_3R_166()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_12()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_274() {
-    if (jj_scan_token(MINUS)) return true;
+  private boolean jj_3R_196() {
+    if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_330() {
+  private boolean jj_3R_256() {
+    if (jj_scan_token(UNICODERANGE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_326() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_327() {
     if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
@@ -6622,25 +6620,17 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3_11() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_169()) jj_scanpos = xsp;
-    if (jj_3R_170()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_243() {
-    if (jj_3R_170()) return true;
+  private boolean jj_3R_230() {
+    if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_11()) { jj_scanpos = xsp; break; }
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_283() {
+  private boolean jj_3R_280() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(99)) {
@@ -6719,13 +6709,18 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_259() {
-    if (jj_scan_token(UNICODERANGE)) return true;
+  private boolean jj_3R_186() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_229()) {
+    jj_scanpos = xsp;
+    if (jj_3R_230()) return true;
+    }
     return false;
   }
-
-  private boolean jj_3R_233() {
-    if (jj_scan_token(COMMA)) return true;
+
+  private boolean jj_3R_229() {
+    if (jj_scan_token(DIV)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -6734,12 +6729,17 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_328() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_267() {
+    if (jj_scan_token(GUARDED_SYM)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_167() {
+  private boolean jj_3R_181() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6751,74 +6751,56 @@ LexicalUnitImpl result = null;
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_scan_token(CONTAINS)) 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_189() {
+  private boolean jj_3R_159() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_232()) {
-    jj_scanpos = xsp;
-    if (jj_3R_233()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_232() {
-    if (jj_scan_token(DIV)) return true;
-    Token xsp;
+    if (jj_3R_181()) jj_scanpos = xsp;
+    if (jj_scan_token(CONTAINS)) 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_201() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_338() {
+    if (jj_scan_token(IMPORTANT_SYM)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_328()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_329()) {
-    jj_scanpos = xsp;
-    if (jj_3R_330()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3_9() {
-    if (jj_3R_167()) return true;
+  private boolean jj_3_10() {
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3R_270() {
-    if (jj_scan_token(GUARDED_SYM)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_325() {
+    if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_341() {
-    if (jj_scan_token(IMPORTANT_SYM)) return true;
+  private boolean jj_3R_198() {
+    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_325()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_326()) {
+    jj_scanpos = xsp;
+    if (jj_3R_327()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_165() {
+  private boolean jj_3R_162() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6839,12 +6821,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3_8() {
-    if (jj_3R_166()) return true;
+  private boolean jj_3_9() {
+    if (jj_3R_163()) return true;
     return false;
   }
 
-  private boolean jj_3R_238() {
+  private boolean jj_3R_235() {
     if (jj_scan_token(SEMICOLON)) return true;
     Token xsp;
     while (true) {
@@ -6854,7 +6836,7 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_310() {
+  private boolean jj_3R_307() {
     if (jj_scan_token(COLON)) return true;
     Token xsp;
     while (true) {
@@ -6864,15 +6846,15 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_281() {
+  private boolean jj_3R_278() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_310()) jj_scanpos = xsp;
-    if (jj_3R_170()) return true;
+    if (jj_3R_307()) jj_scanpos = xsp;
+    if (jj_3R_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_166() {
+  private boolean jj_3R_163() {
     if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
     while (true) {
@@ -6893,70 +6875,104 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_269() {
-    if (jj_3R_283()) return true;
+  private boolean jj_3R_339() {
+    if (jj_3R_259()) return true;
+    if (jj_scan_token(COLON)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_266() {
+    if (jj_3R_280()) return true;
     return false;
   }
 
-  private boolean jj_3R_353() {
+  private boolean jj_3R_350() {
     if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_351() {
+  private boolean jj_3R_348() {
     if (jj_scan_token(STARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_352() {
+  private boolean jj_3R_349() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_350() {
+  private boolean jj_3R_347() {
     if (jj_scan_token(DOLLARMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_349() {
+  private boolean jj_3R_346() {
     if (jj_scan_token(CARETMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_348() {
+  private boolean jj_3R_345() {
     if (jj_scan_token(DASHMATCH)) return true;
     return false;
   }
 
-  private boolean jj_3R_347() {
+  private boolean jj_3R_344() {
     if (jj_scan_token(INCLUDES)) return true;
     return false;
   }
 
-  private boolean jj_3R_289() {
+  private boolean jj_3R_340() {
+    if (jj_3R_339()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_286() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_346() {
+  private boolean jj_3R_233() {
+    if (jj_3R_239()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_343() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_335() {
+  private boolean jj_3_8() {
+    if (jj_3R_162()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_155() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_346()) {
+    if (jj_3_8()) {
     jj_scanpos = xsp;
-    if (jj_3R_347()) {
+    if (jj_3_9()) {
+    jj_scanpos = xsp;
+    if (jj_3_10()) return true;
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_332() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_343()) {
     jj_scanpos = xsp;
-    if (jj_3R_348()) {
+    if (jj_3R_344()) {
     jj_scanpos = xsp;
-    if (jj_3R_349()) {
+    if (jj_3R_345()) {
     jj_scanpos = xsp;
-    if (jj_3R_350()) {
+    if (jj_3R_346()) {
     jj_scanpos = xsp;
-    if (jj_3R_351()) return true;
+    if (jj_3R_347()) {
+    jj_scanpos = xsp;
+    if (jj_3R_348()) return true;
     }
     }
     }
@@ -6967,9 +6983,9 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_352()) {
+    if (jj_3R_349()) {
     jj_scanpos = xsp;
-    if (jj_3R_353()) return true;
+    if (jj_3R_350()) return true;
     }
     while (true) {
       xsp = jj_scanpos;
@@ -6978,41 +6994,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_342() {
-    if (jj_3R_262()) return true;
-    if (jj_scan_token(COLON)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_268() {
-    if (jj_3R_168()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_236() {
-    if (jj_3R_242()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_159() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_7()) {
-    jj_scanpos = xsp;
-    if (jj_3_8()) {
-    jj_scanpos = xsp;
-    if (jj_3_9()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3_7() {
-    if (jj_3R_165()) return true;
+  private boolean jj_3R_265() {
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_202() {
+  private boolean jj_3R_199() {
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
     while (true) {
@@ -7025,45 +7012,57 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_335()) jj_scanpos = xsp;
+    if (jj_3R_332()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_343() {
-    if (jj_3R_342()) return true;
+  private boolean jj_3R_234() {
+    if (jj_3R_260()) return true;
+    if (jj_3R_261()) return true;
+    if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_345() {
+  private boolean jj_3R_312() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_340()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_342() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_266() {
+  private boolean jj_3R_263() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_265()) return true;
+    if (jj_3R_262()) return true;
     return false;
   }
 
-  private boolean jj_3R_237() {
-    if (jj_3R_263()) return true;
-    if (jj_3R_264()) return true;
-    if (jj_scan_token(RPARAN)) return true;
+  private boolean jj_3R_232() {
+    if (jj_3R_259()) return true;
     return false;
   }
 
-  private boolean jj_3R_253() {
+  private boolean jj_3R_250() {
     if (jj_scan_token(PARENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_265() {
+  private boolean jj_3R_262() {
     if (jj_scan_token(IDENT)) return true;
     Token xsp;
     while (true) {
@@ -7073,17 +7072,12 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_252() {
+  private boolean jj_3R_249() {
     if (jj_scan_token(ANY)) return true;
     return false;
   }
 
-  private boolean jj_3R_235() {
-    if (jj_3R_262()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_192() {
+  private boolean jj_3R_189() {
     if (jj_scan_token(INCLUDE_SYM)) return true;
     Token xsp;
     while (true) {
@@ -7091,130 +7085,118 @@ LexicalUnitImpl result = null;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_235()) {
+    if (jj_3R_232()) {
     jj_scanpos = xsp;
-    if (jj_3R_236()) {
+    if (jj_3R_233()) {
     jj_scanpos = xsp;
-    if (jj_3R_237()) return true;
+    if (jj_3R_234()) return true;
     }
     }
-    if (jj_3R_238()) return true;
+    if (jj_3R_235()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_238()) { jj_scanpos = xsp; break; }
+      if (jj_3R_235()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_240() {
+  private boolean jj_3R_285() {
+    if (jj_scan_token(IDENT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_237() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_267()) {
+    if (jj_3R_264()) {
     jj_scanpos = xsp;
-    if (jj_3R_268()) {
+    if (jj_3R_265()) {
     jj_scanpos = xsp;
-    if (jj_3R_269()) return true;
+    if (jj_3R_266()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_267() {
-    if (jj_3R_271()) return true;
+  private boolean jj_3R_264() {
+    if (jj_3R_268()) return true;
     return false;
   }
 
-  private boolean jj_3R_273() {
+  private boolean jj_3R_270() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_288()) {
+    if (jj_3R_285()) {
     jj_scanpos = xsp;
-    if (jj_3R_289()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_288() {
-    if (jj_scan_token(IDENT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_315() {
-    if (jj_scan_token(SEMICOLON)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    if (jj_3R_286()) return true;
     }
-    xsp = jj_scanpos;
-    if (jj_3R_343()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_198() {
+  private boolean jj_3R_195() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_251()) {
+    if (jj_3R_248()) {
     jj_scanpos = xsp;
-    if (jj_3R_252()) {
+    if (jj_3R_249()) {
     jj_scanpos = xsp;
-    if (jj_3R_253()) return true;
+    if (jj_3R_250()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_251() {
+  private boolean jj_3R_248() {
     Token xsp;
-    if (jj_3R_273()) return true;
+    if (jj_3R_270()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_273()) { jj_scanpos = xsp; break; }
+      if (jj_3R_270()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_239() {
-    if (jj_3R_265()) return true;
+  private boolean jj_3R_236() {
+    if (jj_3R_262()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_266()) { jj_scanpos = xsp; break; }
+      if (jj_3R_263()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_282() {
+  private boolean jj_3R_279() {
     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_170()) return true;
+    if (jj_3R_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_339() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_311() {
+    if (jj_3R_339()) return true;
     return false;
   }
 
-  private boolean jj_3R_264() {
-    if (jj_3R_170()) return true;
+  private boolean jj_3R_261() {
+    if (jj_3R_166()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_281()) { jj_scanpos = xsp; break; }
+      if (jj_3R_278()) { jj_scanpos = xsp; break; }
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_282()) { jj_scanpos = xsp; break; }
+      if (jj_3R_279()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_163() {
+  private boolean jj_3R_160() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -7224,96 +7206,122 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_344() {
+  private boolean jj_3R_284() {
+    if (jj_scan_token(LBRACE)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_311()) jj_scanpos = xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_312()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(RBRACE)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_310() {
+    if (jj_3R_338()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_336() {
+    if (jj_3R_198()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_341() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_323() {
+  private boolean jj_3R_320() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_344()) {
+    if (jj_3R_341()) {
     jj_scanpos = xsp;
-    if (jj_3R_345()) return true;
+    if (jj_3R_342()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_337() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_244() {
+    if (jj_3R_269()) return true;
     return false;
   }
 
   private boolean jj_3R_334() {
-    if (jj_3R_201()) return true;
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_332() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_331() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_322() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_329() {
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_314() {
-    if (jj_3R_342()) return true;
+  private boolean jj_3R_319() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_200() {
+  private boolean jj_3R_197() {
     if (jj_scan_token(DOT)) return true;
     Token xsp;
-    if (jj_3R_323()) return true;
+    if (jj_3R_320()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_323()) { jj_scanpos = xsp; break; }
+      if (jj_3R_320()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_327() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3_7() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_160()) jj_scanpos = xsp;
+    if (jj_3R_161()) return true;
     return false;
   }
 
-  private boolean jj_3R_325() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_324() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_287() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_322() {
+    if (jj_3R_197()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_283() {
+    if (jj_3R_240()) return true;
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
     xsp = jj_scanpos;
-    if (jj_3R_314()) jj_scanpos = xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_315()) { jj_scanpos = xsp; break; }
-    }
-    if (jj_scan_token(RBRACE)) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+    if (jj_3R_310()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_193() {
+  private boolean jj_3R_190() {
     if (jj_scan_token(MEDIA_SYM)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    if (jj_3R_239()) return true;
+    if (jj_3R_236()) return true;
     if (jj_scan_token(LBRACE)) return true;
     while (true) {
       xsp = jj_scanpos;
@@ -7321,7 +7329,7 @@ LexicalUnitImpl result = null;
     }
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_240()) { jj_scanpos = xsp; break; }
+      if (jj_3R_237()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RBRACE)) return true;
     while (true) {
@@ -7331,261 +7339,258 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3_6() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_163()) jj_scanpos = xsp;
-    if (jj_3R_164()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_313() {
-    if (jj_3R_341()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_247() {
-    if (jj_3R_272()) return true;
+  private boolean jj_3R_335() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_338() {
-    if (jj_3R_202()) return true;
+  private boolean jj_3R_269() {
+    if (jj_3R_259()) 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_283()) {
+    jj_scanpos = xsp;
+    if (jj_3R_284()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_336() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_333() {
+    if (jj_3R_196()) return true;
     return false;
   }
 
-  private boolean jj_3R_294() {
+  private boolean jj_3R_291() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_336()) {
+    if (jj_3R_333()) {
     jj_scanpos = xsp;
-    if (jj_3R_337()) {
+    if (jj_3R_334()) {
     jj_scanpos = xsp;
-    if (jj_3R_338()) {
+    if (jj_3R_335()) {
     jj_scanpos = xsp;
-    if (jj_3R_339()) return true;
+    if (jj_3R_336()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_331() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_328() {
+    if (jj_3R_196()) return true;
     return false;
   }
 
-  private boolean jj_3R_293() {
+  private boolean jj_3R_290() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_331()) {
+    if (jj_3R_328()) {
     jj_scanpos = xsp;
-    if (jj_3R_332()) {
+    if (jj_3R_329()) {
     jj_scanpos = xsp;
-    if (jj_3R_333()) {
+    if (jj_3R_330()) {
     jj_scanpos = xsp;
-    if (jj_3R_334()) return true;
+    if (jj_3R_331()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_319() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_316() {
+    if (jj_3R_198()) return true;
     return false;
   }
 
-  private boolean jj_3R_333() {
-    if (jj_3R_202()) return true;
+  private boolean jj_3R_243() {
+    if (jj_3R_268()) return true;
     return false;
   }
 
-  private boolean jj_3R_324() {
+  private boolean jj_3R_330() {
     if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_292() {
+  private boolean jj_3R_321() {
+    if (jj_3R_196()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_289() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_324()) {
+    if (jj_3R_321()) {
     jj_scanpos = xsp;
-    if (jj_3R_325()) {
+    if (jj_3R_322()) {
     jj_scanpos = xsp;
-    if (jj_3R_326()) {
+    if (jj_3R_323()) {
     jj_scanpos = xsp;
-    if (jj_3R_327()) return true;
+    if (jj_3R_324()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_321() {
-    if (jj_3R_202()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_286() {
-    if (jj_3R_243()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_313()) jj_scanpos = xsp;
+  private boolean jj_3R_318() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_326() {
-    if (jj_3R_202()) return true;
+  private boolean jj_3R_323() {
+    if (jj_3R_199()) return true;
     return false;
   }
 
-  private boolean jj_3R_320() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_317() {
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_317() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_314() {
+    if (jj_3R_197()) return true;
     return false;
   }
 
-  private boolean jj_3R_291() {
+  private boolean jj_3R_288() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_320()) {
+    if (jj_3R_317()) {
     jj_scanpos = xsp;
-    if (jj_3R_321()) {
+    if (jj_3R_318()) {
     jj_scanpos = xsp;
-    if (jj_3R_322()) return true;
+    if (jj_3R_319()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_272() {
-    if (jj_3R_262()) return true;
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_180() {
+    if (jj_3R_199()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_286()) {
-    jj_scanpos = xsp;
-    if (jj_3R_287()) return true;
+      if (jj_3R_291()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_246() {
-    if (jj_3R_271()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_184() {
-    if (jj_3R_202()) return true;
+  private boolean jj_3R_179() {
+    if (jj_3R_198()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_294()) { jj_scanpos = xsp; break; }
+      if (jj_3R_290()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_183() {
-    if (jj_3R_201()) return true;
+  private boolean jj_3R_315() {
+    if (jj_3R_199()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_178() {
+    if (jj_3R_197()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_293()) { jj_scanpos = xsp; break; }
+      if (jj_3R_289()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_318() {
-    if (jj_3R_202()) return true;
+  private boolean jj_3R_313() {
+    if (jj_3R_196()) return true;
     return false;
   }
 
-  private boolean jj_3R_182() {
-    if (jj_3R_200()) return true;
+  private boolean jj_3R_287() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_313()) {
+    jj_scanpos = xsp;
+    if (jj_3R_314()) {
+    jj_scanpos = xsp;
+    if (jj_3R_315()) {
+    jj_scanpos = xsp;
+    if (jj_3R_316()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_177() {
+    if (jj_3R_196()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_292()) { jj_scanpos = xsp; break; }
+      if (jj_3R_288()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_316() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3_11() {
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_181() {
-    if (jj_3R_199()) return true;
+  private boolean jj_3R_176() {
+    if (jj_3R_195()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_291()) { jj_scanpos = xsp; break; }
+      if (jj_3R_287()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_290() {
+  private boolean jj_3R_158() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_316()) {
+    if (jj_3R_176()) {
     jj_scanpos = xsp;
-    if (jj_3R_317()) {
+    if (jj_3R_177()) {
     jj_scanpos = xsp;
-    if (jj_3R_318()) {
+    if (jj_3R_178()) {
     jj_scanpos = xsp;
-    if (jj_3R_319()) return true;
+    if (jj_3R_179()) {
+    jj_scanpos = xsp;
+    if (jj_3R_180()) return true;
     }
     }
     }
-    return false;
-  }
-
-  private boolean jj_3R_180() {
-    if (jj_3R_198()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_290()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_162() {
+  private boolean jj_3R_193() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_180()) {
+    if (jj_3_11()) {
     jj_scanpos = xsp;
-    if (jj_3R_181()) {
+    if (jj_3R_243()) {
     jj_scanpos = xsp;
-    if (jj_3R_182()) {
-    jj_scanpos = xsp;
-    if (jj_3R_183()) {
-    jj_scanpos = xsp;
-    if (jj_3R_184()) return true;
-    }
-    }
+    if (jj_3R_244()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3_10() {
-    if (jj_3R_168()) return true;
+  private boolean jj_3_6() {
+    if (jj_3R_156()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_273() {
+    if (jj_3R_240()) return true;
     return false;
   }
 
@@ -7599,7 +7604,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[231];
+  final private int[] jj_la1 = new int[228];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -7611,18 +7616,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,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x480002,0x480002,0x2,0x0,0x0,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x0,0xd0000000,0x4d380002,0x2,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
+      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x480002,0x480002,0x2,0x0,0x0,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x0,0xd0000000,0x4d380002,0x2,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x400000,0x0,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000381,0x6000381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x50000000,0x6400181,0x7e,0x0,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x6000100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x6000181,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000381,0x6000381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x100,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x100,0x100,0x0,0x0,0x0,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x50000000,0x6400181,0x7e,0x0,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x6000100,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x6000181,0x0,0x0,0x0,0x100,0x0,0x0,0x100,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0xa0000889,0x8,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x0,0xa0000881,0x980,0x0,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0xa0000889,0x8,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x0,0xa0000881,0x980,0x0,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,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,0x20000,0x0,0x20000,0x0,0x0,0x0,0x20000,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x20006,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[11];
+  final private JJCalls[] jj_2_rtns = new JJCalls[12];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -7632,7 +7637,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 228; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7642,7 +7647,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 228; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7652,7 +7657,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 228; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7662,7 +7667,7 @@ LexicalUnitImpl result = null;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 231; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 228; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7779,7 +7784,7 @@ LexicalUnitImpl result = null;
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 231; i++) {
+    for (int i = 0; i < 228; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -7824,7 +7829,7 @@ LexicalUnitImpl result = null;
 
   private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 11; i++) {
+    for (int i = 0; i < 12; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -7842,6 +7847,7 @@ LexicalUnitImpl result = null;
             case 8: jj_3_9(); break;
             case 9: jj_3_10(); break;
             case 10: jj_3_11(); break;
+            case 11: jj_3_12(); break;
           }
         }
         p = p.next;
index 7b74b6b0aa033b97fe8292ad826b67561782ed56..6569fe1bdddfe605c51faf491f411609b9da4ded 100644 (file)
@@ -24,6 +24,7 @@ import java.net.*;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
 
 import org.w3c.css.sac.ConditionFactory;
 import org.w3c.css.sac.Condition;
@@ -1413,11 +1414,12 @@ void ifContentStatement() :
 void ifDirective() :
 {
   Token n = null;
+  String s = null;
   String evaluator = "";
 }
 {
   < IF_SYM >
-  ( n = booleanExpressionToken() { evaluator += n.image; } )+
+  ( s = booleanExpressionToken() { evaluator += s;} )+
   < LBRACE >(< S >)*    
   { documentHandler.startIfElseDirective();
     documentHandler.ifDirective(evaluator);
@@ -1432,10 +1434,11 @@ void elseDirective() :
 {
   String evaluator = "";
   Token n = null;
+  String s = null;
 }
 {
   < ELSE_SYM >(< S >)* 
-  ( < IF > ( n = booleanExpressionToken() { evaluator += n.image; } )+ )?
+  ( < IF > ( s = booleanExpressionToken() { evaluator += s; } )+ )?
   < LBRACE >(< S >)*
   { if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
     else{ documentHandler.elseDirective(); }  
@@ -1444,13 +1447,16 @@ void elseDirective() :
   < RBRACE >(< S >)*
 }
 
-Token booleanExpressionToken() :
+String booleanExpressionToken() :
 {
   Token n = null;
+  String s = null;
 }
 {
  (
-   n = < VARIABLE >
+   LOOKAHEAD(2)
+   s = containsDirective()
+   |n = < VARIABLE >
    |n = < IDENT >
    |n = < NUMBER >
    |n = < LPARAN >
@@ -1468,7 +1474,8 @@ Token booleanExpressionToken() :
    |n = < S >
    |n = < NOT_EQ > 
 ){
-   return n;
+   if(n!=null){return n.image;}  
+   else{return s;}
  }
 }
   
@@ -1611,12 +1618,15 @@ String interpolation() :
 {
   n = < INTERPOLATION >
   {
-    return n.image;\r  }\r}
+    return n.image;
+  }
+}
 
-void listModifyDirective() :\r{
+void listModifyDirective() :
+{
 }
 {
-LOOKAHEAD(5)removeDirective()|LOOKAHEAD(5)appendDirective()|LOOKAHEAD(5)containsDirective()
+(LOOKAHEAD(5)removeDirective()|LOOKAHEAD(5)appendDirective()|LOOKAHEAD(5)containsDirective())(< S >)*< SEMICOLON >(<S>)*
 }
 
 
@@ -1638,7 +1648,7 @@ void appendDirective() :
   (< RPARAN >)? < COMMA >(< S >)*
   (remove = listModifyDirectiveArgs(1))
   ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)?
-  < RPARAN >(< S >)* < SEMICOLON >(< S >)*
+  < RPARAN >
 
   { documentHandler.appendDirective(variable,list,remove,separator); }
 }
@@ -1646,11 +1656,13 @@ void appendDirective() :
 /**
  * @exception ParseException exception during the parse
  */
-void removeDirective() :\r{\r    String list = null;
-       String remove = null;
-       String separator = null;
-       String variable = null;
-       Token n = null;
+void removeDirective() :
+{
+    String list = null;
+    String remove = null;
+    String separator = null;
+    String variable = null;
+    Token n = null;
 }
 {
   n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*
@@ -1659,7 +1671,7 @@ void removeDirective() :\r{\r       String list = null;
   (< RPARAN >)? < COMMA >(< S >)*
   (remove = listModifyDirectiveArgs(1))
   ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)?
-  < RPARAN >(< S >)* < SEMICOLON >(< S >)*
+  < RPARAN >
 
   { documentHandler.removeDirective(variable,list,remove,separator); }
 }
@@ -1667,7 +1679,7 @@ void removeDirective() :\r{\r       String list = null;
 /**
  * @exception ParseException exception during the parse
  */
-void containsDirective() :
+String containsDirective() :
 {
        String list = null;
        String remove = null;
@@ -1676,24 +1688,37 @@ void containsDirective() :
        Token n = null;
 }
 {
-  n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*
+  (n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*)?
   < CONTAINS >(< S >)*
   (list = listModifyDirectiveArgs(0))
   (< RPARAN >)? < COMMA >(< S >)*
   (remove = listModifyDirectiveArgs(1))
   ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)?
-  < RPARAN >(< S >)* < SEMICOLON >(< S >)*
-
-  { documentHandler.containsDirective(variable,list,remove,separator); }
+  < RPARAN >
+
+  {   /*
+       *if it is not in the form like "$contains : contains($items, .v-button);"
+       *for example in @if, like "@if (contains(a b c, b))", then create a temp
+       *variable for contains(a b c, b);
+       */
+      if(variable == null){
+          variable = "$var_"+UUID.randomUUID();
+      }
+      documentHandler.containsDirective(variable,list,remove,separator); 
+      return variable;
+  }
 }
 
 JAVACODE
-String listModifyDirectiveArgs(int nest)\r{
+String listModifyDirectiveArgs(int nest)
+{
        String list = "";
        int nesting = nest;
        Token t = null;
        
-       while(true)\r    {\r              t = getToken(1);
+       while(true)
+       {
+               t = getToken(1);
                String s = t.image;
                if(t.kind == VARIABLE||t.kind == IDENT)\r                {
                  list += s;
index 57b67459968845c63452522fce0d747661417c81..a5eeb88c77f72760e6acd6d61b6c8688f15d9519 100644 (file)
@@ -5,6 +5,7 @@ import java.net.*;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
 import org.w3c.css.sac.ConditionFactory;
 import org.w3c.css.sac.Condition;
 import org.w3c.css.sac.SelectorFactory;
index cce7f377fee83b418500527bd6d5c2c52365a5d7..d2701647eef86b0d16e5dcc367bceb22ff14cb47 100644 (file)
@@ -35,12 +35,10 @@ public class ListContainsNode extends ListModifyNode {
 
     @Override
     public VariableNode getModifiedList() {
-
         String contains = "" + list.containsAll(modify);
         VariableNode node = new VariableNode(variable.substring(1),
                 LexicalUnitImpl.createString(contains), false);
         return node;
 
     }
-
 }
diff --git a/theme-compiler/tests/resources/automatic/css/contains-in-if.css b/theme-compiler/tests/resources/automatic/css/contains-in-if.css
new file mode 100644 (file)
index 0000000..f41ae18
--- /dev/null
@@ -0,0 +1,7 @@
+.yes {
+       color: green;
+}
+
+.no {
+       color: red;
+}
diff --git a/theme-compiler/tests/resources/automatic/scss/contains-in-if.scss b/theme-compiler/tests/resources/automatic/scss/contains-in-if.scss
new file mode 100644 (file)
index 0000000..4bb7e7a
--- /dev/null
@@ -0,0 +1,18 @@
+@if (contains(a b c, b)) {
+       .yes {
+               color: green;
+       }
+} @else {
+       .no {
+               color: red;
+       }
+}
+@if (contains(a b c, d)) {
+       .yes {
+               color: green;
+       }
+} @else {
+       .no {
+               color: red;
+       }
+}
\ No newline at end of file