- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 09 Feb 2012 17:36:35 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/values In directory hutz:/tmp/cvs-serv25830/w3c/css/values Modified Files: CssFrequency.java CssLength.java CssNumber.java CssPercentage.java CssTime.java CssValueList.java Log Message: various things: Use of BigIntegers to avoid limits, background-* are now avoiding multiplication of checks and properties in CssXStyles impls, various updates for other properties, use of a string reader for string input, added the possibility of not following links, prepared for aggregation of all uris parsed Index: CssValueList.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssValueList.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- CssValueList.java 5 Jan 2010 13:50:01 -0000 1.1 +++ CssValueList.java 9 Feb 2012 17:36:33 -0000 1.2 @@ -70,10 +70,15 @@ */ public String toString() { StringBuilder sb = new StringBuilder(); + boolean first = true; for (CssValue aCssValue: value) { - sb.append(aCssValue.toString()).append(" "); + if (!first) { + sb.append(' '); + } else { + first = false; + } + sb.append(aCssValue.toString()); } - sb.setLength(sb.length()-1); return sb.toString(); } Index: CssTime.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssTime.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- CssTime.java 6 Jan 2010 09:27:44 -0000 1.7 +++ CssTime.java 9 Feb 2012 17:36:33 -0000 1.8 @@ -8,20 +8,21 @@ import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; -import org.w3c.css.util.Util; + +import java.math.BigDecimal; /** * <H3>Time</H3> - * + * <p/> * <P>Time units are used with aural cascading style sheets. - * + * <p/> * <P>These following are legal time units: - * + * <p/> * <UL> * <LI>ms: milliseconds * <LI>s: seconds * </UL> - * + * <p/> * <p>Time values may not be negative. * * @version $Revision$ @@ -29,120 +30,120 @@ public class CssTime extends CssValue { public static final int type = CssTypes.CSS_TIME; - + public final int getType() { - return type; + return type; } - /** - * Create a new CssTime. - */ - public CssTime() { - value = defaultValue; - } + /** + * Create a new CssTime. + */ + public CssTime() { + value = defaultValue; + } - /** - * Create a new CssTime with a Float object. - * - * @param value the Float object - */ - public CssTime(Float value) { - this.value = value; - } + /** + * Create a new CssTime with a Float object. + * + * @param value the Float object + */ + public CssTime(Float value) { + this.value = new BigDecimal(value); + } - /** - * Set the value of this time. - * - * @param s the string representation of the time. - * @param ac For errors and warnings reports. - * @exception InvalidParamException The unit is incorrect - */ - public void set(String s, ApplContext ac) throws InvalidParamException { - s = s.toLowerCase(); - int length = s.length(); - String unit; + /** + * Set the value of this time. + * + * @param ts the string representation of the time. + * @param ac For errors and warnings reports. + * @throws InvalidParamException The unit is incorrect + */ + public void set(String ts, ApplContext ac) throws InvalidParamException { + String s = ts.toLowerCase(); + int length = s.length(); + String unit; - if (s.charAt(length-2) == 'm') { - unit = s.substring(length-2, length); - this.value = new Float(s.substring(0, length-2)); - } else { - unit = s.substring(length-1, length); - this.value = Float.valueOf(s.substring(0, length-1)); - } + if (s.charAt(length - 2) == 'm') { + unit = s.substring(length - 2, length); + this.value = new BigDecimal(s.substring(0, length - 2)); + } else { + unit = s.substring(length - 1, length); + this.value = new BigDecimal(s.substring(0, length - 1)); + } - if (this.value.floatValue() < 0) { - throw new InvalidParamException("negative-value", - this.value.toString(), ac); - } + if (this.value.signum() == -1) { + throw new InvalidParamException("negative-value", + this.value.toString(), ac); + } - this.unit = 1; // there is no unit by default + this.unit = 1; // there is no unit by default - if (this.value.floatValue() != 0) { - int hash = unit.hashCode(); - int i = 0; - while (i<units.length) { - if (hash == hash_units[i]) { - this.unit = i; - return; - } - i++; - } - } else { - return; - } + if (!BigDecimal.ZERO.equals(this.value)) { + int hash = unit.hashCode(); + int i = 0; + while (i < units.length) { + if (hash == hash_units[i]) { + this.unit = i; + return; + } + i++; + } + } else { + return; + } - throw new InvalidParamException("unit", unit, ac); - } + throw new InvalidParamException("unit", unit, ac); + } - /** - * Returns the current value - * Float - */ - public Object get() { - if (unit == 1) { - return new Float(value.floatValue() * 1000); + /** + * Returns the current value + * Float + * TODO move to a BigDecimal + */ + public Object get() { + if (unit == 1) { + return new Float(value.floatValue() * 1000); + } + return value; } - return value; - } - /** - * Returns the current value - */ - public String getUnit() { - return units[unit]; - } + /** + * Returns the current value + */ + public String getUnit() { + return units[unit]; + } - /** - * Returns a string representation of the object. - */ - public String toString() { - if (value.floatValue() != 0) { - return Util.displayFloat(value) + getUnit(); - } else { - return Util.displayFloat(value); - } - } + /** + * Returns a string representation of the object. + */ + public String toString() { + if (BigDecimal.ZERO.equals(value)) { + return value.toPlainString(); + } + return value.toPlainString() + getUnit(); + } - /** - * Compares two values for equality. - * - * @param value The other value. - */ - public boolean equals(Object value) { - return (value instanceof CssTime && this.value.equals(((CssTime) value).value) && - unit == ((CssTime) value).unit); - } + /** + * Compares two values for equality. + * + * @param value The other value. + */ + public boolean equals(Object value) { + return (value instanceof CssTime && this.value.equals(((CssTime) value).value) && + unit == ((CssTime) value).unit); + } - private Float value; - private int unit; - private static String[] units = { "ms", "s" }; - private static int[] hash_units; - private static Float defaultValue = new Float(0); + private BigDecimal value; + private int unit; + private static String[] units = {"ms", "s"}; + private static int[] hash_units; + private static BigDecimal defaultValue = BigDecimal.ZERO; - static { - hash_units = new int[units.length]; - for (int i=0; i<units.length; i++) - hash_units[i] = units[i].hashCode(); - } + static { + hash_units = new int[units.length]; + for (int i = 0; i < units.length; i++) + hash_units[i] = units[i].hashCode(); + } } Index: CssNumber.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssNumber.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- CssNumber.java 7 Oct 2011 09:33:19 -0000 1.11 +++ CssNumber.java 9 Feb 2012 17:36:33 -0000 1.12 @@ -1,16 +1,17 @@ -// // $Id$ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // -// (c) COPYRIGHT MIT and INRIA, 1997. +// (c) COPYRIGHT MIT, ERCIM and Keio University, 2011 // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.values; import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; +import java.math.BigDecimal; + /** - * A CSS float number. + * A CSS number. * * @version $Revision$ */ @@ -23,7 +24,7 @@ } ApplContext ac; - Float value; + BigDecimal value; boolean isInt = false; /** @@ -37,11 +38,11 @@ */ public CssNumber(ApplContext ac, float value) { this.ac = ac; - this.value = new Float(value); + this.value = new BigDecimal(value); } public CssNumber(float value) { - this.value = new Float(value); + this.value = new BigDecimal(value); } /** @@ -51,42 +52,37 @@ * @param ac For errors and warnings reports. */ public void set(String s, ApplContext ac) { + value = new BigDecimal(s); try { - new Integer(s); + value.toBigIntegerExact(); isInt = true; - } catch (NumberFormatException e) { + } catch (ArithmeticException e) { isInt = false; - } finally { - value = new Float(s); } this.ac = ac; } /** * Set the value explicitly - * */ public void setIntValue(int v) { isInt = true; - value = new Float(v); + value = new BigDecimal(v); + } - /** + /** * Set the value explicitly - * */ public void setFloatValue(float v) { isInt = false; - value = v; + value = new BigDecimal(v); } /** * Returns the value */ public Object get() { - if (isInt) { - return new Integer(value.intValue()); - } return value; } @@ -99,10 +95,14 @@ public int getInt() throws InvalidParamException { if (isInt) { - return value.intValue(); - } else { - throw new InvalidParamException("invalid-color", ac); + try { + return value.intValueExact(); + } catch (ArithmeticException aex) { + throw new InvalidParamException("out-of-range", ac); + } } + // FIXME ??? + throw new InvalidParamException("invalid-color", ac); } public boolean isInteger() { @@ -110,18 +110,43 @@ } /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isPositive() { + return (value.signum() >= 0); + } + + /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isStrictlyPositive() { + return (value.signum() == 1); + } + + /** + * Returns true is the value is zero + * + * @return a boolean + */ + public boolean isZero() { + return BigDecimal.ZERO.equals(value); + } + + /** * Returns a length. * Only zero can be a length. * * @throws InvalidParamException The value is not zero */ public CssLength getLength() throws InvalidParamException { - float num = value.floatValue(); - if (num == 0) { + if (value.equals(BigDecimal.ZERO)) { return new CssLength(); - } else { - throw new InvalidParamException("zero", "length", ac); } + throw new InvalidParamException("zero", "length", ac); } /** @@ -131,14 +156,12 @@ * @throws InvalidParamException The value is not zero */ public CssPercentage getPercentage() throws InvalidParamException { - float num = value.floatValue(); - if (num == 0) + if (value.equals(BigDecimal.ZERO)) { return new CssPercentage(); - else { - throw new InvalidParamException("zero", - value.toString(), - "percentage", ac); } + throw new InvalidParamException("zero", + value.toString(), + "percentage", ac); } /** @@ -148,12 +171,11 @@ * @throws InvalidParamException The value is not zero */ public CssTime getTime() throws InvalidParamException { - float num = value.floatValue(); - if (num == 0) + if (value.equals(BigDecimal.ZERO)) { return new CssTime(); - else - throw new InvalidParamException("zero", value.toString(), - "time", ac); + } + throw new InvalidParamException("zero", value.toString(), + "time", ac); } /** @@ -163,12 +185,11 @@ * @throws InvalidParamException The value is not zero */ public CssAngle getAngle() throws InvalidParamException { - float num = value.floatValue(); - if (num == 0) + if (value.equals(BigDecimal.ZERO)) { return new CssAngle(); - else - throw new InvalidParamException("zero", value.toString(), - "angle", ac); + } + throw new InvalidParamException("zero", value.toString(), + "angle", ac); } /** @@ -178,23 +199,18 @@ * @throws InvalidParamException The value is not zero */ public CssFrequency getFrequency() throws InvalidParamException { - float num = value.floatValue(); - if (num == 0) { + if (value.equals(BigDecimal.ZERO)) { return new CssFrequency(); - } else { - throw new InvalidParamException("zero", - value.toString(), "frequency", ac); } + throw new InvalidParamException("zero", + value.toString(), "frequency", ac); } /** * Returns a string representation of the object. */ public String toString() { - if (isInt) { - return Integer.toString(value.intValue()); - } - return value.toString(); + return value.toPlainString(); } /** Index: CssFrequency.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssFrequency.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- CssFrequency.java 5 Jan 2010 13:50:00 -0000 1.7 +++ CssFrequency.java 9 Feb 2012 17:36:33 -0000 1.8 @@ -8,20 +8,21 @@ import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; -import org.w3c.css.util.Util; + +import java.math.BigDecimal; /** * <H3> Frequencies</H3> - * + * <p/> * <P>Frequency units are used with aural cascading style sheets. - * + * <p/> * <p>There are two legal frequency units: - * + * <p/> * <ul> * <li>Hz: Hertz * <li>kHz: kilo Hertz * </ul> - * + * <p/> * <P> For example, 200Hz is a bass sound, and 6kHz is a treble sound. * * @version $Revision$ @@ -29,115 +30,117 @@ public class CssFrequency extends CssValue { public static final int type = CssTypes.CSS_FREQUENCY; - + public final int getType() { - return type; + return type; } - /** - * Create a new CssFrequency - */ - public CssFrequency() { - value = defaultValue; - } - - /** - * Create a new CssFrequency with a float number. - * - * @param value the float number. - */ - public CssFrequency(Float value) { - this.value = value; - } + private BigDecimal value; + private int unit; + private static String[] units = {"Hz", "kHz"}; + private static int[] hash_units; + private static BigDecimal defaultValue = BigDecimal.ZERO; - /** - * Set the value of this frequency. - * - * @param s the string representation of the frequency. - * @param ac For errors and warnings reports. - * @exception InvalidParamException The unit is incorrect - */ - public void set(String s, ApplContext ac) throws InvalidParamException { - s = s.toLowerCase(); - int length = s.length(); - String unit; - float v; - if (s.charAt(length-3) == 'k') { - unit = s.substring(length-3, length); - v = Float.parseFloat(s.substring(0, length - 3)); - } else { - unit = s.substring(length-2, length); - v = Float.parseFloat(s.substring(0, length - 2)); + static { + hash_units = new int[units.length]; + for (int i = 0; i < units.length; i++) + hash_units[i] = units[i].toLowerCase().hashCode(); } - int hash = unit.hashCode(); - - int i = 0; - while (i<units.length) { - if (hash == hash_units[i]) { - this.unit = i; - break; - } - i++; + /** + * Create a new CssFrequency + */ + public CssFrequency() { + value = defaultValue; } - if (i == units.length) { - throw new InvalidParamException("unit", unit, ac); + /** + * Create a new CssFrequency with a float number. + * + * @param value the float number. + */ + public CssFrequency(BigDecimal value) { + this.value = value; } - this.value = new Float(v); + /** + * Set the value of this frequency. + * + * @param s the string representation of the frequency. + * @param ac For errors and warnings reports. + * @throws InvalidParamException The unit is incorrect + */ + public void set(String s, ApplContext ac) throws InvalidParamException { + s = s.toLowerCase(); + int length = s.length(); + String unit; + BigDecimal v; + if (s.charAt(length - 3) == 'k') { + unit = s.substring(length - 3, length); + v = new BigDecimal(s.substring(0, length - 3)); + } else { + unit = s.substring(length - 2, length); + v = new BigDecimal(s.substring(0, length - 2)); + } + int hash = unit.hashCode(); - } - /** - * Returns the current value - */ - public Object get() { - if (unit == 1) { - return new Float(value.floatValue() * 1000); + int i = 0; + while (i < units.length) { + if (hash == hash_units[i]) { + this.unit = i; + break; + } + i++; + } + + if (i == units.length) { + throw new InvalidParamException("unit", unit, ac); + } + + this.value = v; + } - return value; - } - /** - * Returns the current value - */ - public String getUnit() { - return units[unit]; - } + /** + * Returns the current value + */ + public Object get() { + // TODO FIXME should not be a Float... + if (unit == 1) { + return new Float(value.floatValue() * 1000); + } + return value.floatValue(); + } - /** - * Returns a string representation of the object. - */ - public String toString() { - if (value.floatValue() != 0) { - return Util.displayFloat(value) + getUnit(); - } else { - return Util.displayFloat(value); - } - } + /** + * Returns the current value + */ + public String getUnit() { + return units[unit]; + } - /** - * Compares two values for equality. - * - * @param value The other value. - */ - public boolean equals(Object value) { - return (value instanceof CssFrequency - && this.value.equals(((CssFrequency) value).value) - && unit == ((CssFrequency) value).unit); - } + /** + * Returns a string representation of the object. + */ + public String toString() { + if (BigDecimal.ZERO.equals(value)) { + return value.toPlainString(); + } + return value.toPlainString() + getUnit(); + } + + /** + * Compares two values for equality. + * + * @param value The other value. + */ + public boolean equals(Object value) { + return (value instanceof CssFrequency + && this.value.equals(((CssFrequency) value).value) + && unit == ((CssFrequency) value).unit); + } - private Float value; - private int unit; - private static String[] units = { "Hz", "kHz" }; - private static int[] hash_units; - private static Float defaultValue = new Float(0); - static { - hash_units = new int[units.length]; - for (int i=0; i<units.length; i++) - hash_units[i] = units[i].toLowerCase().hashCode(); - } } Index: CssPercentage.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssPercentage.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- CssPercentage.java 27 Sep 2011 08:15:46 -0000 1.9 +++ CssPercentage.java 9 Feb 2012 17:36:33 -0000 1.10 @@ -9,7 +9,8 @@ import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; -import org.w3c.css.util.Util; + +import java.math.BigDecimal; /** * <H3> @@ -41,14 +42,14 @@ return type; } - static Float defaultValue = new Float(0); - Float value; + private BigDecimal defaultValue = BigDecimal.ZERO; + private BigDecimal value; /** * Create a new CssPercentage */ public CssPercentage() { - this(defaultValue); + this.value = defaultValue; } /** @@ -57,7 +58,7 @@ * @param value The value. */ public CssPercentage(int value) { - this(new Float(value)); + this(new BigDecimal(value)); } /** @@ -66,7 +67,7 @@ * @param value the float value. */ public CssPercentage(float value) { - this(new Float(value)); + this(new BigDecimal(value)); } /** @@ -74,7 +75,7 @@ * * @param value the Float object. */ - public CssPercentage(Float value) { + public CssPercentage(BigDecimal value) { this.value = value; } @@ -90,14 +91,42 @@ if (s.charAt(slength - 1) != '%') { throw new InvalidParamException("percentage", s, ac); } - this.value = new Float(s.substring(0, slength - 1)); + this.value = new BigDecimal(s.substring(0, slength - 1)); } /** * Returns the current value */ public Object get() { - return value; + // TODO FIXME + return new Float(value.floatValue()); + } + + /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isPositive() { + return (value.signum() >= 0); + } + + /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isStrictlyPositive() { + return (value.signum() == 1); + } + + /** + * Returns true is the value is zero + * + * @return a boolean + */ + public boolean isZero() { + return BigDecimal.ZERO.equals(value); } /** @@ -111,7 +140,9 @@ * Returns a string representation of the object. */ public String toString() { - return Util.displayFloat(value) + "%"; + StringBuilder sb = new StringBuilder(); + sb.append(value.toPlainString()).append('%'); + return sb.toString(); } /** Index: CssLength.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssLength.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- CssLength.java 27 Sep 2011 08:15:46 -0000 1.8 +++ CssLength.java 9 Feb 2012 17:36:33 -0000 1.9 @@ -9,7 +9,8 @@ import org.w3c.css.util.ApplContext; import org.w3c.css.util.InvalidParamException; -import org.w3c.css.util.Util; + +import java.math.BigDecimal; /** * <H3> @@ -96,11 +97,24 @@ return type; } + + private BigDecimal value; + private int unit; + private static String[] units = {"mm", "cm", "pt", "pc", "em", + "ex", "px", "in", "gd"}; + private static int[] hash_units; + + static { + hash_units = new int[units.length]; + for (int i = 0; i < units.length; i++) + hash_units[i] = units[i].hashCode(); + } + /** * Create a new CssLength */ public CssLength() { - value = defaultValue; + value = BigDecimal.ZERO; } /** @@ -113,7 +127,7 @@ s = s.toLowerCase(); int length = s.length(); String unit = s.substring(length - 2, length); - this.value = new Float(s.substring(0, length - 2)); + this.value = new BigDecimal(s.substring(0, length - 2)); this.unit = 2; // there is no unit by default @@ -142,7 +156,9 @@ * Returns the current value */ public Object get() { - return value; + // TODO this is old ugly crap, needed for not breaking everything + // remove as soon as reference to get is removed... + return new Float(value.floatValue()); } /** @@ -153,6 +169,33 @@ } /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isPositive() { + return (value.signum() >= 0); + } + + /** + * Returns true is the value is positive of null + * + * @return a boolean + */ + public boolean isStrictlyPositive() { + return (value.signum() == 1); + } + + /** + * Returns true is the value is zero + * + * @return a boolean + */ + public boolean isZero() { + return BigDecimal.ZERO.equals(value); + } + + /** * Returns the current value */ public String getUnit() { @@ -163,11 +206,10 @@ * Returns a string representation of the object. */ public String toString() { - if (value.floatValue() != 0) { - return Util.displayFloat(value) + getUnit(); - } else { - return Util.displayFloat(value); + if (BigDecimal.ZERO.equals(value)) { + return value.toPlainString(); } + return value.toPlainString() + getUnit(); } /** @@ -181,17 +223,5 @@ unit == ((CssLength) value).unit); } - private Float value; - private int unit; - private static String[] units = {"mm", "cm", "pt", "pc", "em", - "ex", "px", "in", "gd"}; - private static int[] hash_units; - private static Float defaultValue = new Float(0); - - static { - hash_units = new int[units.length]; - for (int i = 0; i < units.length; i++) - hash_units[i] = units[i].hashCode(); - } }
Received on Thursday, 9 February 2012 17:36:37 UTC