]> source.dussan.org Git - vaadin-framework.git/commitdiff
Avoid error in rgb() function if variables are used (#12752).
authordenisanisimov <denis@vaadin.com>
Mon, 27 Jan 2014 11:20:31 +0000 (13:20 +0200)
committerDenis Anisimov <denis@vaadin.com>
Thu, 13 Feb 2014 09:45:13 +0000 (11:45 +0200)
Change-Id: Id51ffef257c193900026a4644eb99dbd3926c668

theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
theme-compiler/tests/resources/css/functions.css
theme-compiler/tests/resources/scss/functions.scss
theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Functions.java

index e68b24355b6db857c4f661949c1214d18b3ec26e..06a413649ec043cc80a24e224734ff3a97a0fd05 100644 (file)
@@ -5857,12 +5857,15 @@ LexicalUnitImpl result = null;
         if ("rgb(".equals(f)) {
             // this is a RGB declaration (e.g. rgb(255, 50%, 0) )
             int i = 0;
+            boolean hasVariables = false;
             while (loop && l != null && i < 5) {
                 switch (i) {
                     case 0:
                     case 2:
                     case 4:
-                        if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER)
+                    if (l.getLexicalUnitType() == SCSSLexicalUnit.SCSS_VARIABLE) {
+                        hasVariables = true;
+                        } else if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER)
                             && (l.getLexicalUnitType() != LexicalUnit.SAC_PERCENTAGE)) {
                             loop = false;
                         }
@@ -5882,9 +5885,15 @@ LexicalUnitImpl result = null;
                 }
             }
             if ((i == 5) && loop && (l == null)) {
-                {if (true) return LexicalUnitImpl.createRGBColor(n.beginLine,
-                                                      n.beginColumn,
-                                                      prev, params);}
+                if (hasVariables) {
+            {if (true) return LexicalUnitImpl.createFunction(n.beginLine,
+                        n.beginColumn, prev,
+                        f.substring(0, f.length() - 1), params);}
+                } else {
+           {if (true) return LexicalUnitImpl.createRGBColor(n.beginLine,
+                        n.beginColumn,
+                        prev, params);}
+                }
             } else {
                 if (errorHandler != null) {
                     String errorText;
@@ -7221,6 +7230,11 @@ LexicalUnitImpl result = null;
     return false;
   }
 
+  private boolean jj_3R_256() {
+    if (jj_scan_token(HASH)) return true;
+    return false;
+  }
+
   private boolean jj_3R_216() {
     if (jj_scan_token(NUMBER)) return true;
     return false;
@@ -7314,8 +7328,8 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_256() {
-    if (jj_scan_token(HASH)) return true;
+  private boolean jj_3R_257() {
+    if (jj_scan_token(URL)) return true;
     return false;
   }
 
@@ -7324,11 +7338,6 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_257() {
-    if (jj_scan_token(URL)) return true;
-    return false;
-  }
-
   private boolean jj_3_2() {
     if (jj_3R_177()) return true;
     if (jj_3R_178()) return true;
@@ -7371,6 +7380,11 @@ LexicalUnitImpl result = null;
     return false;
   }
 
+  private boolean jj_3R_258() {
+    if (jj_scan_token(UNICODERANGE)) return true;
+    return false;
+  }
+
   private boolean jj_3R_197() {
     Token xsp;
     xsp = jj_scanpos;
@@ -7409,11 +7423,6 @@ LexicalUnitImpl result = null;
     return false;
   }
 
-  private boolean jj_3R_258() {
-    if (jj_scan_token(UNICODERANGE)) return true;
-    return false;
-  }
-
   private boolean jj_3_8() {
     Token xsp;
     xsp = jj_scanpos;
index f8b6a86af7ed86309aa955fd094dc2eb29f3da41..9be5236bc372e35f9067aac32ee2dcaa0c6cd203 100644 (file)
@@ -2575,12 +2575,15 @@ LexicalUnitImpl function(char operator, LexicalUnitImpl prev) :
        if ("rgb(".equals(f)) {
            // this is a RGB declaration (e.g. rgb(255, 50%, 0) )
            int i = 0;
+           boolean hasVariables = false;
            while (loop && l != null && i < 5) {
                switch (i) {
                    case 0:
                    case 2:
                    case 4:
-                       if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER)
+                   if (l.getLexicalUnitType() == SCSSLexicalUnit.SCSS_VARIABLE) {
+                        hasVariables = true;
+                       } else if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER)
                            && (l.getLexicalUnitType() != LexicalUnit.SAC_PERCENTAGE)) {
                            loop = false;
                        }
@@ -2600,9 +2603,15 @@ LexicalUnitImpl function(char operator, LexicalUnitImpl prev) :
                }
            }
            if ((i == 5) && loop && (l == null)) {
-               return LexicalUnitImpl.createRGBColor(n.beginLine,
-                                                     n.beginColumn,
-                                                     prev, params);
+               if (hasVariables) {
+            return LexicalUnitImpl.createFunction(n.beginLine,
+                        n.beginColumn, prev,
+                        f.substring(0, f.length() - 1), params);
+               } else {
+           return LexicalUnitImpl.createRGBColor(n.beginLine,
+                        n.beginColumn,
+                        prev, params);
+               }
            } else {
                if (errorHandler != null) {
                    String errorText;
index 3f6c2bd810958b758364a6f7b441bbfb79166400..45d42b34de4c84aed28377e96c9131a8e53f90c6 100644 (file)
@@ -13,4 +13,5 @@
        color: #f00;
        color: hsl(33, 7%, 89%);
        color: hsl(33, 7%, 95%);
+       color: rgb(1, 2, 3);
 }
\ No newline at end of file
index 93c1a6a64ab23487c1bcb22aad421a7e3c64ed42..4230850b2abad81652fb2375fe7ff596191e8802 100644 (file)
@@ -1,5 +1,8 @@
 $base-color : hsl(33, 7%, 89%);
 $app-bg-color : lighten($base-color, 6%);
+$red:1;
+$green:2;
+$blue:3;
 .main {
        margin: abs(-2px);
        border: ceil(10.4px);
@@ -15,4 +18,5 @@ $app-bg-color : lighten($base-color, 6%);
        color: lighten(#800, 20%);
        color : $base-color;
        color : $app-bg-color;
+       color: rgb($red, $green, $blue);
 }
\ No newline at end of file
index 5c41494ac60c4784ccd3631c2e7de1608f08c244..b50172ac2f600dd462b1d080a9abbca724e7e6c1 100644 (file)
@@ -41,9 +41,9 @@ public class Functions extends AbstractTestBase {
         parser.setDocumentHandler(handler);
         parser.parseStyleSheet(getClass().getResource(scss).getPath());
         ScssStylesheet root = handler.getStyleSheet();
-        Assert.assertEquals(3, root.getChildren().size());
-        BlockNode blockNode = (BlockNode) root.getChildren().get(2);
-        Assert.assertEquals(14, blockNode.getChildren().size());
+        Assert.assertEquals(6, root.getChildren().size());
+        BlockNode blockNode = (BlockNode) root.getChildren().get(5);
+        Assert.assertEquals(15, blockNode.getChildren().size());
     }
 
     @Test