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;
     }