- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 25 Apr 2012 20:22:03 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/properties/css2 In directory hutz:/tmp/cvs-serv23918/w3c/css/properties/css2 Modified Files: Css2Style.java Added Files: CssBorder.java CssBorderBottom.java CssBorderBottomColor.java CssBorderBottomStyle.java CssBorderBottomWidth.java CssBorderColor.java CssBorderLeft.java CssBorderLeftColor.java CssBorderLeftStyle.java CssBorderLeftWidth.java CssBorderRight.java CssBorderRightColor.java CssBorderRightStyle.java CssBorderRightWidth.java CssBorderStyle.java CssBorderTop.java CssBorderTopColor.java CssBorderTopStyle.java CssBorderTopWidth.java CssBorderWidth.java Log Message: Finished implementation of css3-background (background and borders) * border is now a single item, instead of one per level * able to parse all the positive tests, some negative ones will need some tuning * Grammar modification to use the '/' between two numbers without matching a ratio Index: Css2Style.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css2/Css2Style.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Css2Style.java 11 Sep 2011 20:30:23 -0000 1.5 +++ Css2Style.java 25 Apr 2012 20:22:00 -0000 1.6 @@ -46,4 +46,52 @@ return cssElevation; } + /** + * Get the border-top-style property + */ + public final org.w3c.css.properties.css.CssBorderTopStyle getBorderTopStyle() { + if (cssBorder.borderStyle.top == null) { + cssBorder.borderStyle.top = + (org.w3c.css.properties.css.CssBorderTopStyle) style.CascadingOrder(new org.w3c.css.properties.css.CssBorderTopStyle(), + style, selector); + } + return cssBorder.borderStyle.top; + } + + /** + * Get the border-right-style property + */ + public final org.w3c.css.properties.css.CssBorderRightStyle getBorderRightStyle() { + if (cssBorder.borderStyle.right == null) { + cssBorder.borderStyle.right = + (org.w3c.css.properties.css.CssBorderRightStyle) style.CascadingOrder(new org.w3c.css.properties.css.CssBorderRightStyle(), + style, selector); + } + return cssBorder.borderStyle.right; + } + + /** + * Get the border-bottom-style property + */ + public final org.w3c.css.properties.css.CssBorderBottomStyle getBorderBottomStyle() { + if (cssBorder.borderStyle.bottom == null) { + cssBorder.borderStyle.bottom = + (org.w3c.css.properties.css.CssBorderBottomStyle) style.CascadingOrder(new org.w3c.css.properties.css.CssBorderBottomStyle(), + style, selector); + } + return cssBorder.borderStyle.bottom; + } + + /** + * Get the border-left-style property + */ + public final org.w3c.css.properties.css.CssBorderLeftStyle getBorderLeftStyle() { + if (cssBorder.borderStyle.left == null) { + cssBorder.borderStyle.left = + (org.w3c.css.properties.css.CssBorderLeftStyle) style.CascadingOrder(new org.w3c.css.properties.css.CssBorderLeftStyle(), + style, selector); + } + return cssBorder.borderStyle.left; + } + } --- NEW FILE: CssBorderColor.java --- // $Id: CssBorderColor.java,v 1.1 2012/04/25 20:22:00 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.css2; 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.CssTypes; import org.w3c.css.values.CssValue; import org.w3c.css.values.CssValueList; import java.util.ArrayList; import static org.w3c.css.values.CssOperator.SPACE; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#border-color-properties */ public class CssBorderColor extends org.w3c.css.properties.css.CssBorderColor { /** * Create a new CssBorderColor */ public CssBorderColor() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderColor(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderColor(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 4) { throw new InvalidParamException("unrecognize", ac); } setByUser(); CssValue val; char op; ArrayList<CssValue> res = new ArrayList<CssValue>(); while (res.size() < 4 && !expression.end()) { val = expression.getValue(); op = expression.getOperator(); switch (val.getType()) { case CssTypes.CSS_COLOR: res.add(val); break; case CssTypes.CSS_IDENT: if (inherit.equals(val)) { res.add(inherit); break; } if (transparent.equals(val)) { res.add(transparent); break; } res.add(new org.w3c.css.values.CssColor(ac, (String) val.get())); break; default: throw new InvalidParamException("unrecognize", ac); } expression.next(); if (op != SPACE) { throw new InvalidParamException("operator", Character.toString(op), ac); } } // check that inherit is alone if (res.size() > 1 && res.contains(inherit)) { throw new InvalidParamException("unrecognize", ac); } value = (res.size() == 1) ? res.get(0) : new CssValueList(res); // now assign the computed values... top = new CssBorderTopColor(); right = new CssBorderRightColor(); bottom = new CssBorderBottomColor(); left = new CssBorderLeftColor(); switch (res.size()) { case 1: top.value = left.value = right.value = bottom.value = res.get(0); break; case 2: top.value = bottom.value = res.get(0); right.value = left.value = res.get(1); break; case 3: top.value = res.get(0); right.value = left.value = res.get(1); bottom.value = res.get(2); break; case 4: top.value = res.get(0); right.value = res.get(1); bottom.value = res.get(2); left.value = res.get(3); break; default: // can't happen throw new InvalidParamException("unrecognize", ac); } shorthand = true; } /** * Check the border-*-color and returns a value. * It makes sense to do it only once for all the sides, so by having the code here. */ protected static CssValue checkBorderSideColor(ApplContext ac, CssProperty caller, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } CssValue retval = null; CssValue val = expression.getValue(); switch (val.getType()) { case CssTypes.CSS_COLOR: retval = val; break; case CssTypes.CSS_IDENT: if (transparent.equals(val)) { retval = transparent; break; } if (inherit.equals(val)) { retval = inherit; break; } retval = new org.w3c.css.values.CssColor(ac, (String) val.get()); break; default: throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); return retval; } } --- NEW FILE: CssBorder.java --- // $Id: CssBorder.java,v 1.1 2012/04/25 20:22:00 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.css2; 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.CssIdent; import org.w3c.css.values.CssLength; import org.w3c.css.values.CssNumber; import org.w3c.css.values.CssTypes; import org.w3c.css.values.CssValue; import org.w3c.css.values.CssValueList; import static org.w3c.css.values.CssOperator.SPACE; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#border-shorthand-properties */ public class CssBorder extends org.w3c.css.properties.css.CssBorder { /** * Create a new CssBackground */ public CssBorder() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorder(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorder(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { // great, it's the same thing as one side! CssValueList valueList = new CssValueList(); SideValues values = checkBorderSide(ac, this, expression, check); shorthand = true; if (values.color != null) { valueList.add(values.color); borderColor = new CssBorderColor(); borderColor.bottom = new CssBorderBottomColor(); borderColor.bottom.value = values.color; borderColor.top = new CssBorderTopColor(); borderColor.top.value = values.color; borderColor.left = new CssBorderLeftColor(); borderColor.left.value = values.color; borderColor.right = new CssBorderRightColor(); borderColor.right.value = values.color; } if (values.style != null) { valueList.add(values.style); borderStyle = new CssBorderStyle(); borderStyle.bottom = new CssBorderBottomStyle(); borderStyle.bottom.value = values.style; borderStyle.top = new CssBorderTopStyle(); borderStyle.top.value = values.style; borderStyle.left = new CssBorderLeftStyle(); borderStyle.left.value = values.style; borderStyle.right = new CssBorderRightStyle(); borderStyle.right.value = values.style; } if (values.width != null) { valueList.add(values.width); borderWidth = new CssBorderWidth(); borderWidth.bottom = new CssBorderBottomWidth(); borderWidth.bottom.value = values.width; borderWidth.top = new CssBorderTopWidth(); borderWidth.top.value = values.width; borderWidth.left = new CssBorderLeftWidth(); borderWidth.left.value = values.width; borderWidth.right = new CssBorderRightWidth(); borderWidth.right.value = values.width; } value = valueList; } /** * Check the border-* and returns a value. * It makes sense to do it only once for all the sides, so by having the code here. */ protected static SideValues checkBorderSide(ApplContext ac, CssProperty caller, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 3) { throw new InvalidParamException("unrecognize", ac); } CssValue _width = null; CssValue _style = null; CssValue _color = null; CssValue val; char op; while (!expression.end()) { val = expression.getValue(); op = expression.getOperator(); switch (val.getType()) { case CssTypes.CSS_NUMBER: val = ((CssNumber) val).getLength(); case CssTypes.CSS_LENGTH: CssLength length = (CssLength) val; if (!length.isPositive()) { throw new InvalidParamException("negative-value", expression.getValue(), caller.getPropertyName(), ac); } _width = val; break; case CssTypes.CSS_COLOR: _color = val; break; case CssTypes.CSS_IDENT: CssIdent id = (CssIdent) val; if (transparent.equals(id)) { _color = transparent; break; } if (inherit.equals(id)) { if (expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } _width = inherit; _style = inherit; _color = inherit; break; } CssIdent match = CssBorderWidth.getMatchingIdent(id); if (match != null) { _width = match; } else { match = CssBorderStyle.getMatchingIdent(id); if (match != null) { _style = match; } else { // if not a width or a style, fail if it's not a proper color _color = new org.w3c.css.values.CssColor(ac, id.toString()); } } break; default: throw new InvalidParamException("value", val.toString(), caller.getPropertyName(), ac); } expression.next(); if (op != SPACE) { throw new InvalidParamException("operator", Character.toString(op), ac); } } return new SideValues(_width, _style, _color); } // small wrapper to return values... protected static class SideValues { CssValue width; CssValue style; CssValue color; SideValues(CssValue width, CssValue style, CssValue color) { this.width = width; this.style = style; this.color = color; } } } --- NEW FILE: CssBorderRightStyle.java --- // $Id: CssBorderRightStyle.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS2 * @version $Revision: 1.1 $ */ public class CssBorderRightStyle extends org.w3c.css.properties.css.CssBorderRightStyle { /** * Create a new CssBorderRightStyle */ public CssBorderRightStyle() { } /** * Creates a new CssBorderRightStyle * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderRightStyle(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderStyle.checkBorderSideStyle(ac, this, expression, check); } public CssBorderRightStyle(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderBottomColor.java --- // $Id: CssBorderBottomColor.java,v 1.1 2012/04/25 20:22:00 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS2 * @version $Revision: 1.1 $ */ public class CssBorderBottomColor extends org.w3c.css.properties.css.CssBorderBottomColor { /** * Create a new CssBorderBottomColor */ public CssBorderBottomColor() { } /** * Creates a new CssBorderBottomColor * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderBottomColor(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { value = CssBorderColor.checkBorderSideColor(ac, this, expression, check); } public CssBorderBottomColor(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderBottomWidth.java --- // $Id: CssBorderBottomWidth.java,v 1.1 2012/04/25 20:22:00 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#value-def-border-width * @version $Revision: 1.1 $ */ public class CssBorderBottomWidth extends org.w3c.css.properties.css.CssBorderBottomWidth { /** * Create a new CssBorderBottomWidth */ public CssBorderBottomWidth() { } /** * Creates a new CssBorderBottomWidth * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderBottomWidth(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderWidth.checkBorderSideWidth(ac, this, expression, check); } public CssBorderBottomWidth(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderStyle.java --- // $Id: CssBorderStyle.java,v 1.1 2012/04/25 20:22:01 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.css2; 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.CssIdent; import org.w3c.css.values.CssTypes; import org.w3c.css.values.CssValue; import org.w3c.css.values.CssValueList; import java.util.ArrayList; import static org.w3c.css.values.CssOperator.SPACE; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#value-def-border-style */ public class CssBorderStyle extends org.w3c.css.properties.css.CssBorderStyle { public static CssIdent allowed_values[]; static { String _val[] = {"none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"}; int i = 0; allowed_values = new CssIdent[_val.length]; for (String s : _val) { allowed_values[i++] = CssIdent.getIdent(s); } } static CssIdent getMatchingIdent(CssIdent ident) { for (CssIdent id : allowed_values) { if (id.equals(ident)) { return id; } } return null; } /** * Create a new CssBorderStyle */ public CssBorderStyle() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderStyle(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderStyle(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 4) { throw new InvalidParamException("unrecognize", ac); } setByUser(); CssValue val; char op; ArrayList<CssValue> res = new ArrayList<CssValue>(); while (res.size() < 4 && !expression.end()) { val = expression.getValue(); op = expression.getOperator(); switch (val.getType()) { case CssTypes.CSS_IDENT: if (inherit.equals(val)) { res.add(inherit); break; } CssIdent match = getMatchingIdent((CssIdent) val); if (match == null) { throw new InvalidParamException("value", expression.getValue(), getPropertyName(), ac); } res.add(match); break; default: throw new InvalidParamException("unrecognize", ac); } expression.next(); if (op != SPACE) { throw new InvalidParamException("operator", Character.toString(op), ac); } } // check that inherit is alone if (res.size() > 1 && res.contains(inherit)) { throw new InvalidParamException("unrecognize", ac); } value = (res.size() == 1) ? res.get(0) : new CssValueList(res); // now assign the computed values... top = new CssBorderTopStyle(); right = new CssBorderRightStyle(); bottom = new CssBorderBottomStyle(); left = new CssBorderLeftStyle(); switch (res.size()) { case 1: top.value = left.value = right.value = bottom.value = res.get(0); break; case 2: top.value = bottom.value = res.get(0); right.value = left.value = res.get(1); break; case 3: top.value = res.get(0); right.value = left.value = res.get(1); bottom.value = res.get(2); break; case 4: top.value = res.get(0); right.value = res.get(1); bottom.value = res.get(2); left.value = res.get(3); break; default: // can't happen throw new InvalidParamException("unrecognize", ac); } shorthand = true; } /** * Check the border-*-style and returns a value. * It makes sense to do it only once for all the sides, so by having the code here. */ protected static CssValue checkBorderSideStyle(ApplContext ac, CssProperty caller, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } CssValue retval = null; CssValue val = expression.getValue(); switch (val.getType()) { case CssTypes.CSS_IDENT: if (inherit.equals(val)) { retval = inherit; } else { retval = getMatchingIdent((CssIdent) val); } if (retval == null) { throw new InvalidParamException("value", expression.getValue(), caller.getPropertyName(), ac); } break; default: throw new InvalidParamException("unrecognize", ac); } expression.next(); return retval; } } --- NEW FILE: CssBorderTopColor.java --- // $Id: CssBorderTopColor.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @see CssBorderColor * @version $Revision: 1.1 $ */ public class CssBorderTopColor extends org.w3c.css.properties.css.CssBorderTopColor { /** * Create a new CssBorderTopColor */ public CssBorderTopColor() { } /** * Creates a new CssBorderTopColor * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderTopColor(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { value = CssBorderColor.checkBorderSideColor(ac, this, expression, check); } public CssBorderTopColor(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderRightColor.java --- // $Id: CssBorderRightColor.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS2 * @version $Revision: 1.1 $ */ public class CssBorderRightColor extends org.w3c.css.properties.css.CssBorderRightColor { /** * Create a new CssBorderRightColor */ public CssBorderRightColor() { } /** * Creates a new CssBorderRightColor * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderRightColor(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { value = CssBorderColor.checkBorderSideColor(ac, this, expression, check); } public CssBorderRightColor(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderBottom.java --- // $Id: CssBorderBottom.java,v 1.1 2012/04/25 20:22:00 ylafon Exp $ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // Rewritten 2010 Yves Lafon <ylafon@w3.org> // (c) COPYRIGHT MIT, ERCIM and Keio, 1997-2010. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.properties.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS1 */ public class CssBorderBottom extends org.w3c.css.properties.css.CssBorderBottom { /** * Create a new CssBorderBottom */ public CssBorderBottom() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderBottom(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderBottom(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { CssBorder.SideValues values = CssBorder.checkBorderSide(ac, this, expression, check); if (values.width != null) { _width = new CssBorderBottomWidth(); _width.setByUser(); _width.value = values.width; } if (values.style != null) { _style = new CssBorderBottomStyle(); _style.setByUser(); _style.value = values.style; } if (values.color != null) { _color = new CssBorderBottomColor(); _color.setByUser(); _color.value = values.color; } } /** * Returns a string representation of the object. */ public String toString() { if (_width != null && inherit == _width.value) { return inherit.toString(); } StringBuilder sb = new StringBuilder(); boolean first = true; if (_width != null) { sb.append(_width); first = false; } if (_style != null) { if (first) { sb.append(_style); } else { sb.append(' ').append(_style); } first = false; } if (_color != null) { if (first) { sb.append(_color); } else { sb.append(' ').append(_color); } } return sb.toString(); } } --- NEW FILE: CssBorderLeft.java --- // $Id: CssBorderLeft.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS1 */ public class CssBorderLeft extends org.w3c.css.properties.css.CssBorderLeft { /** * Create a new CssBorderLeft */ public CssBorderLeft() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderLeft(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderLeft(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { CssBorder.SideValues values = CssBorder.checkBorderSide(ac, this, expression, check); if (values.width != null) { _width = new CssBorderLeftWidth(); _width.setByUser(); _width.value = values.width; } if (values.style != null) { _style = new CssBorderLeftStyle(); _style.setByUser(); _style.value = values.style; } if (values.color != null) { _color = new CssBorderLeftColor(); _color.setByUser(); _color.value = values.color; } } /** * Returns a string representation of the object. */ public String toString() { if (_width != null && inherit == _width.value) { return inherit.toString(); } StringBuilder sb = new StringBuilder(); boolean first = true; if (_width != null) { sb.append(_width); first = false; } if (_style != null) { if (first) { sb.append(_style); } else { sb.append(' ').append(_style); } first = false; } if (_color != null) { if (first) { sb.append(_color); } else { sb.append(' ').append(_color); } } return sb.toString(); } } --- NEW FILE: CssBorderLeftWidth.java --- // $Id: CssBorderLeftWidth.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#value-def-border-width * @version $Revision: 1.1 $ */ public class CssBorderLeftWidth extends org.w3c.css.properties.css.CssBorderLeftWidth { /** * Create a new CssBorderLeftWidth */ public CssBorderLeftWidth() { } /** * Creates a new CssBorderLeftWidth * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderLeftWidth(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderWidth.checkBorderSideWidth(ac, this, expression, check); } public CssBorderLeftWidth(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderRightWidth.java --- // $Id: CssBorderRightWidth.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#value-def-border-width * @version $Revision: 1.1 $ */ public class CssBorderRightWidth extends org.w3c.css.properties.css.CssBorderRightWidth { /** * Create a new CssBorderRightWidth */ public CssBorderRightWidth() { } /** * Creates a new CssBorderRightWidth * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderRightWidth(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderWidth.checkBorderSideWidth(ac, this, expression, check); } public CssBorderRightWidth(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderRight.java --- // $Id: CssBorderRight.java,v 1.1 2012/04/25 20:22:01 ylafon Exp $ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // Rewritten 2010 Yves Lafon <ylafon@w3.org> // (c) COPYRIGHT MIT, ERCIM and Keio, 1997-2010. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.properties.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS1 */ public class CssBorderRight extends org.w3c.css.properties.css.CssBorderRight { /** * Create a new CssBorderRight */ public CssBorderRight() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderRight(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderRight(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { CssBorder.SideValues values = CssBorder.checkBorderSide(ac, this, expression, check); if (values.width != null) { _width = new CssBorderRightWidth(); _width.setByUser(); _width.value = values.width; } if (values.style != null) { _style = new CssBorderRightStyle(); _style.setByUser(); _style.value = values.style; } if (values.color != null) { _color = new CssBorderRightColor(); _color.setByUser(); _color.value = values.color; } } /** * Returns a string representation of the object. */ public String toString() { if (_width != null && inherit == _width.value) { return inherit.toString(); } StringBuilder sb = new StringBuilder(); boolean first = true; if (_width != null) { sb.append(_width); first = false; } if (_style != null) { if (first) { sb.append(_style); } else { sb.append(' ').append(_style); } first = false; } if (_color != null) { if (first) { sb.append(_color); } else { sb.append(' ').append(_color); } } return sb.toString(); } } --- NEW FILE: CssBorderTopStyle.java --- // $Id: CssBorderTopStyle.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @see CssBorderStyle * @version $Revision: 1.1 $ */ public class CssBorderTopStyle extends org.w3c.css.properties.css.CssBorderTopStyle { /** * Create a new CssBorderTopStyle */ public CssBorderTopStyle() { } /** * Creates a new CssBorderTopStyle * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderTopStyle(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderStyle.checkBorderSideStyle(ac, this, expression, check); } public CssBorderTopStyle(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderWidth.java --- // $Id: CssBorderWidth.java,v 1.1 2012/04/25 20:22:01 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.css2; 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.CssIdent; import org.w3c.css.values.CssLength; import org.w3c.css.values.CssNumber; import org.w3c.css.values.CssTypes; import org.w3c.css.values.CssValue; import org.w3c.css.values.CssValueList; import java.util.ArrayList; import static org.w3c.css.values.CssOperator.SPACE; /** * @spec http://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#value-def-border-width */ public class CssBorderWidth extends org.w3c.css.properties.css.CssBorderWidth { public static CssIdent allowed_values[]; static { allowed_values = new CssIdent[3]; allowed_values[0] = CssIdent.getIdent("thin"); allowed_values[1] = CssIdent.getIdent("medium"); allowed_values[2] = CssIdent.getIdent("thick"); } /* * Get the cached ident if it matches null otherwise */ static CssIdent getMatchingIdent(CssIdent ident) { for (CssIdent id : allowed_values) { if (id.equals(ident)) { return id; } } return null; } /** * Create a new CssBorderWidth */ public CssBorderWidth() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderWidth(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException * The expression is incorrect */ public CssBorderWidth(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 4) { throw new InvalidParamException("unrecognize", ac); } setByUser(); CssValue val; char op; ArrayList<CssValue> res = new ArrayList<CssValue>(); while (res.size() < 4 && !expression.end()) { val = expression.getValue(); op = expression.getOperator(); switch (val.getType()) { case CssTypes.CSS_NUMBER: val = ((CssNumber) val).getLength(); case CssTypes.CSS_LENGTH: CssLength length = (CssLength) val; if (!length.isPositive()) { throw new InvalidParamException("negative-value", expression.getValue(), getPropertyName(), ac); } res.add(length); break; case CssTypes.CSS_IDENT: if (inherit.equals(val)) { res.add(inherit); break; } CssIdent match = getMatchingIdent((CssIdent) val); if (match == null) { throw new InvalidParamException("value", expression.getValue(), getPropertyName(), ac); } res.add(match); break; default: throw new InvalidParamException("unrecognize", ac); } expression.next(); if (op != SPACE) { throw new InvalidParamException("operator", Character.toString(op), ac); } } // check that inherit is alone if (res.size() > 1 && res.contains(inherit)) { throw new InvalidParamException("unrecognize", ac); } value = (res.size() == 1) ? res.get(0) : new CssValueList(res); // now assign the computed values... top = new CssBorderTopWidth(); right = new CssBorderRightWidth(); bottom = new CssBorderBottomWidth(); left = new CssBorderLeftWidth(); switch (res.size()) { case 1: top.value = left.value = right.value = bottom.value = res.get(0); break; case 2: top.value = bottom.value = res.get(0); right.value = left.value = res.get(1); break; case 3: top.value = res.get(0); right.value = left.value = res.get(1); bottom.value = res.get(2); break; case 4: top.value = res.get(0); right.value = res.get(1); bottom.value = res.get(2); left.value = res.get(3); break; default: // can't happen throw new InvalidParamException("unrecognize", ac); } shorthand = true; } /** * Check the border-*-width and returns a value. * It makes sense to do it only once for all the sides, so by having the code here. */ protected static CssValue checkBorderSideWidth(ApplContext ac, CssProperty caller, CssExpression expression, boolean check) throws InvalidParamException { if (check && expression.getCount() > 1) { throw new InvalidParamException("unrecognize", ac); } CssValue retval = null; CssValue val = expression.getValue(); switch (val.getType()) { case CssTypes.CSS_NUMBER: val = ((CssNumber) val).getLength(); case CssTypes.CSS_LENGTH: CssLength length = (CssLength) val; if (!length.isPositive()) { throw new InvalidParamException("negative-value", expression.getValue(), caller.getPropertyName(), ac); } retval = length; break; case CssTypes.CSS_IDENT: if (inherit.equals(val)) { retval = inherit; } else { retval = getMatchingIdent((CssIdent) val); } if (retval == null) { throw new InvalidParamException("value", expression.getValue(), caller.getPropertyName(), ac); } break; default: throw new InvalidParamException("unrecognize", ac); } expression.next(); return retval; } } --- NEW FILE: CssBorderLeftStyle.java --- // $Id: CssBorderLeftStyle.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS2 * @version $Revision: 1.1 $ */ public class CssBorderLeftStyle extends org.w3c.css.properties.css.CssBorderLeftStyle { /** * Create a new CssBorderLeftStyle */ public CssBorderLeftStyle() { } /** * Creates a new CssBorderLeftStyle * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderLeftStyle(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderStyle.checkBorderSideStyle(ac, this, expression, check); } public CssBorderLeftStyle(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderBottomStyle.java --- // $Id: CssBorderBottomStyle.java,v 1.1 2012/04/25 20:22:00 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS2 * @version $Revision: 1.1 $ */ public class CssBorderBottomStyle extends org.w3c.css.properties.css.CssBorderBottomStyle { /** * Create a new CssBorderBottomStyle */ public CssBorderBottomStyle() { } /** * Creates a new CssBorderBottomStyle * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderBottomStyle(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderStyle.checkBorderSideStyle(ac, this, expression, check); } public CssBorderBottomStyle(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderLeftColor.java --- // $Id: CssBorderLeftColor.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @see */ public class CssBorderLeftColor extends org.w3c.css.properties.css.CssBorderLeftColor { /** * Create a new CssBorderLeftColor */ public CssBorderLeftColor() { } /** * Creates a new CssBorderLeftColor * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderLeftColor(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { value = CssBorderColor.checkBorderSideColor(ac, this, expression, check); } public CssBorderLeftColor(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderTopWidth.java --- // $Id: CssBorderTopWidth.java,v 1.1 2012/04/25 20:22:01 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.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @see CssBorderWidth * @version $Revision: 1.1 $ */ public class CssBorderTopWidth extends org.w3c.css.properties.css.CssBorderTopWidth { /** * Create a new CssBorderTopWidth */ public CssBorderTopWidth() { } /** * Creates a new CssBorderTopWidth * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException * Expressions are incorrect */ public CssBorderTopWidth(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { setByUser(); // here we delegate to BorderWidth implementation value = CssBorderWidth.checkBorderSideWidth(ac, this, expression, check); } public CssBorderTopWidth(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } } --- NEW FILE: CssBorderTop.java --- // $Id: CssBorderTop.java,v 1.1 2012/04/25 20:22:01 ylafon Exp $ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // Rewritten 2010 Yves Lafon <ylafon@w3.org> // (c) COPYRIGHT MIT, ERCIM and Keio, 1997-2010. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.properties.css2; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; import org.w3c.css.values.CssExpression; /** * @since CSS1 */ public class CssBorderTop extends org.w3c.css.properties.css.CssBorderTop { /** * Create a new CssBorderTop */ public CssBorderTop() { } /** * Set the value of the property<br/> * Does not check the number of values * * @param expression The expression for this property * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderTop(ApplContext ac, CssExpression expression) throws InvalidParamException { this(ac, expression, false); } /** * Set the value of the property * * @param expression The expression for this property * @param check set it to true to check the number of values * @throws org.w3c.css.util.InvalidParamException The expression is incorrect */ public CssBorderTop(ApplContext ac, CssExpression expression, boolean check) throws InvalidParamException { CssBorder.SideValues values = CssBorder.checkBorderSide(ac, this, expression, check); if (values.width != null) { _width = new CssBorderTopWidth(); _width.setByUser(); _width.value = values.width; } if (values.style != null) { _style = new CssBorderTopStyle(); _style.setByUser(); _style.value = values.style; } if (values.color != null) { _color = new CssBorderTopColor(); _color.setByUser(); _color.value = values.color; } } /** * Returns a string representation of the object. */ public String toString() { if (_width != null && inherit == _width.value) { return inherit.toString(); } StringBuilder sb = new StringBuilder(); boolean first = true; if (_width != null) { sb.append(_width); first = false; } if (_style != null) { if (first) { sb.append(_style); } else { sb.append(' ').append(_style); } first = false; } if (_color != null) { if (first) { sb.append(_color); } else { sb.append(' ').append(_color); } } return sb.toString(); } }
Received on Wednesday, 25 April 2012 20:22:38 UTC