2002/css-validator/org/w3c/css/properties/css1 Css1Style.java,1.14,1.15

Update of /sources/public/2002/css-validator/org/w3c/css/properties/css1
In directory hutz:/tmp/cvs-serv30505

Modified Files:
	Css1Style.java 
Log Message:
started some reorg, fixed partially margin robustness check.


Index: Css1Style.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css1/Css1Style.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- Css1Style.java	5 Feb 2009 14:56:08 -0000	1.14
+++ Css1Style.java	9 Mar 2009 13:02:01 -0000	1.15
@@ -18,6 +18,7 @@
 import org.w3c.css.util.Warnings;
 import org.w3c.css.values.CssLength;
 import org.w3c.css.values.CssPercentage;
+import org.w3c.css.values.CssTypes;
 import org.w3c.css.values.CssValue;
 
 /**
@@ -2519,69 +2520,87 @@
     }
 
 
-
     /**
      * Find conflicts in this Style
+     * For the 'font-family' property
      *
      * @param warnings For warnings reports.
      * @param allSelectors All contexts is the entire style sheet.
-     */
-    public void findConflicts(ApplContext ac, Warnings warnings, 
-	    CssSelectors selector, CssSelectors[] allSelectors) {
-	// if border-style == none, border-width should be 0
-	// @@ this is a horrible place to do this ...
-	cssBorder.check();
-
+     */   
+    private void findConflictsFontFamily(ApplContext ac, Warnings warnings, 
+					 CssSelectors selector,
+					 CssSelectors[] allSelectors) {
+	// first CSS2 (the default)
+	if (cssFontCSS2.fontFamily != null) {
+	    if (!cssFontCSS2.fontFamily.containsGenericFamily()) {
+		warnings.addWarning(new Warning(cssFontCSS2.fontFamily,
+						"no-generic-family", 2, ac));
+	    }
+	    if (cssFontCSS2.fontFamily.withSpace) {
+		warnings.addWarning(new Warning(cssFontCSS2.fontFamily,
+						"with-space", 1, ac));
+	    }
+	    return;
+	}
+	// CSS 3
 	if (cssFont.fontFamily != null) {
 	    if (!cssFont.fontFamily.containsGenericFamily()) {
 		warnings.addWarning(new Warning(cssFont.fontFamily,
-			"no-generic-family", 2, ac));
+						"no-generic-family", 2, ac));
 	    }
 	    if (cssFont.fontFamily.withSpace) {
 		warnings.addWarning(new Warning(cssFont.fontFamily,
-			"with-space", 1, ac));
+						"with-space", 1, ac));
 	    }
+	    return;
 	}
-	else if (cssFontCSS1.fontFamily != null) {
+	// CSS1
+	if (cssFontCSS1.fontFamily != null) {
 	    if (!cssFontCSS1.fontFamily.containsGenericFamily()) {
 		warnings.addWarning(new Warning(cssFontCSS1.fontFamily,
-			"no-generic-family", 2, ac));
+						"no-generic-family", 2, ac));
 	    }
 	    if (cssFontCSS1.fontFamily.withSpace) {
 		warnings.addWarning(new Warning(cssFontCSS1.fontFamily,
-			"with-space", 1, ac));
+						"with-space", 1, ac));
 	    }
 	}
-	else if (cssFontCSS2.fontFamily != null) {
-	    if (!cssFontCSS2.fontFamily.containsGenericFamily()) {
-		warnings.addWarning(new Warning(cssFontCSS2.fontFamily,
-			"no-generic-family", 2, ac));
-	    }
-	    if (cssFontCSS2.fontFamily.withSpace) {
-		warnings.addWarning(new Warning(cssFontCSS2.fontFamily,
-			"with-space", 1, ac));
+    }
+
+    /**
+     * Find conflicts in this Style
+     *
+     * @param warnings For warnings reports.
+     * @param allSelectors All contexts is the entire style sheet.
+     */
+    public void findConflicts(ApplContext ac, Warnings warnings, 
+	    CssSelectors selector, CssSelectors[] allSelectors) {
+	// if border-style == none, border-width should be 0
+	// @@ this is a horrible place to do this ...
+	cssBorder.check();
+
+	// check conflicts for 'font-family'
+	findConflictsFontFamily(ac, warnings, selector, allSelectors);
+
+	if (cssFloat != null) {
+	    if(cssWidth == null ) {
+		String selectorElement =  selector.getElement();
+		// for null element, or element without intrinsic width
+		if ( (selectorElement == null) ||
+		     ( !selectorElement.equals("html") &&
+		       !selectorElement.equals("img") && 
+		       !selectorElement.equals("input") &&
+		       !selectorElement.equals("object") && 
+		       !selectorElement.equals("textarea") && 
+		       !selectorElement.equals("select")
+		       ) ) {
+		    // float needs a declared width
+		    warnings.addWarning(new Warning(cssFloat, "float-no-width",
+						    1, ac));                
+		}
 	    }
 	}
 
-    if (cssFloat != null) {
-        if(cssWidth == null ) {
-            String selectorElement =  selector.getElement();
-            if (selectorElement != null){
-                if ((selectorElement.equals("html")) || (selectorElement.equals("img")) || (selectorElement.equals("input")) 
-                || (selectorElement.equals("object")) || (selectorElement.equals("textarea")) || (selectorElement.equals("select"))) {
-                }
-                else {
-                    // for elements without intrinsic width, float needs a declared width
-        		    warnings.addWarning(new Warning(cssFloat, "float-no-width", 1, ac));                
-                }
-            }
-            else {
-                // for elements without intrinsic width, float needs a declared width
-    		    warnings.addWarning(new Warning(cssFloat, "float-no-width", 1, ac));                
-            }
-        }
-    }
-
 	if (cssBackground.getColor() != null) {
 	    CssColor colorCSS3 = cssColor;
 	    // we need to look if there is the same selector elsewhere
@@ -2889,6 +2908,7 @@
 		}
 	    }
 	    if(backgroundColor == null) {
+		// FIXME background image
 		// It's better to have a background color with a color
 		warnings.addWarning(new Warning(cssColorCSS2, 
 			"no-background-color", 2, ac));
@@ -2896,7 +2916,6 @@
 	}
 
 	// now testing for % and length in padding and marging
-	// @@FIXME I don't be carreful with the value zero ...
 
 	RelativeAndAbsolute checker = new RelativeAndAbsolute();
 	CssProperty info = null;
@@ -3018,25 +3037,44 @@
 class RelativeAndAbsolute {
     boolean relative = false;
     boolean absolute = false;
+
     final void reset() {
 	relative = false;
 	absolute = false;
     }
+
     final boolean isNotRobust() {
 	return relative && absolute;
     }
+    
     final void compute(CssValue value) {
-	if (value instanceof CssPercentage) {
-	    relative |= true;
-	} else if (value instanceof CssLength) {
+	switch (value.getType()) {
+	case CssTypes.CSS_PERCENTAGE:
+	    // FIXME, it depends on the unit of the parent in the cascade.
+	    CssPercentage percent = (CssPercentage) value;
+	    if (percent.getValue() != (float) 0.0) {
+		relative = true;
+	    }
+	    break;
+	case CssTypes.CSS_LENGTH:
 	    CssLength length = (CssLength) value;
-	    if (!length.getUnit().equals("ex")
-		    || !length.getUnit().equals("em")) {
-		absolute |= true;
-	    } else {
-		relative |= true;
+	    Float f = (Float) length.get();
+	    // 0 is always 0, no need to check
+	    if (f.floatValue() != (float) 0.0) {
+		String unit = length.getUnit();
+		// per CSS21, section 4.3.2
+		// 'px', 'em', 'ex' are relative values
+		if (unit.equals("px") || unit.equals("em") ||
+		    unit.equals("ex")) { 
+		    relative = true;
+		} else {
+		    // 'cm', 'mm', 'pt', 'pc', 'in' are absolute values
+		    absolute = true;
+		}
 	    }
+	    break;
+	default:
+	    /* should never happen */
 	}
     }
-
 }

Received on Monday, 9 March 2009 13:02:13 UTC