- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 12 Oct 2012 14:33:56 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/properties/css3 In directory hutz:/tmp/cvs-serv19734/css3 Modified Files: Css3Style.java Added Files: CssTransform.java Log Message: transform per http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#effects Index: Css3Style.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css3/Css3Style.java,v retrieving revision 1.127 retrieving revision 1.128 diff -u -d -r1.127 -r1.128 --- Css3Style.java 12 Oct 2012 12:41:29 -0000 1.127 +++ Css3Style.java 12 Oct 2012 14:33:54 -0000 1.128 @@ -85,6 +85,7 @@ import org.w3c.css.properties.css.CssTextEmphasisStyle; import org.w3c.css.properties.css.CssTextJustify; import org.w3c.css.properties.css.CssTextUnderlinePosition; +import org.w3c.css.properties.css.CssTransform; import org.w3c.css.properties.css.CssTransformOrigin; import org.w3c.css.properties.css.CssTransformStyle; import org.w3c.css.properties.css.CssTransition; @@ -202,6 +203,7 @@ public CssPerspective cssPerspective; public CssPerspectiveOrigin cssPerspectiveOrigin; public CssTransformOrigin cssTransformOrigin; + public CssTransform cssTransform; CssDropInitialAfterAdjust cssDropInitialAfterAdjust; CssDropInitialAfterAlign cssDropInitialAfterAlign; @@ -1374,6 +1376,15 @@ return cssTransformOrigin; } + public CssTransform getTransform() { + if (cssTransform == null) { + cssTransform = + (CssTransform) style.CascadingOrder( + new CssTransform(), style, selector); + } + return cssTransform; + } + /// /** --- NEW FILE: CssTransform.java --- // $Id: CssTransform.java,v 1.1 2012/10/12 14:33:54 ylafon Exp $ // Author: Yves Lafon <ylafon@w3.org> // // (c) COPYRIGHT MIT, ERCIM and Keio University, 2012. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.properties.css3; import org.w3c.css.properties.css.CssProperty; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; import org.w3c.css.values.CssFunction; import org.w3c.css.values.CssLayerList; import org.w3c.css.values.CssTypes; import org.w3c.css.values.CssValue; import java.util.ArrayList; import static org.w3c.css.values.CssOperator.COMMA; import static org.w3c.css.values.CssOperator.SPACE; /** * @spec http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#effects */ public class CssTransform extends org.w3c.css.properties.css.CssTransform { // 2d functions static final String matrix = "matrix"; static final String translate = "translate"; static final String translateX = "translatex"; // lowercase translateX static final String translateY = "translatey"; // lowercase translateY static final String scale = "scale"; static final String scaleX = "scalex"; // lowercase scaleX static final String scaleY = "scaley"; // lowercase scaleY static final String rotate = "rotate"; static final String skew = "skew"; static final String skewX = "skewx"; // lowercase skewX static final String skewY = "skewy"; // lowercase skewY // 3d functions static final String matrix3d = "matrix3d"; static final String translate3d = "translate3d"; static final String translateZ = "translatez"; // lowercase translateZ static final String scale3d = "scale3d"; static final String scaleZ = "scalez"; // lowercalse scaleZ static final String rotate3d = "rotate3d"; static final String rotateX = "rotatex"; // lowercase rotateX static final String rotateY = "rotatey"; // lowercase rotateY static final String rotateZ = "rotatez"; // lowercase rotateZ static final String perspective = "perspective"; /** * Create a new CssTransform */ public CssTransform() { value = initial; } /** * Creates a new CssTransform * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssTransform(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); CssValue val; char op; ArrayList<CssValue> values = new ArrayList<CssValue>(); boolean singleVal = false; CssValue sValue = null; while (!expression.end()) { val = expression.getValue(); op = expression.getOperator(); switch (val.getType()) { case CssTypes.CSS_FUNCTION: parseFunctionValues(ac, val, this); values.add(val); break; case CssTypes.CSS_IDENT: if (inherit.equals(val)) { singleVal = true; sValue = inherit; values.add(inherit); break; } else if (none.equals(val)) { singleVal = true; sValue = none; values.add(none); break; } // if not recognized, let it fail default: throw new InvalidParamException("value", val.toString(), getPropertyName(), ac); } expression.next(); if (!expression.end() && (op != SPACE)) { throw new InvalidParamException("operator", ((new Character(op)).toString()), ac); } } if (singleVal && values.size() > 1) { throw new InvalidParamException("value", sValue.toString(), getPropertyName(), ac); } value = (values.size() == 1) ? values.get(0) : new CssLayerList(values); } public CssTransform(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } protected static void parseFunctionValues(ApplContext ac, CssValue func, CssProperty caller) throws InvalidParamException { CssFunction function = (CssFunction) func; String fname = function.getName().toLowerCase(); // waiting for jdk7 for the string-based switch/case // 2d functions if (matrix.equals(fname)) { parseExactlyNX(ac, function.getParameters(), 6, CssTypes.CSS_NUMBER, caller); } else if (translate.equals(fname)) { parseTranslateFunction(ac, function.getParameters(), caller); } else if (translateX.equals(fname) || translateY.equals(fname)) { parseTranslateAxisFunction(ac, function.getParameters(), caller); } else if (scale.equals(fname)) { parseAtMostX(ac, function.getParameters(), 2, CssTypes.CSS_NUMBER, caller); } else if (scaleX.equals(fname) || scaleY.equals(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_NUMBER, caller); } else if (rotate.equals(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_ANGLE, caller); } else if (skew.equals(fname)) { parseAtMostX(ac, function.getParameters(), 2, CssTypes.CSS_ANGLE, caller); } else if (skewX.equals(fname) || skewY.equals(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_ANGLE, caller); /* after this line, 3d functions */ } else if (matrix3d.equals(fname)) { parseExactlyNX(ac, function.getParameters(), 16, CssTypes.CSS_NUMBER, caller); } else if (translate3d.equals(fname)) { parseTranslate3dFunction(ac, function.getParameters(), caller); } else if (translateZ.endsWith(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_LENGTH, caller); } else if (scale3d.equals(fname)) { parseExactlyNX(ac, function.getParameters(), 3, CssTypes.CSS_NUMBER, caller); } else if (scaleZ.equals(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_NUMBER, caller); } else if (rotate3d.equals(fname)) { parseRotate3dFunction(ac, function.getParameters(), caller); } else if (rotateX.equals(fname) || rotateY.equals(fname) || rotateZ.equals(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_ANGLE, caller); } else if (perspective.endsWith(fname)) { parseOneX(ac, function.getParameters(), CssTypes.CSS_LENGTH, caller); } else { // unrecognized function throw new InvalidParamException("value", func.toString(), caller.getPropertyName(), ac); } } private static void parseExactlyNX(ApplContext ac, CssExpression expression, int n, int type, CssProperty caller) throws InvalidParamException { if (expression.getCount() < n) { throw new InvalidParamException("few-value", caller.getPropertyName(), ac); } parseAtMostX(ac, expression, n, CssTypes.CSS_NUMBER, caller); } // parse at most n values of type (CssTypes.XXX) private static void parseAtMostX(ApplContext ac, CssExpression expression, int atMost, int type, CssProperty caller) throws InvalidParamException { if (expression.getCount() > atMost) { throw new InvalidParamException("unrecognize", ac); } CssValue val; char op; while (!expression.end()) { val = expression.getValue(); op = expression.getOperator(); if (val.getType() != type) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); if (!expression.end() && (op != COMMA)) { throw new InvalidParamException("operator", ((new Character(op)).toString()), ac); } } } // parse one value of type (CssTypes.XXX) private static void parseOneX(ApplContext ac, CssExpression expression, int type, CssProperty caller) throws InvalidParamException { if (expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } CssValue val; val = expression.getValue(); if (val.getType() != CssTypes.CSS_NUMBER && val.getType() != CssTypes.CSS_LENGTH) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); } // special cases // http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#translate-function private static void parseTranslateFunction(ApplContext ac, CssExpression expression, CssProperty caller) throws InvalidParamException { if (expression.getCount() > 2) { throw new InvalidParamException("unrecognize", ac); } CssValue val; char op; while (!expression.end()) { val = expression.getValue(); op = expression.getOperator(); if (val.getType() != CssTypes.CSS_NUMBER && val.getType() != CssTypes.CSS_LENGTH) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); if (!expression.end() && (op != COMMA)) { throw new InvalidParamException("operator", ((new Character(op)).toString()), ac); } } } // http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#translateX-function private static void parseTranslateAxisFunction(ApplContext ac, CssExpression expression, CssProperty caller) throws InvalidParamException { if (expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } CssValue val; val = expression.getValue(); if (val.getType() != CssTypes.CSS_NUMBER && val.getType() != CssTypes.CSS_LENGTH) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); } // http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#translate3d-function private static void parseTranslate3dFunction(ApplContext ac, CssExpression expression, CssProperty caller) throws InvalidParamException { if (expression.getCount() < 3) { throw new InvalidParamException("few-value", caller.getPropertyName(), ac); } if (expression.getCount() > 3) { throw new InvalidParamException("unrecognize", ac); } CssValue val; char op; for (int i = 0; i < 2; i++) { val = expression.getValue(); op = expression.getOperator(); if (val.getType() != CssTypes.CSS_NUMBER && val.getType() != CssTypes.CSS_LENGTH) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); if (op != COMMA) { throw new InvalidParamException("operator", ((new Character(op)).toString()), ac); } } val = expression.getValue(); if (val.getType() != CssTypes.CSS_LENGTH) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); } // http://www.w3.org/TR/2012/WD-css3-transforms-20120911/#rotate3d-function private static void parseRotate3dFunction(ApplContext ac, CssExpression expression, CssProperty caller) throws InvalidParamException { if (expression.getCount() < 4) { throw new InvalidParamException("few-value", caller.getPropertyName(), ac); } if (expression.getCount() > 4) { throw new InvalidParamException("unrecognize", ac); } CssValue val; char op; for (int i = 0; i < 3; i++) { val = expression.getValue(); op = expression.getOperator(); if (val.getType() != CssTypes.CSS_NUMBER) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); if (op != COMMA) { throw new InvalidParamException("operator", ((new Character(op)).toString()), ac); } } val = expression.getValue(); if (val.getType() != CssTypes.CSS_ANGLE) { throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); } }
Received on Friday, 12 October 2012 14:33:58 UTC