W3C home > Mailing lists > Public > www-validator-cvs@w3.org > September 2011

2002/css-validator/org/w3c/css/values CssAngle.java,1.10,1.11 CssNumber.java,1.9,1.10 CssResolution.java,1.6,1.7

From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
Date: Wed, 14 Sep 2011 16:31:52 +0000
To: www-validator-cvs@w3.org
Message-Id: <E1R3sNM-0006XL-U1@lionel-hutz.w3.org>
Update of /sources/public/2002/css-validator/org/w3c/css/values
In directory hutz:/tmp/cvs-serv24952/values

Modified Files:
	CssAngle.java CssNumber.java CssResolution.java 
Log Message:
reworking profile/version check ot avoid doing too many string comparisons, and user defaulting

Index: CssResolution.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssResolution.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- CssResolution.java	29 Aug 2011 07:21:02 -0000	1.6
+++ CssResolution.java	14 Sep 2011 16:31:50 -0000	1.7
@@ -8,6 +8,7 @@
 package org.w3c.css.values;
 
 import org.w3c.css.util.ApplContext;
+import org.w3c.css.util.CssVersion;
 import org.w3c.css.util.InvalidParamException;
 import org.w3c.css.util.Util;
 
@@ -65,7 +66,7 @@
             return;
         }
 
-        if (!ac.getCssVersion().equals("css3")) {
+        if (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0) {
             throw new InvalidParamException("unit", unit, ac);
         }
 

Index: CssAngle.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssAngle.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- CssAngle.java	29 Aug 2011 07:21:02 -0000	1.10
+++ CssAngle.java	14 Sep 2011 16:31:50 -0000	1.11
@@ -7,11 +7,10 @@
 package org.w3c.css.values;
 
 import org.w3c.css.util.ApplContext;
+import org.w3c.css.util.CssVersion;
 import org.w3c.css.util.InvalidParamException;
 import org.w3c.css.util.Util;
 
-import java.util.HashMap;
-
 /**
  * <H3>Angle</H3>
  * <p/>
@@ -44,16 +43,17 @@
     static final String deg = "deg";
     static final String rad = "rad";
     static final String grad = "grad";
-
-    private static final HashMap<String, String> allowed_values;
+    static final String turn = "turn"; // CSS3
+    static final String allowed_values[];
 
     static Float defaultValue = new Float(0);
 
     static {
-        allowed_values = new HashMap<String, String>();
-        allowed_values.put(deg, deg);
-        allowed_values.put(rad, rad);
-        allowed_values.put(grad, grad);
+        allowed_values = new String[4];
+        allowed_values[0] = deg;
+        allowed_values[1] = rad;
+        allowed_values[2] = grad;
+        allowed_values[3] = turn;
     }
 
     /**
@@ -77,6 +77,19 @@
         value = angle;
     }
 
+    private String checkUnit(String unitString, ApplContext ac)
+            throws InvalidParamException {
+        for (String s : allowed_values) {
+            if (s.matches(unitString)) {
+                if ((s == turn) && (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0)) {
+                    throw new InvalidParamException("unit", s, ac);
+                }
+                return s;
+            }
+        }
+        throw new InvalidParamException("unit", unitString, ac);
+    }
+
     /**
      * Set the value of this angle.
      *
@@ -87,20 +100,23 @@
     public void set(String s, ApplContext ac) throws InvalidParamException {
         s = s.toLowerCase();
         int length = s.length();
-        String unit;
-        //float v;
-        if (!s.contains("grad")) {
-            unit = s.substring(length - 3, length);
-            unit = allowed_values.get(unit);
-            if (unit == null) {
-                throw new InvalidParamException("unit", unit, ac);
+        // by construction we should receive only valid strings with valid
+        // units however let's check things...
+        // a valid string should be at least [0-9]<3 letter units> so >= 4 chars
+        if (length >= 4) {
+            char c = s.charAt(length - 4);
+            if (c == 't' || c == 'g') {
+                // turn or grad
+                unit = checkUnit(s.substring(length - 4), ac);
+                value = Float.valueOf(s.substring(0, length - 4));
+            } else {
+                // others so deg, rad 3 letters long.
+                unit = checkUnit(s.substring(length - 3), ac);
+                value = Float.valueOf(s.substring(0, length - 3));
             }
-            value = new Float(s.substring(0, length - 3));
         } else {
-            unit = grad;
-            value = new Float(s.substring(0, length - 4));
+            throw new InvalidParamException("unit", s, ac);
         }
-        this.unit = unit; // there is no unit by default
     }
 
     /**
@@ -125,11 +141,11 @@
      * Returns a string representation of the object.
      */
     public String toString() {
-
         if (value.floatValue() != 0) {
             return Util.displayFloat(value) + getUnit();
         } else {
-            return Util.displayFloat(value);
+            // let's say that 0 is 0deg for sanity.
+            return Util.displayFloat(value) + deg;
         }
     }
 
@@ -144,13 +160,10 @@
                 unit == ((CssAngle) value).unit);
     }
 
-
     private float normalize(float degree) {
-        while (degree < 0) {
-            degree += 360;
-        }
-        while (degree > 360) {
-            degree -= 360;
+        degree %= 360.f;
+        if (degree < 0.f) {
+            degree += 360.f;
         }
         return degree;
     }
@@ -165,6 +178,8 @@
             return normalize(angle * (180.f / ((float) Math.PI)));
         } else if (unit == grad) {
             return normalize(angle * (9.f / 10.f));
+        } else if (unit == turn) {
+            return normalize(angle * 360.f);
         }
 
         System.err.println("[ERROR] in org.w3c.css.values.CssAngle");
@@ -184,6 +199,10 @@
         return unit == rad;
     }
 
+    public boolean isTurn() {
+        return unit == turn;
+    }
+
 
 }
 

Index: CssNumber.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/values/CssNumber.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- CssNumber.java	6 Jan 2010 09:27:44 -0000	1.9
+++ CssNumber.java	14 Sep 2011 16:31:50 -0000	1.10
@@ -174,7 +174,7 @@
      */
     public String toString() {
         if (isInt) {
-            return value.intValue() + "";
+            return Integer.toString(value.intValue());
         }
         return value.toString();
     }
Received on Wednesday, 14 September 2011 16:32:07 UTC

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