2002/css-validator/org/w3c/css/properties/css CssBackground.java,1.2,1.3 CssBackgroundPosition.java,1.2,1.3

Update of /sources/public/2002/css-validator/org/w3c/css/properties/css
In directory hutz:/tmp/cvs-serv8530/org/w3c/css/properties/css

Modified Files:
	CssBackground.java CssBackgroundPosition.java 
Log Message:
progress on background CSS3 shorthand property

Index: CssBackgroundPosition.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css/CssBackgroundPosition.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- CssBackgroundPosition.java	5 Jan 2010 19:49:50 -0000	1.2
+++ CssBackgroundPosition.java	6 Jan 2010 09:27:44 -0000	1.3
@@ -290,7 +290,7 @@
                 switch (nb_values) {
                     case 1:
                         // If only one value is specified, the second value
-                        // is assumed to be �center�.
+                        // is assumed to be 'center'.
                         v.horizontal = v.value.get(0);
                         if (v.horizontal.getType() == CssTypes.CSS_NUMBER) {
                             v.horizontal = defaultPercent0;
@@ -536,6 +536,4 @@
 
     }
 
-
-
 }

Index: CssBackground.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css/CssBackground.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- CssBackground.java	5 Jan 2010 19:49:50 -0000	1.2
+++ CssBackground.java	6 Jan 2010 09:27:44 -0000	1.3
@@ -12,11 +12,14 @@
 import org.w3c.css.properties.css1.Css1Style;
 import org.w3c.css.util.ApplContext;
 import org.w3c.css.util.InvalidParamException;
+import org.w3c.css.values.CssColor;
 import org.w3c.css.values.CssExpression;
 import org.w3c.css.values.CssValue;
 import org.w3c.css.values.CssValueList;
 
-import static org.w3c.css.values.CssOperator.SLASH;
+import java.util.ArrayList;
+
+import static org.w3c.css.values.CssOperator.COMMA;
 import static org.w3c.css.values.CssOperator.SPACE;
 
 /**
@@ -59,7 +62,15 @@
  */
 public class CssBackground extends CssProperty {
 
+    private static final String propertyName = "background";
+
+    Object value;
+
+    public CssColor _color;
+
+    // TODO get rid of those
     public CssBackgroundColor color;
+
     public CssBackgroundImage image;
     public CssBackgroundRepeat repeat;
     public CssBackgroundAttachment attachment;
@@ -97,92 +108,62 @@
     public CssBackground(ApplContext ac, CssExpression expression,
                          boolean check) throws InvalidParamException {
 
+                setByUser();
         CssValue val;
+        ArrayList<CssBackgroundValue> values;
+        CssBackgroundValue b_val = null;
         char op;
-        boolean find = true;
-        setByUser();
-
-        // if there are too many values -> error
-        if (check && expression.getCount() > 6) {
-            throw new InvalidParamException("unrecognize", ac);
-        }
-
-        boolean manyValues = (expression.getCount() > 1);
 
-        while (find) {
-            find = false;
+        values = new ArrayList<CssBackgroundValue>();
+        // we just accumulate values and check at validation
+        while (!expression.end()) {
             val = expression.getValue();
             op = expression.getOperator();
 
-            expression.next();
-            if (val == null) {
-                break;
-            }
-
-            // if there are many values, we can't have inherit as one of them
-            if (manyValues && val != null && val.equals(inherit)) {
-                throw new InvalidParamException("unrecognize", null, null, ac);
-            }
-
-            if (color == null) {
-                try {
-                    color = new CssBackgroundColor(ac, expression);
-                    find = true;
-                } catch (InvalidParamException e) {
-                    // nothing to do, image will test this value
-                }
-            }
-            if (!find && image == null) {
-                try {
-                    image = new CssBackgroundImage(ac, expression);
-                    find = true;
-                } catch (InvalidParamException e) {
-                    // nothing to do, repeat will test this value
-                }
-            }
-            if (!find && repeat == null) {
-                try {
-                    repeat = new CssBackgroundRepeat(ac, expression);
-                    find = true;
-                } catch (InvalidParamException e) {
-                    // nothing to do, attachment will test this value
-                }
-            }
-            if (!find && attachment == null) {
-                try {
-                    attachment = new CssBackgroundAttachment(ac, expression);
-                    find = true;
-                } catch (InvalidParamException e) {
-                    // nothing to do, position will test this value
+            if (inherit.equals(val)) {
+                if (expression.getCount() > 1) {
+                    throw new InvalidParamException("value", val,
+                            getPropertyName(), ac);
                 }
+                value = inherit;
+                expression.next();
+                return;
             }
-            if (!find && position == null) {
-                try {
-                    position = new CssBackgroundPosition(ac, expression);
-                    find = true;
-                } catch (InvalidParamException e) {
-                    // nothing to do
-                }
+            if (b_val == null) {
+                b_val = new CssBackgroundValue();
             }
-            if (op != SPACE) {
-                if (op != SLASH) {
+            // we will check later
+            b_val.add(val);
+            expression.next();
+
+            if (!expression.end()) {
+                // incomplete value followed by a comma... it's complete!
+                if (op == COMMA) {
+                    check(b_val, ac);
+                    values.add(b_val);
+                    b_val = null;
+                } else if (op != SPACE) {
                     throw new InvalidParamException("operator",
-                            ((new Character(op)).toString()),
-                            ac);
-                } else {
-                    //try {
-                    size = new CssBackgroundSize(ac, expression);
-                    sizedefined = true;
-                    break;
-                    //} catch (InvalidParamException e) {
-                    // error!
-                    //}
+                            ((new Character(op)).toString()), ac);
                 }
             }
-            if (check && !find && val != null) {
-                throw new InvalidParamException("unrecognize", ac);
-            }
         }
+        // if we reach the end in a value that can come in pair
+        if (b_val != null) {
+            check(b_val, ac);
+            values.add(b_val);
+        }
+        if (values.size() == 1) {
+            value = values.get(0);
+        } else {
+            value = values;
+        }
+    }
+
+    public void check(CssBackgroundValue v, ApplContext ac)
+            throws InvalidParamException
+    {
+        // TODO have fun here...
     }
 
     /**
@@ -213,51 +194,25 @@
     /**
      * Returns the name of this property
      */
-    public String getPropertyName() {
-        return "background";
+    public final String getPropertyName() {
+        return propertyName;
     }
 
     /**
      * Returns a string representation of the object.
      */
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        boolean addspace = false;
-        if (color != null) {
-            sb.append(color);
-            addspace = true;
-        }
-        if (image != null) {
-            if (addspace) {
-                sb.append(' ');
-            }
-            sb.append(image);
-            addspace = true;
-        }
-        if (repeat != null) {
-            if (addspace) {
-                sb.append(' ');
-            }
-            sb.append(repeat);
-            addspace = true;
-        }
-        if (attachment != null) {
-            if (addspace) {
-                sb.append(' ');
-            }
-            sb.append(attachment);
-            addspace = true;
-        }
-        if (position != null) {
-            if (addspace) {
-                sb.append(' ');
+        if (value instanceof ArrayList) {
+            ArrayList v_list;
+            v_list = (ArrayList) value;
+            StringBuilder sb = new StringBuilder();
+            for (Object val : v_list) {
+                sb.append(val.toString()).append(", ");
             }
-            sb.append(position);
-        }
-        if (sizedefined) {
-            sb.append('/').append(size);
+            sb.setLength(sb.length() - 2);
+            return sb.toString();
         }
-        return sb.toString();
+        return value.toString();
     }
 
     /**
@@ -265,6 +220,7 @@
      * Overrides this method for a macro
      */
     public void setImportant() {
+        super.setImportant();
         if (color != null) {
             color.important = true;
         }
@@ -283,18 +239,6 @@
     }
 
     /**
-     * Returns true if this property is important.
-     * Overrides this method for a macro
-     */
-    public boolean getImportant() {
-        return ((color == null || color.important) &&
-                (image == null || image.important) &&
-                (repeat == null || repeat.important) &&
-                (attachment == null || attachment.important) &&
-                (position == null || position.important));
-    }
-
-    /**
      * Print this property.
      *
      * @param printer The printer.

Received on Wednesday, 6 January 2010 09:27:48 UTC