| /* |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| |
| */ |
| package org.apache.batik.css.engine; |
| |
| import org.apache.batik.css.engine.value.ShorthandManager; |
| import org.apache.batik.css.engine.value.ValueConstants; |
| import org.apache.batik.css.engine.value.ValueManager; |
| import org.apache.batik.css.engine.value.css2.ClipManager; |
| import org.apache.batik.css.engine.value.css2.CursorManager; |
| import org.apache.batik.css.engine.value.css2.DirectionManager; |
| import org.apache.batik.css.engine.value.css2.DisplayManager; |
| import org.apache.batik.css.engine.value.css2.FontFamilyManager; |
| import org.apache.batik.css.engine.value.css2.FontShorthandManager; |
| import org.apache.batik.css.engine.value.css2.FontSizeAdjustManager; |
| import org.apache.batik.css.engine.value.css2.FontSizeManager; |
| import org.apache.batik.css.engine.value.css2.FontStretchManager; |
| import org.apache.batik.css.engine.value.css2.FontStyleManager; |
| import org.apache.batik.css.engine.value.css2.FontVariantManager; |
| import org.apache.batik.css.engine.value.css2.FontWeightManager; |
| import org.apache.batik.css.engine.value.css2.OverflowManager; |
| import org.apache.batik.css.engine.value.css2.SrcManager; |
| import org.apache.batik.css.engine.value.css2.TextDecorationManager; |
| import org.apache.batik.css.engine.value.css2.UnicodeBidiManager; |
| import org.apache.batik.css.engine.value.css2.VisibilityManager; |
| import org.apache.batik.css.engine.value.svg.AlignmentBaselineManager; |
| import org.apache.batik.css.engine.value.svg.BaselineShiftManager; |
| import org.apache.batik.css.engine.value.svg.ClipPathManager; |
| import org.apache.batik.css.engine.value.svg.ClipRuleManager; |
| import org.apache.batik.css.engine.value.svg.ColorInterpolationFiltersManager; |
| import org.apache.batik.css.engine.value.svg.ColorInterpolationManager; |
| import org.apache.batik.css.engine.value.svg.ColorManager; |
| import org.apache.batik.css.engine.value.svg.ColorProfileManager; |
| import org.apache.batik.css.engine.value.svg.ColorRenderingManager; |
| import org.apache.batik.css.engine.value.svg.DominantBaselineManager; |
| import org.apache.batik.css.engine.value.svg.EnableBackgroundManager; |
| import org.apache.batik.css.engine.value.svg.FillRuleManager; |
| import org.apache.batik.css.engine.value.svg.FilterManager; |
| import org.apache.batik.css.engine.value.svg.GlyphOrientationHorizontalManager; |
| import org.apache.batik.css.engine.value.svg.GlyphOrientationVerticalManager; |
| import org.apache.batik.css.engine.value.svg.ImageRenderingManager; |
| import org.apache.batik.css.engine.value.svg.KerningManager; |
| import org.apache.batik.css.engine.value.svg.MarkerManager; |
| import org.apache.batik.css.engine.value.svg.MarkerShorthandManager; |
| import org.apache.batik.css.engine.value.svg.MaskManager; |
| import org.apache.batik.css.engine.value.svg.OpacityManager; |
| import org.apache.batik.css.engine.value.svg.PointerEventsManager; |
| import org.apache.batik.css.engine.value.svg.SVGColorManager; |
| import org.apache.batik.css.engine.value.svg.SVGPaintManager; |
| import org.apache.batik.css.engine.value.svg.ShapeRenderingManager; |
| import org.apache.batik.css.engine.value.svg.SpacingManager; |
| import org.apache.batik.css.engine.value.svg.StrokeDasharrayManager; |
| import org.apache.batik.css.engine.value.svg.StrokeDashoffsetManager; |
| import org.apache.batik.css.engine.value.svg.StrokeLinecapManager; |
| import org.apache.batik.css.engine.value.svg.StrokeLinejoinManager; |
| import org.apache.batik.css.engine.value.svg.StrokeMiterlimitManager; |
| import org.apache.batik.css.engine.value.svg.StrokeWidthManager; |
| import org.apache.batik.css.engine.value.svg.TextAnchorManager; |
| import org.apache.batik.css.engine.value.svg.TextRenderingManager; |
| import org.apache.batik.css.engine.value.svg.WritingModeManager; |
| import org.apache.batik.css.parser.ExtendedParser; |
| import org.apache.batik.util.CSSConstants; |
| import org.apache.batik.util.ParsedURL; |
| |
| import org.w3c.dom.Document; |
| |
| /** |
| * This class provides a CSS engine initialized for SVG. |
| * |
| * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a> |
| * @version $Id$ |
| */ |
| public class SVGCSSEngine extends CSSEngine { |
| |
| /** |
| * Creates a new SVGCSSEngine. |
| * @param doc The associated document. |
| * @param uri The document URI. |
| * @param p The CSS parser to use. |
| * @param ctx The CSS context. |
| */ |
| public SVGCSSEngine(Document doc, |
| ParsedURL uri, |
| ExtendedParser p, |
| CSSContext ctx) { |
| super(doc, uri, p, |
| SVG_VALUE_MANAGERS, |
| SVG_SHORTHAND_MANAGERS, |
| null, |
| null, |
| "style", |
| null, |
| "class", |
| true, |
| null, |
| ctx); |
| // SVG defines line-height to be font-size. |
| lineHeightIndex = fontSizeIndex; |
| } |
| |
| /** |
| * Creates a new SVGCSSEngine. |
| * @param doc The associated document. |
| * @param uri The document URI. |
| * @param p The CSS parser to use. |
| * @param vms Extension value managers. |
| * @param sms Extension shorthand managers. |
| * @param ctx The CSS context. |
| */ |
| public SVGCSSEngine(Document doc, |
| ParsedURL uri, |
| ExtendedParser p, |
| ValueManager[] vms, |
| ShorthandManager[] sms, |
| CSSContext ctx) { |
| super(doc, uri, p, |
| mergeArrays(SVG_VALUE_MANAGERS, vms), |
| mergeArrays(SVG_SHORTHAND_MANAGERS, sms), |
| null, |
| null, |
| "style", |
| null, |
| "class", |
| true, |
| null, |
| ctx); |
| // SVG defines line-height to be font-size. |
| lineHeightIndex = fontSizeIndex; |
| } |
| |
| protected SVGCSSEngine(Document doc, |
| ParsedURL uri, |
| ExtendedParser p, |
| ValueManager[] vms, |
| ShorthandManager[] sms, |
| String[] pe, |
| String sns, |
| String sln, |
| String cns, |
| String cln, |
| boolean hints, |
| String hintsNS, |
| CSSContext ctx) { |
| super(doc, uri, p, |
| mergeArrays(SVG_VALUE_MANAGERS, vms), |
| mergeArrays(SVG_SHORTHAND_MANAGERS, sms), |
| pe, sns, sln, cns, cln, hints, hintsNS, ctx); |
| // SVG defines line-height to be font-size. |
| lineHeightIndex = fontSizeIndex; |
| } |
| |
| |
| /** |
| * Merges the given arrays. |
| */ |
| protected static ValueManager[] mergeArrays(ValueManager[] a1, |
| ValueManager[] a2) { |
| ValueManager[] result = new ValueManager[a1.length + a2.length]; |
| System.arraycopy(a1, 0, result, 0, a1.length); |
| System.arraycopy(a2, 0, result, a1.length, a2.length); |
| return result; |
| } |
| |
| /** |
| * Merges the given arrays. |
| */ |
| protected static ShorthandManager[] mergeArrays(ShorthandManager[] a1, |
| ShorthandManager[] a2) { |
| ShorthandManager[] result = |
| new ShorthandManager[a1.length + a2.length]; |
| System.arraycopy(a1, 0, result, 0, a1.length); |
| System.arraycopy(a2, 0, result, a1.length, a2.length); |
| return result; |
| } |
| |
| /** |
| * The value managers for SVG. |
| */ |
| public static final ValueManager[] SVG_VALUE_MANAGERS = { |
| new AlignmentBaselineManager(), |
| new BaselineShiftManager(), |
| new ClipManager(), |
| new ClipPathManager(), |
| new ClipRuleManager(), |
| |
| new ColorManager(), |
| new ColorInterpolationManager(), |
| new ColorInterpolationFiltersManager(), |
| new ColorProfileManager(), |
| new ColorRenderingManager(), |
| |
| new CursorManager(), |
| new DirectionManager(), |
| new DisplayManager(), |
| new DominantBaselineManager(), |
| new EnableBackgroundManager(), |
| |
| new SVGPaintManager(CSSConstants.CSS_FILL_PROPERTY), |
| new OpacityManager(CSSConstants.CSS_FILL_OPACITY_PROPERTY, true), |
| new FillRuleManager(), |
| new FilterManager(), |
| new SVGColorManager(CSSConstants.CSS_FLOOD_COLOR_PROPERTY), |
| |
| new OpacityManager(CSSConstants.CSS_FLOOD_OPACITY_PROPERTY, false), |
| new FontFamilyManager(), |
| new FontSizeManager(), |
| new FontSizeAdjustManager(), |
| new FontStretchManager(), |
| |
| new FontStyleManager(), |
| new FontVariantManager(), |
| new FontWeightManager(), |
| new GlyphOrientationHorizontalManager(), |
| new GlyphOrientationVerticalManager(), |
| |
| new ImageRenderingManager(), |
| new KerningManager(), |
| new SpacingManager(CSSConstants.CSS_LETTER_SPACING_PROPERTY), |
| new SVGColorManager(CSSConstants.CSS_LIGHTING_COLOR_PROPERTY, |
| ValueConstants.WHITE_RGB_VALUE), |
| new MarkerManager(CSSConstants.CSS_MARKER_END_PROPERTY), |
| |
| new MarkerManager(CSSConstants.CSS_MARKER_MID_PROPERTY), |
| new MarkerManager(CSSConstants.CSS_MARKER_START_PROPERTY), |
| new MaskManager(), |
| new OpacityManager(CSSConstants.CSS_OPACITY_PROPERTY, false), |
| new OverflowManager(), |
| |
| new PointerEventsManager(), |
| new SrcManager(), |
| new ShapeRenderingManager(), |
| new SVGColorManager(CSSConstants.CSS_STOP_COLOR_PROPERTY), |
| new OpacityManager(CSSConstants.CSS_STOP_OPACITY_PROPERTY, false), |
| new SVGPaintManager(CSSConstants.CSS_STROKE_PROPERTY, |
| ValueConstants.NONE_VALUE), |
| |
| new StrokeDasharrayManager(), |
| new StrokeDashoffsetManager(), |
| new StrokeLinecapManager(), |
| new StrokeLinejoinManager(), |
| new StrokeMiterlimitManager(), |
| |
| new OpacityManager(CSSConstants.CSS_STROKE_OPACITY_PROPERTY, true), |
| new StrokeWidthManager(), |
| new TextAnchorManager(), |
| new TextDecorationManager(), |
| new TextRenderingManager(), |
| |
| new UnicodeBidiManager(), |
| new VisibilityManager(), |
| new SpacingManager(CSSConstants.CSS_WORD_SPACING_PROPERTY), |
| new WritingModeManager(), |
| }; |
| |
| /** |
| * The shorthand managers for SVG. |
| */ |
| public static final ShorthandManager[] SVG_SHORTHAND_MANAGERS = { |
| new FontShorthandManager(), |
| new MarkerShorthandManager(), |
| }; |
| |
| // |
| // The property indexes. |
| // |
| public static final int ALIGNMENT_BASELINE_INDEX = 0; |
| public static final int BASELINE_SHIFT_INDEX = |
| ALIGNMENT_BASELINE_INDEX + 1; |
| public static final int CLIP_INDEX = BASELINE_SHIFT_INDEX + 1; |
| public static final int CLIP_PATH_INDEX = CLIP_INDEX +1; |
| public static final int CLIP_RULE_INDEX = CLIP_PATH_INDEX + 1; |
| |
| |
| public static final int COLOR_INDEX = CLIP_RULE_INDEX + 1; |
| public static final int COLOR_INTERPOLATION_INDEX = COLOR_INDEX + 1; |
| public static final int COLOR_INTERPOLATION_FILTERS_INDEX = |
| COLOR_INTERPOLATION_INDEX + 1; |
| public static final int COLOR_PROFILE_INDEX = |
| COLOR_INTERPOLATION_FILTERS_INDEX + 1; |
| public static final int COLOR_RENDERING_INDEX = COLOR_PROFILE_INDEX + 1; |
| |
| |
| public static final int CURSOR_INDEX = COLOR_RENDERING_INDEX + 1; |
| public static final int DIRECTION_INDEX = CURSOR_INDEX + 1; |
| public static final int DISPLAY_INDEX = DIRECTION_INDEX + 1; |
| public static final int DOMINANT_BASELINE_INDEX = DISPLAY_INDEX + 1; |
| public static final int ENABLE_BACKGROUND_INDEX = |
| DOMINANT_BASELINE_INDEX + 1; |
| |
| |
| public static final int FILL_INDEX = ENABLE_BACKGROUND_INDEX + 1; |
| public static final int FILL_OPACITY_INDEX = FILL_INDEX + 1; |
| public static final int FILL_RULE_INDEX = FILL_OPACITY_INDEX + 1; |
| public static final int FILTER_INDEX = FILL_RULE_INDEX + 1; |
| public static final int FLOOD_COLOR_INDEX = FILTER_INDEX + 1; |
| |
| public static final int FLOOD_OPACITY_INDEX = FLOOD_COLOR_INDEX + 1; |
| public static final int FONT_FAMILY_INDEX = FLOOD_OPACITY_INDEX + 1; |
| public static final int FONT_SIZE_INDEX = FONT_FAMILY_INDEX + 1; |
| public static final int FONT_SIZE_ADJUST_INDEX = FONT_SIZE_INDEX + 1; |
| public static final int FONT_STRETCH_INDEX = FONT_SIZE_ADJUST_INDEX + 1; |
| |
| public static final int FONT_STYLE_INDEX = FONT_STRETCH_INDEX + 1; |
| public static final int FONT_VARIANT_INDEX = FONT_STYLE_INDEX + 1; |
| public static final int FONT_WEIGHT_INDEX = FONT_VARIANT_INDEX + 1; |
| public static final int GLYPH_ORIENTATION_HORIZONTAL_INDEX = |
| FONT_WEIGHT_INDEX + 1; |
| public static final int GLYPH_ORIENTATION_VERTICAL_INDEX = |
| GLYPH_ORIENTATION_HORIZONTAL_INDEX + 1; |
| |
| |
| public static final int IMAGE_RENDERING_INDEX = |
| GLYPH_ORIENTATION_VERTICAL_INDEX + 1; |
| public static final int KERNING_INDEX = IMAGE_RENDERING_INDEX + 1; |
| public static final int LETTER_SPACING_INDEX = KERNING_INDEX + 1; |
| public static final int LIGHTING_COLOR_INDEX = LETTER_SPACING_INDEX + 1; |
| public static final int MARKER_END_INDEX = LIGHTING_COLOR_INDEX + 1; |
| |
| |
| public static final int MARKER_MID_INDEX = MARKER_END_INDEX + 1; |
| public static final int MARKER_START_INDEX = MARKER_MID_INDEX + 1; |
| public static final int MASK_INDEX = MARKER_START_INDEX + 1; |
| public static final int OPACITY_INDEX = MASK_INDEX + 1; |
| public static final int OVERFLOW_INDEX = OPACITY_INDEX + 1; |
| |
| |
| public static final int POINTER_EVENTS_INDEX = OVERFLOW_INDEX + 1; |
| public static final int SRC_INDEX = POINTER_EVENTS_INDEX + 1; |
| public static final int SHAPE_RENDERING_INDEX = SRC_INDEX + 1; |
| public static final int STOP_COLOR_INDEX = SHAPE_RENDERING_INDEX + 1; |
| public static final int STOP_OPACITY_INDEX = STOP_COLOR_INDEX + 1; |
| public static final int STROKE_INDEX = STOP_OPACITY_INDEX + 1; |
| |
| |
| public static final int STROKE_DASHARRAY_INDEX = STROKE_INDEX + 1; |
| public static final int STROKE_DASHOFFSET_INDEX = |
| STROKE_DASHARRAY_INDEX + 1; |
| public static final int STROKE_LINECAP_INDEX = STROKE_DASHOFFSET_INDEX + 1; |
| public static final int STROKE_LINEJOIN_INDEX = STROKE_LINECAP_INDEX + 1; |
| public static final int STROKE_MITERLIMIT_INDEX = |
| STROKE_LINEJOIN_INDEX + 1; |
| |
| |
| public static final int STROKE_OPACITY_INDEX = STROKE_MITERLIMIT_INDEX + 1; |
| public static final int STROKE_WIDTH_INDEX = STROKE_OPACITY_INDEX + 1; |
| public static final int TEXT_ANCHOR_INDEX = STROKE_WIDTH_INDEX + 1; |
| public static final int TEXT_DECORATION_INDEX = TEXT_ANCHOR_INDEX + 1; |
| public static final int TEXT_RENDERING_INDEX = TEXT_DECORATION_INDEX + 1; |
| |
| |
| public static final int UNICODE_BIDI_INDEX = TEXT_RENDERING_INDEX + 1; |
| public static final int VISIBILITY_INDEX = UNICODE_BIDI_INDEX + 1; |
| public static final int WORD_SPACING_INDEX = VISIBILITY_INDEX + 1; |
| public static final int WRITING_MODE_INDEX = WORD_SPACING_INDEX + 1; |
| public static final int FINAL_INDEX = WRITING_MODE_INDEX; |
| |
| } |