w3c.css.atrules.css2.AtRuleMedia 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$
//
// (c) COPYRIGHT MIT, ERCIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.atrules.css2;
import org.w3c.css.atrules.css.media.Media;
import org.w3c.css.atrules.css.media.MediaFeature;
import org.w3c.css.parser.AtRule;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import java.util.ArrayList;
/**
* @spec http://www.w3.org/TR/2008/REC-CSS2-20080411/media.html#media-types
* @since CSS2
*/
public class AtRuleMedia extends org.w3c.css.atrules.css.AtRuleMedia {
static final String[] mediaCSS2 = {
"all", "aural", "braille", "embossed", "handheld", "print",
"projection", "screen", "tty", "tv"
};
/**
* Adds a medium.
*
* @throws InvalidParamException the medium doesn't exist
*/
public org.w3c.css.atrules.css.AtRuleMedia addMedia(String restrictor, String medium,
ApplContext ac)
throws InvalidParamException {
if (restrictor != null) {
// media restrictor not supported in CSS2
throw new InvalidParamException("nomediarestrictor", restrictor, ac);
}
medium = medium.toLowerCase();
for (String s : mediaCSS2) {
if (medium.equals(s)) {
allMedia.add(new Media(s));
return this;
}
}
// FIXME we can check if media exists in other CSS versions
throw new InvalidParamException("media", medium, ac);
}
/**
* Mediafeatures are not supported in CSS2
*
* @param feature
* @param ac
* @throws InvalidParamException
*/
public void addMediaFeature(MediaFeature feature, ApplContext ac)
throws InvalidParamException {
throw new InvalidParamException("nomediafeature",
feature.toString(), ac);
}
/**
* The second must be exactly the same as this one
* so we check that each one match each other
*/
public boolean canApply(AtRule atRule) {
try {
org.w3c.css.atrules.css.AtRuleMedia second = (org.w3c.css.atrules.css.AtRuleMedia) atRule;
return (canMatch(second) && second.canMatch(this));
} catch (ClassCastException cce) {
return false;
}
}
/**
* The second must only match this one
*/
public boolean canMatch(AtRule atRule) {
try {
org.w3c.css.atrules.css.AtRuleMedia second = (org.w3c.css.atrules.css.AtRuleMedia) atRule;
ArrayList otherMediaList = second.getMediaList();
for (Media m : otherMediaList) {
if (!allMedia.contains(m)) {
return false;
}
}
return true;
} catch (ClassCastException cce) {
return false;
}
}
public String getValueString() {
StringBuilder sb = new StringBuilder();
boolean first = true;
for (Media m : allMedia) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(m.toString());
}
return sb.toString();
}
/**
* Returns a string representation of the object.
*/
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append('@').append(keyword()).append(' ');
sb.append(getValueString());
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy