Adding a TokenValue to CssProperty to handle CSS components that should not be wrapped with spaces. This fixes a bug in the generated css for WidgetUiDemo that affects IE.
Patch by: jlabanca
Review by: bobv
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6458 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/resources/css/GenerateCssAst.java b/user/src/com/google/gwt/resources/css/GenerateCssAst.java
index ab0fe0e..9ddb439 100644
--- a/user/src/com/google/gwt/resources/css/GenerateCssAst.java
+++ b/user/src/com/google/gwt/resources/css/GenerateCssAst.java
@@ -38,6 +38,7 @@
import com.google.gwt.resources.css.ast.CssProperty.ListValue;
import com.google.gwt.resources.css.ast.CssProperty.NumberValue;
import com.google.gwt.resources.css.ast.CssProperty.StringValue;
+import com.google.gwt.resources.css.ast.CssProperty.TokenValue;
import com.google.gwt.resources.css.ast.CssProperty.Value;
import org.w3c.css.sac.AttributeCondition;
@@ -916,7 +917,7 @@
case LexicalUnit.SAC_URI:
return new IdentValue("url(" + value.getStringValue() + ")");
case LexicalUnit.SAC_OPERATOR_COMMA:
- return new IdentValue(",");
+ return new TokenValue(",");
case LexicalUnit.SAC_COUNTER_FUNCTION:
case LexicalUnit.SAC_COUNTERS_FUNCTION:
case LexicalUnit.SAC_FUNCTION: {
@@ -971,25 +972,25 @@
case LexicalUnit.SAC_INHERIT:
return new IdentValue("inherit");
case LexicalUnit.SAC_OPERATOR_EXP:
- return new IdentValue("^");
+ return new TokenValue("^");
case LexicalUnit.SAC_OPERATOR_GE:
- return new IdentValue(">=");
+ return new TokenValue(">=");
case LexicalUnit.SAC_OPERATOR_GT:
- return new IdentValue(">");
+ return new TokenValue(">");
case LexicalUnit.SAC_OPERATOR_LE:
- return new IdentValue("<=");
+ return new TokenValue("<=");
case LexicalUnit.SAC_OPERATOR_LT:
- return new IdentValue("<");
+ return new TokenValue("<");
case LexicalUnit.SAC_OPERATOR_MINUS:
- return new IdentValue("-");
+ return new TokenValue("-");
case LexicalUnit.SAC_OPERATOR_MOD:
- return new IdentValue("%");
+ return new TokenValue("%");
case LexicalUnit.SAC_OPERATOR_MULTIPLY:
- return new IdentValue("*");
+ return new TokenValue("*");
case LexicalUnit.SAC_OPERATOR_PLUS:
- return new IdentValue("+");
+ return new TokenValue("+");
case LexicalUnit.SAC_OPERATOR_SLASH:
- return new IdentValue("/");
+ return new TokenValue("/");
case LexicalUnit.SAC_OPERATOR_TILDE:
return new IdentValue("~");
case LexicalUnit.SAC_RECT_FUNCTION: {
diff --git a/user/src/com/google/gwt/resources/css/ast/CssProperty.java b/user/src/com/google/gwt/resources/css/ast/CssProperty.java
index be4e91d..40a5ecb 100644
--- a/user/src/com/google/gwt/resources/css/ast/CssProperty.java
+++ b/user/src/com/google/gwt/resources/css/ast/CssProperty.java
@@ -40,6 +40,7 @@
this.suffix = suffix;
}
+ @Override
public String getExpression() {
return path.replace(".", "().") + "() + \"" + Generator.escape(suffix)
+ "\"";
@@ -58,6 +59,7 @@
return this;
}
+ @Override
public String toCss() {
return "value(\"" + path + "\""
+ (suffix == null ? "" : (", \"" + suffix + "\"")) + ")";
@@ -74,6 +76,7 @@
this.expression = expression;
}
+ @Override
public String getExpression() {
return expression;
}
@@ -83,6 +86,7 @@
return this;
}
+ @Override
public String toCss() {
return "/* Java expression */";
}
@@ -106,6 +110,7 @@
this.ident = ident;
}
+ @Override
public String getExpression() {
return '"' + Generator.escape(ident) + '"';
}
@@ -119,6 +124,7 @@
return this;
}
+ @Override
public String toCss() {
return ident;
}
@@ -138,12 +144,17 @@
this(Arrays.asList(values));
}
+ @Override
public String getExpression() {
StringBuilder toReturn = new StringBuilder();
for (Iterator<Value> i = values.iterator(); i.hasNext();) {
- toReturn.append(i.next().getExpression());
+ Value value = i.next();
+ if (value.isSpaceRequired()) {
+ toReturn.append("\" \" +");
+ }
+ toReturn.append(value.getExpression());
if (i.hasNext()) {
- toReturn.append("+ \" \" +");
+ toReturn.append("+ ");
}
}
return toReturn.toString();
@@ -158,6 +169,7 @@
return this;
}
+ @Override
public String toCss() {
StringBuilder sb = new StringBuilder();
for (Value v : values) {
@@ -204,6 +216,7 @@
}
}
+ @Override
public String getExpression() {
return expression;
}
@@ -221,6 +234,7 @@
return this;
}
+ @Override
public String toCss() {
return css;
}
@@ -275,6 +289,7 @@
this.value = value;
}
+ @Override
public String getExpression() {
// The escaped CSS content has to be escaped to be a valid Java literal
return "\"" + Generator.escape(toCss()) + "\"";
@@ -292,12 +307,28 @@
/**
* Returns a escaped, quoted representation of the underlying value.
*/
+ @Override
public String toCss() {
return '"' + escapeValue(value, true) + '"';
}
}
/**
+ * Represents a token in the CSS source.
+ */
+ public static class TokenValue extends IdentValue {
+
+ public TokenValue(String token) {
+ super(token);
+ }
+
+ @Override
+ public boolean isSpaceRequired() {
+ return false;
+ }
+ }
+
+ /**
* An abstract encapsulation of property values in GWT CSS.
*/
public abstract static class Value {
@@ -326,6 +357,10 @@
return null;
}
+ public boolean isSpaceRequired() {
+ return true;
+ }
+
public StringValue isStringValue() {
return null;
}