- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 05 Mar 2009 18:00:04 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/values In directory hutz:/tmp/cvs-serv8309 Modified Files: CssColor.java Log Message: parsing of RGBA fixed Index: CssColor.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssColor.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- CssColor.java 26 Mar 2008 09:18:26 -0000 1.14 +++ CssColor.java 5 Mar 2009 18:00:02 -0000 1.15 @@ -260,7 +260,8 @@ * format rgb(<num>%?, <num>%?, <num>%?) */ public void setRGBColor(CssExpression exp, ApplContext ac) - throws InvalidParamException { + throws InvalidParamException + { CssValue val = exp.getValue(); char op = exp.getOperator(); color = null; @@ -277,8 +278,8 @@ rgb.setPercent(false); break; case CssTypes.CSS_PERCENTAGE: - rgb.setRed(clippedPercentValue(((Float) val.get()).floatValue(), - ac)); + CssPercentage percent = (CssPercentage) val; + rgb.setRed(clippedPercentValue(percent.getValue(),ac)); rgb.setPercent(true); break; default: @@ -305,8 +306,8 @@ if (!rgb.isPercent()) { throw new InvalidParamException("integer", val, ac); } - rgb.setGreen(clippedPercentValue(((Float) val.get()).floatValue(), - ac)); + CssPercentage percent = (CssPercentage) val; + rgb.setGreen(clippedPercentValue(percent.getValue(),ac)); break; default: throw new InvalidParamException("rgb", val, ac); @@ -332,8 +333,8 @@ if (!rgb.isPercent()) { throw new InvalidParamException("integer", val, ac); } - rgb.setBlue(clippedPercentValue(((Float) val.get()).floatValue(), - ac)); + CssPercentage percent = (CssPercentage) val; + rgb.setBlue(clippedPercentValue(percent.getValue(),ac)); break; default: throw new InvalidParamException("rgb", val, ac); @@ -467,64 +468,103 @@ return false; } - public void setRGBAColor(Vector exp, ApplContext ac) - throws InvalidParamException { + public void setRGBAColor(CssExpression exp, ApplContext ac) + throws InvalidParamException + { + CssValue rgbaValues[] = new CssValue[4]; + + CssValue val; + char op; color = null; rgba = new RGBA(); - CssValue val = (CssValue) exp.elementAt(0); - if (val instanceof CssNumber) { + val = exp.getValue(); + op = exp.getOperator(); + if (val == null || op != COMMA) { + throw new InvalidParamException("invalid-color", ac); + } + + switch (val.getType()) { + case CssTypes.CSS_NUMBER: CssNumber number = (CssNumber) val; - rgba.r = clippedIntValue(number.getInt(), ac); + rgba.setRed(clippedIntValue(number.getInt(), ac)); rgba.setPercent(false); - } else if (val instanceof CssPercentage) { - rgba.r = clippedPercentValue(((Float) val.get()).floatValue(), ac); + break; + case CssTypes.CSS_PERCENTAGE: + CssPercentage percent = (CssPercentage) val; + rgba.setRed(clippedPercentValue(percent.getValue(), ac)); rgba.setPercent(true); - } else { - throw new InvalidParamException("rgb", val, ac); + break; + default: + throw new InvalidParamException("rgb", val, ac); // FIXME rgba } - - val = (CssValue) exp.elementAt(1); - - if (val instanceof CssNumber) { - CssNumber number = (CssNumber) val; + exp.next(); + val = exp.getValue(); + op = exp.getOperator(); + if (val == null || op != COMMA) { + throw new InvalidParamException("invalid-color", ac); + } + // green + // and validate against the "percentageness" + switch (val.getType()) { + case CssTypes.CSS_NUMBER: if (rgba.isPercent()) { throw new InvalidParamException("percent", val, ac); } - rgba.g = clippedIntValue(number.getInt(), ac); - } else if (val instanceof CssPercentage) { + CssNumber number = (CssNumber) val; + rgba.setGreen(clippedIntValue(number.getInt(), ac)); + break; + case CssTypes.CSS_PERCENTAGE: if (!rgba.isPercent()) { throw new InvalidParamException("integer", val, ac); } - rgba.g = clippedPercentValue(((Float) val.get()).floatValue(), ac); - } else { - throw new InvalidParamException("rgb", val, ac); + CssPercentage percent = (CssPercentage) val; + rgba.setGreen(clippedPercentValue(percent.getValue(), ac)); + break; + default: + throw new InvalidParamException("rgb", val, ac); // FIXME rgba } - - val = (CssValue) exp.elementAt(2); - - if (val instanceof CssNumber) { - CssNumber number = (CssNumber) val; + exp.next(); + val = exp.getValue(); + op = exp.getOperator(); + if (val == null || op != COMMA) { + throw new InvalidParamException("invalid-color", ac); + } + // blue + // and validate against the "percentageness" + switch (val.getType()) { + case CssTypes.CSS_NUMBER: if (rgba.isPercent()) { throw new InvalidParamException("percent", val, ac); } - rgba.b = clippedIntValue(number.getInt(), ac); - } else if (val instanceof CssPercentage) { + CssNumber number = (CssNumber) val; + rgba.setBlue(clippedIntValue(number.getInt(), ac)); + break; + case CssTypes.CSS_PERCENTAGE: if (!rgba.isPercent()) { throw new InvalidParamException("integer", val, ac); } - rgba.b = clippedPercentValue(((Float) val.get()).floatValue(), ac); - } else { - throw new InvalidParamException("rgb", val, ac); + CssPercentage percent = (CssPercentage) val; + rgba.setBlue(clippedPercentValue(percent.getValue(), ac)); + break; + default: + throw new InvalidParamException("rgb", val, ac); // FIXME rgba } - - val = (CssValue) exp.elementAt(3); - if(val instanceof CssNumber) { - rgba.a = clippedAlphaValue(((Float) val.get()).floatValue(), ac); + exp.next(); + val = exp.getValue(); + if (val == null) { + throw new InvalidParamException("invalid-color", ac); } - else { - throw new InvalidParamException("rgb", val, ac); - } + if (val.getType() == CssTypes.CSS_NUMBER) { + CssNumber number = (CssNumber) val; + rgba.setAlpha(clippedAlphaValue(number.getValue(), ac)); + } else { + throw new InvalidParamException("rgb", val, ac); // FIXME rgba + } + exp.next(); + if (exp.getValue() != null) { + throw new InvalidParamException("invalid-color", ac); + } } public void setHSLColor(Vector exp, ApplContext ac) @@ -960,10 +1000,7 @@ definedColors.put("slategrey", new RGB(112, 128, 144)); definedColors.put("transparent", - new RGBA(new Integer(0), - new Integer(0), - new Integer(0), - new Float(0))); + new RGBA(0, 0, 0, (float)0.0)); //CSS2 System colors deprecated deprecatedColors.put("activeborder", "ActiveBorder");
Received on Thursday, 5 March 2009 18:00:13 UTC