- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Sat, 09 Jan 2010 10:36:49 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/properties/css In directory hutz:/tmp/cvs-serv14741/properties/css Modified Files: CssBackground.java Log Message: added mark/reset to navigate in the CssExpression, modified parsing of background-position in CSS3 background Index: CssBackground.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css/CssBackground.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- CssBackground.java 8 Jan 2010 21:38:01 -0000 1.5 +++ CssBackground.java 9 Jan 2010 10:36:47 -0000 1.6 @@ -235,26 +235,36 @@ CssExpression exp = new CssExpression(); char op = expression.getOperator(); exp.addValue(expression.getValue()); + int last_val = -1; CssBackgroundPosition bg_pos; bg_pos = new CssBackgroundPosition(ac, exp, check); // good we have a valid value, try something better.. - try { - for (int i = 0; i < 3; i++) { - if ((op == SPACE) && !expression.end()) { - expression.next(); - if (expression.end()) { - break; - } - exp.addValue(expression.getValue()); - exp.starts(); + expression.mark(); + // we MUST try all the cases, as we can have something + // invalid using 3 values (incompatible definitions) + // but valid using 4 values... + // example top 12% is invalid, top 12% center is valid... + for (int i = 0; i < 3; i++) { + if ((op == SPACE) && !expression.end()) { + expression.next(); + if (expression.end()) { + break; + } + exp.addValue(expression.getValue()); + exp.starts(); + try { bg_pos = new CssBackgroundPosition(ac, exp, check); - + last_val = i; + } catch (InvalidParamException ipe) { } + } - } catch (InvalidParamException ipe) { - // roll back - expression.precedent(); + } + expression.reset(); + while (last_val >= 0) { + expression.next(); + last_val--; } return bg_pos.get(); }
Received on Saturday, 9 January 2010 10:36:51 UTC