001: /*
002:
003: Licensed to the Apache Software Foundation (ASF) under one or more
004: contributor license agreements. See the NOTICE file distributed with
005: this work for additional information regarding copyright ownership.
006: The ASF licenses this file to You under the Apache License, Version 2.0
007: (the "License"); you may not use this file except in compliance with
008: the License. You may obtain a copy of the License at
009:
010: http://www.apache.org/licenses/LICENSE-2.0
011:
012: Unless required by applicable law or agreed to in writing, software
013: distributed under the License is distributed on an "AS IS" BASIS,
014: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: See the License for the specific language governing permissions and
016: limitations under the License.
017:
018: */
019: package org.apache.batik.css.engine;
020:
021: import java.net.URL;
022:
023: import org.apache.batik.css.engine.value.ShorthandManager;
024: import org.apache.batik.css.engine.value.ValueConstants;
025: import org.apache.batik.css.engine.value.ValueManager;
026: import org.apache.batik.css.engine.value.css2.ClipManager;
027: import org.apache.batik.css.engine.value.css2.CursorManager;
028: import org.apache.batik.css.engine.value.css2.DirectionManager;
029: import org.apache.batik.css.engine.value.css2.DisplayManager;
030: import org.apache.batik.css.engine.value.css2.FontFamilyManager;
031: import org.apache.batik.css.engine.value.css2.FontShorthandManager;
032: import org.apache.batik.css.engine.value.css2.FontSizeAdjustManager;
033: import org.apache.batik.css.engine.value.css2.FontSizeManager;
034: import org.apache.batik.css.engine.value.css2.FontStretchManager;
035: import org.apache.batik.css.engine.value.css2.FontStyleManager;
036: import org.apache.batik.css.engine.value.css2.FontVariantManager;
037: import org.apache.batik.css.engine.value.css2.FontWeightManager;
038: import org.apache.batik.css.engine.value.css2.OverflowManager;
039: import org.apache.batik.css.engine.value.css2.SrcManager;
040: import org.apache.batik.css.engine.value.css2.TextDecorationManager;
041: import org.apache.batik.css.engine.value.css2.UnicodeBidiManager;
042: import org.apache.batik.css.engine.value.css2.VisibilityManager;
043: import org.apache.batik.css.engine.value.svg.AlignmentBaselineManager;
044: import org.apache.batik.css.engine.value.svg.BaselineShiftManager;
045: import org.apache.batik.css.engine.value.svg.ClipPathManager;
046: import org.apache.batik.css.engine.value.svg.ClipRuleManager;
047: import org.apache.batik.css.engine.value.svg.ColorInterpolationFiltersManager;
048: import org.apache.batik.css.engine.value.svg.ColorInterpolationManager;
049: import org.apache.batik.css.engine.value.svg.ColorManager;
050: import org.apache.batik.css.engine.value.svg.ColorProfileManager;
051: import org.apache.batik.css.engine.value.svg.ColorRenderingManager;
052: import org.apache.batik.css.engine.value.svg.DominantBaselineManager;
053: import org.apache.batik.css.engine.value.svg.EnableBackgroundManager;
054: import org.apache.batik.css.engine.value.svg.FillRuleManager;
055: import org.apache.batik.css.engine.value.svg.FilterManager;
056: import org.apache.batik.css.engine.value.svg.GlyphOrientationHorizontalManager;
057: import org.apache.batik.css.engine.value.svg.GlyphOrientationVerticalManager;
058: import org.apache.batik.css.engine.value.svg.ImageRenderingManager;
059: import org.apache.batik.css.engine.value.svg.KerningManager;
060: import org.apache.batik.css.engine.value.svg.MarkerManager;
061: import org.apache.batik.css.engine.value.svg.MarkerShorthandManager;
062: import org.apache.batik.css.engine.value.svg.MaskManager;
063: import org.apache.batik.css.engine.value.svg.OpacityManager;
064: import org.apache.batik.css.engine.value.svg.PointerEventsManager;
065: import org.apache.batik.css.engine.value.svg.SVGColorManager;
066: import org.apache.batik.css.engine.value.svg.SVGPaintManager;
067: import org.apache.batik.css.engine.value.svg.ShapeRenderingManager;
068: import org.apache.batik.css.engine.value.svg.SpacingManager;
069: import org.apache.batik.css.engine.value.svg.StrokeDasharrayManager;
070: import org.apache.batik.css.engine.value.svg.StrokeDashoffsetManager;
071: import org.apache.batik.css.engine.value.svg.StrokeLinecapManager;
072: import org.apache.batik.css.engine.value.svg.StrokeLinejoinManager;
073: import org.apache.batik.css.engine.value.svg.StrokeMiterlimitManager;
074: import org.apache.batik.css.engine.value.svg.StrokeWidthManager;
075: import org.apache.batik.css.engine.value.svg.TextAnchorManager;
076: import org.apache.batik.css.engine.value.svg.TextRenderingManager;
077: import org.apache.batik.css.engine.value.svg.WritingModeManager;
078: import org.apache.batik.css.parser.ExtendedParser;
079: import org.apache.batik.util.CSSConstants;
080: import org.w3c.dom.Document;
081:
082: /**
083: * This class provides a CSS engine initialized for SVG.
084: *
085: * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
086: * @version $Id: SVGCSSEngine.java 503368 2007-02-04 07:01:48Z cam $
087: */
088: public class SVGCSSEngine extends CSSEngine {
089:
090: /**
091: * Creates a new SVGCSSEngine.
092: * @param doc The associated document.
093: * @param uri The document URI.
094: * @param p The CSS parser to use.
095: * @param ctx The CSS context.
096: */
097: public SVGCSSEngine(Document doc, URL uri, ExtendedParser p,
098: CSSContext ctx) {
099: super (doc, uri, p, SVG_VALUE_MANAGERS, SVG_SHORTHAND_MANAGERS,
100: null, null, "style", null, "class", true, null, ctx);
101: // SVG defines line-height to be font-size.
102: lineHeightIndex = fontSizeIndex;
103: }
104:
105: /**
106: * Creates a new SVGCSSEngine.
107: * @param doc The associated document.
108: * @param uri The document URI.
109: * @param p The CSS parser to use.
110: * @param vms Extension value managers.
111: * @param sms Extension shorthand managers.
112: * @param ctx The CSS context.
113: */
114: public SVGCSSEngine(Document doc, URL uri, ExtendedParser p,
115: ValueManager[] vms, ShorthandManager[] sms, CSSContext ctx) {
116: super (doc, uri, p, mergeArrays(SVG_VALUE_MANAGERS, vms),
117: mergeArrays(SVG_SHORTHAND_MANAGERS, sms), null, null,
118: "style", null, "class", true, null, ctx);
119: // SVG defines line-height to be font-size.
120: lineHeightIndex = fontSizeIndex;
121: }
122:
123: protected SVGCSSEngine(Document doc, URL uri, ExtendedParser p,
124: ValueManager[] vms, ShorthandManager[] sms, String[] pe,
125: String sns, String sln, String cns, String cln,
126: boolean hints, String hintsNS, CSSContext ctx) {
127: super (doc, uri, p, mergeArrays(SVG_VALUE_MANAGERS, vms),
128: mergeArrays(SVG_SHORTHAND_MANAGERS, sms), pe, sns, sln,
129: cns, cln, hints, hintsNS, ctx);
130: // SVG defines line-height to be font-size.
131: lineHeightIndex = fontSizeIndex;
132: }
133:
134: /**
135: * Merges the given arrays.
136: */
137: protected static ValueManager[] mergeArrays(ValueManager[] a1,
138: ValueManager[] a2) {
139: ValueManager[] result = new ValueManager[a1.length + a2.length];
140: System.arraycopy(a1, 0, result, 0, a1.length);
141: System.arraycopy(a2, 0, result, a1.length, a2.length);
142: return result;
143: }
144:
145: /**
146: * Merges the given arrays.
147: */
148: protected static ShorthandManager[] mergeArrays(
149: ShorthandManager[] a1, ShorthandManager[] a2) {
150: ShorthandManager[] result = new ShorthandManager[a1.length
151: + a2.length];
152: System.arraycopy(a1, 0, result, 0, a1.length);
153: System.arraycopy(a2, 0, result, a1.length, a2.length);
154: return result;
155: }
156:
157: /**
158: * The value managers for SVG.
159: */
160: public static final ValueManager[] SVG_VALUE_MANAGERS = {
161: new AlignmentBaselineManager(),
162: new BaselineShiftManager(),
163: new ClipManager(),
164: new ClipPathManager(),
165: new ClipRuleManager(),
166:
167: new ColorManager(),
168: new ColorInterpolationManager(),
169: new ColorInterpolationFiltersManager(),
170: new ColorProfileManager(),
171: new ColorRenderingManager(),
172:
173: new CursorManager(),
174: new DirectionManager(),
175: new DisplayManager(),
176: new DominantBaselineManager(),
177: new EnableBackgroundManager(),
178:
179: new SVGPaintManager(CSSConstants.CSS_FILL_PROPERTY),
180: new OpacityManager(CSSConstants.CSS_FILL_OPACITY_PROPERTY,
181: true),
182: new FillRuleManager(),
183: new FilterManager(),
184: new SVGColorManager(CSSConstants.CSS_FLOOD_COLOR_PROPERTY),
185:
186: new OpacityManager(CSSConstants.CSS_FLOOD_OPACITY_PROPERTY,
187: false),
188: new FontFamilyManager(),
189: new FontSizeManager(),
190: new FontSizeAdjustManager(),
191: new FontStretchManager(),
192:
193: new FontStyleManager(),
194: new FontVariantManager(),
195: new FontWeightManager(),
196: new GlyphOrientationHorizontalManager(),
197: new GlyphOrientationVerticalManager(),
198:
199: new ImageRenderingManager(),
200: new KerningManager(),
201: new SpacingManager(CSSConstants.CSS_LETTER_SPACING_PROPERTY),
202: new SVGColorManager(
203: CSSConstants.CSS_LIGHTING_COLOR_PROPERTY,
204: ValueConstants.WHITE_RGB_VALUE),
205: new MarkerManager(CSSConstants.CSS_MARKER_END_PROPERTY),
206:
207: new MarkerManager(CSSConstants.CSS_MARKER_MID_PROPERTY),
208: new MarkerManager(CSSConstants.CSS_MARKER_START_PROPERTY),
209: new MaskManager(),
210: new OpacityManager(CSSConstants.CSS_OPACITY_PROPERTY, false),
211: new OverflowManager(),
212:
213: new PointerEventsManager(),
214: new SrcManager(),
215: new ShapeRenderingManager(),
216: new SVGColorManager(CSSConstants.CSS_STOP_COLOR_PROPERTY),
217: new OpacityManager(CSSConstants.CSS_STOP_OPACITY_PROPERTY,
218: false),
219: new SVGPaintManager(CSSConstants.CSS_STROKE_PROPERTY,
220: ValueConstants.NONE_VALUE),
221:
222: new StrokeDasharrayManager(),
223: new StrokeDashoffsetManager(),
224: new StrokeLinecapManager(),
225: new StrokeLinejoinManager(),
226: new StrokeMiterlimitManager(),
227:
228: new OpacityManager(
229: CSSConstants.CSS_STROKE_OPACITY_PROPERTY, true),
230: new StrokeWidthManager(), new TextAnchorManager(),
231: new TextDecorationManager(), new TextRenderingManager(),
232:
233: new UnicodeBidiManager(), new VisibilityManager(),
234: new SpacingManager(CSSConstants.CSS_WORD_SPACING_PROPERTY),
235: new WritingModeManager(), };
236:
237: /**
238: * The shorthand managers for SVG.
239: */
240: public static final ShorthandManager[] SVG_SHORTHAND_MANAGERS = {
241: new FontShorthandManager(), new MarkerShorthandManager(), };
242:
243: //
244: // The property indexes.
245: //
246: public static final int ALIGNMENT_BASELINE_INDEX = 0;
247: public static final int BASELINE_SHIFT_INDEX = ALIGNMENT_BASELINE_INDEX + 1;
248: public static final int CLIP_INDEX = BASELINE_SHIFT_INDEX + 1;
249: public static final int CLIP_PATH_INDEX = CLIP_INDEX + 1;
250: public static final int CLIP_RULE_INDEX = CLIP_PATH_INDEX + 1;
251:
252: public static final int COLOR_INDEX = CLIP_RULE_INDEX + 1;
253: public static final int COLOR_INTERPOLATION_INDEX = COLOR_INDEX + 1;
254: public static final int COLOR_INTERPOLATION_FILTERS_INDEX = COLOR_INTERPOLATION_INDEX + 1;
255: public static final int COLOR_PROFILE_INDEX = COLOR_INTERPOLATION_FILTERS_INDEX + 1;
256: public static final int COLOR_RENDERING_INDEX = COLOR_PROFILE_INDEX + 1;
257:
258: public static final int CURSOR_INDEX = COLOR_RENDERING_INDEX + 1;
259: public static final int DIRECTION_INDEX = CURSOR_INDEX + 1;
260: public static final int DISPLAY_INDEX = DIRECTION_INDEX + 1;
261: public static final int DOMINANT_BASELINE_INDEX = DISPLAY_INDEX + 1;
262: public static final int ENABLE_BACKGROUND_INDEX = DOMINANT_BASELINE_INDEX + 1;
263:
264: public static final int FILL_INDEX = ENABLE_BACKGROUND_INDEX + 1;
265: public static final int FILL_OPACITY_INDEX = FILL_INDEX + 1;
266: public static final int FILL_RULE_INDEX = FILL_OPACITY_INDEX + 1;
267: public static final int FILTER_INDEX = FILL_RULE_INDEX + 1;
268: public static final int FLOOD_COLOR_INDEX = FILTER_INDEX + 1;
269:
270: public static final int FLOOD_OPACITY_INDEX = FLOOD_COLOR_INDEX + 1;
271: public static final int FONT_FAMILY_INDEX = FLOOD_OPACITY_INDEX + 1;
272: public static final int FONT_SIZE_INDEX = FONT_FAMILY_INDEX + 1;
273: public static final int FONT_SIZE_ADJUST_INDEX = FONT_SIZE_INDEX + 1;
274: public static final int FONT_STRETCH_INDEX = FONT_SIZE_ADJUST_INDEX + 1;
275:
276: public static final int FONT_STYLE_INDEX = FONT_STRETCH_INDEX + 1;
277: public static final int FONT_VARIANT_INDEX = FONT_STYLE_INDEX + 1;
278: public static final int FONT_WEIGHT_INDEX = FONT_VARIANT_INDEX + 1;
279: public static final int GLYPH_ORIENTATION_HORIZONTAL_INDEX = FONT_WEIGHT_INDEX + 1;
280: public static final int GLYPH_ORIENTATION_VERTICAL_INDEX = GLYPH_ORIENTATION_HORIZONTAL_INDEX + 1;
281:
282: public static final int IMAGE_RENDERING_INDEX = GLYPH_ORIENTATION_VERTICAL_INDEX + 1;
283: public static final int KERNING_INDEX = IMAGE_RENDERING_INDEX + 1;
284: public static final int LETTER_SPACING_INDEX = KERNING_INDEX + 1;
285: public static final int LIGHTING_COLOR_INDEX = LETTER_SPACING_INDEX + 1;
286: public static final int MARKER_END_INDEX = LIGHTING_COLOR_INDEX + 1;
287:
288: public static final int MARKER_MID_INDEX = MARKER_END_INDEX + 1;
289: public static final int MARKER_START_INDEX = MARKER_MID_INDEX + 1;
290: public static final int MASK_INDEX = MARKER_START_INDEX + 1;
291: public static final int OPACITY_INDEX = MASK_INDEX + 1;
292: public static final int OVERFLOW_INDEX = OPACITY_INDEX + 1;
293:
294: public static final int POINTER_EVENTS_INDEX = OVERFLOW_INDEX + 1;
295: public static final int SRC_INDEX = POINTER_EVENTS_INDEX + 1;
296: public static final int SHAPE_RENDERING_INDEX = SRC_INDEX + 1;
297: public static final int STOP_COLOR_INDEX = SHAPE_RENDERING_INDEX + 1;
298: public static final int STOP_OPACITY_INDEX = STOP_COLOR_INDEX + 1;
299: public static final int STROKE_INDEX = STOP_OPACITY_INDEX + 1;
300:
301: public static final int STROKE_DASHARRAY_INDEX = STROKE_INDEX + 1;
302: public static final int STROKE_DASHOFFSET_INDEX = STROKE_DASHARRAY_INDEX + 1;
303: public static final int STROKE_LINECAP_INDEX = STROKE_DASHOFFSET_INDEX + 1;
304: public static final int STROKE_LINEJOIN_INDEX = STROKE_LINECAP_INDEX + 1;
305: public static final int STROKE_MITERLIMIT_INDEX = STROKE_LINEJOIN_INDEX + 1;
306:
307: public static final int STROKE_OPACITY_INDEX = STROKE_MITERLIMIT_INDEX + 1;
308: public static final int STROKE_WIDTH_INDEX = STROKE_OPACITY_INDEX + 1;
309: public static final int TEXT_ANCHOR_INDEX = STROKE_WIDTH_INDEX + 1;
310: public static final int TEXT_DECORATION_INDEX = TEXT_ANCHOR_INDEX + 1;
311: public static final int TEXT_RENDERING_INDEX = TEXT_DECORATION_INDEX + 1;
312:
313: public static final int UNICODE_BIDI_INDEX = TEXT_RENDERING_INDEX + 1;
314: public static final int VISIBILITY_INDEX = UNICODE_BIDI_INDEX + 1;
315: public static final int WORD_SPACING_INDEX = VISIBILITY_INDEX + 1;
316: public static final int WRITING_MODE_INDEX = WORD_SPACING_INDEX + 1;
317: public static final int FINAL_INDEX = WRITING_MODE_INDEX;
318:
319: }
|