- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 25 Apr 2012 20:22:05 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/properties/css21
In directory hutz:/tmp/cvs-serv23918/w3c/css/properties/css21
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
Removed Files:
CssBorderBottomCSS21.java CssBorderBottomColorCSS21.java
CssBorderCSS21.java CssBorderColorCSS21.java
CssBorderFaceColorCSS21.java CssBorderLeftCSS21.java
CssBorderLeftColorCSS21.java CssBorderRightCSS21.java
CssBorderRightColorCSS21.java CssBorderTopCSS21.java
CssBorderTopColorCSS21.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
--- CssBorderFaceColorCSS21.java DELETED ---
--- NEW FILE: CssBorderBottomWidth.java ---
// $Id: CssBorderBottomWidth.java,v 1.1 2012/04/25 20:22:02 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.css21;
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:03 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.css21;
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);
}
}
public 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: CssBorderLeftWidth.java ---
// $Id: CssBorderLeftWidth.java,v 1.1 2012/04/25 20:22:02 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.css21;
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: CssBorderLeft.java ---
// $Id: CssBorderLeft.java,v 1.1 2012/04/25 20:22:02 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.css21;
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);
setByUser();
if (values.width != null) {
_width = new CssBorderLeftWidth();
_width.value = values.width;
}
if (values.style != null) {
_style = new CssBorderLeftStyle();
_style.value = values.style;
}
if (values.color != null) {
_color = new CssBorderLeftColor();
_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: CssBorderColor.java ---
// $Id: CssBorderColor.java,v 1.1 2012/04/25 20:22:02 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.css21;
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("value", val.toString(),
getPropertyName(), 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: CssBorderRightStyle.java ---
// $Id: CssBorderRightStyle.java,v 1.1 2012/04/25 20:22:03 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.css21;
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);
}
}
--- CssBorderLeftColorCSS21.java DELETED ---
--- CssBorderLeftCSS21.java DELETED ---
--- CssBorderRightColorCSS21.java DELETED ---
--- NEW FILE: CssBorderLeftStyle.java ---
// $Id: CssBorderLeftStyle.java,v 1.1 2012/04/25 20:22:02 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.css21;
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: CssBorderTopWidth.java ---
// $Id: CssBorderTopWidth.java,v 1.1 2012/04/25 20:22:03 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.css21;
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: CssBorder.java ---
// $Id: CssBorder.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.css21;
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: CssBorderBottomColor.java ---
// $Id: CssBorderBottomColor.java,v 1.1 2012/04/25 20:22:02 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.css21;
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: CssBorderTopColor.java ---
// $Id: CssBorderTopColor.java,v 1.1 2012/04/25 20:22:03 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.css21;
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);
}
}
--- CssBorderBottomCSS21.java DELETED ---
--- NEW FILE: CssBorderRight.java ---
// $Id: CssBorderRight.java,v 1.1 2012/04/25 20:22:02 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.css21;
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);
setByUser();
if (values.width != null) {
_width = new CssBorderRightWidth();
_width.value = values.width;
}
if (values.style != null) {
_style = new CssBorderRightStyle();
_style.value = values.style;
}
if (values.color != null) {
_color = new CssBorderRightColor();
_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:03 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.css21;
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);
}
}
--- CssBorderBottomColorCSS21.java DELETED ---
--- NEW FILE: CssBorderLeftColor.java ---
// $Id: CssBorderLeftColor.java,v 1.1 2012/04/25 20:22:02 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.css21;
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);
}
}
--- CssBorderTopColorCSS21.java DELETED ---
--- NEW FILE: CssBorderBottom.java ---
// $Id: CssBorderBottom.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.css21;
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);
setByUser();
if (values.width != null) {
_width = new CssBorderBottomWidth();
_width.value = values.width;
}
if (values.style != null) {
_style = new CssBorderBottomStyle();
_style.value = values.style;
}
if (values.color != null) {
_color = new CssBorderBottomColor();
_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();
}
}
--- CssBorderColorCSS21.java DELETED ---
--- NEW FILE: CssBorderRightColor.java ---
// $Id: CssBorderRightColor.java,v 1.1 2012/04/25 20:22:02 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.css21;
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);
}
}
--- CssBorderCSS21.java DELETED ---
--- NEW FILE: CssBorderRightWidth.java ---
// $Id: CssBorderRightWidth.java,v 1.1 2012/04/25 20:22:03 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.css21;
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: CssBorderWidth.java ---
// $Id: CssBorderWidth.java,v 1.1 2012/04/25 20:22:03 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.css21;
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;
}
}
--- CssBorderRightCSS21.java DELETED ---
--- NEW FILE: CssBorderBottomStyle.java ---
// $Id: CssBorderBottomStyle.java,v 1.1 2012/04/25 20:22:02 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.css21;
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);
}
}
--- CssBorderTopCSS21.java DELETED ---
--- NEW FILE: CssBorderTop.java ---
// $Id: CssBorderTop.java,v 1.1 2012/04/25 20:22:03 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.css21;
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);
setByUser();
if (values.width != null) {
_width = new CssBorderTopWidth();
_width.value = values.width;
}
if (values.style != null) {
_style = new CssBorderTopStyle();
_style.value = values.style;
}
if (values.color != null) {
_color = new CssBorderTopColor();
_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:10 UTC