2002/css-validator/org/w3c/css/selectors/attributes AttributeBegin.java,1.3,1.4 AttributeExact.java,1.9,1.10 AttributeOneOf.java,1.4,1.5 AttributeStart.java,1.2,1.3 AttributeSubstr.java,1.2,1.3 AttributeSuffix.java,1.2,1.3

Update of /sources/public/2002/css-validator/org/w3c/css/selectors/attributes
In directory hutz:/tmp/cvs-serv25329

Modified Files:
	AttributeBegin.java AttributeExact.java AttributeOneOf.java 
	AttributeStart.java AttributeSubstr.java AttributeSuffix.java 
Log Message:
done selector attribute conflict matching, including oneOf and all possible clash test between the different kind of attributes

Index: AttributeOneOf.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeOneOf.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- AttributeOneOf.java	13 May 2008 09:37:27 -0000	1.4
+++ AttributeOneOf.java	14 May 2008 10:13:09 -0000	1.5
@@ -14,11 +14,13 @@
  */
 public class AttributeOneOf extends AttributeSelector {
 
-    String value;
+    String   value;
+    String[] values;
 
     public AttributeOneOf(String name, String value) {
 	setName(name);
 	this.value = value;
+	this.values = null;
     }
 
     /**
@@ -33,6 +35,7 @@
      */
     public void setValue(String value) {
         this.value = value;
+	values = null;
     }
 
     public boolean canApply(Selector other) {
@@ -62,11 +65,89 @@
 	return "[" + getName() + "~=\"" + value + "\"]";
     }
 
+    private String[] computeValues() {
+	values = value.split("\\s");
+	return values;
+    }
+
     public void applyAttribute(ApplContext ac, AttributeSelector attr) {
-	if (getName().equals(attr.getName())) {
-	    if((attr instanceof AttributeExact) &&
-	       !value.equals(((AttributeExact) attr).getValue())) {
-		ac.getFrame().addWarning("incompatible", new String[] { toString(), attr.toString() });
+	String name = getName();
+	int i;
+	String val;
+	boolean ok;
+
+	if (name.equals(attr.getName())) {
+	    if (values == null) {
+		computeValues();
+	    }
+	    if (attr instanceof AttributeExact) {
+		val = ((AttributeExact) attr).getValue();
+		ok = false;
+		for (i=0;!ok && i<values.length; i++) {
+		    ok = val.equals(values[i]);
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeBegin) {
+		val = ((AttributeBegin) attr).getValue();
+		ok = false;
+		String pval = val + '-';
+		for (i=0;!ok && i<values.length; i++) {
+		    ok = values[i].equals(val) || values[i].startsWith(pval);
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeStart) {
+		val = ((AttributeStart) attr).getValue();
+		ok = false;
+		for (i=0;!ok && i<values.length; i++) {
+		    ok = values[i].startsWith(val);
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeSubstr) {
+		val = ((AttributeSubstr) attr).getValue();
+		ok = false;
+		for (i=0;!ok && i<values.length; i++) {
+		    ok = (values[i].indexOf(val) >= 0);
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeSuffix) {
+		val = ((AttributeSuffix) attr).getValue();
+		ok = false;
+		for (i=0;!ok && i<values.length; i++) {
+		    ok = values[i].endsWith(val);
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeOneOf) {
+		AttributeOneOf otherattr = (AttributeOneOf) attr;
+		String[] othervalues = otherattr.values;
+		int j;
+		if (othervalues == null) {
+		    othervalues = otherattr.computeValues();
+		}
+		ok = false;
+		for (i=0;!ok && i<values.length; i++) {
+		    for(j=0;!ok && j<othervalues.length; j++) {
+			ok = values[i].equals(othervalues[j]);
+		    }
+		}
+		if (!ok) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
 	    }
 	}
     }

Index: AttributeBegin.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeBegin.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- AttributeBegin.java	13 Sep 2007 10:12:07 -0000	1.3
+++ AttributeBegin.java	14 May 2008 10:13:09 -0000	1.4
@@ -67,23 +67,30 @@
     }
 
     public void applyAttribute(ApplContext ac, AttributeSelector attr) {
-	if (attr instanceof AttributeExact) {
-	    String v = ((AttributeExact) attr).getValue();
-	    int index = v.indexOf('-');
-	    if (index > 0) {
-		v = v.substring(0, index);
-	    }
-	    if (!value.equals(v)) {
-		// [lang|=fr][lang=en-US]
-		ac.getFrame().addWarning("incompatible", new String[] { toString(), attr.toString() });
-	    }
-	} else if (attr instanceof AttributeBegin) {
-	    if (!value.equals(((AttributeBegin) attr).value)) {
-		// [lang|=fr][lang|=en]
-		ac.getFrame().addWarning("incompatible", new String[] { toString(), attr.toString() });
+	String name = getName();
+	if (name.equals(attr.getName())) {
+	    // attribute exact knows how to match, delegate...
+	    if (attr instanceof AttributeExact) {
+		((AttributeExact) attr).applyAttribute(ac, this);
+	    } else if (attr instanceof AttributeBegin) {
+		String val = ((AttributeBegin) attr).getValue();
+		// check if one start with the other or not
+		if (!val.equals(value) && !value.startsWith(val+'-')
+		    && !val.startsWith(value+'-')) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeStart) {
+		String val = ((AttributeStart) attr).getValue();
+		if (!val.equals(value) && !value.startsWith(val)
+		    && !val.startsWith(value+'-')) {
+		    ac.getFrame().addWarning("incompatible", 
+				  new String[] { toString(), attr.toString() });
+		}
+	    } else if (attr instanceof AttributeOneOf) {
+		((AttributeOneOf) attr).applyAttribute(ac, this);
 	    }
 	}
-
     }
 
     public String toString() {

Index: AttributeExact.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeExact.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- AttributeExact.java	13 May 2008 16:11:43 -0000	1.9
+++ AttributeExact.java	14 May 2008 10:13:09 -0000	1.10
@@ -70,13 +70,8 @@
 				  new String[] { toString(), attr.toString() });
 		}
 	    } else if(attr instanceof AttributeOneOf) {
-		// FIXME check that the parsed one of value are matching 
-		// before doing the conclict check requires breaking down 
-		// the OneOf
-		if (!value.equals(((AttributeOneOf) attr).getValue())) {
-		    ac.getFrame().addWarning("incompatible", 
-			          new String[] { toString(), attr.toString() });
-		}
+		// delegate the match to OneOf
+		((AttributeOneOf)attr).applyAttribute(ac, this);
 	    } else if(attr instanceof AttributeBegin) {
 		String othervalue = ((AttributeBegin) attr).getValue();
 		// check if [lang|=en][lang=fr-FR] are incompatible 

Index: AttributeStart.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeStart.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- AttributeStart.java	14 Sep 2005 15:15:32 -0000	1.2
+++ AttributeStart.java	14 May 2008 10:13:09 -0000	1.3
@@ -44,7 +44,17 @@
     }
 
     public void applyAttribute(ApplContext ac, AttributeSelector attr) {
-
+	String name = getName();
+	if (name.equals(attr.getName())) {
+	    // attribute exact knows how to match, delegate...
+	    if (attr instanceof AttributeExact) {
+		((AttributeExact) attr).applyAttribute(ac, this);
+	    } else if (attr instanceof AttributeBegin) {
+		((AttributeBegin) attr).applyAttribute(ac, this);
+	    } else if (attr instanceof AttributeOneOf) {
+		((AttributeOneOf) attr).applyAttribute(ac, this);
+	    }
+	}
     }
 
 }

Index: AttributeSuffix.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeSuffix.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- AttributeSuffix.java	14 Sep 2005 15:15:32 -0000	1.2
+++ AttributeSuffix.java	14 May 2008 10:13:09 -0000	1.3
@@ -44,7 +44,15 @@
     }
 
     public void applyAttribute(ApplContext ac, AttributeSelector attr) {
-
+	String name = getName();
+	if (name.equals(attr.getName())) {
+	    // attribute exact knows how to match, delegate...
+	    if (attr instanceof AttributeExact) {
+		((AttributeExact) attr).applyAttribute(ac, this);
+	    } else if (attr instanceof AttributeOneOf) {
+		((AttributeOneOf) attr).applyAttribute(ac, this);
+	    }
+	}
     }
 
 }

Index: AttributeSubstr.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/selectors/attributes/AttributeSubstr.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- AttributeSubstr.java	14 Sep 2005 15:15:32 -0000	1.2
+++ AttributeSubstr.java	14 May 2008 10:13:09 -0000	1.3
@@ -44,8 +44,15 @@
     }
 
     public void applyAttribute(ApplContext ac, AttributeSelector attr) {
-	// TODO Auto-generated method stub
-
+	String name = getName();
+	if (name.equals(attr.getName())) {
+	    // attribute exact knows how to match, delegate...
+	    if (attr instanceof AttributeExact) {
+		((AttributeExact) attr).applyAttribute(ac, this);
+	    } else if (attr instanceof AttributeOneOf) {
+		((AttributeOneOf) attr).applyAttribute(ac, this);
+	    }
+	}
     }
 
 }

Received on Wednesday, 14 May 2008 10:13:44 UTC