w3c.css.selectors.attributes.AttributeBegin Maven / Gradle / Ivy
// $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