- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Tue, 04 Sep 2012 09:37:41 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/properties/css1 In directory hutz:/tmp/cvs-serv24549/css1 Modified Files: Css1Style.java CssTextDecoration.java Log Message: reimplemented text-decoration Index: CssTextDecoration.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css1/CssTextDecoration.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- CssTextDecoration.java 5 Jan 2010 13:49:45 -0000 1.4 +++ CssTextDecoration.java 4 Sep 2012 09:37:39 -0000 1.5 @@ -1,239 +1,138 @@ -// // $Id$ -// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) +// Author: Yves Lafon <ylafon@w3.org> // -// (c) COPYRIGHT MIT and INRIA, 1997. +// (c) COPYRIGHT MIT, ERCIM and Keio University, 2012. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.properties.css1; -import org.w3c.css.parser.CssStyle; -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.CssOperator; +import org.w3c.css.values.CssTypes; import org.w3c.css.values.CssValue; +import org.w3c.css.values.CssValueList; + +import java.util.ArrayList; /** - * <H4> - * 'text-decoration' - * </H4> - * <P> - * <EM>Value:</EM> none | [ underline || overline || line-through || blink ]<BR> - * <EM>Initial:</EM> none<BR> - * <EM>Applies to:</EM> all elements<BR> - * <EM>Inherited:</EM> no, but see clarification below<BR> - * <EM>Percentage values:</EM> N/A<BR> - * <P> - * This property describes decorations that are added to the text of an element. - * If the element has no text (e.g. the 'IMG' element in HTML) or is an empty - * element (e.g. '<EM></EM>'), this property has no effect. A value - * of 'blink' causes the text to blink. - * <P> - * The color(s) required for the text decoration should be derived from the - * 'color' property value. - * <P> - * This property is not inherited, but elements should match their parent. E.g., - * if an element is underlined, the line should span the child elements. The - * color of the underlining will remain the same even if descendant elements - * have different 'color' values. - * <PRE> - * A:link, A:visited, A:active { text-decoration: underline } - * </PRE> - * <P> - * The example above would underline the text of all links (i.e., all 'A' elements - * with a 'HREF' attribute). - * <P> - * UAs must recognize the keyword 'blink', but are not required to support the - * blink effect. - * - * @version $Revision$ + * @spec http://www.w3.org/TR/2008/REC-CSS1-20080411/#text-decoration */ -public class CssTextDecoration extends CssProperty - implements CssTextPropertiesConstants { - - CssValue value; - - private boolean[] values = new boolean[TEXTDECORATION.length]; - - private static int[] hash_values; - - private static CssIdent none = new CssIdent("none"); - - private static final int INVALID = -1; - - /** - * Create a new CssTextDecoration - */ - public CssTextDecoration() { - } - - /** - * Create a new CssTextDecoration - * - * @param expression The expression for this property - * @exception InvalidParamException Values are incorrect - */ - public CssTextDecoration(ApplContext ac, CssExpression expression, boolean check) - throws InvalidParamException { - - CssValue val = expression.getValue(); - boolean find = true; - //int computed = 0; - int index = INVALID; +public class CssTextDecoration extends org.w3c.css.properties.css.CssTextDecoration { - setByUser(); + public static final CssIdent underline, overline, line_through, blink; - if (val.equals(none)) { - if(expression.getCount() > 1) { - throw new InvalidParamException("unrecognize", ac); - } - value = none; - expression.next(); - return; - } else if (val.equals(inherit)) { - if(expression.getCount() > 1) { - throw new InvalidParamException("unrecognize", ac); - } - value = inherit; - expression.next(); - return; + static { + underline = CssIdent.getIdent("underline"); + overline = CssIdent.getIdent("overline"); + line_through = CssIdent.getIdent("line-through"); + blink = CssIdent.getIdent("blink"); } - val = null; - if(check && expression.getCount() > 4) { - throw new InvalidParamException("unrecognize", ac); + /** + * Create a new CssTextDecoration + */ + public CssTextDecoration() { } - while (find) { - find = false; - val = expression.getValue(); - - if(val != null && val.equals(inherit)) { - throw new InvalidParamException("unrecognize", ac); - } - - if (val instanceof CssIdent) { - index = getIndex((CssIdent) val, ac); - if (values[index] == true) { - throw new InvalidParamException("same-value", - TEXTDECORATION[index], ac); - } else { - values[index] = true; - find = true; - expression.next(); + /** + * Creates a new CssTextDecoration + * + * @param expression The expression for this property + * @throws org.w3c.css.util.InvalidParamException + * Expressions are incorrect + */ + public CssTextDecoration(ApplContext ac, CssExpression expression, boolean check) + throws InvalidParamException { + if (check && expression.getCount() > 4) { + throw new InvalidParamException("unrecognize", ac); } - } else if (val != null) { - throw new InvalidParamException("value", val.toString(), - getPropertyName(), ac); - } - } - } + setByUser(); - public CssTextDecoration(ApplContext ac, CssExpression expression) - throws InvalidParamException { - this(ac, expression, false); - } + CssValue val; + char op; - /** - * Returns the value of this property - */ - public Object get() { - if (value != null) { - return value; - } - for (int i = 0; i < TEXTDECORATION.length; i++) { - if (values[i] == true) { - return TEXTDECORATION[i]; - } - } - return null; - } + CssIdent undValue = null; + CssIdent oveValue = null; + CssIdent linValue = null; + CssIdent bliValue = null; - /** - * Returns the name of this property - */ - public String getPropertyName() { - return "text-decoration"; - } + val = expression.getValue(); + op = expression.getOperator(); - private int getIndex(CssIdent val, ApplContext ac) throws InvalidParamException { - int hash = val.hashCode(); - for (int i = 0; i < TEXTDECORATION.length; i++) { - if (hash_values[i] == hash) { - return i; - } - } - throw new InvalidParamException("value", val.toString(), + if (val.getType() != CssTypes.CSS_IDENT) { + throw new InvalidParamException("value", + val.toString(), getPropertyName(), ac); - } - - /** - * Returns true if this property is "softly" inherited - * e.g. his value equals inherit - */ - public boolean isSoftlyInherited() { - return value == inherit; - } - - /** - * Returns a string representation of the object. - */ - public String toString() { - if (value != null) { - return value.toString(); - } else { - String ret = ""; - for (int i = 0; i < TEXTDECORATION.length; i++) { - if (values[i] == true) { - ret += " " + TEXTDECORATION[i]; } - } - return ret.substring(1); - } - } - /** - * Add this property to the CssStyle. - * - * @param style The CssStyle - */ - public void addToStyle(ApplContext ac, CssStyle style) { - Css1Style style0 = (Css1Style) style; - if (style0.cssTextDecoration != null) { - style0.addRedefinitionWarning(ac, this); - } - style0.cssTextDecoration = this; - } - - /** - * Get this property in the style. - * - * @param style The style where the property is - * @param resolve if true, resolve the style to find this property - */ - public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) { - if (resolve) { - return ((Css1Style) style).getTextDecoration(); - } else { - return ((Css1Style) style).cssTextDecoration; + CssIdent ident = (CssIdent) val; + if (none.equals(ident)) { + value = none; + if (check && expression.getCount() != 1) { + throw new InvalidParamException("value", + val.toString(), + getPropertyName(), ac); + } + } else { + int nbgot = 0; + do { + if (undValue == null && underline.equals(ident)) { + undValue = underline; + } else if (oveValue == null && overline.equals(ident)) { + oveValue = overline; + } else if (linValue == null && line_through.equals(ident)) { + linValue = line_through; + } else if (bliValue == null && blink.equals(ident)) { + bliValue = blink; + } else { + throw new InvalidParamException("value", + val.toString(), + getPropertyName(), ac); + } + nbgot++; + if (expression.getRemainingCount() == 1 || (!check && nbgot == 4)) { + // if we have both, exit + // (needed only if check == false... + break; + } + if (op != CssOperator.SPACE) { + throw new InvalidParamException("operator", + ((new Character(op)).toString()), ac); + } + expression.next(); + val = expression.getValue(); + op = expression.getOperator(); + if (val.getType() != CssTypes.CSS_IDENT) { + throw new InvalidParamException("value", + val.toString(), + getPropertyName(), ac); + } + ident = (CssIdent) val; + } while (!expression.end()); + // now construct the value + ArrayList<CssValue> v = new ArrayList<CssValue>(nbgot); + if (undValue != null) { + v.add(undValue); + } + if (oveValue != null) { + v.add(oveValue); + } + if (linValue != null) { + v.add(linValue); + } + if (bliValue != null) { + v.add(bliValue); + } + value = (nbgot > 1) ? new CssValueList(v) : v.get(0); + } + expression.next(); } - } - /** - * Compares two properties for equality. - * - * @param value The other property. - */ - public boolean equals(CssProperty property) { - // @@ FIXME - return false; - } - - static { - hash_values = new int[TEXTDECORATION.length]; - for (int i=0; i<TEXTDECORATION.length; i++) { - hash_values[i] = TEXTDECORATION[i].hashCode(); + public CssTextDecoration(ApplContext ac, CssExpression expression) + throws InvalidParamException { + this(ac, expression, false); } - } } + Index: Css1Style.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css1/Css1Style.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- Css1Style.java 3 Sep 2012 20:34:43 -0000 1.32 +++ Css1Style.java 4 Sep 2012 09:37:39 -0000 1.33 @@ -15,6 +15,7 @@ import org.w3c.css.properties.css.CssZIndex; import org.w3c.css.properties.css.CssTextTransform; import org.w3c.css.properties.css.CssTextAlign; +import org.w3c.css.properties.css.CssTextDecoration; import org.w3c.css.properties.css.CssTextIndent; import org.w3c.css.util.ApplContext;
Received on Tuesday, 4 September 2012 09:37:48 UTC