- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 21 Oct 2011 01:49:10 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/media/css3
In directory hutz:/tmp/cvs-serv28700/org/w3c/css/media/css3
Added Files:
AtRuleMedia.java MediaAspectRatio.java MediaColor.java
MediaColorIndex.java MediaDeviceAspectRatio.java
MediaDeviceHeight.java MediaDeviceWidth.java MediaGrid.java
MediaHeight.java MediaMonochrome.java MediaOrientation.java
MediaResolution.java MediaScan.java MediaWidth.java
Log Message:
redone the Media Features of media queries, up to date per http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/, todo, parsing of media in HTML form
--- NEW FILE: MediaDeviceAspectRatio.java ---
// $Id: MediaDeviceAspectRatio.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#device-aspect-ratio
*/
public class MediaDeviceAspectRatio extends MediaFeature {
int h, w;
/**
* Create a new MediaHeight
*/
public MediaDeviceAspectRatio() {
}
/**
* Create a new MediaHeight.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaDeviceAspectRatio(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() != 2) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
w = valnum.getInt();
// TODO FIXME this should be replaced when / is no longer
// an operator
if (expression.getOperator() != CssOperator.SLASH) {
throw new InvalidParamException("operator", expression.toString(), ac);
}
// now the second value
expression.next();
val = expression.getValue();
if (val.getType() == CssTypes.CSS_NUMBER) {
valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
h = valnum.getInt();
// perfect, now set the modifier
setModifier(ac, modifier);
return;
}
}
// otherwise... fail
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaDeviceAspectRatio(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
StringBuilder sb = new StringBuilder();
sb.append(w).append('/').append(h);
return sb.toString();
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "device-aspect-ratio";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaDeviceAspectRatio mar = (MediaDeviceAspectRatio) other;
if (h == 0 || mar.h == 0) {
return (w == 0 && mar.w == 0 && h == 0 && mar.h == 0);
}
float thisRatio = ((float) w) / ((float) h);
float otherRatio = ((float) mar.w) / ((float) mar.h);
return (thisRatio == otherRatio)
&& (((modifier == null) && (mar.modifier == null)) || ((modifier != null) && modifier.equals(mar.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
/**
* Returns a string representation of the object.
*/
public String toString() {
if (h == 0 && w == 0) {
return getFeatureName();
}
StringBuilder sb = new StringBuilder();
if (modifier != null) {
sb.append(modifier).append('-');
}
sb.append(getFeatureName());
sb.append(':').append(w).append('/').append(h);
return sb.toString();
}
}
--- NEW FILE: MediaWidth.java ---
// $Id: MediaWidth.java,v 1.1 2011/10/21 01:49:08 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#width
*/
public class MediaWidth extends MediaFeature {
/**
* Create a new MediaWidth
*/
public MediaWidth() {
}
/**
* Create a new MediaWidth.
*
* @param expression The expression for this media feature
* @throws InvalidParamException Values are incorrect
*/
public MediaWidth(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (check && expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_NUMBER:
// a bit stupid as the only value would be 0...
val = ((CssNumber) val).getLength();
case CssTypes.CSS_LENGTH:
CssLength l = (CssLength) val;
if (l.floatValue() < 0.f) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = val;
expression.next();
break;
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaWidth(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "width";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaWidth mw = (MediaWidth) other;
return (((value == null) && (mw.value == null)) || ((value != null) && value.equals(mw.value)))
&& (((modifier == null) && (mw.modifier == null)) || ((modifier != null) && modifier.equals(mw.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: AtRuleMedia.java ---
// $Id: AtRuleMedia.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ERCIM and Keio University
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.Media;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.parser.AtRule;
import org.w3c.css.parser.CssError;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import java.util.ArrayList;
/**
* @spec TODO
*/
public class AtRuleMedia extends org.w3c.css.media.AtRuleMedia {
static final String[] mediaCSS21 = {
"all", "braille", "embossed", "handheld", "print", "projection",
"screen", "speech", "tty", "tv"
};
static final String[] deprecatedMedia = {
"aural"
};
/**
* Adds a medium.
*
* @throws InvalidParamException the medium doesn't exist
*/
public org.w3c.css.media.AtRuleMedia addMedia(String restrictor, String medium,
ApplContext ac) throws InvalidParamException {
Media media = new Media();
if (restrictor != null) {
if ("not".equalsIgnoreCase(restrictor)) {
media.setNot(true);
} else if ("only".equalsIgnoreCase(restrictor)) {
media.setOnly(true);
}
}
if (medium == null) {
allMedia.add(media);
return this;
}
medium = medium.toLowerCase();
for (String s : mediaCSS21) {
if (medium.equals(s)) {
media.setMedia(s);
allMedia.add(media);
return this;
}
}
for (String s : deprecatedMedia) {
if (medium.equals(s)) {
InvalidParamException ipe = new InvalidParamException("deprecatedmedia", medium, ac);
ac.getFrame().addError(new CssError(ipe));
media.setMedia(s);
allMedia.add(media);
return this;
}
}
// FIXME we can check if media exists in other CSS versions
throw new InvalidParamException("media", medium, ac);
}
/**
*
* @param feature
* @param ac
* @throws InvalidParamException
*/
public void addMediaFeature(MediaFeature feature, ApplContext ac)
throws InvalidParamException {
Media latest = allMedia.get(allMedia.size()-1);
latest.addFeature(feature);
}
/**
* 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.media.AtRuleMedia second = (org.w3c.css.media.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.media.AtRuleMedia second = (org.w3c.css.media.AtRuleMedia) atRule;
ArrayList<Media> 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();
}
}
--- NEW FILE: MediaResolution.java ---
// $Id: MediaResolution.java,v 1.1 2011/10/21 01:49:08 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssResolution;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#resolution
*/
public class MediaResolution extends MediaFeature {
/**
* Create a new MediaResolution
*/
public MediaResolution() {
}
/**
* Create a new MediaResolution
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaResolution(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
// it must be a >=0 integer only
if (val.getType() == CssTypes.CSS_RESOLUTION) {
CssResolution valnum = (CssResolution) val;
if (valnum.getFloatValue() < 0.f) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = valnum;
} else {
throw new InvalidParamException("unrecognize", ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaResolution(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "resolution";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaResolution mr = (MediaResolution) other;
return (((value == null) && (mr.value == null)) || ((value != null) && value.equals(mr.value)))
&& (((modifier == null) && (mr.modifier == null)) || ((modifier != null) && modifier.equals(mr.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaDeviceHeight.java ---
// $Id: MediaDeviceHeight.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#device-height
*/
public class MediaDeviceHeight extends MediaFeature {
/**
* Create a new MediaHeight
*/
public MediaDeviceHeight() {
}
/**
* Create a new MediaHeight.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaDeviceHeight(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_NUMBER:
// a bit stupid as the only value would be 0...
val = ((CssNumber) val).getLength();
case CssTypes.CSS_LENGTH:
CssLength l = (CssLength) val;
if (l.floatValue() < 0.f) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = val;
expression.next();
break;
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaDeviceHeight(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "device-height";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaDeviceHeight mdh = (MediaDeviceHeight) other;
return (((value == null) && (mdh.value == null)) || ((value != null) && value.equals(mdh.value)))
&& (((modifier == null) && (mdh.modifier == null)) || ((modifier != null) && modifier.equals(mdh.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaHeight.java ---
// $Id: MediaHeight.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#height
*/
public class MediaHeight extends MediaFeature {
/**
* Create a new MediaHeight
*/
public MediaHeight() {
}
/**
* Create a new MediaHeight.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaHeight(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_NUMBER:
// a bit stupid as the only value would be 0...
val = ((CssNumber) val).getLength();
case CssTypes.CSS_LENGTH:
CssLength l = (CssLength) val;
if (l.floatValue() < 0.f) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = val;
expression.next();
break;
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaHeight(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "height";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaHeight mh = (MediaHeight) other;
return (((value == null) && (mh.value == null)) || ((value != null) && value.equals(mh.value)))
&& (((modifier == null) && (mh.modifier == null)) || ((modifier != null) && modifier.equals(mh.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaColor.java ---
// $Id: MediaColor.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#color
*/
public class MediaColor extends MediaFeature {
/**
* Create a new MediaColor
*/
public MediaColor() {
}
/**
* Create a new MediaColor.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaColor(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
// it must be a >=0 integer only
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
if (valnum.getInt() < 0) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = valnum;
} else {
throw new InvalidParamException("unrecognize", ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaColor(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "color";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaColor mh = (MediaColor) other;
return (((value == null) && (mh.value == null)) || ((value != null) && value.equals(mh.value)))
&& (((modifier == null) && (mh.modifier == null)) || ((modifier != null) && modifier.equals(mh.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaMonochrome.java ---
// $Id: MediaMonochrome.java,v 1.1 2011/10/21 01:49:08 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#monochrome
*/
public class MediaMonochrome extends MediaFeature {
/**
* Create a new MediaMonochrome
*/
public MediaMonochrome() {
}
/**
* Create a new MediaMonochrome.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaMonochrome(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
// it must be a >=0 integer only
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
if (valnum.getInt() < 0) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = valnum;
} else {
throw new InvalidParamException("unrecognize", ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaMonochrome(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "monochrome";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaMonochrome mm = (MediaMonochrome) other;
return (((value == null) && (mm.value == null)) || ((value != null) && value.equals(mm.value)))
&& (((modifier == null) && (mm.modifier == null)) || ((modifier != null) && modifier.equals(mm.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaGrid.java ---
// $Id: MediaGrid.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#grid
*/
public class MediaGrid extends MediaFeature {
/**
* Create a new MediaGrid
*/
public MediaGrid() {
}
/**
* Create a new MediaGrid.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaGrid(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (modifier != null) {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
// it must be a >=0 integer only
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
int gridval = valnum.getInt();
if (gridval != 0 && gridval != 1) {
throw new InvalidParamException("grid",
val.toString(), ac);
}
value = valnum;
} else {
throw new InvalidParamException("unrecognize", ac);
}
}
}
// just in case someone wants to call it externally...
public void setModifier(ApplContext ac, String modifier)
throws InvalidParamException {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
public MediaGrid(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "grid";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaGrid mg = (MediaGrid) other;
return (((value == null) && (mg.value == null)) || ((value != null) && value.equals(mg.value)))
&& (((modifier == null) && (mg.modifier == null)) || ((modifier != null) && modifier.equals(mg.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaScan.java ---
// $Id: MediaScan.java,v 1.1 2011/10/21 01:49:08 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#scan
*/
public class MediaScan extends MediaFeature {
static CssIdent progressive, interlace;
static {
progressive = CssIdent.getIdent("progressive");
interlace = CssIdent.getIdent("interlace");
}
/**
* Create a new MediaScan
*/
public MediaScan() {
}
/**
* Create a new MediaScan.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaScan(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (modifier != null) {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_IDENT:
CssIdent id = (CssIdent) val;
if (progressive.equals(id)) {
value = progressive;
break;
}
if (interlace.equals(id)) {
value = interlace;
break;
}
// let it flow through the exception
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
} else {
// TODO add a warning for value less mediafeature that makes no sense
}
}
public MediaScan(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
// just in case someone wants to call it externally...
public void setModifier(ApplContext ac, String modifier)
throws InvalidParamException {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "scan";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaScan ms = (MediaScan) other;
return (((value == null) && (ms.value == null)) || ((value != null) && value.equals(ms.value)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaOrientation.java ---
// $Id: MediaOrientation.java,v 1.1 2011/10/21 01:49:08 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#orientation
*/
public class MediaOrientation extends MediaFeature {
static CssIdent portrait, landscape;
static {
portrait = CssIdent.getIdent("progressive");
landscape = CssIdent.getIdent("interlace");
}
/**
* Create a new MediaOientation
*/
public MediaOrientation() {
}
/**
* Create a new MediaOrientation.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaOrientation(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (modifier != null) {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_IDENT:
CssIdent id = (CssIdent) val;
if (portrait.equals(id)) {
value = portrait;
break;
}
if (landscape.equals(id)) {
value = landscape;
break;
}
// let it flow through the exception
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
} else {
// TODO add a warning for value less mediafeature that makes no sense
}
}
public MediaOrientation(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
// just in case someone wants to call it externally...
public void setModifier(ApplContext ac, String modifier)
throws InvalidParamException {
throw new InvalidParamException("nomodifiermedia",
getFeatureName(), ac);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "orientation";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaOrientation mo = (MediaOrientation) other;
return (((value == null) && (mo.value == null)) || ((value != null) && value.equals(mo.value)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaDeviceWidth.java ---
// $Id: MediaDeviceWidth.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#device-width
*/
public class MediaDeviceWidth extends MediaFeature {
/**
* Create a new MediaWidth
*/
public MediaDeviceWidth() {
}
/**
* Create a new MediaWidth.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaDeviceWidth(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
switch (val.getType()) {
case CssTypes.CSS_NUMBER:
// a bit stupid as the only value would be 0...
val = ((CssNumber) val).getLength();
case CssTypes.CSS_LENGTH:
CssLength l = (CssLength) val;
if (l.floatValue() < 0.f) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = val;
expression.next();
break;
default:
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaDeviceWidth(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "device-width";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaDeviceWidth mdw = (MediaDeviceWidth) other;
return (((value == null) && (mdw.value == null)) || ((value != null) && value.equals(mdw.value)))
&& (((modifier == null) && (mdw.modifier == null)) || ((modifier != null) && modifier.equals(mdw.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaColorIndex.java ---
// $Id: MediaColorIndex.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#color-index
*/
public class MediaColorIndex extends MediaFeature {
/**
* Create a new MediaColorIndex
*/
public MediaColorIndex() {
}
/**
* Create a new MediaColorIndex.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaColorIndex(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
// it must be a >=0 integer only
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
if (valnum.getInt() < 0) {
throw new InvalidParamException("negative-value",
val.toString(), ac);
}
value = valnum;
} else {
throw new InvalidParamException("unrecognize", ac);
}
setModifier(ac, modifier);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaColorIndex(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
return value;
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "color-index";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaColorIndex mci = (MediaColorIndex) other;
return (((value == null) && (mci.value == null)) || ((value != null) && value.equals(mci.value)))
&& (((modifier == null) && (mci.modifier == null)) || ((modifier != null) && modifier.equals(mci.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
}
--- NEW FILE: MediaAspectRatio.java ---
// $Id: MediaAspectRatio.java,v 1.1 2011/10/21 01:49:07 ylafon Exp $
//
// (c) COPYRIGHT MIT, ECRIM and Keio University, 2011
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.media.css3;
import org.w3c.css.media.MediaFeature;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
/**
* @spec http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/#aspect-ratio
*/
public class MediaAspectRatio extends MediaFeature {
int h, w;
/**
* Create a new MediaHeight
*/
public MediaAspectRatio() {
}
/**
* Create a new MediaHeight.
*
* @param expression The expression for this media feature
* @throws org.w3c.css.util.InvalidParamException
* Values are incorrect
*/
public MediaAspectRatio(ApplContext ac, String modifier,
CssExpression expression, boolean check)
throws InvalidParamException {
if (expression != null) {
if (expression.getCount() != 2) {
throw new InvalidParamException("unrecognize", ac);
}
CssValue val = expression.getValue();
if (val.getType() == CssTypes.CSS_NUMBER) {
CssNumber valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
w = valnum.getInt();
// TODO FIXME this should be replaced when / is no longer
// an operator
if (expression.getOperator() != CssOperator.SLASH) {
throw new InvalidParamException("operator", expression.toString(), ac);
}
// now the second value
expression.next();
val = expression.getValue();
if (val.getType() == CssTypes.CSS_NUMBER) {
valnum = (CssNumber) val;
if (!valnum.isInteger()) {
throw new InvalidParamException("integer",
val.toString(), ac);
}
h = valnum.getInt();
// perfect, now set the modifier
setModifier(ac, modifier);
return;
}
}
// otherwise... fail
throw new InvalidParamException("value", expression.getValue(),
getFeatureName(), ac);
} else {
if (modifier != null) {
throw new InvalidParamException("nomodifiershortmedia",
getFeatureName(), ac);
}
}
}
public MediaAspectRatio(ApplContext ac, String modifier, CssExpression expression)
throws InvalidParamException {
this(ac, modifier, expression, false);
}
/**
* Returns the value of this media feature.
*/
public Object get() {
StringBuilder sb = new StringBuilder();
sb.append(w).append('/').append(h);
return sb.toString();
}
/**
* Returns the name of this media feature.
*/
public final String getFeatureName() {
return "aspect-ratio";
}
/**
* Compares two media features for equality.
*
* @param other The other media features.
*/
public boolean equals(MediaFeature other) {
try {
MediaAspectRatio mar = (MediaAspectRatio) other;
if (h == 0 || mar.h == 0) {
return (w == 0 && mar.w == 0 && h == 0 && mar.h == 0);
}
float thisRatio = ((float) w) / ((float) h);
float otherRatio = ((float) mar.w) / ((float) mar.h);
return (thisRatio == otherRatio)
&& (((modifier == null) && (mar.modifier == null)) || ((modifier != null) && modifier.equals(mar.modifier)));
} catch (ClassCastException cce) {
return false;
}
}
/**
* Returns a string representation of the object.
*/
public String toString() {
if (h == 0 && w == 0) {
return getFeatureName();
}
StringBuilder sb = new StringBuilder();
if (modifier != null) {
sb.append(modifier).append('-');
}
sb.append(getFeatureName());
sb.append(':').append(w).append('/').append(h);
return sb.toString();
}
}
Received on Friday, 21 October 2011 01:49:19 UTC