w3c.css.selectors.attributes.AttributeBegin Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cssvalidator Show documentation
Show all versions of cssvalidator Show documentation
Backend for the W3C CSS Validation Service
// $Id$
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2005.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.selectors.attributes;
import org.w3c.css.selectors.AttributeSelector;
import org.w3c.css.selectors.Selector;
import org.w3c.css.util.ApplContext;
/**
* AttributeBegin
* Created: Sep 1, 2005 4:26:18 PM
*/
public class AttributeBegin extends AttributeSelector {
private String value;
public AttributeBegin(String name, String value) {
setName(name);
this.value = value;
}
/**
* @return Returns the value.
*/
public String getValue() {
return value;
}
/**
* @param value The value to set.
*/
public void setValue(String value) {
this.value = value;
}
public boolean canApply(Selector other) {
if (other instanceof AttributeAny) {
// [lang|=fr][lang]
return true;
} else if (other instanceof AttributeExact) {
String v = ((AttributeExact) other).getValue();
int index = v.indexOf('-');
if (index > 0) {
v = v.substring(0, index);
}
if (!value.equals(v)) {
// [lang|=fr][lang=en-US]
return false;
} else {
// [lang|=en][lang=en-US]
return true;
}
} else if (other instanceof AttributeOneOf) {
return true;
} else if (other instanceof AttributeBegin) {
if (!value.equals(((AttributeBegin) other).value)) {
// [lang|=fr][lang|=en]
return false;
} else {
// [lang|=en][lang|=en]
return true;
}
}
return false;
}
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) {
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() {
StringBuilder sb = new StringBuilder();
sb.append('[').append(getName()).append("|=\"").append(value).append("\"]");
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy