Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* $Id: LexicalUnitImpl.java,v 1.3 2008/03/26 02:08:55 sdanig Exp $
*
* CSS Parser Project
*
* Copyright (C) 1999-2005 David Schweinsberg. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* To contact the authors of the library:
*
* http://cssparser.sourceforge.net/
* mailto:[email protected]
*/
package com.steadystate.css.parser;
import java.io.Serializable;
import org.w3c.css.sac.*;
/**
* Implementation of {@link LexicalUnit}.
*
* @author David Schweinsberg
* @version $Id: LexicalUnitImpl.java,v 1.3 2008/03/26 02:08:55 sdanig Exp $
*/
public class LexicalUnitImpl implements LexicalUnit, Serializable {
/*
public static final short SAC_OPERATOR_COMMA = 0;
public static final short SAC_OPERATOR_PLUS = 1;
public static final short SAC_OPERATOR_MINUS = 2;
public static final short SAC_OPERATOR_MULTIPLY = 3;
public static final short SAC_OPERATOR_SLASH = 4;
public static final short SAC_OPERATOR_MOD = 5;
public static final short SAC_OPERATOR_EXP = 6;
public static final short SAC_OPERATOR_LT = 7;
public static final short SAC_OPERATOR_GT = 8;
public static final short SAC_OPERATOR_LE = 9;
public static final short SAC_OPERATOR_GE = 10;
public static final short SAC_OPERATOR_TILDE = 11;
public static final short SAC_INHERIT = 12;
public static final short SAC_INTEGER = 13;
public static final short SAC_REAL = 14;
public static final short SAC_EM = 15;
public static final short SAC_EX = 16;
public static final short SAC_PIXEL = 17;
public static final short SAC_INCH = 18;
public static final short SAC_CENTIMETER = 19;
public static final short SAC_MILLIMETER = 20;
public static final short SAC_POINT = 21;
public static final short SAC_PICA = 22;
public static final short SAC_PERCENTAGE = 23;
public static final short SAC_URI = 24;
public static final short SAC_COUNTER_FUNCTION = 25;
public static final short SAC_COUNTERS_FUNCTION = 26;
public static final short SAC_RGBCOLOR = 27;
public static final short SAC_DEGREE = 28;
public static final short SAC_GRADIAN = 29;
public static final short SAC_RADIAN = 30;
public static final short SAC_MILLISECOND = 31;
public static final short SAC_SECOND = 32;
public static final short SAC_HERTZ = 33;
public static final short SAC_KILOHERTZ = 34;
public static final short SAC_IDENT = 35;
public static final short SAC_STRING_VALUE = 36;
public static final short SAC_ATTR = 37;
public static final short SAC_RECT_FUNCTION = 38;
public static final short SAC_UNICODERANGE = 39;
public static final short SAC_SUB_EXPRESSION = 40;
public static final short SAC_FUNCTION = 41;
public static final short SAC_DIMENSION = 42;
*/
private static final long serialVersionUID = -7260032046960116891L;
private short lexicalUnitType;
private LexicalUnit nextLexicalUnit;
private LexicalUnit previousLexicalUnit;
// private int _intVal;
private float floatValue;
private String dimension;
private String functionName;
private LexicalUnit parameters;
private String stringValue;
private Locator locator;
public Locator getLocator()
{
return this.locator;
}
public void setLocator(Locator locator)
{
this.locator = locator;
}
public void setLexicalUnitType(short type)
{
this.lexicalUnitType = type;
}
public void setNextLexicalUnit(LexicalUnit next)
{
this.nextLexicalUnit = next;
}
public void setPreviousLexicalUnit(LexicalUnit prev)
{
this.previousLexicalUnit = prev;
}
public void setFloatValue(float floatVal)
{
this.floatValue = floatVal;
}
public String getDimension()
{
return this.dimension;
}
public void setDimension(String dimension)
{
this.dimension = dimension;
}
public void setFunctionName(String function)
{
this.functionName = function;
}
public void setParameters(LexicalUnit params)
{
this.parameters = params;
}
public void setStringValue(String stringVal)
{
this.stringValue = stringVal;
}
protected LexicalUnitImpl(LexicalUnit previous, short type) {
this.lexicalUnitType = type;
this.previousLexicalUnit = previous;
if (this.previousLexicalUnit != null) {
((LexicalUnitImpl)this.previousLexicalUnit).nextLexicalUnit = this;
}
}
/**
* Integer
*/
protected LexicalUnitImpl(LexicalUnit previous, int value) {
this(previous, SAC_INTEGER);
// _intVal = value;
this.floatValue = value;
}
/**
* Dimension
*/
protected LexicalUnitImpl(LexicalUnit previous, short type, float value) {
this(previous, type);
this.floatValue = value;
}
/**
* Unknown dimension
*/
protected LexicalUnitImpl(
LexicalUnit previous,
short type,
String dimension,
float value) {
this(previous, type);
this.dimension = dimension;
this.floatValue = value;
}
/**
* String
*/
protected LexicalUnitImpl(LexicalUnit previous, short type, String value) {
this(previous, type);
this.stringValue = value;
}
/**
* Function
*/
protected LexicalUnitImpl(
LexicalUnit previous,
short type,
String name,
LexicalUnit params) {
this(previous, type);
this.functionName = name;
this.parameters = params;
}
public LexicalUnitImpl()
{
}
public short getLexicalUnitType() {
return this.lexicalUnitType;
}
public LexicalUnit getNextLexicalUnit() {
return this.nextLexicalUnit;
}
public LexicalUnit getPreviousLexicalUnit() {
return this.previousLexicalUnit;
}
public int getIntegerValue() {
// return _intVal;
return (int) this.floatValue;
}
public float getFloatValue() {
return this.floatValue;
}
public String getDimensionUnitText() {
switch (this.lexicalUnitType) {
case SAC_EM:
return "em";
case SAC_EX:
return "ex";
case SAC_PIXEL:
return "px";
case SAC_INCH:
return "in";
case SAC_CENTIMETER:
return "cm";
case SAC_MILLIMETER:
return "mm";
case SAC_POINT:
return "pt";
case SAC_PICA:
return "pc";
case SAC_PERCENTAGE:
return "%";
case SAC_DEGREE:
return "deg";
case SAC_GRADIAN:
return "grad";
case SAC_RADIAN:
return "rad";
case SAC_MILLISECOND:
return "ms";
case SAC_SECOND:
return "s";
case SAC_HERTZ:
return "Hz";
case SAC_KILOHERTZ:
return "kHz";
case SAC_DIMENSION:
return this.dimension;
}
return "";
}
public String getFunctionName() {
return this.functionName;
}
public LexicalUnit getParameters() {
return this.parameters;
}
public String getStringValue() {
return this.stringValue;
}
public LexicalUnit getSubValues() {
return this.parameters;
}
public String toString() {
StringBuilder sb = new StringBuilder();
switch (this.lexicalUnitType) {
case SAC_OPERATOR_COMMA:
sb.append(",");
break;
case SAC_OPERATOR_PLUS:
sb.append("+");
break;
case SAC_OPERATOR_MINUS:
sb.append("-");
break;
case SAC_OPERATOR_MULTIPLY:
sb.append("*");
break;
case SAC_OPERATOR_SLASH:
sb.append("/");
break;
case SAC_OPERATOR_MOD:
sb.append("%");
break;
case SAC_OPERATOR_EXP:
sb.append("^");
break;
case SAC_OPERATOR_LT:
sb.append("<");
break;
case SAC_OPERATOR_GT:
sb.append(">");
break;
case SAC_OPERATOR_LE:
sb.append("<=");
break;
case SAC_OPERATOR_GE:
sb.append(">=");
break;
case SAC_OPERATOR_TILDE:
sb.append("~");
break;
case SAC_INHERIT:
sb.append("inherit");
break;
case SAC_INTEGER:
sb.append(String.valueOf(this.getIntegerValue()));
break;
case SAC_REAL:
sb.append(this.trimFloat(this.getFloatValue()));
break;
case SAC_EM:
case SAC_EX:
case SAC_PIXEL:
case SAC_INCH:
case SAC_CENTIMETER:
case SAC_MILLIMETER:
case SAC_POINT:
case SAC_PICA:
case SAC_PERCENTAGE:
case SAC_DEGREE:
case SAC_GRADIAN:
case SAC_RADIAN:
case SAC_MILLISECOND:
case SAC_SECOND:
case SAC_HERTZ:
case SAC_KILOHERTZ:
case SAC_DIMENSION:
sb.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText());
break;
case SAC_URI:
sb.append("url(").append(this.getStringValue()).append(")");
break;
case SAC_COUNTER_FUNCTION:
sb.append("counter(");
appendParams(sb, this.parameters);
sb.append(")");
break;
case SAC_COUNTERS_FUNCTION:
sb.append("counters(");
appendParams(sb, this.parameters);
sb.append(")");
break;
case SAC_RGBCOLOR:
sb.append("rgb(");
appendParams(sb, this.parameters);
sb.append(")");
break;
case SAC_IDENT:
sb.append(this.getStringValue());
break;
case SAC_STRING_VALUE:
sb.append("\"").append(this.getStringValue()).append("\"");
break;
case SAC_ATTR:
sb.append("attr(");
appendParams(sb, this.parameters);
sb.append(")");
break;
case SAC_RECT_FUNCTION:
sb.append("rect(");
appendParams(sb,this. parameters);
sb.append(")");
break;
case SAC_UNICODERANGE:
sb.append(this.getStringValue());
break;
case SAC_SUB_EXPRESSION:
sb.append(this.getStringValue());
break;
case SAC_FUNCTION:
sb.append(this.getFunctionName()).append('(');
appendParams(sb, this.parameters);
sb.append(")");
break;
}
return sb.toString();
}
public String toDebugString() {
StringBuilder sb = new StringBuilder();
switch (this.lexicalUnitType) {
case SAC_OPERATOR_COMMA:
sb.append("SAC_OPERATOR_COMMA");
break;
case SAC_OPERATOR_PLUS:
sb.append("SAC_OPERATOR_PLUS");
break;
case SAC_OPERATOR_MINUS:
sb.append("SAC_OPERATOR_MINUS");
break;
case SAC_OPERATOR_MULTIPLY:
sb.append("SAC_OPERATOR_MULTIPLY");
break;
case SAC_OPERATOR_SLASH:
sb.append("SAC_OPERATOR_SLASH");
break;
case SAC_OPERATOR_MOD:
sb.append("SAC_OPERATOR_MOD");
break;
case SAC_OPERATOR_EXP:
sb.append("SAC_OPERATOR_EXP");
break;
case SAC_OPERATOR_LT:
sb.append("SAC_OPERATOR_LT");
break;
case SAC_OPERATOR_GT:
sb.append("SAC_OPERATOR_GT");
break;
case SAC_OPERATOR_LE:
sb.append("SAC_OPERATOR_LE");
break;
case SAC_OPERATOR_GE:
sb.append("SAC_OPERATOR_GE");
break;
case SAC_OPERATOR_TILDE:
sb.append("SAC_OPERATOR_TILDE");
break;
case SAC_INHERIT:
sb.append("SAC_INHERIT");
break;
case SAC_INTEGER:
sb.append("SAC_INTEGER(")
.append(String.valueOf(this.getIntegerValue()))
.append(")");
break;
case SAC_REAL:
sb.append("SAC_REAL(")
.append(this.trimFloat(this.getFloatValue()))
.append(")");
break;
case SAC_EM:
sb.append("SAC_EM(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_EX:
sb.append("SAC_EX(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_PIXEL:
sb.append("SAC_PIXEL(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_INCH:
sb.append("SAC_INCH(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_CENTIMETER:
sb.append("SAC_CENTIMETER(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_MILLIMETER:
sb.append("SAC_MILLIMETER(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_POINT:
sb.append("SAC_POINT(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_PICA:
sb.append("SAC_PICA(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_PERCENTAGE:
sb.append("SAC_PERCENTAGE(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_DEGREE:
sb.append("SAC_DEGREE(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_GRADIAN:
sb.append("SAC_GRADIAN(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_RADIAN:
sb.append("SAC_RADIAN(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_MILLISECOND:
sb.append("SAC_MILLISECOND(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_SECOND:
sb.append("SAC_SECOND(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_HERTZ:
sb.append("SAC_HERTZ(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_KILOHERTZ:
sb.append("SAC_KILOHERTZ(")
.append(trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_DIMENSION:
sb.append("SAC_DIMENSION(")
.append(this.trimFloat(this.getFloatValue()))
.append(this.getDimensionUnitText())
.append(")");
break;
case SAC_URI:
sb.append("SAC_URI(url(")
.append(this.getStringValue())
.append("))");
break;
case SAC_COUNTER_FUNCTION:
sb.append("SAC_COUNTER_FUNCTION(counter(");
appendParams(sb, this.parameters);
sb.append("))");
break;
case SAC_COUNTERS_FUNCTION:
sb.append("SAC_COUNTERS_FUNCTION(counters(");
appendParams(sb, this.parameters);
sb.append("))");
break;
case SAC_RGBCOLOR:
sb.append("SAC_RGBCOLOR(rgb(");
appendParams(sb, this.parameters);
sb.append("))");
break;
case SAC_IDENT:
sb.append("SAC_IDENT(")
.append(this.getStringValue())
.append(")");
break;
case SAC_STRING_VALUE:
sb.append("SAC_STRING_VALUE(\"")
.append(this.getStringValue())
.append("\")");
break;
case SAC_ATTR:
sb.append("SAC_ATTR(attr(");
appendParams(sb, this.parameters);
sb.append("))");
break;
case SAC_RECT_FUNCTION:
sb.append("SAC_RECT_FUNCTION(rect(");
appendParams(sb, this.parameters);
sb.append("))");
break;
case SAC_UNICODERANGE:
sb.append("SAC_UNICODERANGE(")
.append(this.getStringValue())
.append(")");
break;
case SAC_SUB_EXPRESSION:
sb.append("SAC_SUB_EXPRESSION(")
.append(this.getStringValue())
.append(")");
break;
case SAC_FUNCTION:
sb.append("SAC_FUNCTION(")
.append(this.getFunctionName())
.append("(");
appendParams(sb, this.parameters);
sb.append("))");
break;
}
return sb.toString();
}
private void appendParams(StringBuilder sb, LexicalUnit first) {
LexicalUnit l = first;
while (l != null) {
sb.append(l.toString());
l = l.getNextLexicalUnit();
}
}
private String trimFloat(float f) {
String s = String.valueOf(this.getFloatValue());
return (f - (int) f != 0) ? s : s.substring(0, s.length() - 2);
}
// TODO what is this method for? It is not used locally.
/*
private static float value(char op, String s) {
return ((op == '-') ? -1 : 1) * Float.valueOf(s).floatValue();
}
*/
public static LexicalUnit createNumber(LexicalUnit prev, int i) {
return new LexicalUnitImpl(prev, i);
}
public static LexicalUnit createNumber(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_REAL, f);
}
public static LexicalUnit createPercentage(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_PERCENTAGE, f);
}
public static LexicalUnit createPixel(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_PIXEL, f);
}
public static LexicalUnit createCentimeter(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_CENTIMETER, f);
}
public static LexicalUnit createMillimeter(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_MILLIMETER, f);
}
public static LexicalUnit createInch(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_INCH, f);
}
public static LexicalUnit createPoint(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_POINT, f);
}
public static LexicalUnit createPica(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_PICA, f);
}
public static LexicalUnit createEm(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_EM, f);
}
public static LexicalUnit createEx(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_EX, f);
}
public static LexicalUnit createDegree(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_DEGREE, f);
}
public static LexicalUnit createRadian(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_RADIAN, f);
}
public static LexicalUnit createGradian(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_GRADIAN, f);
}
public static LexicalUnit createMillisecond(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_MILLISECOND, f);
}
public static LexicalUnit createSecond(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_SECOND, f);
}
public static LexicalUnit createHertz(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_HERTZ, f);
}
public static LexicalUnit createDimension(LexicalUnit prev, float f, String dim) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_DIMENSION, dim, f);
}
public static LexicalUnit createKiloHertz(LexicalUnit prev, float f) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_KILOHERTZ, f);
}
public static LexicalUnit createCounter(LexicalUnit prev, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_COUNTER_FUNCTION, "counter", params);
}
public static LexicalUnit createCounters(LexicalUnit prev, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_COUNTERS_FUNCTION, "counters", params);
}
public static LexicalUnit createAttr(LexicalUnit prev, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_ATTR, "attr", params);
}
public static LexicalUnit createRect(LexicalUnit prev, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_RECT_FUNCTION, "rect", params);
}
public static LexicalUnit createRgbColor(LexicalUnit prev, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_RGBCOLOR, "rgb", params);
}
public static LexicalUnit createFunction(LexicalUnit prev, String name, LexicalUnit params) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_FUNCTION, name, params);
}
public static LexicalUnit createString(LexicalUnit prev, String value) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_STRING_VALUE, value);
}
public static LexicalUnit createIdent(LexicalUnit prev, String value) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_IDENT, value);
}
public static LexicalUnit createURI(LexicalUnit prev, String value) {
return new LexicalUnitImpl(prev, LexicalUnit.SAC_URI, value);
}
public static LexicalUnit createComma(LexicalUnit prev) {
return new LexicalUnitImpl(prev, SAC_OPERATOR_COMMA);
}
}