]> source.dussan.org Git - vaadin-framework.git/commitdiff
Improves remove() for #9380
authorMarc Englund <marc@vaadin.com>
Thu, 27 Sep 2012 07:24:35 +0000 (10:24 +0300)
committerMarc Englund <marc@vaadin.com>
Thu, 27 Sep 2012 07:24:35 +0000 (10:24 +0300)
theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java
theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java
theme-compiler/src/com/vaadin/sass/parser/Parser.java
theme-compiler/src/com/vaadin/sass/parser/Parser.jj
theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java
theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java
theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
theme-compiler/tests/resources/css/remove-directive.css
theme-compiler/tests/resources/scss/remove-directive.scss

index c23afa7acc6d49e61f25c3ad1700adbc90dfc970..3eda2fcdc6379be0385a9ae5117c390c4138ddab 100644 (file)
@@ -82,7 +82,7 @@ public interface SCSSDocumentHandler extends DocumentHandler {
 
     EachDefNode startEachDirective(String var, String listVariable);
 
-    void removeDirective(ArrayList<String> list, ArrayList<String> remove,
+    void removeDirective(String variable, String list, String remove,
             String separator);
 
 }
index 3378903c4d8b34174f5fdfdac3ffcdceb7ddde90..626969b827ab53f5fb8b92947609cce918eb5542 100644 (file)
@@ -306,9 +306,10 @@ public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler {
     }
 
     @Override
-    public void removeDirective(ArrayList<String> list,
-            ArrayList<String> remove, String separator) {
-        ListRemoveNode node = new ListRemoveNode(list, remove, separator);
+    public void removeDirective(String variable, String list, String remove,
+            String separator) {
+        ListRemoveNode node = new ListRemoveNode(variable, list, remove,
+                separator);
         nodeStack.peek().appendChild(node);
     }
 }
index 3a5c8cca94de7aaf11aafd8bad3f751b34acd798..e3b3be4b51285bfbfa55d651510fff5f454fce6d 100644 (file)
@@ -553,10 +553,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
       ;
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case VARIABLE:
-        variable();
-        break;
-      case REMOVE:
-        removeDirective();
+        if (jj_2_1(5)) {
+          removeDirective();
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case VARIABLE:
+            variable();
+            break;
+          default:
+            jj_la1[8] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
         break;
       case MIXIN_SYM:
         mixinDirective();
@@ -587,7 +596,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         fontFace();
         break;
       default:
-        jj_la1[8] = jj_gen;
+        jj_la1[9] = jj_gen;
           l = getLocator();
         ret = skipStatement();
           if ((ret == null) || (ret.length() == 0)) {
@@ -607,7 +616,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[9] = jj_gen;
+          jj_la1[10] = jj_gen;
           break label_8;
         }
         ignoreStatement();
@@ -618,7 +627,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
             ;
             break;
           default:
-            jj_la1[10] = jj_gen;
+            jj_la1[11] = jj_gen;
             break label_9;
           }
           jj_consume_token(S);
@@ -639,7 +648,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
       atRuleDeclaration();
       break;
     default:
-      jj_la1[11] = jj_gen;
+      jj_la1[12] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -664,7 +673,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[12] = jj_gen;
+          jj_la1[13] = jj_gen;
           break label_10;
         }
         jj_consume_token(S);
@@ -685,7 +694,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
                }
         break;
       default:
-        jj_la1[13] = jj_gen;
+        jj_la1[14] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -696,7 +705,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[14] = jj_gen;
+          jj_la1[15] = jj_gen;
           break label_11;
         }
         jj_consume_token(S);
@@ -706,7 +715,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         mediaStatement(ml);
         break;
       default:
-        jj_la1[15] = jj_gen;
+        jj_la1[16] = jj_gen;
         ;
       }
       jj_consume_token(SEMICOLON);
@@ -717,7 +726,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[16] = jj_gen;
+          jj_la1[17] = jj_gen;
           break label_12;
         }
         jj_consume_token(S);
@@ -751,7 +760,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[17] = jj_gen;
+          jj_la1[18] = jj_gen;
           break label_13;
         }
         jj_consume_token(S);
@@ -766,7 +775,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[18] = jj_gen;
+          jj_la1[19] = jj_gen;
           break label_14;
         }
         jj_consume_token(S);
@@ -809,7 +818,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[19] = jj_gen;
+          jj_la1[20] = jj_gen;
           break label_15;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -850,7 +859,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           skipUnknownRule();
           break;
         default:
-          jj_la1[20] = jj_gen;
+          jj_la1[21] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -863,7 +872,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[21] = jj_gen;
+          jj_la1[22] = jj_gen;
           break label_16;
         }
         jj_consume_token(S);
@@ -890,7 +899,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         ;
         break;
       default:
-        jj_la1[22] = jj_gen;
+        jj_la1[23] = jj_gen;
         break label_17;
       }
       jj_consume_token(COMMA);
@@ -901,7 +910,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[23] = jj_gen;
+          jj_la1[24] = jj_gen;
           break label_18;
         }
         jj_consume_token(S);
@@ -925,7 +934,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         ;
         break;
       default:
-        jj_la1[24] = jj_gen;
+        jj_la1[25] = jj_gen;
         break label_19;
       }
       jj_consume_token(S);
@@ -951,7 +960,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[25] = jj_gen;
+          jj_la1[26] = jj_gen;
           break label_20;
         }
         jj_consume_token(S);
@@ -966,14 +975,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
             ;
             break;
           default:
-            jj_la1[26] = jj_gen;
+            jj_la1[27] = jj_gen;
             break label_21;
           }
           jj_consume_token(S);
         }
         break;
       default:
-        jj_la1[27] = jj_gen;
+        jj_la1[28] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -981,7 +990,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         pseudo = pseudo_page();
         break;
       default:
-        jj_la1[28] = jj_gen;
+        jj_la1[29] = jj_gen;
         ;
       }
           if (n != null) {
@@ -995,7 +1004,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[29] = jj_gen;
+          jj_la1[30] = jj_gen;
           break label_22;
         }
         jj_consume_token(S);
@@ -1007,7 +1016,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         declaration();
         break;
       default:
-        jj_la1[30] = jj_gen;
+        jj_la1[31] = jj_gen;
         ;
       }
       label_23:
@@ -1017,7 +1026,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[31] = jj_gen;
+          jj_la1[32] = jj_gen;
           break label_23;
         }
         jj_consume_token(SEMICOLON);
@@ -1028,7 +1037,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
             ;
             break;
           default:
-            jj_la1[32] = jj_gen;
+            jj_la1[33] = jj_gen;
             break label_24;
           }
           jj_consume_token(S);
@@ -1038,7 +1047,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           declaration();
           break;
         default:
-          jj_la1[33] = jj_gen;
+          jj_la1[34] = jj_gen;
           ;
         }
       }
@@ -1050,7 +1059,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[34] = jj_gen;
+          jj_la1[35] = jj_gen;
           break label_25;
         }
         jj_consume_token(S);
@@ -1084,7 +1093,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         ;
         break;
       default:
-        jj_la1[35] = jj_gen;
+        jj_la1[36] = jj_gen;
         break label_26;
       }
       jj_consume_token(S);
@@ -1104,7 +1113,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[36] = jj_gen;
+          jj_la1[37] = jj_gen;
           break label_27;
         }
         jj_consume_token(S);
@@ -1117,7 +1126,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[37] = jj_gen;
+          jj_la1[38] = jj_gen;
           break label_28;
         }
         jj_consume_token(S);
@@ -1128,7 +1137,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
         declaration();
         break;
       default:
-        jj_la1[38] = jj_gen;
+        jj_la1[39] = jj_gen;
         ;
       }
       label_29:
@@ -1138,7 +1147,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[39] = jj_gen;
+          jj_la1[40] = jj_gen;
           break label_29;
         }
         jj_consume_token(SEMICOLON);
@@ -1149,7 +1158,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
             ;
             break;
           default:
-            jj_la1[40] = jj_gen;
+            jj_la1[41] = jj_gen;
             break label_30;
           }
           jj_consume_token(S);
@@ -1159,7 +1168,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           declaration();
           break;
         default:
-          jj_la1[41] = jj_gen;
+          jj_la1[42] = jj_gen;
           ;
         }
       }
@@ -1171,7 +1180,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
           ;
           break;
         default:
-          jj_la1[42] = jj_gen;
+          jj_la1[43] = jj_gen;
           break label_31;
         }
         jj_consume_token(S);
@@ -1278,7 +1287,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
       n = jj_consume_token(UNKNOWN);
       break;
     default:
-      jj_la1[43] = jj_gen;
+      jj_la1[44] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1306,7 +1315,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[44] = jj_gen;
+          jj_la1[45] = jj_gen;
           break label_32;
         }
         jj_consume_token(S);
@@ -1322,7 +1331,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[45] = jj_gen;
+          jj_la1[46] = jj_gen;
           break label_33;
         }
         jj_consume_token(S);
@@ -1344,7 +1353,7 @@ char connector = ' ';
                    connector = '>';
           break;
         default:
-          jj_la1[46] = jj_gen;
+          jj_la1[47] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1355,20 +1364,20 @@ char connector = ' ';
             ;
             break;
           default:
-            jj_la1[47] = jj_gen;
+            jj_la1[48] = jj_gen;
             break label_34;
           }
           jj_consume_token(S);
         }
         break;
       default:
-        jj_la1[48] = jj_gen;
+        jj_la1[49] = jj_gen;
         ;
       }
                {if (true) return connector;}
       break;
     default:
-      jj_la1[49] = jj_gen;
+      jj_la1[50] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1387,7 +1396,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[50] = jj_gen;
+        jj_la1[51] = jj_gen;
         break label_35;
       }
       jj_consume_token(S);
@@ -1435,7 +1444,7 @@ char connector = ' ';
         { value += n.image; }
         break;
       default:
-        jj_la1[51] = jj_gen;
+        jj_la1[52] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1452,7 +1461,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[52] = jj_gen;
+        jj_la1[53] = jj_gen;
         break label_36;
       }
     }
@@ -1464,7 +1473,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[53] = jj_gen;
+        jj_la1[54] = jj_gen;
         break label_37;
       }
       jj_consume_token(S);
@@ -1485,7 +1494,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[54] = jj_gen;
+        jj_la1[55] = jj_gen;
         break label_38;
       }
       jj_consume_token(S);
@@ -1504,7 +1513,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[55] = jj_gen;
+        jj_la1[56] = jj_gen;
         break label_39;
       }
       jj_consume_token(S);
@@ -1523,7 +1532,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[56] = jj_gen;
+        jj_la1[57] = jj_gen;
         break label_40;
       }
       jj_consume_token(S);
@@ -1551,7 +1560,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[57] = jj_gen;
+          jj_la1[58] = jj_gen;
           break label_41;
         }
         jj_consume_token(S);
@@ -1576,66 +1585,70 @@ char connector = ' ';
         case VARIABLE:
         case HASH:
         case MEDIA_SYM:
-        case REMOVE:
           ;
           break;
         default:
-          jj_la1[58] = jj_gen;
+          jj_la1[59] = jj_gen;
           break label_42;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case IF_SYM:
           ifDirective();
           break;
-        case REMOVE:
-          removeDirective();
-          break;
-        case INCLUDE_SYM:
-          includeDirective();
-          break;
-        case MEDIA_SYM:
-          media();
-          break;
-        case EXTEND_SYM:
-          extendDirective();
-          break;
-        case EACH_SYM:
-          eachDirective();
-          break;
-        case VARIABLE:
-          variable();
-          break;
         default:
-          jj_la1[60] = jj_gen;
-          if (jj_2_1(3)) {
+          jj_la1[61] = jj_gen;
+          if (jj_2_2(5)) {
+            removeDirective();
+          } else {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-            case MICROSOFT_RULE:
-              microsoftExtension();
+            case INCLUDE_SYM:
+              includeDirective();
               break;
-            case IDENT:
-              declarationOrNestedProperties();
+            case MEDIA_SYM:
+              media();
               break;
-            default:
-              jj_la1[59] = jj_gen;
-              jj_consume_token(-1);
-              throw new ParseException();
-            }
-          } else {
-            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-            case LBRACKET:
-            case ANY:
-            case PARENT:
-            case DOT:
-            case COLON:
-            case INTERPOLATION:
-            case IDENT:
-            case HASH:
-              styleRule();
+            case EXTEND_SYM:
+              extendDirective();
+              break;
+            case EACH_SYM:
+              eachDirective();
+              break;
+            case VARIABLE:
+              variable();
               break;
             default:
-              jj_la1[61] = jj_gen;
-              jj_consume_token(-1);
-              throw new ParseException();
+              jj_la1[62] = jj_gen;
+              if (jj_2_3(3)) {
+                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+                case MICROSOFT_RULE:
+                  microsoftExtension();
+                  break;
+                case IDENT:
+                  declarationOrNestedProperties();
+                  break;
+                default:
+                  jj_la1[60] = jj_gen;
+                  jj_consume_token(-1);
+                  throw new ParseException();
+                }
+              } else {
+                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+                case LBRACKET:
+                case ANY:
+                case PARENT:
+                case DOT:
+                case COLON:
+                case INTERPOLATION:
+                case IDENT:
+                case HASH:
+                  styleRule();
+                  break;
+                default:
+                  jj_la1[63] = jj_gen;
+                  jj_consume_token(-1);
+                  throw new ParseException();
+                }
+              }
             }
           }
         }
@@ -1648,7 +1661,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[62] = jj_gen;
+          jj_la1[64] = jj_gen;
           break label_43;
         }
         jj_consume_token(S);
@@ -1685,7 +1698,7 @@ char connector = ' ';
         ;
         break;
       default:
-        jj_la1[63] = jj_gen;
+        jj_la1[65] = jj_gen;
         break label_44;
       }
       jj_consume_token(COMMA);
@@ -1696,7 +1709,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[64] = jj_gen;
+          jj_la1[66] = jj_gen;
           break label_45;
         }
         jj_consume_token(S);
@@ -1719,7 +1732,7 @@ char connector = ' ';
       selector = simple_selector(null, ' ');
       label_46:
       while (true) {
-        if (jj_2_2(2)) {
+        if (jj_2_4(2)) {
           ;
         } else {
           break label_46;
@@ -1734,7 +1747,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[65] = jj_gen;
+          jj_la1[67] = jj_gen;
           break label_47;
         }
         jj_consume_token(S);
@@ -1789,7 +1802,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[66] = jj_gen;
+          jj_la1[68] = jj_gen;
           break label_48;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1806,7 +1819,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[67] = jj_gen;
+          jj_la1[69] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1823,7 +1836,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[68] = jj_gen;
+          jj_la1[70] = jj_gen;
           break label_49;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1837,7 +1850,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[69] = jj_gen;
+          jj_la1[71] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1855,7 +1868,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[70] = jj_gen;
+          jj_la1[72] = jj_gen;
           break label_50;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1872,7 +1885,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[71] = jj_gen;
+          jj_la1[73] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1890,7 +1903,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[72] = jj_gen;
+          jj_la1[74] = jj_gen;
           break label_51;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1907,7 +1920,7 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[73] = jj_gen;
+          jj_la1[75] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -1925,7 +1938,7 @@ char connector = ' ';
           ;
           break;
         default:
-          jj_la1[74] = jj_gen;
+          jj_la1[76] = jj_gen;
           break label_52;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1942,14 +1955,14 @@ char connector = ' ';
           cond = pseudo(cond);
           break;
         default:
-          jj_la1[75] = jj_gen;
+          jj_la1[77] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
       }
       break;
     default:
-      jj_la1[76] = jj_gen;
+      jj_la1[78] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2002,7 +2015,7 @@ String s = ".";
                                                            s += t.image;
         break;
       default:
-        jj_la1[77] = jj_gen;
+        jj_la1[79] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2012,7 +2025,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[78] = jj_gen;
+        jj_la1[80] = jj_gen;
         break label_53;
       }
     }
@@ -2044,7 +2057,7 @@ String s = ".";
                                                         s += t.image;
           break;
         default:
-          jj_la1[79] = jj_gen;
+          jj_la1[81] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2054,7 +2067,7 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[80] = jj_gen;
+          jj_la1[82] = jj_gen;
           break label_54;
         }
       }
@@ -2069,7 +2082,7 @@ String s = ".";
       {if (true) return "&";}
       break;
     default:
-      jj_la1[81] = jj_gen;
+      jj_la1[83] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2092,7 +2105,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[82] = jj_gen;
+        jj_la1[84] = jj_gen;
         break label_55;
       }
       jj_consume_token(S);
@@ -2105,7 +2118,7 @@ String s = ".";
         ;
         break;
       default:
-        jj_la1[83] = jj_gen;
+        jj_la1[85] = jj_gen;
         break label_56;
       }
       jj_consume_token(S);
@@ -2128,7 +2141,7 @@ String s = ".";
                           cases = 3;
         break;
       default:
-        jj_la1[84] = jj_gen;
+        jj_la1[86] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2139,7 +2152,7 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[85] = jj_gen;
+          jj_la1[87] = jj_gen;
           break label_57;
         }
         jj_consume_token(S);
@@ -2154,7 +2167,7 @@ String s = ".";
                            attValue = val.image;
         break;
       default:
-        jj_la1[86] = jj_gen;
+        jj_la1[88] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2165,14 +2178,14 @@ String s = ".";
           ;
           break;
         default:
-          jj_la1[87] = jj_gen;
+          jj_la1[89] = jj_gen;
           break label_58;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[88] = jj_gen;
+      jj_la1[90] = jj_gen;
       ;
     }
     jj_consume_token(RBRACKET);
@@ -2218,7 +2231,7 @@ boolean isPseudoElement = false;
              isPseudoElement=true;
       break;
     default:
-      jj_la1[89] = jj_gen;
+      jj_la1[91] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2251,7 +2264,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[90] = jj_gen;
+          jj_la1[92] = jj_gen;
           break label_59;
         }
         jj_consume_token(S);
@@ -2264,7 +2277,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[91] = jj_gen;
+          jj_la1[93] = jj_gen;
           break label_60;
         }
         jj_consume_token(S);
@@ -2284,7 +2297,7 @@ boolean isPseudoElement = false;
                   }
       break;
     default:
-      jj_la1[92] = jj_gen;
+      jj_la1[94] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2321,7 +2334,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[93] = jj_gen;
+          jj_la1[95] = jj_gen;
           break label_61;
         }
         jj_consume_token(S);
@@ -2332,7 +2345,7 @@ boolean isPseudoElement = false;
         guarded = guarded();
         break;
       default:
-        jj_la1[94] = jj_gen;
+        jj_la1[96] = jj_gen;
         ;
       }
       label_62:
@@ -2345,7 +2358,7 @@ boolean isPseudoElement = false;
             ;
             break;
           default:
-            jj_la1[95] = jj_gen;
+            jj_la1[97] = jj_gen;
             break label_63;
           }
           jj_consume_token(S);
@@ -2355,7 +2368,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[96] = jj_gen;
+          jj_la1[98] = jj_gen;
           break label_62;
         }
       }
@@ -2416,7 +2429,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[97] = jj_gen;
+        jj_la1[99] = jj_gen;
         break label_64;
       }
     }
@@ -2428,7 +2441,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[98] = jj_gen;
+        jj_la1[100] = jj_gen;
         break label_65;
       }
       jj_consume_token(S);
@@ -2453,7 +2466,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[99] = jj_gen;
+        jj_la1[101] = jj_gen;
         break label_66;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2470,8 +2483,8 @@ boolean isPseudoElement = false;
         variable();
         break;
       default:
-        jj_la1[100] = jj_gen;
-        if (jj_2_3(3)) {
+        jj_la1[102] = jj_gen;
+        if (jj_2_5(3)) {
           declarationOrNestedProperties();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2486,7 +2499,7 @@ boolean isPseudoElement = false;
             styleRule();
             break;
           default:
-            jj_la1[101] = jj_gen;
+            jj_la1[103] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -2501,7 +2514,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[102] = jj_gen;
+        jj_la1[104] = jj_gen;
         break label_67;
       }
       jj_consume_token(S);
@@ -2513,7 +2526,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[103] = jj_gen;
+        jj_la1[105] = jj_gen;
         break label_68;
       }
       elseDirective();
@@ -2532,7 +2545,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[104] = jj_gen;
+        jj_la1[106] = jj_gen;
         break label_69;
       }
       jj_consume_token(S);
@@ -2563,7 +2576,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[105] = jj_gen;
+          jj_la1[107] = jj_gen;
           break label_70;
         }
         n = booleanExpressionToken();
@@ -2571,7 +2584,7 @@ boolean isPseudoElement = false;
       }
       break;
     default:
-      jj_la1[106] = jj_gen;
+      jj_la1[108] = jj_gen;
       ;
     }
     jj_consume_token(LBRACE);
@@ -2582,7 +2595,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[107] = jj_gen;
+        jj_la1[109] = jj_gen;
         break label_71;
       }
       jj_consume_token(S);
@@ -2607,7 +2620,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[108] = jj_gen;
+        jj_la1[110] = jj_gen;
         break label_72;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2624,8 +2637,8 @@ boolean isPseudoElement = false;
         variable();
         break;
       default:
-        jj_la1[109] = jj_gen;
-        if (jj_2_4(3)) {
+        jj_la1[111] = jj_gen;
+        if (jj_2_6(3)) {
           declarationOrNestedProperties();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2640,7 +2653,7 @@ boolean isPseudoElement = false;
             styleRule();
             break;
           default:
-            jj_la1[110] = jj_gen;
+            jj_la1[112] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -2655,7 +2668,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[111] = jj_gen;
+        jj_la1[113] = jj_gen;
         break label_73;
       }
       jj_consume_token(S);
@@ -2717,7 +2730,7 @@ boolean isPseudoElement = false;
       n = jj_consume_token(NOT_EQ);
       break;
     default:
-      jj_la1[112] = jj_gen;
+      jj_la1[114] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2737,7 +2750,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[113] = jj_gen;
+        jj_la1[115] = jj_gen;
         break label_74;
       }
       jj_consume_token(S);
@@ -2750,7 +2763,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[114] = jj_gen;
+        jj_la1[116] = jj_gen;
         break label_75;
       }
       jj_consume_token(S);
@@ -2763,7 +2776,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[115] = jj_gen;
+        jj_la1[117] = jj_gen;
         break label_76;
       }
       jj_consume_token(S);
@@ -2773,16 +2786,12 @@ boolean isPseudoElement = false;
       list = stringList();
    documentHandler.startEachDirective(var.image, list);
       break;
-    case REMOVE:
-    documentHandler.startEachDirective(var.image, list);
-      removeDirective();
-      break;
     case VARIABLE:
       listVariable = variableName();
    documentHandler.startEachDirective(var.image, listVariable);
       break;
     default:
-      jj_la1[116] = jj_gen;
+      jj_la1[118] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2794,7 +2803,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[117] = jj_gen;
+        jj_la1[119] = jj_gen;
         break label_77;
       }
       jj_consume_token(S);
@@ -2814,49 +2823,53 @@ boolean isPseudoElement = false;
       case VARIABLE:
       case HASH:
       case MEDIA_SYM:
-      case REMOVE:
         ;
         break;
       default:
-        jj_la1[118] = jj_gen;
+        jj_la1[120] = jj_gen;
         break label_78;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case INCLUDE_SYM:
         includeDirective();
         break;
-      case REMOVE:
-        removeDirective();
-        break;
-      case MEDIA_SYM:
-        media();
-        break;
-      case EXTEND_SYM:
-        extendDirective();
-        break;
-      case VARIABLE:
-        variable();
-        break;
       default:
-        jj_la1[119] = jj_gen;
-        if (jj_2_5(3)) {
-          declarationOrNestedProperties();
+        jj_la1[121] = jj_gen;
+        if (jj_2_7(5)) {
+          removeDirective();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LBRACKET:
-          case ANY:
-          case PARENT:
-          case DOT:
-          case COLON:
-          case INTERPOLATION:
-          case IDENT:
-          case HASH:
-            styleRule();
+          case MEDIA_SYM:
+            media();
+            break;
+          case EXTEND_SYM:
+            extendDirective();
+            break;
+          case VARIABLE:
+            variable();
             break;
           default:
-            jj_la1[120] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
+            jj_la1[122] = jj_gen;
+            if (jj_2_8(3)) {
+              declarationOrNestedProperties();
+            } else {
+              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+              case LBRACKET:
+              case ANY:
+              case PARENT:
+              case DOT:
+              case COLON:
+              case INTERPOLATION:
+              case IDENT:
+              case HASH:
+                styleRule();
+                break;
+              default:
+                jj_la1[123] = jj_gen;
+                jj_consume_token(-1);
+                throw new ParseException();
+              }
+            }
           }
         }
       }
@@ -2869,7 +2882,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[121] = jj_gen;
+        jj_la1[124] = jj_gen;
         break label_79;
       }
       jj_consume_token(S);
@@ -2888,7 +2901,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[122] = jj_gen;
+        jj_la1[125] = jj_gen;
         break label_80;
       }
       jj_consume_token(S);
@@ -2901,7 +2914,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[123] = jj_gen;
+        jj_la1[126] = jj_gen;
         break label_81;
       }
       jj_consume_token(COMMA);
@@ -2912,7 +2925,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[124] = jj_gen;
+          jj_la1[127] = jj_gen;
           break label_82;
         }
         jj_consume_token(S);
@@ -2926,7 +2939,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[125] = jj_gen;
+          jj_la1[128] = jj_gen;
           break label_83;
         }
         jj_consume_token(S);
@@ -2948,7 +2961,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[126] = jj_gen;
+        jj_la1[129] = jj_gen;
         break label_84;
       }
       jj_consume_token(S);
@@ -2968,14 +2981,14 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[127] = jj_gen;
+          jj_la1[130] = jj_gen;
           break label_85;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[128] = jj_gen;
+      jj_la1[131] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2987,7 +3000,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[129] = jj_gen;
+        jj_la1[132] = jj_gen;
         break label_86;
       }
       jj_consume_token(S);
@@ -3012,7 +3025,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[130] = jj_gen;
+        jj_la1[133] = jj_gen;
         break label_87;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3032,8 +3045,8 @@ boolean isPseudoElement = false;
         variable();
         break;
       default:
-        jj_la1[131] = jj_gen;
-        if (jj_2_6(3)) {
+        jj_la1[134] = jj_gen;
+        if (jj_2_9(3)) {
           declarationOrNestedProperties();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3048,7 +3061,7 @@ boolean isPseudoElement = false;
             styleRule();
             break;
           default:
-            jj_la1[132] = jj_gen;
+            jj_la1[135] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -3063,7 +3076,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[133] = jj_gen;
+        jj_la1[136] = jj_gen;
         break label_88;
       }
       jj_consume_token(S);
@@ -3082,7 +3095,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[134] = jj_gen;
+        jj_la1[137] = jj_gen;
         break label_89;
       }
       jj_consume_token(COMMA);
@@ -3093,7 +3106,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[135] = jj_gen;
+          jj_la1[138] = jj_gen;
           break label_90;
         }
         jj_consume_token(S);
@@ -3122,7 +3135,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[136] = jj_gen;
+          jj_la1[139] = jj_gen;
           break label_91;
         }
         jj_consume_token(S);
@@ -3131,7 +3144,7 @@ boolean isPseudoElement = false;
                                                       prev = first;
       label_92:
       while (true) {
-        if (jj_2_7(2)) {
+        if (jj_2_10(2)) {
           ;
         } else {
           break label_92;
@@ -3146,14 +3159,14 @@ boolean isPseudoElement = false;
               ;
               break;
             default:
-              jj_la1[137] = jj_gen;
+              jj_la1[140] = jj_gen;
               break label_93;
             }
             jj_consume_token(S);
           }
           break;
         default:
-          jj_la1[138] = jj_gen;
+          jj_la1[141] = jj_gen;
           ;
         }
         next = term(prev);
@@ -3161,7 +3174,7 @@ boolean isPseudoElement = false;
       }
       break;
     default:
-      jj_la1[139] = jj_gen;
+      jj_la1[142] = jj_gen;
       ;
     }
         VariableNode arg = new VariableNode(name, first, false);
@@ -3209,7 +3222,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[140] = jj_gen;
+        jj_la1[143] = jj_gen;
         break label_94;
       }
       next = term(prev);
@@ -3222,7 +3235,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[141] = jj_gen;
+        jj_la1[144] = jj_gen;
         break label_95;
       }
       jj_consume_token(COMMA);
@@ -3233,7 +3246,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[142] = jj_gen;
+          jj_la1[145] = jj_gen;
           break label_96;
         }
         jj_consume_token(S);
@@ -3273,7 +3286,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[143] = jj_gen;
+          jj_la1[146] = jj_gen;
           break label_97;
         }
         next = term(prev);
@@ -3295,7 +3308,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[144] = jj_gen;
+        jj_la1[147] = jj_gen;
         break label_98;
       }
       jj_consume_token(S);
@@ -3310,7 +3323,7 @@ boolean isPseudoElement = false;
       jj_consume_token(RPARAN);
       break;
     default:
-      jj_la1[145] = jj_gen;
+      jj_la1[148] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3324,7 +3337,7 @@ boolean isPseudoElement = false;
           ;
           break;
         default:
-          jj_la1[146] = jj_gen;
+          jj_la1[149] = jj_gen;
           break label_100;
         }
         jj_consume_token(S);
@@ -3334,7 +3347,7 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[147] = jj_gen;
+        jj_la1[150] = jj_gen;
         break label_99;
       }
     }
@@ -3345,11 +3358,13 @@ boolean isPseudoElement = false;
  * @exception ParseException exception during the parse
  */
   final public void removeDirective() throws ParseException {
-        ArrayList<String> list = null;
-        ArrayList<String> remove = null;
+        String list = null;
+        String remove = null;
         String separator = null;
+        String variable = null;
         Token n = null;
-    jj_consume_token(REMOVE);
+    n = jj_consume_token(VARIABLE);
+                    variable = n.image;
     label_101:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3357,13 +3372,12 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[148] = jj_gen;
+        jj_la1[151] = jj_gen;
         break label_101;
       }
       jj_consume_token(S);
     }
-    list = removeDirectiveArgs(0);
-    jj_consume_token(COMMA);
+    jj_consume_token(COLON);
     label_102:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3371,90 +3385,145 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[149] = jj_gen;
+        jj_la1[152] = jj_gen;
         break label_102;
       }
       jj_consume_token(S);
     }
+    jj_consume_token(REMOVE);
+    label_103:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[153] = jj_gen;
+        break label_103;
+      }
+      jj_consume_token(S);
+    }
+    list = removeDirectiveArgs(0);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case RPARAN:
+      jj_consume_token(RPARAN);
+      break;
+    default:
+      jj_la1[154] = jj_gen;
+      ;
+    }
+    jj_consume_token(COMMA);
+    label_104:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case S:
+        ;
+        break;
+      default:
+        jj_la1[155] = jj_gen;
+        break label_104;
+      }
+      jj_consume_token(S);
+    }
     remove = removeDirectiveArgs(1);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
       jj_consume_token(COMMA);
-      label_103:
+      label_105:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[150] = jj_gen;
-          break label_103;
+          jj_la1[156] = jj_gen;
+          break label_105;
         }
         jj_consume_token(S);
       }
       n = jj_consume_token(IDENT);
                                      separator = n.image;
-      label_104:
+      label_106:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[151] = jj_gen;
-          break label_104;
+          jj_la1[157] = jj_gen;
+          break label_106;
         }
         jj_consume_token(S);
       }
       break;
     default:
-      jj_la1[152] = jj_gen;
+      jj_la1[158] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
-    label_105:
+    label_107:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[153] = jj_gen;
-        break label_105;
+        jj_la1[159] = jj_gen;
+        break label_107;
       }
       jj_consume_token(S);
     }
     jj_consume_token(SEMICOLON);
-    label_106:
+    label_108:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[154] = jj_gen;
-        break label_106;
+        jj_la1[160] = jj_gen;
+        break label_108;
       }
       jj_consume_token(S);
     }
-    documentHandler.removeDirective(list,remove,separator);
+    documentHandler.removeDirective(variable,list,remove,separator);
   }
 
-  ArrayList<String > removeDirectiveArgs(int nest) throws ParseException {
-        ArrayList<String> list = new ArrayList<String>();
-        // Start at one due to "remove(" containing one.
+  String removeDirectiveArgs(int nest) throws ParseException {
+        String list = "";
         int nesting = nest;
         Token t = null;
 
         while(true)
         {
                 t = getToken(1);
-                if(t.kind == VARIABLE)
+                String s = t.image;
+                if(t.kind == VARIABLE||t.kind == IDENT)
                 {
-                  list.add(t.image);
-                }else if(t.kind == STRING)
+                  list += s;
+                }else if(s.toLowerCase().equals("auto")||s.toLowerCase().equals("space")||s.toLowerCase().equals("comma"))
+                {
+                        int i = 2;
+                        Token temp = getToken(i);
+                        boolean isLast = true;
+                        while(temp.kind != SEMICOLON)
+                        {
+                                if(temp.kind != RPARAN || temp.kind != S)
+                                {
+                                  isLast = false;
+                                }
+                                i++;
+                                temp = getToken(i);
+                        }
+
+                        if(isLast)
+                        {
+                        return list;
+                        }
+                }
+                else if(t.kind == STRING)
                 {
-                        list.add(t.image.substring(1,t.image.length()).substring(0,t.image.length()-2));
+                        list += s.substring(1,s.length()).substring(0,s.length()-2);
 
                 }else if(t.kind == LPARAN)
                 {
@@ -3468,7 +3537,6 @@ boolean isPseudoElement = false;
                         nesting--;
                         if(nesting == 0)
                         {
-                                getNextToken();
                                 return list;
                         }
                 } else if(t.kind == COMMA)
@@ -3476,7 +3544,14 @@ boolean isPseudoElement = false;
                         if(nesting == nest)
                         {
                           return list;
+                        }else
+                        {
+                          list += ",";
                         }
+
+                }else if(t.kind == S)
+                {
+                  list += " ";
                 } else if(t.kind == LBRACE)
                 {
                   throw new CSSParseException("Invalid token,'{' found", getLocator());
@@ -3519,20 +3594,20 @@ boolean isPseudoElement = false;
                        exclusive = false;
       break;
     default:
-      jj_la1[155] = jj_gen;
+      jj_la1[161] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     to = skipStatementUntilLeftBrace();
-    label_107:
+    label_109:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[156] = jj_gen;
-        break label_107;
+        jj_la1[162] = jj_gen;
+        break label_109;
       }
       jj_consume_token(S);
     }
@@ -3553,31 +3628,31 @@ boolean isPseudoElement = false;
   final public void extendDirective() throws ParseException {
  ArrayList<String> list;
     jj_consume_token(EXTEND_SYM);
-    label_108:
+    label_110:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[157] = jj_gen;
-        break label_108;
+        jj_la1[163] = jj_gen;
+        break label_110;
       }
       jj_consume_token(S);
     }
     list = selectorList();
-    label_109:
+    label_111:
     while (true) {
       jj_consume_token(SEMICOLON);
-      label_110:
+      label_112:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[158] = jj_gen;
-          break label_110;
+          jj_la1[164] = jj_gen;
+          break label_112;
         }
         jj_consume_token(S);
       }
@@ -3586,8 +3661,8 @@ boolean isPseudoElement = false;
         ;
         break;
       default:
-        jj_la1[159] = jj_gen;
-        break label_109;
+        jj_la1[165] = jj_gen;
+        break label_111;
       }
     }
      documentHandler.extendDirective(list);
@@ -3614,28 +3689,28 @@ boolean isPseudoElement = false;
 LexicalUnit exp;
     name = property();
     jj_consume_token(COLON);
-    label_111:
+    label_113:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[160] = jj_gen;
-        break label_111;
+        jj_la1[166] = jj_gen;
+        break label_113;
       }
       jj_consume_token(S);
     }
     jj_consume_token(LBRACE);
-    label_112:
+    label_114:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[161] = jj_gen;
-        break label_112;
+        jj_la1[167] = jj_gen;
+        break label_114;
       }
       jj_consume_token(S);
     }
@@ -3645,29 +3720,29 @@ LexicalUnit exp;
       declaration();
       break;
     default:
-      jj_la1[162] = jj_gen;
+      jj_la1[168] = jj_gen;
       ;
     }
-    label_113:
+    label_115:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[163] = jj_gen;
-        break label_113;
+        jj_la1[169] = jj_gen;
+        break label_115;
       }
       jj_consume_token(SEMICOLON);
-      label_114:
+      label_116:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[164] = jj_gen;
-          break label_114;
+          jj_la1[170] = jj_gen;
+          break label_116;
         }
         jj_consume_token(S);
       }
@@ -3676,21 +3751,21 @@ LexicalUnit exp;
         declaration();
         break;
       default:
-        jj_la1[165] = jj_gen;
+        jj_la1[171] = jj_gen;
         ;
       }
     }
     jj_consume_token(RBRACE);
       documentHandler.endNestedProperties(name);
-    label_115:
+    label_117:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[166] = jj_gen;
-        break label_115;
+        jj_la1[172] = jj_gen;
+        break label_117;
       }
       jj_consume_token(S);
     }
@@ -3709,15 +3784,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_116:
+      label_118:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[167] = jj_gen;
-          break label_116;
+          jj_la1[173] = jj_gen;
+          break label_118;
         }
         jj_consume_token(S);
       }
@@ -3755,7 +3830,7 @@ LexicalUnit exp;
           important = prio();
           break;
         default:
-          jj_la1[168] = jj_gen;
+          jj_la1[174] = jj_gen;
           ;
         }
          Token next = getToken(1);
@@ -3773,15 +3848,15 @@ LexicalUnit exp;
         break;
       case LBRACE:
         jj_consume_token(LBRACE);
-        label_117:
+        label_119:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[169] = jj_gen;
-            break label_117;
+            jj_la1[175] = jj_gen;
+            break label_119;
           }
           jj_consume_token(S);
         }
@@ -3791,29 +3866,29 @@ LexicalUnit exp;
           declaration();
           break;
         default:
-          jj_la1[170] = jj_gen;
+          jj_la1[176] = jj_gen;
           ;
         }
-        label_118:
+        label_120:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case SEMICOLON:
             ;
             break;
           default:
-            jj_la1[171] = jj_gen;
-            break label_118;
+            jj_la1[177] = jj_gen;
+            break label_120;
           }
           jj_consume_token(SEMICOLON);
-          label_119:
+          label_121:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case S:
               ;
               break;
             default:
-              jj_la1[172] = jj_gen;
-              break label_119;
+              jj_la1[178] = jj_gen;
+              break label_121;
             }
             jj_consume_token(S);
           }
@@ -3822,27 +3897,27 @@ LexicalUnit exp;
             declaration();
             break;
           default:
-            jj_la1[173] = jj_gen;
+            jj_la1[179] = jj_gen;
             ;
           }
         }
         jj_consume_token(RBRACE);
-        label_120:
+        label_122:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case S:
             ;
             break;
           default:
-            jj_la1[174] = jj_gen;
-            break label_120;
+            jj_la1[180] = jj_gen;
+            break label_122;
           }
           jj_consume_token(S);
         }
          documentHandler.endNestedProperties(name);
         break;
       default:
-        jj_la1[175] = jj_gen;
+        jj_la1[181] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -3892,15 +3967,15 @@ LexicalUnit exp;
       name = property();
        save = token;
       jj_consume_token(COLON);
-      label_121:
+      label_123:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[176] = jj_gen;
-          break label_121;
+          jj_la1[182] = jj_gen;
+          break label_123;
         }
         jj_consume_token(S);
       }
@@ -3910,7 +3985,7 @@ LexicalUnit exp;
         important = prio();
         break;
       default:
-        jj_la1[177] = jj_gen;
+        jj_la1[183] = jj_gen;
         ;
       }
          documentHandler.property(name, exp, important);
@@ -3953,15 +4028,15 @@ LexicalUnit exp;
  */
   final public boolean prio() throws ParseException {
     jj_consume_token(IMPORTANT_SYM);
-    label_122:
+    label_124:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[178] = jj_gen;
-        break label_122;
+        jj_la1[184] = jj_gen;
+        break label_124;
       }
       jj_consume_token(S);
     }
@@ -3971,15 +4046,15 @@ LexicalUnit exp;
 
   final public boolean guarded() throws ParseException {
     jj_consume_token(GUARDED_SYM);
-    label_123:
+    label_125:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[179] = jj_gen;
-        break label_123;
+        jj_la1[185] = jj_gen;
+        break label_125;
       }
       jj_consume_token(S);
     }
@@ -3995,15 +4070,15 @@ LexicalUnit exp;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DIV:
       n = jj_consume_token(DIV);
-      label_124:
+      label_126:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[180] = jj_gen;
-          break label_124;
+          jj_la1[186] = jj_gen;
+          break label_126;
         }
         jj_consume_token(S);
       }
@@ -4013,15 +4088,15 @@ LexicalUnit exp;
       break;
     case COMMA:
       n = jj_consume_token(COMMA);
-      label_125:
+      label_127:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[181] = jj_gen;
-          break label_125;
+          jj_la1[187] = jj_gen;
+          break label_127;
         }
         jj_consume_token(S);
       }
@@ -4030,7 +4105,7 @@ LexicalUnit exp;
                                                          prev);}
       break;
     default:
-      jj_la1[182] = jj_gen;
+      jj_la1[188] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4045,12 +4120,12 @@ LexicalUnit exp;
     char op;
     first = term(null);
                       res = first;
-    label_126:
+    label_128:
     while (true) {
-      if (jj_2_8(2)) {
+      if (jj_2_11(2)) {
         ;
       } else {
-        break label_126;
+        break label_128;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
@@ -4058,7 +4133,7 @@ LexicalUnit exp;
         res = operator(res);
         break;
       default:
-        jj_la1[183] = jj_gen;
+        jj_la1[189] = jj_gen;
         ;
       }
       res = term(res);
@@ -4081,7 +4156,7 @@ LexicalUnit exp;
         {if (true) return '+';}
       break;
     default:
-      jj_la1[184] = jj_gen;
+      jj_la1[190] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4151,7 +4226,7 @@ LexicalUnit exp;
           op = unaryOperator();
           break;
         default:
-          jj_la1[185] = jj_gen;
+          jj_la1[191] = jj_gen;
           ;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4256,7 +4331,7 @@ LexicalUnit exp;
           result = function(op, prev);
           break;
         default:
-          jj_la1[186] = jj_gen;
+          jj_la1[192] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -4319,25 +4394,25 @@ LexicalUnit exp;
           result = unicode(prev);
           break;
         default:
-          jj_la1[187] = jj_gen;
+          jj_la1[193] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
         break;
       default:
-        jj_la1[188] = jj_gen;
+        jj_la1[194] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-      label_127:
+      label_129:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[189] = jj_gen;
-          break label_127;
+          jj_la1[195] = jj_gen;
+          break label_129;
         }
         jj_consume_token(S);
       }
@@ -4348,7 +4423,7 @@ LexicalUnit exp;
                  prev, varName);
       break;
     default:
-      jj_la1[190] = jj_gen;
+      jj_la1[196] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4364,15 +4439,15 @@ LexicalUnit exp;
  Token n;
  LexicalUnit params = null;
     n = jj_consume_token(FUNCTION);
-    label_128:
+    label_130:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[191] = jj_gen;
-        break label_128;
+        jj_la1[197] = jj_gen;
+        break label_130;
       }
       jj_consume_token(S);
     }
@@ -4413,7 +4488,7 @@ LexicalUnit exp;
       params = expr();
       break;
     default:
-      jj_la1[192] = jj_gen;
+      jj_la1[198] = jj_gen;
       ;
     }
     jj_consume_token(RPARAN);
@@ -4884,15 +4959,15 @@ LexicalUnit exp;
  */
   final public void _parseRule() throws ParseException {
  String ret = null;
-    label_129:
+    label_131:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[193] = jj_gen;
-        break label_129;
+        jj_la1[199] = jj_gen;
+        break label_131;
       }
       jj_consume_token(S);
     }
@@ -4920,7 +4995,7 @@ LexicalUnit exp;
       fontFace();
       break;
     default:
-      jj_la1[194] = jj_gen;
+      jj_la1[200] = jj_gen;
       ret = skipStatement();
                     if ((ret == null) || (ret.length() == 0)) {
                         {if (true) return;}
@@ -4935,15 +5010,15 @@ LexicalUnit exp;
   }
 
   final public void _parseImportRule() throws ParseException {
-    label_130:
+    label_132:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[195] = jj_gen;
-        break label_130;
+        jj_la1[201] = jj_gen;
+        break label_132;
       }
       jj_consume_token(S);
     }
@@ -4951,15 +5026,15 @@ LexicalUnit exp;
   }
 
   final public void _parseMediaRule() throws ParseException {
-    label_131:
+    label_133:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[196] = jj_gen;
-        break label_131;
+        jj_la1[202] = jj_gen;
+        break label_133;
       }
       jj_consume_token(S);
     }
@@ -4967,15 +5042,15 @@ LexicalUnit exp;
   }
 
   final public void _parseDeclarationBlock() throws ParseException {
-    label_132:
+    label_134:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case S:
         ;
         break;
       default:
-        jj_la1[197] = jj_gen;
-        break label_132;
+        jj_la1[203] = jj_gen;
+        break label_134;
       }
       jj_consume_token(S);
     }
@@ -4984,29 +5059,29 @@ LexicalUnit exp;
       declaration();
       break;
     default:
-      jj_la1[198] = jj_gen;
+      jj_la1[204] = jj_gen;
       ;
     }
-    label_133:
+    label_135:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[199] = jj_gen;
-        break label_133;
+        jj_la1[205] = jj_gen;
+        break label_135;
       }
       jj_consume_token(SEMICOLON);
-      label_134:
+      label_136:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[200] = jj_gen;
-          break label_134;
+          jj_la1[206] = jj_gen;
+          break label_136;
         }
         jj_consume_token(S);
       }
@@ -5015,7 +5090,7 @@ LexicalUnit exp;
         declaration();
         break;
       default:
-        jj_la1[201] = jj_gen;
+        jj_la1[207] = jj_gen;
         ;
       }
     }
@@ -5024,15 +5099,15 @@ LexicalUnit exp;
   final public ArrayList<String> _parseSelectors() throws ParseException {
   ArrayList<String> p = null;
     try {
-      label_135:
+      label_137:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case S:
           ;
           break;
         default:
-          jj_la1[202] = jj_gen;
-          break label_135;
+          jj_la1[208] = jj_gen;
+          break label_137;
         }
         jj_consume_token(S);
       }
@@ -5100,172 +5175,62 @@ LexicalUnit exp;
     finally { jj_save(7, xla); }
   }
 
-  private boolean jj_3R_139() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_148()) {
-    jj_scanpos = xsp;
-    if (jj_3R_149()) {
-    jj_scanpos = xsp;
-    if (jj_3R_150()) {
-    jj_scanpos = xsp;
-    if (jj_3R_151()) {
-    jj_scanpos = xsp;
-    if (jj_3R_152()) return true;
-    }
-    }
-    }
-    }
-    return false;
+  private boolean jj_2_9(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_9(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(8, xla); }
   }
 
-  private boolean jj_3R_167() {
+  private boolean jj_2_10(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_10(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(9, xla); }
+  }
+
+  private boolean jj_2_11(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_11(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(10, xla); }
+  }
+
+  private boolean jj_3R_142() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_186()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_187()) {
-    jj_scanpos = xsp;
-    if (jj_3R_188()) {
-    jj_scanpos = xsp;
-    if (jj_3R_189()) {
-    jj_scanpos = xsp;
-    if (jj_3R_190()) {
-    jj_scanpos = xsp;
-    if (jj_3R_191()) {
-    jj_scanpos = xsp;
-    if (jj_3R_192()) {
-    jj_scanpos = xsp;
-    if (jj_3R_193()) {
-    jj_scanpos = xsp;
-    if (jj_3R_194()) {
-    jj_scanpos = xsp;
-    if (jj_3R_195()) {
-    jj_scanpos = xsp;
-    if (jj_3R_196()) {
-    jj_scanpos = xsp;
-    if (jj_3R_197()) {
-    jj_scanpos = xsp;
-    if (jj_3R_198()) {
-    jj_scanpos = xsp;
-    if (jj_3R_199()) {
-    jj_scanpos = xsp;
-    if (jj_3R_200()) {
-    jj_scanpos = xsp;
-    if (jj_3R_201()) {
+    if (jj_3R_151()) {
     jj_scanpos = xsp;
-    if (jj_3R_202()) {
+    if (jj_3R_152()) {
     jj_scanpos = xsp;
-    if (jj_3R_203()) {
+    if (jj_3R_153()) {
     jj_scanpos = xsp;
-    if (jj_3R_204()) {
+    if (jj_3R_154()) {
     jj_scanpos = xsp;
-    if (jj_3R_205()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
+    if (jj_3R_155()) return true;
     }
-    return false;
-  }
-
-  private boolean jj_3R_156() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_167()) {
-    jj_scanpos = xsp;
-    if (jj_3R_168()) return true;
     }
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
-    return false;
-  }
-
-  private boolean jj_3R_142() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_156()) {
-    jj_scanpos = xsp;
-    if (jj_3R_157()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_143() {
-    if (jj_3R_158()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_162() {
-    if (jj_scan_token(HASH)) return true;
+  private boolean jj_3R_169() {
+    if (jj_3R_145()) return true;
     return false;
   }
 
-  private boolean jj_3R_214() {
+  private boolean jj_3R_165() {
     if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_220() {
-    if (jj_scan_token(PLUS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_219() {
-    if (jj_scan_token(MINUS)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_212() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_219()) {
-    jj_scanpos = xsp;
-    if (jj_3R_220()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3_8() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_143()) jj_scanpos = xsp;
-    if (jj_3R_142()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_215() {
-    if (jj_scan_token(URL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_166() {
-    if (jj_3R_142()) return true;
-    return false;
-  }
-
-  private boolean jj_3_2() {
+  private boolean jj_3_1() {
     if (jj_3R_138()) return true;
-    if (jj_3R_139()) return true;
     return false;
   }
 
-  private boolean jj_3R_171() {
+  private boolean jj_3R_174() {
     if (jj_scan_token(COMMA)) return true;
     Token xsp;
     while (true) {
@@ -5275,17 +5240,17 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_158() {
+  private boolean jj_3R_161() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_170()) {
+    if (jj_3R_173()) {
     jj_scanpos = xsp;
-    if (jj_3R_171()) return true;
+    if (jj_3R_174()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_170() {
+  private boolean jj_3R_173() {
     if (jj_scan_token(DIV)) return true;
     Token xsp;
     while (true) {
@@ -5295,27 +5260,23 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_216() {
+  private boolean jj_3R_219() {
     if (jj_scan_token(UNICODERANGE)) return true;
     return false;
   }
 
-  private boolean jj_3R_164() {
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_224() {
+    if (jj_3R_169()) return true;
     return false;
   }
 
   private boolean jj_3_4() {
-    if (jj_3R_140()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_221() {
-    if (jj_3R_166()) return true;
+    if (jj_3R_141()) return true;
+    if (jj_3R_142()) return true;
     return false;
   }
 
-  private boolean jj_3R_213() {
+  private boolean jj_3R_216() {
     if (jj_scan_token(FUNCTION)) return true;
     Token xsp;
     while (true) {
@@ -5323,103 +5284,102 @@ LexicalUnit exp;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3R_221()) jj_scanpos = xsp;
+    if (jj_3R_224()) jj_scanpos = xsp;
     if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3_3() {
-    if (jj_3R_140()) return true;
+  private boolean jj_3_7() {
+    if (jj_3R_138()) return true;
     return false;
   }
 
-  private boolean jj_3R_157() {
-    if (jj_3R_169()) return true;
+  private boolean jj_3R_160() {
+    if (jj_3R_172()) return true;
     return false;
   }
 
-  private boolean jj_3R_210() {
-    if (jj_3R_216()) return true;
+  private boolean jj_3R_213() {
+    if (jj_3R_219()) return true;
     return false;
   }
 
-  private boolean jj_3R_209() {
-    if (jj_3R_215()) return true;
+  private boolean jj_3R_212() {
+    if (jj_3R_218()) return true;
     return false;
   }
 
-  private boolean jj_3R_208() {
-    if (jj_3R_214()) return true;
+  private boolean jj_3R_167() {
+    if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_218() {
-    if (jj_scan_token(INTERPOLATION)) return true;
+  private boolean jj_3_6() {
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  private boolean jj_3R_165() {
-    if (jj_scan_token(LBRACKET)) return true;
+  private boolean jj_3R_211() {
+    if (jj_3R_217()) return true;
     return false;
   }
 
-  private boolean jj_3R_153() {
-    if (jj_scan_token(IDENT)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3_2() {
+    if (jj_3R_138()) return true;
     return false;
   }
 
-  private boolean jj_3R_169() {
-    if (jj_scan_token(VARIABLE)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3_5() {
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  private boolean jj_3R_185() {
-    if (jj_scan_token(PARENT)) return true;
+  private boolean jj_3R_210() {
+    if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_184() {
-    if (jj_scan_token(ANY)) return true;
+  private boolean jj_3R_221() {
+    if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_207() {
-    if (jj_scan_token(IDENT)) return true;
+  private boolean jj_3R_209() {
+    if (jj_scan_token(STRING)) return true;
     return false;
   }
 
-  private boolean jj_3R_217() {
-    if (jj_scan_token(IDENT)) return true;
+  private boolean jj_3R_208() {
+    if (jj_3R_216()) return true;
     return false;
   }
 
-  private boolean jj_3R_211() {
+  private boolean jj_3R_171() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_217()) {
+    if (jj_3R_209()) {
     jj_scanpos = xsp;
-    if (jj_3R_218()) return true;
+    if (jj_3R_210()) {
+    jj_scanpos = xsp;
+    if (jj_3R_211()) {
+    jj_scanpos = xsp;
+    if (jj_3R_212()) {
+    jj_scanpos = xsp;
+    if (jj_3R_213()) return true;
+    }
+    }
+    }
     }
     return false;
   }
 
-  private boolean jj_3R_137() {
-    if (jj_3R_140()) return true;
+  private boolean jj_3R_168() {
+    if (jj_scan_token(LBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_141() {
-    if (jj_scan_token(COMMA)) return true;
+  private boolean jj_3R_156() {
+    if (jj_scan_token(IDENT)) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
@@ -5428,107 +5388,177 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_161() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_183()) {
-    jj_scanpos = xsp;
-    if (jj_3R_184()) {
-    jj_scanpos = xsp;
-    if (jj_3R_185()) return true;
-    }
-    }
+  private boolean jj_3R_140() {
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  private boolean jj_3R_183() {
+  private boolean jj_3R_207() {
+    if (jj_scan_token(DIMEN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_172() {
+    if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
-    if (jj_3R_211()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_211()) { jj_scanpos = xsp; break; }
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
+  private boolean jj_3R_188() {
+    if (jj_scan_token(PARENT)) return true;
+    return false;
+  }
+
   private boolean jj_3R_206() {
-    if (jj_scan_token(STRING)) return true;
+    if (jj_scan_token(KHZ)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_187() {
+    if (jj_scan_token(ANY)) return true;
     return false;
   }
 
   private boolean jj_3R_205() {
-    if (jj_3R_213()) return true;
+    if (jj_scan_token(HZ)) return true;
     return false;
   }
 
-  private boolean jj_3R_180() {
-    if (jj_scan_token(S)) return true;
+  private boolean jj_3R_204() {
+    if (jj_scan_token(MS)) return true;
     return false;
   }
 
-  private boolean jj_3R_179() {
-    if (jj_scan_token(DOT)) return true;
+  private boolean jj_3R_220() {
+    if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3R_168() {
+  private boolean jj_3R_214() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_206()) {
-    jj_scanpos = xsp;
-    if (jj_3R_207()) {
+    if (jj_3R_220()) {
     jj_scanpos = xsp;
-    if (jj_3R_208()) {
+    if (jj_3R_221()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_203() {
+    if (jj_scan_token(SECOND)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_164() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_186()) {
     jj_scanpos = xsp;
-    if (jj_3R_209()) {
+    if (jj_3R_187()) {
     jj_scanpos = xsp;
-    if (jj_3R_210()) return true;
+    if (jj_3R_188()) return true;
     }
     }
+    return false;
+  }
+
+  private boolean jj_3R_186() {
+    Token xsp;
+    if (jj_3R_214()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_214()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
+
+  private boolean jj_3R_144() {
+    if (jj_scan_token(COMMA)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_178() {
+  private boolean jj_3R_202() {
+    if (jj_scan_token(GRAD)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_183() {
+    if (jj_scan_token(S)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_182() {
+    if (jj_scan_token(DOT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_181() {
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  private boolean jj_3R_177() {
+  private boolean jj_3R_201() {
+    if (jj_scan_token(RAD)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_180() {
     if (jj_scan_token(RPARAN)) return true;
     return false;
   }
 
-  private boolean jj_3R_176() {
+  private boolean jj_3R_179() {
     if (jj_scan_token(FUNCTION)) return true;
     return false;
   }
 
-  private boolean jj_3R_175() {
+  private boolean jj_3R_158() {
+    if (jj_scan_token(LBRACE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_178() {
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_174() {
+  private boolean jj_3R_139() {
+    if (jj_3R_147()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_200() {
+    if (jj_scan_token(DEG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_177() {
     if (jj_scan_token(INTERPOLATION)) return true;
     return false;
   }
 
-  private boolean jj_3R_173() {
+  private boolean jj_3R_176() {
     if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_159() {
+  private boolean jj_3R_199() {
+    if (jj_scan_token(EXS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_162() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_172()) {
-    jj_scanpos = xsp;
-    if (jj_3R_173()) {
-    jj_scanpos = xsp;
-    if (jj_3R_174()) {
-    jj_scanpos = xsp;
     if (jj_3R_175()) {
     jj_scanpos = xsp;
     if (jj_3R_176()) {
@@ -5539,7 +5569,13 @@ LexicalUnit exp;
     jj_scanpos = xsp;
     if (jj_3R_179()) {
     jj_scanpos = xsp;
-    if (jj_3R_180()) return true;
+    if (jj_3R_180()) {
+    jj_scanpos = xsp;
+    if (jj_3R_181()) {
+    jj_scanpos = xsp;
+    if (jj_3R_182()) {
+    jj_scanpos = xsp;
+    if (jj_3R_183()) return true;
     }
     }
     }
@@ -5551,45 +5587,35 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_172() {
+  private boolean jj_3R_175() {
     if (jj_scan_token(IDENT)) return true;
     return false;
   }
 
-  private boolean jj_3_7() {
+  private boolean jj_3_10() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_141()) jj_scanpos = xsp;
-    if (jj_3R_142()) return true;
+    if (jj_3R_144()) jj_scanpos = xsp;
+    if (jj_3R_145()) return true;
     return false;
   }
 
-  private boolean jj_3R_204() {
-    if (jj_scan_token(DIMEN)) return true;
+  private boolean jj_3R_198() {
+    if (jj_scan_token(EMS)) return true;
     return false;
   }
 
-  private boolean jj_3R_203() {
-    if (jj_scan_token(KHZ)) return true;
+  private boolean jj_3R_197() {
+    if (jj_scan_token(PX)) return true;
     return false;
   }
 
-  private boolean jj_3R_163() {
+  private boolean jj_3R_166() {
     if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_136() {
-    if (jj_3R_144()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_202() {
-    if (jj_scan_token(HZ)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_144() {
+  private boolean jj_3R_147() {
     if (jj_scan_token(MICROSOFT_RULE)) return true;
     Token xsp;
     while (true) {
@@ -5597,55 +5623,75 @@ LexicalUnit exp;
       if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(COLON)) return true;
-    if (jj_3R_159()) return true;
+    if (jj_3R_162()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_159()) { jj_scanpos = xsp; break; }
+      if (jj_3R_162()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_182() {
+  private boolean jj_3R_196() {
+    if (jj_scan_token(IN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_185() {
     if (jj_scan_token(PRECEDES)) return true;
     return false;
   }
 
-  private boolean jj_3_6() {
+  private boolean jj_3_3() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_139()) {
+    jj_scanpos = xsp;
     if (jj_3R_140()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_201() {
-    if (jj_scan_token(MS)) return true;
+  private boolean jj_3R_157() {
+    if (jj_3R_169()) return true;
     return false;
   }
 
-  private boolean jj_3R_181() {
-    if (jj_scan_token(PLUS)) return true;
+  private boolean jj_3_9() {
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  private boolean jj_3R_200() {
-    if (jj_scan_token(SECOND)) return true;
+  private boolean jj_3R_195() {
+    if (jj_scan_token(PC)) return true;
     return false;
   }
 
-  private boolean jj_3R_160() {
+  private boolean jj_3R_184() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_163() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_181()) {
+    if (jj_3R_184()) {
     jj_scanpos = xsp;
-    if (jj_3R_182()) return true;
+    if (jj_3R_185()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_199() {
-    if (jj_scan_token(GRAD)) return true;
+  private boolean jj_3R_194() {
+    if (jj_scan_token(MM)) return true;
     return false;
   }
 
-  private boolean jj_3R_146() {
+  private boolean jj_3R_193() {
+    if (jj_scan_token(CM)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_149() {
     if (jj_scan_token(PRECEDES)) return true;
     Token xsp;
     while (true) {
@@ -5655,20 +5701,36 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_198() {
-    if (jj_scan_token(RAD)) return true;
+  private boolean jj_3R_143() {
+    if (jj_3R_156()) 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_157()) {
+    jj_scanpos = xsp;
+    if (jj_3R_158()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_147() {
+  private boolean jj_3R_192() {
+    if (jj_scan_token(PT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_150() {
     if (jj_scan_token(S)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_160()) jj_scanpos = xsp;
+    if (jj_3R_163()) jj_scanpos = xsp;
     return false;
   }
 
-  private boolean jj_3R_145() {
+  private boolean jj_3R_148() {
     if (jj_scan_token(PLUS)) return true;
     Token xsp;
     while (true) {
@@ -5678,142 +5740,212 @@ LexicalUnit exp;
     return false;
   }
 
-  private boolean jj_3R_138() {
+  private boolean jj_3R_141() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_145()) {
+    if (jj_3R_148()) {
     jj_scanpos = xsp;
-    if (jj_3R_146()) {
+    if (jj_3R_149()) {
     jj_scanpos = xsp;
-    if (jj_3R_147()) return true;
+    if (jj_3R_150()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3_1() {
+  private boolean jj_3R_138() {
+    if (jj_scan_token(VARIABLE)) return true;
     Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_136()) {
-    jj_scanpos = xsp;
-    if (jj_3R_137()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(COLON)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
     }
+    if (jj_scan_token(REMOVE)) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
+    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
     return false;
   }
 
-  private boolean jj_3R_155() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_191() {
+    if (jj_scan_token(PERCENTAGE)) return true;
     return false;
   }
 
-  private boolean jj_3R_197() {
-    if (jj_scan_token(DEG)) return true;
+  private boolean jj_3R_189() {
+    if (jj_3R_215()) return true;
     return false;
   }
 
-  private boolean jj_3R_196() {
-    if (jj_scan_token(EXS)) return true;
+  private boolean jj_3R_190() {
+    if (jj_scan_token(NUMBER)) return true;
     return false;
   }
 
-  private boolean jj_3R_195() {
-    if (jj_scan_token(EMS)) return true;
+  private boolean jj_3R_170() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_189()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_190()) {
+    jj_scanpos = xsp;
+    if (jj_3R_191()) {
+    jj_scanpos = xsp;
+    if (jj_3R_192()) {
+    jj_scanpos = xsp;
+    if (jj_3R_193()) {
+    jj_scanpos = xsp;
+    if (jj_3R_194()) {
+    jj_scanpos = xsp;
+    if (jj_3R_195()) {
+    jj_scanpos = xsp;
+    if (jj_3R_196()) {
+    jj_scanpos = xsp;
+    if (jj_3R_197()) {
+    jj_scanpos = xsp;
+    if (jj_3R_198()) {
+    jj_scanpos = xsp;
+    if (jj_3R_199()) {
+    jj_scanpos = xsp;
+    if (jj_3R_200()) {
+    jj_scanpos = xsp;
+    if (jj_3R_201()) {
+    jj_scanpos = xsp;
+    if (jj_3R_202()) {
+    jj_scanpos = xsp;
+    if (jj_3R_203()) {
+    jj_scanpos = xsp;
+    if (jj_3R_204()) {
+    jj_scanpos = xsp;
+    if (jj_3R_205()) {
+    jj_scanpos = xsp;
+    if (jj_3R_206()) {
+    jj_scanpos = xsp;
+    if (jj_3R_207()) {
+    jj_scanpos = xsp;
+    if (jj_3R_208()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_194() {
-    if (jj_scan_token(PX)) return true;
+  private boolean jj_3_8() {
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  private boolean jj_3R_193() {
-    if (jj_scan_token(IN)) return true;
+  private boolean jj_3R_159() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_170()) {
+    jj_scanpos = xsp;
+    if (jj_3R_171()) return true;
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  private boolean jj_3R_154() {
-    if (jj_3R_166()) return true;
+  private boolean jj_3R_145() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_159()) {
+    jj_scanpos = xsp;
+    if (jj_3R_160()) return true;
+    }
     return false;
   }
 
-  private boolean jj_3R_192() {
-    if (jj_scan_token(PC)) return true;
+  private boolean jj_3R_146() {
+    if (jj_3R_161()) return true;
     return false;
   }
 
-  private boolean jj_3_5() {
-    if (jj_3R_140()) return true;
+  private boolean jj_3R_217() {
+    if (jj_scan_token(HASH)) return true;
     return false;
   }
 
-  private boolean jj_3R_191() {
-    if (jj_scan_token(MM)) return true;
+  private boolean jj_3R_155() {
+    if (jj_3R_168()) return true;
     return false;
   }
 
-  private boolean jj_3R_152() {
-    if (jj_3R_165()) return true;
+  private boolean jj_3R_154() {
+    if (jj_3R_167()) return true;
     return false;
   }
 
-  private boolean jj_3R_151() {
-    if (jj_3R_164()) return true;
+  private boolean jj_3R_223() {
+    if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_190() {
-    if (jj_scan_token(CM)) return true;
+  private boolean jj_3R_222() {
+    if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_140() {
-    if (jj_3R_153()) return true;
-    if (jj_scan_token(COLON)) return true;
+  private boolean jj_3R_215() {
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
-    }
     xsp = jj_scanpos;
-    if (jj_3R_154()) {
+    if (jj_3R_222()) {
     jj_scanpos = xsp;
-    if (jj_3R_155()) return true;
+    if (jj_3R_223()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_150() {
-    if (jj_3R_163()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_189() {
-    if (jj_scan_token(PT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_149() {
-    if (jj_3R_162()) return true;
+  private boolean jj_3R_153() {
+    if (jj_3R_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_188() {
-    if (jj_scan_token(PERCENTAGE)) return true;
+  private boolean jj_3R_152() {
+    if (jj_3R_165()) return true;
     return false;
   }
 
-  private boolean jj_3R_186() {
-    if (jj_3R_212()) return true;
+  private boolean jj_3_11() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_146()) jj_scanpos = xsp;
+    if (jj_3R_145()) return true;
     return false;
   }
 
-  private boolean jj_3R_148() {
-    if (jj_3R_161()) return true;
+  private boolean jj_3R_151() {
+    if (jj_3R_164()) return true;
     return false;
   }
 
-  private boolean jj_3R_187() {
-    if (jj_scan_token(NUMBER)) return true;
+  private boolean jj_3R_218() {
+    if (jj_scan_token(URL)) return true;
     return false;
   }
 
@@ -5827,7 +5959,7 @@ LexicalUnit exp;
   private Token jj_scanpos, jj_lastpos;
   private int jj_la;
   private int jj_gen;
-  final private int[] jj_la1 = new int[203];
+  final private int[] jj_la1 = new int[209];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -5839,18 +5971,18 @@ LexicalUnit exp;
       jj_la1_init_3();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x1d000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x1d3ed400,0x1d3ed400,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x3ed400,0x2,0x2,0x220000,0x2,0x220000,0x220002,0x2,0x50010002,0x50010002,0x2,0x2,0x2,0x2,0x2,0x1d000000,0x0,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x1d000000,0x0,0x0,0x0,0x0,0xc000000,0x2,0x2,0x1c000,0x2,0x0,0x2,0x1c000,0x0,0x2,0x2,0x0,0x2,0x0,0x2,0x100000,0xe4e70002,0x2,0x1d000000,0x0,0x1d000000,0x2,0x0,0x2,0xe4e70002,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0xe4e70002,0x2,0x2,0x2,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x2,0x80000,0x0,0x60000,0x80000,0x2,0x60000,0x2,0x0,0x2,0x100000,0x2,0x2,0x2,0x2,0x80000,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x61000,0x2,0x0,0x2,0x2,0x2,0x2,0x880000,0x880000,0x60000,0x60000,0x0,0x0,0x60000,0x2,0x60000,0x2,0x60000,0x2,0x1d000000,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,};
+      jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0x1d000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0x1d3ed400,0x1d3ed400,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x3ed400,0x2,0x2,0x220000,0x2,0x220000,0x220002,0x2,0x50010002,0x50010002,0x2,0x2,0x2,0x2,0x2,0x1d000000,0x0,0x0,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x11000000,0x1d000000,0x0,0x0,0x0,0x0,0xc000000,0x2,0x2,0x1c000,0x2,0x0,0x2,0x1c000,0x0,0x2,0x2,0x0,0x2,0x0,0x2,0x100000,0xe4e70002,0x2,0x1d000000,0x0,0x1d000000,0x2,0x0,0x2,0xe4e70002,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0xe4e70002,0x2,0x2,0x2,0x0,0x2,0x1d000000,0x0,0x0,0x1d000000,0x2,0x2,0x80000,0x2,0x2,0x2,0x2,0x0,0x2,0x1d000000,0x0,0x1d000000,0x2,0x80000,0x2,0x2,0x2,0x80000,0x0,0x60000,0x80000,0x2,0x60000,0x2,0x0,0x2,0x100000,0x2,0x2,0x2,0x40000000,0x2,0x2,0x2,0x80000,0x2,0x2,0x0,0x2,0x2,0x2,0x100000,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x100000,0x2,0x0,0x2,0x61000,0x2,0x0,0x2,0x2,0x2,0x2,0x880000,0x880000,0x60000,0x60000,0x0,0x0,0x60000,0x2,0x60000,0x2,0x60000,0x2,0x1d000000,0x2,0x2,0x2,0x0,0x100000,0x2,0x0,0x2,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1060018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x95040018,0x80000000,0x15040000,0x18,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x18,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x10040018,0x10040000,0x18,0x0,0x8000000,0x0,0x7,0x0,0x0,0x10040018,0x10040000,0x18,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x10040018,0x10040000,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11040018,0x11040000,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1060018,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x95040018,0x80000000,0x4000000,0x11040000,0x18,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x18,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x10040018,0x10040000,0x18,0x0,0x8000000,0x0,0x7,0x0,0x0,0x10040018,0x10040000,0x18,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x10040018,0x40000,0x10000000,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11040018,0x11040000,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x10000000,0x80000000,0x80000000,0x4000000,0x80000000,0x0,0x0,0x0,0x6a000088,0x80000000,0x0,0x80000000,0x0,0x44,0x0,0x8,0x0,0x0,0x0,0xfe00015c,0xfe00015c,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0xfc000154,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0xa000088,0x8,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x2000000,0x2000000,0x0,0x0,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000008,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x2,0x0,0x0,0x98,0x0,0xa000088,0x8000080,0x2000008,0x0,0x0,0x0,0x98,0x1,0x0,0xa000088,0x8000080,0x2000008,0x0,0x98,0x0,0x0,0x0,0x88,0x0,0xa000088,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0xa000088,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc,0x0,0x0,0x3ffffdc,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x3ffffdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffff10,0x200004c,0x3ffff5c,0x0,0x3ffffdc,0x0,0x3ffffdc,0x0,0x6e000008,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,};
+      jj_la1_2 = new int[] {0x10000000,0x80000000,0x80000000,0x4000000,0x80000000,0x0,0x0,0x0,0x80,0x6a000088,0x80000000,0x0,0x80000000,0x0,0x44,0x0,0x8,0x0,0x0,0x0,0xfe00015c,0xfe00015c,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0xfc000154,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0xa000088,0x8,0x0,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x2000000,0x2000000,0x0,0x0,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000008,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x2,0x0,0x0,0x98,0x0,0xa000088,0x8000080,0x2000008,0x0,0x0,0x0,0x98,0x1,0x0,0xa000088,0x8000080,0x2000008,0x0,0x98,0x0,0x0,0x0,0x88,0x0,0xa000088,0x0,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0xa000088,0x8000080,0x2000008,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc,0x0,0x0,0x3ffffdc,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,0x3ffffdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffff10,0x200004c,0x3ffff5c,0x0,0x3ffffdc,0x0,0x3ffffdc,0x0,0x6e000008,0x0,0x0,0x0,0x8,0x0,0x0,0x8,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3401,0x3401,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3401,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x800,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1400,0x0,0x0,0x1400,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1400,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x400,0x1400,0x0,0x1400,0x0,0x1400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3401,0x3401,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3401,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1400,0x0,0x0,0x1400,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1400,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x400,0x1400,0x0,0x1400,0x0,0x1400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[8];
+  final private JJCalls[] jj_2_rtns = new JJCalls[11];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -5860,7 +5992,7 @@ LexicalUnit exp;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 203; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 209; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5870,7 +6002,7 @@ LexicalUnit exp;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 203; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 209; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5880,7 +6012,7 @@ LexicalUnit exp;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 203; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 209; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5890,7 +6022,7 @@ LexicalUnit exp;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 203; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 209; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -6007,7 +6139,7 @@ LexicalUnit exp;
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 203; i++) {
+    for (int i = 0; i < 209; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -6052,7 +6184,7 @@ LexicalUnit exp;
 
   private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 8; i++) {
+    for (int i = 0; i < 11; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -6067,6 +6199,9 @@ LexicalUnit exp;
             case 5: jj_3_6(); break;
             case 6: jj_3_7(); break;
             case 7: jj_3_8(); break;
+            case 8: jj_3_9(); break;
+            case 9: jj_3_10(); break;
+            case 10: jj_3_11(); break;
           }
         }
         p = p.next;
index 97031e4616ddcb635aa1b929ce127be9954c674b..ed27af75123e686c643051913e2a061702147159 100644 (file)
@@ -737,7 +737,7 @@ void afterImportDeclaration() :
 }
 {
   ( 
-     ( variable() | removeDirective() | mixinDirective()|eachDirective() | includeDirective() | styleRule() | media()| page() | fontFace() 
+     ( (LOOKAHEAD(5)removeDirective()|variable()) | mixinDirective()| eachDirective() | includeDirective() | styleRule() | media()| page() | fontFace() 
       | { l = getLocator(); } ret=skipStatement() 
       {
          if ((ret == null) || (ret.length() == 0)) {
@@ -1051,7 +1051,7 @@ void styleRule() :
         start = true;
         documentHandler.startSelector(l);
      }
-     ( ifDirective() | removeDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) (microsoftExtension()|declarationOrNestedProperties()) | styleRule())*
+     ( ifDirective() | LOOKAHEAD(5)removeDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) (microsoftExtension()|declarationOrNestedProperties()) | styleRule())*
      <RBRACE> (<S>)*
  } catch (ThrowedParseException e) {
      if (errorHandler != null) {
@@ -1445,12 +1445,11 @@ void eachDirective() :
   var = < VARIABLE > (< S >)* < EACH_IN > (< S >)*
   (list = stringList()
   {documentHandler.startEachDirective(var.image, list);}
-  |{documentHandler.startEachDirective(var.image, list);}removeDirective()
   |listVariable = variableName()
   {documentHandler.startEachDirective(var.image, listVariable);}
   )
   < LBRACE >(< S >)*
-  ( includeDirective() | removeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*      
+  ( includeDirective() | LOOKAHEAD(5)removeDirective() | media() | extendDirective()| variable() | LOOKAHEAD(3) declarationOrNestedProperties() | styleRule())*          
   < RBRACE >(< S >)*
   { documentHandler.endEachDirective();}
 }
@@ -1547,44 +1546,63 @@ void includeDirective() :
 /**
  * @exception ParseException exception during the parse
  */
-void removeDirective() :\r{\r    ArrayList<String> list = null;
-       ArrayList<String> remove = null;
+void removeDirective() :\r{\r    String list = null;
+       String remove = null;
        String separator = null;
+       String variable = null;
        Token n = null;
 }
 {
+  n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*
   < REMOVE >(< S >)*
   (list = removeDirectiveArgs(0))
-  < COMMA >(< S >)*\r  (remove = removeDirectiveArgs(1))
+  (< RPARAN >)? < COMMA >(< S >)*
+  (remove = removeDirectiveArgs(1))
   ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)?
   < RPARAN >(< S >)* < SEMICOLON >(< S >)*
 
-  { documentHandler.removeDirective(list,remove,separator); }\r}
+  { documentHandler.removeDirective(variable,list,remove,separator); }
+}
 
 JAVACODE
-ArrayList<String > removeDirectiveArgs(int nest)\r{
-       ArrayList<String> list = new ArrayList<String>();
-       // Start at one due to "remove(" containing one.
+String removeDirectiveArgs(int nest)\r{
+       String list = "";
        int nesting = nest;
        Token t = null;
        
        while(true)\r    {\r              t = getToken(1);
-               if(t.kind == VARIABLE)\r         {
-                 list.add(t.image);
-               }else if(t.kind == STRING)\r             {
-                       list.add(t.image.substring(1,t.image.length()).substring(0,t.image.length()-2));
+               String s = t.image;
+               if(t.kind == VARIABLE||t.kind == IDENT)\r                {
+                 list += s;
+               }else if(s.toLowerCase().equals("auto")||s.toLowerCase().equals("space")||s.toLowerCase().equals("comma"))\r             {
+                       int i = 2;
+                       Token temp = getToken(i);
+                       boolean isLast = true;
+                       while(temp.kind != SEMICOLON)
+                       {\r                              if(temp.kind != RPARAN || temp.kind != S)
+                               {\r                                isLast = false;\r                              }
+                               i++;
+                               temp = getToken(i);
+                       }
+
+                       if(isLast)\r                     {\r                      return list;
+                       }
+               }\r              else if(t.kind == STRING)\r              {\r                      list += s.substring(1,s.length()).substring(0,s.length()-2);
                        
                }else if(t.kind == LPARAN)\r             {\r                      nesting++;
                        if(nesting > nest+1)\r                   {\r                              throw new CSSParseException("Only one ( ) pair per parameter allowed", getLocator());
                        }
                }else if(t.kind == RPARAN)\r             {\r                      nesting--;
                        if(nesting == 0)\r                       {
-                               getNextToken();\r                                return list;
+                               return list;
                        }
                } else if(t.kind == COMMA)\r             {
                        if(nesting == nest)\r                    {
-                         return list;\r                 }
-               } else if(t.kind == LBRACE)\r            {
+                         return list;\r                 }else\r                  {
+                         list += ",";\r                 }
+                         
+               }else if(t.kind == S)\r          {
+                 list += " ";\r         } else if(t.kind == LBRACE)\r            {
                  throw new CSSParseException("Invalid token,'{' found", getLocator());\r                }
                \r               getNextToken();
        }
index 71c32a5c0656410503c138c4e0d474dea88c4265..0e9f727c53ef19738d3f22c2f6f61507e3f1ab72 100644 (file)
@@ -2,9 +2,9 @@ package com.vaadin.sass.tree;
 
 public interface ListModifyNode {
 
-    public boolean isModifyingVariable();
+    public String getNewVariable();
 
-    public String getVariable();
+    public String getModifyingList();
 
     public VariableNode getModifiedList(VariableNode variableNode);
 
index 9c6400ec02c98f4edc50f2812ee495c5374a044a..9c61c9f6360ce31b0c413ef3341afab3be93d9d2 100644 (file)
@@ -1,6 +1,7 @@
 package com.vaadin.sass.tree;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 
 import com.vaadin.sass.parser.LexicalUnitImpl;
 import com.vaadin.sass.util.DeepCopy;
@@ -10,62 +11,95 @@ public class ListRemoveNode extends Node implements ListModifyNode,
 
     private ArrayList<String> list;
     private ArrayList<String> remove;
-    private String separator;
+    private String separator = " ";
+    private String variable;
 
-    public ListRemoveNode(ArrayList<String> list, ArrayList<String> remove,
+    public ListRemoveNode(String variable, String list, String remove,
             String separator) {
-        this.list = list;
-        this.remove = remove;
-        this.separator = separator;
+        this.variable = variable;
+        checkSeparator(separator, list);
+
+        populateList(list, remove);
+
     }
 
-    @Override
-    public boolean isModifyingVariable() {
-        if (list != null) {
-            return list.size() == 1 && list.get(0).startsWith("$");
+    private void checkSeparator(String separator, String list) {
+        String lowerCase = "";
+        if (separator == null
+                || (lowerCase = separator.toLowerCase()).equals("auto")) {
+            if (list.contains(",")) {
+                this.separator = ",";
+            }
+        } else if (lowerCase.equals("comma")) {
+            this.separator = ",";
+        } else if (lowerCase.equals("space")) {
+            this.separator = " ";
         }
-        return false;
+    }
+
+    private void populateList(String list, String remove) {
+        this.list = new ArrayList<String>(Arrays.asList(list.split(separator)));
+        this.remove = new ArrayList<String>(Arrays.asList(remove
+                .split(separator)));
     }
 
     @Override
-    public String getVariable() {
-        if (list != null && list.size() == 1) {
-            String string = list.get(0);
-            return string.substring(1, string.length());
-        }
-        return null;
+    public String getNewVariable() {
+        return variable;
     }
 
     @Override
     public VariableNode getModifiedList(VariableNode variableNode) {
 
-        VariableNode clone = (VariableNode) DeepCopy.copy(variableNode);
+        if (variableNode != null) {
+            VariableNode clone = (VariableNode) DeepCopy.copy(variableNode);
 
-        LexicalUnitImpl first = null;
-        LexicalUnitImpl current = (LexicalUnitImpl) clone.getExpr();
-        LexicalUnitImpl lastAccepted = null;
-        while (current != null) {
+            LexicalUnitImpl first = null;
+            LexicalUnitImpl current = (LexicalUnitImpl) clone.getExpr();
+            LexicalUnitImpl lastAccepted = null;
+            while (current != null) {
 
-            if (shouldInclude(current, lastAccepted)) {
-                LexicalUnitImpl temp = current.clone();
-                temp.setNextLexicalUnit(null);
+                if (shouldInclude(current, lastAccepted)) {
+                    LexicalUnitImpl temp = current.clone();
+                    temp.setNextLexicalUnit(null);
 
-                if (lastAccepted != null) {
-                    lastAccepted.setNextLexicalUnit(temp);
-                }
+                    if (lastAccepted != null) {
+                        lastAccepted.setNextLexicalUnit(temp);
+                    }
 
-                lastAccepted = temp;
+                    lastAccepted = temp;
 
-                if (first == null) {
-                    first = lastAccepted;
+                    if (first == null) {
+                        first = lastAccepted;
+                    }
                 }
+                current = (LexicalUnitImpl) current.getNextLexicalUnit();
             }
-            current = (LexicalUnitImpl) current.getNextLexicalUnit();
-        }
 
-        clone.setExpr(first);
+            clone.setExpr(first);
+
+            return clone;
+        } else {
 
-        return clone;
+            final ArrayList<String> newList = new ArrayList<String>(list);
+            newList.removeAll(remove);
+
+            LexicalUnitImpl unit = null;
+            if (newList.size() > 0) {
+                unit = LexicalUnitImpl.createString(newList.get(0));
+                LexicalUnitImpl last = unit;
+                for (int i = 1; i < newList.size(); i++) {
+                    LexicalUnitImpl current = LexicalUnitImpl
+                            .createString(newList.get(i));
+                    last.setNextLexicalUnit(current);
+                    last = current;
+                }
+
+            }
+            VariableNode node = new VariableNode(variable, unit, false);
+            return node;
+
+        }
     }
 
     private boolean shouldInclude(LexicalUnitImpl current,
@@ -111,4 +145,14 @@ public class ListRemoveNode extends Node implements ListModifyNode,
         }
 
     }
+
+    @Override
+    public String getModifyingList() {
+        String firstListEntry = list.get(0);
+        if (list.size() == 1 && firstListEntry.startsWith("$")) {
+            return firstListEntry.substring(1, firstListEntry.length());
+        }
+
+        return null;
+    }
 }
index ffe6b7789606672e7223e034f9581c7f44798adc..d18ff54138165fdc10c66669410dc7e13253e7ae 100644 (file)
@@ -35,7 +35,6 @@ public class VariableNode extends Node implements IVariableNode {
         this.name = name;
         this.expr = expr;
         this.guarded = guarded;
-        checkSeparators();
     }
 
     public LexicalUnitImpl getExpr() {
@@ -44,15 +43,10 @@ public class VariableNode extends Node implements IVariableNode {
 
     public void setExpr(LexicalUnitImpl expr) {
         this.expr = expr;
-        checkSeparators();
     }
 
-    private void checkSeparators() {
-        if (expr != null) {
-            if (expr.toString().contains(",")) {
-
-            }
-        }
+    public void setName(String name) {
+        this.name = name;
     }
 
     public String getName() {
index 50143180d2eef01598b19222fa2ea0c5eea06d69..fc31ffa7b9978788e602994e9d35300a13a6310a 100644 (file)
@@ -19,12 +19,10 @@ package com.vaadin.sass.visitor;
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import com.vaadin.sass.parser.ParseException;
 import com.vaadin.sass.tree.IVariableNode;
 import com.vaadin.sass.tree.ListModifyNode;
 import com.vaadin.sass.tree.Node;
 import com.vaadin.sass.tree.VariableNode;
-import com.vaadin.sass.util.DeepCopy;
 
 public class VariableVisitor implements Visitor {
 
@@ -72,18 +70,14 @@ public class VariableVisitor implements Visitor {
 
                 ListModifyNode modify = (ListModifyNode) node;
 
-                if (modify.isModifyingVariable()) {
-                    String variable = modify.getVariable();
+                String variable = modify.getNewVariable().substring(1,
+                        modify.getNewVariable().length());
 
-                    if (!this.variables.containsKey(variable)) {
-                        throw new ParseException("No variable with name $"
-                                + variable + " found.");
-                    }
-
-                    VariableNode modifiedList = modify
-                            .getModifiedList(this.variables.get(variable));
-                    this.variables.put(variable, modifiedList);
-                }
+                VariableNode modifiedList = modify
+                        .getModifiedList(this.variables.get(modify
+                                .getModifyingList()));
+                modifiedList.setName(variable);
+                this.variables.put(variable, modifiedList);
 
             } else if (node instanceof IVariableNode) {
                 ((IVariableNode) node)
index b7fd2c7e6c939a899b9493a5268cecfa72bf573c..1e6d41c1289788496e1c2ba982644cb21775d2aa 100644 (file)
 
 .exotic-animals .llama-icon {
        background-image: url('/images/llama.png');
+}
+
+.ball {
+       font-size: 12px;
+}
+
+.cube {
+       font-size: 12px;
 }
\ No newline at end of file
index cbfca9dcda62b068a97182a17d32187de8eaad07..ca9a19522f2f7f59a21fcbe75e8f564f49bc6109 100644 (file)
@@ -7,10 +7,18 @@ $remove : duck;
        }
 }
 
-remove($animals, $remove, space);
+$exotic : remove($animals, $remove, space);
 
-@each $animal in $animals{
+@each $animal in $exotic{
        .exotic-animals .#{$animal}-icon {
                background-image: url('/images/#{$animal}.png');
        }
 }
+
+$things : remove((ball,cube,duck), duck); 
+
+@each $thing in $things{
+       .#{$thing}{
+               font-size: 12px;
+       }
+}
\ No newline at end of file