/* * Copyright (C) 2006, 2007 Apple Inc. 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 */ #include "config.h" #if ENABLE(SVG) #include "JSSVGElementWrapperFactory.h" #include "JSSVGAElement.h" #include "JSSVGAnimateColorElement.h" #include "JSSVGAnimateElement.h" #include "JSSVGAnimateTransformElement.h" #include "JSSVGCircleElement.h" #include "JSSVGClipPathElement.h" #include "JSSVGCursorElement.h" #include "JSSVGDefsElement.h" #include "JSSVGDescElement.h" #include "JSSVGEllipseElement.h" #include "JSSVGFEBlendElement.h" #include "JSSVGFEColorMatrixElement.h" #include "JSSVGFEComponentTransferElement.h" #include "JSSVGFECompositeElement.h" #include "JSSVGFEDiffuseLightingElement.h" #include "JSSVGFEDisplacementMapElement.h" #include "JSSVGFEDistantLightElement.h" #include "JSSVGFEFloodElement.h" #include "JSSVGFEFuncAElement.h" #include "JSSVGFEFuncBElement.h" #include "JSSVGFEFuncGElement.h" #include "JSSVGFEFuncRElement.h" #include "JSSVGFEGaussianBlurElement.h" #include "JSSVGFEImageElement.h" #include "JSSVGFEMergeElement.h" #include "JSSVGFEMergeNodeElement.h" #include "JSSVGFEOffsetElement.h" #include "JSSVGFEPointLightElement.h" #include "JSSVGFESpecularLightingElement.h" #include "JSSVGFESpotLightElement.h" #include "JSSVGFETileElement.h" #include "JSSVGFETurbulenceElement.h" #include "JSSVGFilterElement.h" #include "JSSVGForeignObjectElement.h" #include "JSSVGGElement.h" #include "JSSVGImageElement.h" #include "JSSVGLinearGradientElement.h" #include "JSSVGLineElement.h" #include "JSSVGMarkerElement.h" #include "JSSVGMaskElement.h" #include "JSSVGMetadataElement.h" #include "JSSVGPathElement.h" #include "JSSVGPatternElement.h" #include "JSSVGPolygonElement.h" #include "JSSVGPolylineElement.h" #include "JSSVGRadialGradientElement.h" #include "JSSVGRectElement.h" #include "JSSVGScriptElement.h" #include "JSSVGSetElement.h" #include "JSSVGStopElement.h" #include "JSSVGStyleElement.h" #include "JSSVGSVGElement.h" #include "JSSVGSwitchElement.h" #include "JSSVGSymbolElement.h" #include "JSSVGTextElement.h" #include "JSSVGTitleElement.h" #include "JSSVGTRefElement.h" #include "JSSVGTSpanElement.h" #include "JSSVGUseElement.h" #include "JSSVGViewElement.h" #include "SVGNames.h" #include "SVGAElement.h" #include "SVGAnimateColorElement.h" #include "SVGAnimateElement.h" #include "SVGAnimateTransformElement.h" #include "SVGCircleElement.h" #include "SVGClipPathElement.h" #include "SVGCursorElement.h" #include "SVGDefsElement.h" #include "SVGDescElement.h" #include "SVGEllipseElement.h" #include "SVGFEBlendElement.h" #include "SVGFEColorMatrixElement.h" #include "SVGFEComponentTransferElement.h" #include "SVGFECompositeElement.h" #include "SVGFEDiffuseLightingElement.h" #include "SVGFEDisplacementMapElement.h" #include "SVGFEDistantLightElement.h" #include "SVGFEFloodElement.h" #include "SVGFEFuncAElement.h" #include "SVGFEFuncBElement.h" #include "SVGFEFuncGElement.h" #include "SVGFEFuncRElement.h" #include "SVGFEGaussianBlurElement.h" #include "SVGFEImageElement.h" #include "SVGFEMergeElement.h" #include "SVGFEMergeNodeElement.h" #include "SVGFEOffsetElement.h" #include "SVGFEPointLightElement.h" #include "SVGFESpecularLightingElement.h" #include "SVGFESpotLightElement.h" #include "SVGFETileElement.h" #include "SVGFETurbulenceElement.h" #include "SVGFilterElement.h" #include "SVGForeignObjectElement.h" #include "SVGGElement.h" #include "SVGImageElement.h" #include "SVGLinearGradientElement.h" #include "SVGLineElement.h" #include "SVGMarkerElement.h" #include "SVGMaskElement.h" #include "SVGMetadataElement.h" #include "SVGPathElement.h" #include "SVGPatternElement.h" #include "SVGPolygonElement.h" #include "SVGPolylineElement.h" #include "SVGRadialGradientElement.h" #include "SVGRectElement.h" #include "SVGScriptElement.h" #include "SVGSetElement.h" #include "SVGStopElement.h" #include "SVGStyleElement.h" #include "SVGSVGElement.h" #include "SVGSwitchElement.h" #include "SVGSymbolElement.h" #include "SVGTextElement.h" #include "SVGTitleElement.h" #include "SVGTRefElement.h" #include "SVGTSpanElement.h" #include "SVGUseElement.h" #include "SVGViewElement.h" using namespace KJS; // FIXME: Eventually this file should be autogenerated, just like SVGNames, SVGElementFactory, etc. namespace WebCore { using namespace SVGNames; typedef JSNode* (*CreateSVGElementWrapperFunction)(ExecState*, PassRefPtr); #if ENABLE(SVG_EXPERIMENTAL_FEATURES) #define FOR_EACH_TAG(macro) \ macro(a, A) \ macro(animateColor, AnimateColor) \ macro(animate, Animate) \ macro(animateTransform, AnimateTransform) \ macro(circle, Circle) \ macro(clipPath, ClipPath) \ macro(cursor, Cursor) \ macro(defs, Defs) \ macro(desc, Desc) \ macro(ellipse, Ellipse) \ macro(feBlend, FEBlend) \ macro(feColorMatrix, FEColorMatrix) \ macro(feComponentTransfer, FEComponentTransfer) \ macro(feComposite, FEComposite) \ macro(feDiffuseLighting, FEDiffuseLighting) \ macro(feDisplacementMap, FEDisplacementMap) \ macro(feDistantLight, FEDistantLight) \ macro(feFlood, FEFlood) \ macro(feFuncA, FEFuncA) \ macro(feFuncB, FEFuncB) \ macro(feFuncG, FEFuncG) \ macro(feFuncR, FEFuncR) \ macro(feGaussianBlur, FEGaussianBlur) \ macro(feImage, FEImage) \ macro(feMerge, FEMerge) \ macro(feMergeNode, FEMergeNode) \ macro(feOffset, FEOffset) \ macro(fePointLight, FEPointLight) \ macro(feSpecularLighting, FESpecularLighting) \ macro(feSpotLight, FESpotLight) \ macro(feTile, FETile) \ macro(feTurbulence, FETurbulence) \ macro(filter, Filter) \ macro(foreignObject, ForeignObject) \ macro(g, G) \ macro(image, Image) \ macro(linearGradient, LinearGradient) \ macro(line, Line) \ macro(marker, Marker) \ macro(mask, Mask) \ macro(metadata, Metadata) \ macro(path, Path) \ macro(pattern, Pattern) \ macro(polyline, Polyline) \ macro(polygon, Polygon) \ macro(radialGradient, RadialGradient) \ macro(rect, Rect) \ macro(script, Script) \ macro(set, Set) \ macro(stop, Stop) \ macro(style, Style) \ macro(svg, SVG) \ macro(switch, Switch) \ macro(symbol, Symbol) \ macro(text, Text) \ macro(title, Title) \ macro(tref, TRef) \ macro(tspan, TSpan) \ macro(use, Use) \ macro(view, View) \ // end of macro #else #define FOR_EACH_TAG(macro) \ macro(a, A) \ macro(circle, Circle) \ macro(clipPath, ClipPath) \ macro(cursor, Cursor) \ macro(defs, Defs) \ macro(desc, Desc) \ macro(ellipse, Ellipse) \ macro(g, G) \ macro(image, Image) \ macro(linearGradient, LinearGradient) \ macro(line, Line) \ macro(marker, Marker) \ macro(mask, Mask) \ macro(metadata, Metadata) \ macro(path, Path) \ macro(pattern, Pattern) \ macro(polyline, Polyline) \ macro(polygon, Polygon) \ macro(radialGradient, RadialGradient) \ macro(rect, Rect) \ macro(script, Script) \ macro(set, Set) \ macro(stop, Stop) \ macro(style, Style) \ macro(svg, SVG) \ macro(switch, Switch) \ macro(symbol, Symbol) \ macro(text, Text) \ macro(title, Title) \ macro(tref, TRef) \ macro(tspan, TSpan) \ macro(use, Use) \ macro(view, View) \ // end of macro #endif #define CREATE_WRAPPER_FUNCTION(tag, name) \ static JSNode* create##name##Wrapper(ExecState* exec, PassRefPtr element) \ { \ return new JSSVG##name##Element(exec, static_cast(element.get())); \ } FOR_EACH_TAG(CREATE_WRAPPER_FUNCTION) #undef CREATE_WRAPPER_FUNCTION JSNode* createJSSVGWrapper(ExecState* exec, PassRefPtr element) { static HashMap map; if (map.isEmpty()) { #define ADD_TO_HASH_MAP(tag, name) map.set(tag##Tag.localName().impl(), create##name##Wrapper); FOR_EACH_TAG(ADD_TO_HASH_MAP) #undef ADD_TO_HASH_MAP } CreateSVGElementWrapperFunction createWrapperFunction = map.get(element->localName().impl()); if (createWrapperFunction) return createWrapperFunction(exec, element); return new JSSVGElement(exec, element.get()); } } #endif // ENABLE(SVG)