W3C home > Mailing lists > Public > www-validator-cvs@w3.org > November 2012

2002/css-validator/org/w3c/css/values CssImage.java,1.3,1.4

From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
Date: Thu, 08 Nov 2012 16:16:15 +0000
To: www-validator-cvs@w3.org
Message-Id: <E1TWUm8-0006tO-06@lionel-hutz.w3.org>
Update of /sources/public/2002/css-validator/org/w3c/css/values
In directory hutz:/tmp/cvs-serv26478

Modified Files:
	CssImage.java 
Log Message:
placeholder

Index: CssImage.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssImage.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- CssImage.java	8 Nov 2012 15:54:40 -0000	1.3
+++ CssImage.java	8 Nov 2012 16:16:13 -0000	1.4
@@ -266,6 +266,141 @@
 		value = new CssLayerList(v);
 	}
 
+	/**
+	 * @param exp
+	 * @param ac
+	 * @throws InvalidParamException
+	 * @spec http://www.w3.org/TR/2012/CR-css3-images-20120417/#radial-gradient-type
+	 */
+	public void setRadialGradient(CssExpression exp, ApplContext ac)
+			throws InvalidParamException {
+		name = "radial-gradient";
+		_cache = null;
+		_setRadialGradient(exp, ac);
+	}
+
+	/**
+	 * @param exp
+	 * @param ac
+	 * @throws InvalidParamException
+	 * @spec http://www.w3.org/TR/2012/CR-css3-images-20120417/#repeating-radial-gradient-type
+	 */
+	public void setRepeatingRadialGradient(CssExpression exp, ApplContext ac)
+			throws InvalidParamException {
+		name = "repeating-radial-gradient";
+		_cache = null;
+		_setRadialGradient(exp, ac);
+	}
+
+	/**
+	 * @param exp
+	 * @param ac
+	 * @throws InvalidParamException
+	 * @spec http://www.w3.org/TR/2012/CR-css3-images-20120417/#linear-gradient-type
+	 */
+	private void _setRadialGradient(CssExpression exp, ApplContext ac)
+			throws InvalidParamException {
+		// ImageList defined in CSS3 and onward
+		if (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0) {
+			StringBuilder sb = new StringBuilder();
+			sb.append(name).append('(').append(exp.toStringFromStart()).append(')');
+			throw new InvalidParamException("notversion", sb.toString(),
+					ac.getCssVersionString(), ac);
+		}
+		ArrayList<CssValue> v = new ArrayList<CssValue>();
+		CssValue val = exp.getValue();
+		char op = exp.getOperator();
+
+		if (val.getType() == CssTypes.CSS_ANGLE) {
+			v.add(val);
+			if (op != COMMA) {
+				exp.starts();
+				throw new InvalidParamException("operator",
+						((new Character(op)).toString()), ac);
+			}
+			exp.next();
+		} else if (val.getType() == CssTypes.CSS_IDENT) {
+			CssIdent ident = (CssIdent) val;
+			if (to.equals(ident)) {
+				CssValueList vl = new CssValueList();
+				vl.add(to);
+				// we must now eat one or two valid idents
+				// this is boringly boring...
+				CssIdent v1 = null;
+				CssIdent v2 = null;
+				if (op != SPACE) {
+					exp.starts();
+					throw new InvalidParamException("operator",
+							((new Character(op)).toString()), ac);
+				}
+				exp.next();
+				if (exp.end()) {
+					throw new InvalidParamException("few-value", name, ac);
+				}
+				val = exp.getValue();
+				op = exp.getOperator();
+				boolean isV1Vertical, isV2Vertical;
+				if (val.getType() != CssTypes.CSS_IDENT) {
+					throw new InvalidParamException("value",
+							val.toString(),
+							name, ac);
+				}
+				v1 = getLinearGradientIdent((CssIdent) val);
+				if (v1 == null) {
+					throw new InvalidParamException("value",
+							val.toString(),
+							name, ac);
+				}
+				vl.add(v1);
+				isV1Vertical = isVerticalIdent(v1);
+				exp.next();
+				if (exp.end()) {
+					throw new InvalidParamException("few-value", name, ac);
+				}
+				if (op == SPACE) {
+					// the operator is a space, we should have
+					// another
+					val = exp.getValue();
+					op = exp.getOperator();
+					if (val.getType() != CssTypes.CSS_IDENT) {
+						throw new InvalidParamException("value",
+								val.toString(),
+								name, ac);
+					}
+					v2 = getLinearGradientIdent((CssIdent) val);
+					if (v2 == null) {
+						throw new InvalidParamException("value",
+								val.toString(),
+								name, ac);
+					}
+					isV2Vertical = isVerticalIdent(v2);
+					if ((isV1Vertical && isV2Vertical) ||
+							(!isV1Vertical && !isV2Vertical)) {
+						throw new InvalidParamException("value",
+								val.toString(),
+								name, ac);
+					}
+					vl.add(v2);
+					exp.next();
+				}
+				v.add(vl);
+				if (op != COMMA) {
+					exp.starts();
+					throw new InvalidParamException("operator",
+							((new Character(op)).toString()), ac);
+				}
+			}
+		}
+		// now we a list of at least two color stops.
+		ArrayList<CssValue> stops = parseColorStops(exp, ac);
+		if (stops.size() < 2) {
+			throw new InvalidParamException("few-value", name, ac);
+		}
+
+		v.addAll(stops);
+		value = new CssLayerList(v);
+	}
+
 	private final ArrayList<CssValue> parseColorStops(CssExpression expression,
 													  ApplContext ac)
 			throws InvalidParamException {
Received on Thursday, 8 November 2012 16:16:22 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:17:53 UTC