2002/css-validator/org/w3c/css/values CssColor.java,1.16,1.17

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

Modified Files:
	CssColor.java 
Log Message:
HSLA parsing rewritten like HSL


Index: CssColor.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssColor.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- CssColor.java	5 Mar 2009 22:45:42 -0000	1.16
+++ CssColor.java	5 Mar 2009 22:59:00 -0000	1.17
@@ -589,7 +589,7 @@
 	}
 	if (val.getType() == CssTypes.CSS_NUMBER) {
 	    CssNumber number = (CssNumber) val;
-	    hsl.setHue(angleValue(number.getInt(), ac));
+	    hsl.setHue(angleValue(number.getValue(), ac));
 	} else {
 	    throw new InvalidParamException("rgb", val, ac); // FIXME hsl
 	}
@@ -634,55 +634,78 @@
 	}
     }
 
-    public void setHSLAColor(Vector exp, ApplContext ac)
-	throws InvalidParamException {
 
+    public void setHSLAColor(CssExpression exp, ApplContext ac) 
+	throws InvalidParamException
+    {
 	color = null;
 	hsla = new HSLA();
-
-	//CssAngle h = new CssAngle();
-	CssNumber h = new CssNumber();
-	CssPercentage s = new CssPercentage();
-	CssPercentage l = new CssPercentage();
-	Float a;
-
-	// no correct InvalidParamException in CssAngle in case of an error, therefore this double catch
-	/*
-	  try {
-	  h.set((exp.elementAt(0)).toString(), ac);
-	  } catch (InvalidParamException e) {
-	  throw new InvalidParamException("angle", (exp.elementAt(0)).toString(), ac);
-	  } catch (Exception e) {
-	  throw new InvalidParamException("angle", (exp.elementAt(0)).toString(), ac);
-	  }
-	*/
-
-	h.set((exp.elementAt(0)).toString(), ac);
-
-	if (((Float)h.get()).intValue() > 360 || ((Float)h.get()).intValue() < 0) {
-	    throw new InvalidParamException("angle", (exp.elementAt(0)).toString(), ac);
+	
+	CssValue val = exp.getValue();
+	char op = exp.getOperator();
+	// H
+	if (val == null || op != COMMA) {
+	    throw new InvalidParamException("invalid-color", ac);
 	}
-
-	// here a correct InvalidParamException is thrown in case of an error
-	s.set((exp.elementAt(1)).toString(), ac);
-	l.set((exp.elementAt(2)).toString(), ac);
-
-	try {
-	    a = new Float(((CssValue) exp.elementAt(3)).toString());
-	} catch (Exception e) {
-	    throw new InvalidParamException("rgb", (exp.elementAt(3)).toString(), ac);
+	if (val.getType() == CssTypes.CSS_NUMBER) {
+	    CssNumber number = (CssNumber) val;
+	    hsla.setHue(angleValue(number.getValue(), ac));
+	} else {
+	    throw new InvalidParamException("rgb", val, ac); // FIXME hsl
 	}
 
-	if (a.floatValue() < 0 || a.floatValue() > 1) {
-	    ac.getFrame().addWarning("out-of-range", Integer.toString(a.intValue()));
-	    a = clippedAlphaValue(a.floatValue(), ac);
+	// S
+	exp.next();
+	val = exp.getValue();
+	op = exp.getOperator();
+	if (val == null || op != COMMA) {
+	    exp.starts();
+	    throw new InvalidParamException("invalid-color", ac);
+	}
+	if (val.getType() == CssTypes.CSS_PERCENTAGE) {
+	    CssPercentage percent = (CssPercentage) val;
+	    hsla.setSaturation(clippedPercentValue(percent.getValue(),ac));
+	} else {
+	    exp.starts();
+	    throw new InvalidParamException("rgb", val, ac); // FIXME hsl
+	}
+	
+	// L
+	exp.next();
+	val = exp.getValue();
+	op = exp.getOperator();
+	if (val == null || op != COMMA) {
+	    exp.starts();
+	    throw new InvalidParamException("invalid-color", ac);
+	}
+	if (val.getType() == CssTypes.CSS_PERCENTAGE) {
+	    CssPercentage percent = (CssPercentage) val;
+	    hsla.setLightness(clippedPercentValue(percent.getValue(),ac));
+	} else {
+	    exp.starts();
+	    throw new InvalidParamException("rgb", val, ac); // FIXME hsl
 	}
 
-	hsla.h = h;
-	hsla.s = s;
-	hsla.l = l;
-	hsla.a = a;
-
+	// A
+	exp.next();
+	val = exp.getValue();
+	if (val == null) {
+	    exp.starts();
+	    throw new InvalidParamException("invalid-color", ac);
+	}
+	if (val.getType() == CssTypes.CSS_NUMBER) {
+	    CssNumber number = (CssNumber) val;
+	    hsla.setAlpha(clippedAlphaValue(number.getValue(), ac));
+	} else {
+	    exp.starts();
+	    throw new InvalidParamException("rgb", val, ac); // FIXME hsl
+	}
+	// extra values?
+	exp.next();
+	if (exp.getValue() != null) {
+	    exp.starts();
+	    throw new InvalidParamException("rgb", exp.getValue(), ac);
+	}
     }
 
     private int clippedIntValue(int rgb, ApplContext ac) {

Received on Thursday, 5 March 2009 22:59:10 UTC