1
19 package org.apache.batik.css.parser;
20
21 import org.w3c.css.sac.LexicalUnit;
22
23
29 public abstract class CSSLexicalUnit implements LexicalUnit {
30
31 public static final String UNIT_TEXT_CENTIMETER = "cm";
32 public static final String UNIT_TEXT_DEGREE = "deg";
33 public static final String UNIT_TEXT_EM = "em";
34 public static final String UNIT_TEXT_EX = "ex";
35 public static final String UNIT_TEXT_GRADIAN = "grad";
36 public static final String UNIT_TEXT_HERTZ = "Hz";
37 public static final String UNIT_TEXT_INCH = "in";
38 public static final String UNIT_TEXT_KILOHERTZ = "kHz";
39 public static final String UNIT_TEXT_MILLIMETER = "mm";
40 public static final String UNIT_TEXT_MILLISECOND = "ms";
41 public static final String UNIT_TEXT_PERCENTAGE = "%";
42 public static final String UNIT_TEXT_PICA = "pc";
43 public static final String UNIT_TEXT_PIXEL = "px";
44 public static final String UNIT_TEXT_POINT = "pt";
45 public static final String UNIT_TEXT_RADIAN = "rad";
46 public static final String UNIT_TEXT_REAL = "";
47 public static final String UNIT_TEXT_SECOND = "s";
48
49 public static final String TEXT_RGBCOLOR = "rgb";
50 public static final String TEXT_RECT_FUNCTION = "rect";
51 public static final String TEXT_COUNTER_FUNCTION = "counter";
52 public static final String TEXT_COUNTERS_FUNCTION = "counters";
53
54
57 protected short lexicalUnitType;
58
59
62 protected LexicalUnit nextLexicalUnit;
63
64
67 protected LexicalUnit previousLexicalUnit;
68
69
72 protected CSSLexicalUnit(short t, LexicalUnit prev) {
73 lexicalUnitType = t;
74 previousLexicalUnit = prev;
75 if (prev != null) {
76 ((CSSLexicalUnit)prev).nextLexicalUnit = this;
77 }
78 }
79
80
83 public short getLexicalUnitType() {
84 return lexicalUnitType;
85 }
86
87
90 public LexicalUnit getNextLexicalUnit() {
91 return nextLexicalUnit;
92 }
93
94
97 public void setNextLexicalUnit(LexicalUnit lu) {
98 nextLexicalUnit = lu;
99 }
100
101
104 public LexicalUnit getPreviousLexicalUnit() {
105 return previousLexicalUnit;
106 }
107
108
111 public void setPreviousLexicalUnit(LexicalUnit lu) {
112 previousLexicalUnit = lu;
113 }
114
115
118 public int getIntegerValue() {
119 throw new IllegalStateException();
120 }
121
122
125 public float getFloatValue() {
126 throw new IllegalStateException();
127 }
128
129
132 public String getDimensionUnitText() {
133 switch (lexicalUnitType) {
134 case LexicalUnit.SAC_CENTIMETER: return UNIT_TEXT_CENTIMETER;
135 case LexicalUnit.SAC_DEGREE: return UNIT_TEXT_DEGREE;
136 case LexicalUnit.SAC_EM: return UNIT_TEXT_EM;
137 case LexicalUnit.SAC_EX: return UNIT_TEXT_EX;
138 case LexicalUnit.SAC_GRADIAN: return UNIT_TEXT_GRADIAN;
139 case LexicalUnit.SAC_HERTZ: return UNIT_TEXT_HERTZ;
140 case LexicalUnit.SAC_INCH: return UNIT_TEXT_INCH;
141 case LexicalUnit.SAC_KILOHERTZ: return UNIT_TEXT_KILOHERTZ;
142 case LexicalUnit.SAC_MILLIMETER: return UNIT_TEXT_MILLIMETER;
143 case LexicalUnit.SAC_MILLISECOND: return UNIT_TEXT_MILLISECOND;
144 case LexicalUnit.SAC_PERCENTAGE: return UNIT_TEXT_PERCENTAGE;
145 case LexicalUnit.SAC_PICA: return UNIT_TEXT_PICA;
146 case LexicalUnit.SAC_PIXEL: return UNIT_TEXT_PIXEL;
147 case LexicalUnit.SAC_POINT: return UNIT_TEXT_POINT;
148 case LexicalUnit.SAC_RADIAN: return UNIT_TEXT_RADIAN;
149 case LexicalUnit.SAC_REAL: return UNIT_TEXT_REAL;
150 case LexicalUnit.SAC_SECOND: return UNIT_TEXT_SECOND;
151 default:
152 throw new IllegalStateException("No Unit Text for type: " +
153 lexicalUnitType);
154 }
155 }
156
157
160 public String getFunctionName() {
161 throw new IllegalStateException();
162 }
163
164
167 public LexicalUnit getParameters() {
168 throw new IllegalStateException();
169 }
170
171
174 public String getStringValue() {
175 throw new IllegalStateException();
176 }
177
178
181 public LexicalUnit getSubValues() {
182 throw new IllegalStateException();
183 }
184
185
188 public static CSSLexicalUnit createSimple(short t, LexicalUnit prev) {
189 return new SimpleLexicalUnit(t, prev);
190 }
191
192
195 protected static class SimpleLexicalUnit extends CSSLexicalUnit {
196
197
200 public SimpleLexicalUnit(short t, LexicalUnit prev) {
201 super(t, prev);
202 }
203 }
204
205
208 public static CSSLexicalUnit createInteger(int val, LexicalUnit prev) {
209 return new IntegerLexicalUnit(val, prev);
210 }
211
212
215 protected static class IntegerLexicalUnit extends CSSLexicalUnit {
216
217
220 protected int value;
221
222
225 public IntegerLexicalUnit(int val, LexicalUnit prev) {
226 super(LexicalUnit.SAC_INTEGER, prev);
227 value = val;
228 }
229
230
233 public int getIntegerValue() {
234 return value;
235 }
236 }
237
238
241 public static CSSLexicalUnit createFloat(short t, float val, LexicalUnit prev) {
242 return new FloatLexicalUnit(t, val, prev);
243 }
244
245
248 protected static class FloatLexicalUnit extends CSSLexicalUnit {
249
250
253 protected float value;
254
255
258 public FloatLexicalUnit(short t, float val, LexicalUnit prev) {
259 super(t, prev);
260 value = val;
261 }
262
263
266 public float getFloatValue() {
267 return value;
268 }
269 }
270
271
274 public static CSSLexicalUnit createDimension(float val, String dim,
275 LexicalUnit prev) {
276 return new DimensionLexicalUnit(val, dim, prev);
277 }
278
279
282 protected static class DimensionLexicalUnit extends CSSLexicalUnit {
283
284
287 protected float value;
288
289
292 protected String dimension;
293
294
297 public DimensionLexicalUnit(float val, String dim, LexicalUnit prev) {
298 super(SAC_DIMENSION, prev);
299 value = val;
300 dimension = dim;
301 }
302
303
306 public float getFloatValue() {
307 return value;
308 }
309
310
313 public String getDimensionUnitText() {
314 return dimension;
315 }
316 }
317
318
321 public static CSSLexicalUnit createFunction(String f, LexicalUnit params,
322 LexicalUnit prev) {
323 return new FunctionLexicalUnit(f, params, prev);
324 }
325
326
329 protected static class FunctionLexicalUnit extends CSSLexicalUnit {
330
331
334 protected String name;
335
336
339 protected LexicalUnit parameters;
340
341
344 public FunctionLexicalUnit(String f, LexicalUnit params, LexicalUnit prev) {
345 super(SAC_FUNCTION, prev);
346 name = f;
347 parameters = params;
348 }
349
350
353 public String getFunctionName() {
354 return name;
355 }
356
357
360 public LexicalUnit getParameters() {
361 return parameters;
362 }
363
364 }
365
366
369 public static CSSLexicalUnit createPredefinedFunction(short t, LexicalUnit params,
370 LexicalUnit prev) {
371 return new PredefinedFunctionLexicalUnit(t, params, prev);
372 }
373
374
377 protected static class PredefinedFunctionLexicalUnit extends CSSLexicalUnit {
378
379
382 protected LexicalUnit parameters;
383
384
387 public PredefinedFunctionLexicalUnit(short t, LexicalUnit params,
388 LexicalUnit prev) {
389 super(t, prev);
390 parameters = params;
391 }
392
395 public String getFunctionName() {
396 switch (lexicalUnitType) {
397 case SAC_RGBCOLOR: return TEXT_RGBCOLOR;
398 case SAC_RECT_FUNCTION: return TEXT_RECT_FUNCTION;
399 case SAC_COUNTER_FUNCTION: return TEXT_COUNTER_FUNCTION;
400 case SAC_COUNTERS_FUNCTION: return TEXT_COUNTERS_FUNCTION;
401 default: break;
402 }
403 return super.getFunctionName();
404 }
405
406
407
410 public LexicalUnit getParameters() {
411 return parameters;
412 }
413 }
414
415
418 public static CSSLexicalUnit createString(short t, String val, LexicalUnit prev) {
419 return new StringLexicalUnit(t, val, prev);
420 }
421
422
425 protected static class StringLexicalUnit extends CSSLexicalUnit {
426
427
430 protected String value;
431
432
435 public StringLexicalUnit(short t, String val, LexicalUnit prev) {
436 super(t, prev);
437 value = val;
438 }
439
440
443 public String getStringValue() {
444 return value;
445 }
446 }
447 }
448