# Appendix C. IDL Definitions

This appendix contains the complete OMG IDL for the SVG Document Object Model definitions.

The IDL files are also available as: http://www.w3.org/TR/2000/???/idl.zip

    // File: svg.idl
    #ifndef _SVG_IDL_
    #define _SVG_IDL_

    #include "dom.idl"

    // The following block of definitions only apply to
    // the DOM for Stylable SVG.
    #ifdef STYLABLESVG

    // For access to CSSStyleDeclaration type.
    #include "css.idl"

    #define STYLABLESVGStyleAttribute \
      readonly attribute CSSStyleDeclaration style

    #endif STYLABLESVG

    // The following block of definitions only apply to
    // the DOM for Exchange SVG.
    #ifdef EXCHANGESVG

    // For access to the CSSValue type.
    #include "css.idl"

    #define EXCHANGESVGContainerAttrs \
      attribute CSSValue enable-background

    #define EXCHANGESVGFillStrokeAttrs \
      attribute CSSValue fill; \
      attribute CSSValue fill-opacity; \
      attribute CSSValue fill-rule; \
      attribute CSSValue stroke; \
      attribute CSSValue stroke-dasharray; \
      attribute CSSValue stroke-dashoffset; \
      attribute CSSValue stroke-linecap; \
      attribute CSSValue stroke-linejoin; \
      attribute CSSValue stroke-miterlimit; \
      attribute CSSValue stroke-opacity; \
      attribute CSSValue stroke-width

    #define EXCHANGESVGGradientAttrs \
      attribute CSSValue stop-color; \
      attribute CSSValue stop-opacity

    #define EXCHANGESVGGraphicsAttrs \
      attribute CSSValue clip-path; \
      attribute CSSValue clip-rule; \
      attribute CSSValue color; \
      attribute CSSValue color-interpolation; \
      attribute CSSValue color-rendering; \
      attribute CSSValue cursor; \
      attribute CSSValue display; \
      attribute CSSValue filter; \
      attribute CSSValue image-rendering; \
      attribute CSSValue mask; \
      attribute CSSValue opacity; \
      attribute CSSValue pointer-events; \
      attribute CSSValue shape-rendering; \
      attribute CSSValue text-rendering; \
      attribute CSSValue visibility

    #define EXCHANGESVGMarkerAttrs \
      attribute CSSValue marker-start; \
      attribute CSSValue marker-mid; \
      attribute CSSValue marker-end

    #define EXCHANGESVGTextContainerAttrs \
      attribute CSSValue baseline-identifier; \
      attribute CSSValue baseline-shift; \
      attribute CSSValue direction; \
      attribute CSSValue font-family; \
      attribute CSSValue font-size; \
      attribute CSSValue font-size-adjust; \
      attribute CSSValue font-stretch; \
      attribute CSSValue font-style; \
      attribute CSSValue font-variant; \
      attribute CSSValue font-weight; \
      attribute CSSValue glyph-orientation-horizontal; \
      attribute CSSValue glyph-orientation-vertical; \
      attribute CSSValue letter-spacing; \
      attribute CSSValue text-decoration; \
      attribute CSSValue unicode-bidi; \
      attribute CSSValue word-spacing

    #define EXCHANGESVGTextElementAttrs \
      attribute CSSValue dominant-baseline; \
      attribute CSSValue text-anchor; \
      attribute CSSValue writing-mode

    #define EXCHANGESVGViewportAttrs \
      attribute CSSValue clip; \
      attribute CSSValue overflow

    #define EXCHANGESVGfeFloodAttrs \
      attribute CSSValue flood-color; \
      attribute CSSValue flood-opacity

    #endif EXCHANGESVG

    #pragma prefix "dom.w3c.org"
    module svg
    {
      typedef dom::Element Element;
      typedef dom::DOMString DOMString;
      typedef dom::NodeList NodeList;
      typedef dom::Document Document;
      typedef dom::DOMImplementation DOMImplementation;
      typedef dom::DOMException DOMException;

    #ifdef STYLABLESVG
    // For access to CSSStyleDeclaration type.
      typedef css::dom::CSSStyleDeclaration CSSStyleDeclaration;
    #endif STYLABLESVG
    #ifdef EXCHANGESVG
      // For access to the CSSValue type.
      typedef css::dom::CSSValue CSSValue;
    #endif EXCHANGESVG

      exception SVGException {
        unsigned short   code;
      };

      // SVGExceptionCode
      const unsigned short SYNTAX_ERR                   = 0;
      const unsigned short SVG_INVALID_MODIFICATION_ERR = 1;
      const unsigned short SVG_NO_GRAPHICS_ELEMENTS     = 2;
      const unsigned short SVG_MATRIX_NOT_INVERTABLE    = 3;
      const unsigned short SVG_WRONG_TYPE_ERR           = 4;
      const unsigned short SVG_INVALID_VALUE_ERR        = 5;

      interface SVGDOMImplementation : DOMImplementation {
        SVGDocument  createSVGDocument( in DOMString title )
                            raises( DOMException );
      };

      interface SVGAngle {
        // Angle Unit Types
        constant unsigned short SVG_ANGLETYPE_UNKNOWN     = 0;
        constant unsigned short SVG_ANGLETYPE_UNSPECIFIED = 1;
        constant unsigned short SVG_ANGLETYPE_DEG         = 2;
        constant unsigned short SVG_ANGLETYPE_RAD         = 3;
        constant unsigned short SVG_ANGLETYPE_GRAD        = 4;

        readonly attribute unsigned short unitType;
                 attribute float          value;
                 attribute float          valueInSpecifiedUnits;
                 attribute DOMString      valueAsString;
        readonly attribute float          animatedValue;

        void newValueSpecifiedUnits ( in unsigned short unitType, in float valueInSpecifiedUnits )
                        raises( SVGException );
        void convertToSpecifiedUnits ( in unsigned short unitType )
                        raises( SVGException );
      };

      interface SVGInteger {
                 attribute long value;
        readonly attribute long animatedValue;
      };

      interface SVGLength {
        // Length Unit Types
        constant unsigned short SVG_LENGTHTYPE_UNKNOWN    = 0;
        constant unsigned short SVG_LENGTHTYPE_NUMBER     = 1;
        constant unsigned short SVG_LENGTHTYPE_PERCENTAGE = 2;
        constant unsigned short SVG_LENGTHTYPE_EMS        = 3;
        constant unsigned short SVG_LENGTHTYPE_EXS        = 4;
        constant unsigned short SVG_LENGTHTYPE_PX         = 5;
        constant unsigned short SVG_LENGTHTYPE_CM         = 6;
        constant unsigned short SVG_LENGTHTYPE_MM         = 7;
        constant unsigned short SVG_LENGTHTYPE_IN         = 8;
        constant unsigned short SVG_LENGTHTYPE_PT         = 9;
        constant unsigned short SVG_LENGTHTYPE_PC         = 10;

        readonly attribute unsigned short unitType;
                 attribute float          value;
                 attribute float          valueInSpecifiedUnits;
                 attribute DOMString      valueAsString;
        readonly attribute float          animatedValue;

        void newValueSpecifiedUnits ( in unsigned short unitType, in float valueInSpecifiedUnits )
                        raises( SVGException );
        void convertToSpecifiedUnits ( in unsigned short unitType )
                        raises( SVGException );
      };

      interface SVGNumber {
                 attribute float value;
        readonly attribute float animatedValue;
      };

      interface SVGRect {
                 attribute SVGNumber x;
                 attribute SVGNumber y;
                 attribute SVGNumber width;
                 attribute SVGNumber height;
      };

      interface SVGList {
        readonly attribute unsigned long numberOfItems;

        void   clear (  );
        Object initialize ( in Object newItem )
                        raises( SVGException );
        Object createItem (  );
        Object getItem ( in unsigned long index )
                        raises( DOMException );
        Object insertBefore ( in Object newItem, in unsigned long index )
                        raises( SVGException );
        Object replace ( in Object newItem, in unsigned long index )
                        raises( DOMException, SVGException );
        Object remove ( in unsigned long index )
                        raises( DOMException );
        Object append ( in Object newItem )
                        raises( SVGException );
      };

      interface SVGLengthList : SVGList;

      interface SVGUnitTypes {
        // Unit Types
        constant unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
        constant unsigned short SVG_UNIT_TYPE_USERSPACE         = 1;
        constant unsigned short SVG_UNIT_TYPE_USERSPACEONUSE    = 2;
        constant unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 3;
      };

    #ifdef STYLABLESVG
      interface SVGStyleElement : SVGElement, SVGLangSpace, SVGTests {
                 attribute DOMString type;
      };
    #endif STYLABLESVG

    #ifdef STYLABLESVG
      interface SVGCSSRule : CSSRule {
        // Additional CSS RuleType to support ICC color specifications
        constant unsigned short COLOR_PROFILE_RULE = 7;
      };
    #endif STYLABLESVG

    #ifdef STYLABLESVG
      interface CSSColorProfileRule : SVGCSSRule {
        // Rendering Intent Types
        constant unsigned short RENDERING_INTENT_UNKNOWN               = 0;
        constant unsigned short RENDERING_INTENT_AUTO                  = 1;
        constant unsigned short RENDERING_INTENT_PERCEPTUAL            = 2;
        constant unsigned short RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3;
        constant unsigned short RENDERING_INTENT_SATURATION            = 4;
        constant unsigned short RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;

                 attribute DOMString      src;
                 attribute DOMString      name;
                 attribute unsigned short renderingIntent;
      };
    #endif STYLABLESVG

      interface SVGDocument : Document, DocumentEvent {
                 attribute DOMString    title;
        readonly attribute DOMString     referrer;
        readonly attribute DOMString      domain;
        readonly attribute DOMString      URL;
        readonly attribute SVGSVGElement rootElement;

        Element getElementById ( in DOMString elementId );
      };

      interface SVGElement : Element {
                 attribute DOMString id;
        readonly attribute SVGSVGElement ownerSVGElement;
        readonly attribute SVGElement viewportElement;
      };

      interface SVGSVGElement : SVGElement, SVGLangSpace, SVGTests, SVGFitToViewBox, DocumentEvent, EventTarget {
                 attribute DOMString className;
        readonly attribute SVGRect viewport;
        readonly attribute float CSSPixelToMillimeterX;
        readonly attribute float CSSPixelToMillimeterY;
        readonly attribute float ScreenPixelToMillimeterX;
        readonly attribute float ScreenPixelToMillimeterY;
                 attribute boolean useCurrentView;
        readonly attribute SVGViewSpec currentView;
                 attribute boolean enableZoomAndPanControls;
                 attribute float currentScale;
                 attribute SVGPoint currentTranslate;
                 attribute SVGLength x;
                 attribute SVGLength y;
                 attribute SVGLength width;
                 attribute SVGLength height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG

        unsigned long suspendRedraw ( in unsigned long max_wait_milliseconds );
        void          unsuspendRedraw ( in unsigned long suspend_handle_id )
                        raises( DOMException );
        void          unsuspendRedrawAll (  );
        void          forceRedraw (  );
        void          pauseAnimations (  );
        void          unpauseAnimations (  );
        boolean       animationsPaused (  );
        float         getCurrentTime (  );
        void          setCurrentTime ( in float seconds );
        NodeList      getIntersectionList ( in SVGRect rect, in SVGElement referenceElement )
                        raises( SVGException );
        NodeList      getEnclosureList ( in SVGRect rect, in SVGElement referenceElement )
                        raises( SVGException );
        boolean       checkIntersection ( in SVGElement element, in SVGRect rect )
                        raises( SVGException );
        boolean       checkEnclosure ( in SVGElement element, in SVGRect rect )
                        raises( SVGException );
        void          deSelectAll (  );
        SVGNumber              createSVGNumber (  );
        SVGLength              createSVGLength (  );
        SVGLengthList          createSVGLengthList (  );
        SVGAngle               createSVGAngle (  );
        SVGPoint               createSVGPoint (  );
        SVGPointList           createSVGPointList (  );
        SVGMatrix              createSVGMatrix (  );
        SVGPreserveAspectRatio createSVGPreserveAspectRatio (  );
        SVGRect                createSVGRect (  );
        SVGTransformList       createSVGTransformList (  );
        SVGTransformList createSVGTransformListFromMatrix ( in SVGMatrix matrix );
        SVGTransform           createSVGTransform (  );
        SVGTransform     createSVGTransformFromMatrix ( in SVGMatrix matrix );
        SVGICCColor              createSVGICCColor (  );
        SVGColor              createSVGColor (  );
        SVGPaint              createSVGPaint (  );
        Element         getElementById ( in DOMString elementId );
      };

      interface SVGGElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGDefsElement : SVGElement, SVGTransformable, SVGLangSpace {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGDescElement : SVGElement, SVGLangSpace {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG
      };

      interface SVGTitleElement : SVGElement, SVGLangSpace {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG
      };

      interface SVGUseElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, SVGURIReference, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength x;
                 attribute SVGLength y;
                 attribute SVGLength width;
                 attribute SVGLength height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

      interface SVGImageElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, SVGURIReference, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength x;
                 attribute SVGLength y;
                 attribute SVGLength width;
                 attribute SVGLength height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

      interface SVGSymbolElement : SVGElement, SVGLangSpace, SVGFitToViewBox {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGSwitchElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGLangSpace {
                 attribute DOMString xmllang;
                 attribute DOMString xmlspace;
      };

      interface SVGTests {
                 attribute DOMString systemRequired;
                 attribute DOMString systemLanguage;
      };

      interface SVGURIReference {
                 attribute DOMString xlinkType;
                 attribute DOMString xlinkRole;
                 attribute DOMString xlinkTitle;
                 attribute DOMString xlinkShow;
                 attribute DOMString xlinkActuate;
                 attribute DOMString href;
      };

      interface GetSVGDocument {
        SVGDocument getSVGDocument (  )
                        raises( DOMException );
      };

      interface SVGPoint {
                 attribute SVGLength x;
                 attribute SVGLength y;

        SVGPoint matrixTransform ( in SVGMatrix matrix )
                        raises( SVGException );
      };

      interface SVGMatrix {
                 attribute float      a;
                 attribute float      b;
                 attribute float      c;
                 attribute float      d;
                 attribute SVGLength e;
                 attribute SVGLength f;

        SVGMatrix multiply ( in SVGMatrix secondMatrix )
                        raises( SVGException );
        SVGMatrix inverse (  )
                        raises( SVGException );
        SVGMatrix translate ( in SVGLength x, in SVGLength y )
                        raises( SVGException );
        SVGMatrix scale ( in float scaleFactor )
                        raises( SVGException );
        SVGMatrix scaleNonUniform ( in float scaleFactorX, in float scaleFactorY )
                        raises( SVGException );
        SVGMatrix rotate ( in SVGAngle angle )
                        raises( SVGException );
        SVGMatrix rotateFromVector ( in SVGLength x, in SVGLength y )
                        raises( SVGException );
        SVGMatrix flipX (  );
        SVGMatrix flipY (  );
        SVGMatrix skewX ( in SVGAngle angle )
                        raises( SVGException );
        SVGMatrix skewY ( in SVGAngle angle )
                        raises( SVGException );
      };

      interface SVGTransformList : SVGList {
        SVGTransform createSVGTransformFromMatrix ( in SVGMatrix matrix )
                        raises( SVGException );
        SVGTransform consolidate (  );
      };

      interface SVGTransform {
        // Transform Types
        constant unsigned short SVG_TRANSFORM_UNKNOWN   = 0;
        constant unsigned short SVG_TRANSFORM_MATRIX    = 1;
        constant unsigned short SVG_TRANSFORM_TRANSLATE = 2;
        constant unsigned short SVG_TRANSFORM_SCALE     = 3;
        constant unsigned short SVG_TRANSFORM_ROTATE    = 4;
        constant unsigned short SVG_TRANSFORM_SKEWX     = 5;
        constant unsigned short SVG_TRANSFORM_SKEWY     = 6;

        readonly attribute unsigned short type;
        readonly attribute SVGMatrix matrix;
        readonly attribute SVGAngle angle;

        void setMatrix ( in SVGMatrix matrix )
                        raises( SVGException );
        void setTranslate ( in SVGLength tx, in SVGLength ty )
                        raises( SVGException );
        void setScale ( in SVGNumber sx, in SVGNumber sy )
                        raises( SVGException );
        void setRotate ( in SVGAngle angle )
                        raises( SVGException );
        void setSkewX ( in SVGAngle angle )
                        raises( SVGException );
        void setSkewY ( in SVGAngle angle )
                        raises( SVGException );
      };

      interface SVGPreserveAspectRatio {
        // Alignment Types
        constant unsigned short SVG_PRESERVEASPECTRATIO_NONE     = 0;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMINYMIN = 1;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMIN = 2;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMIN = 3;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMINYMID = 4;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMID = 5;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMID = 6;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMINYMAX = 7;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMAX = 8;
        constant unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMAX = 9;
        // Meet-or-slice Types
        constant unsigned short SVG_MEETORSLICE_MEET  = 0;
        constant unsigned short SVG_MEETORSLICE_SLICE = 1;

                 attribute unsigned short align;
                 attribute unsigned short meetOrSlice;
      };

      interface SVGFitToViewBox {
                 attribute SVGRect viewBox;
                 attribute SVGPreserveAspectRatio preserveAspectRatio;
      };

      interface SVGTransformable {
        readonly attribute SVGElement       nearestViewportElement;
        readonly attribute SVGElement       farthestViewportElement;
                 attribute SVGTransformList transform;

        SVGRect   getBBox (  );
        SVGMatrix getCTM (  );
        SVGMatrix getScreenCTM (  );
        SVGMatrix getTransformToElement ( in SVGElement element )
                        raises( SVGException );
      };

      interface SVGPathElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGNumber length;
        readonly attribute SVGList   pathSegList;
        readonly attribute SVGList   normalizedPathSegList;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG

        float         getTotalLength (  );
        SVGPoint      getPointAtLength ( in float distance )
                        raises( SVGException );
        unsigned long getPathSegAtLength ( in float distance )
                        raises( SVGException );
        SVGPathSeg    createSVGPathSeg (  );
      };

      interface SVGPathSeg {
        // Path Segment Types
        constant unsigned short SVG_PATHSEG_UNKNOWN                      = 0;
        constant unsigned short SVG_PATHSEG_CLOSEPATH                    = 1;
        constant unsigned short SVG_PATHSEG_MOVETO_ABS                   = 2;
        constant unsigned short SVG_PATHSEG_MOVETO_REL                   = 3;
        constant unsigned short SVG_PATHSEG_LINETO_ABS                   = 4;
        constant unsigned short SVG_PATHSEG_LINETO_REL                   = 5;
        constant unsigned short SVG_PATHSEG_CURVETO_CUBIC_ABS            = 6;
        constant unsigned short SVG_PATHSEG_CURVETO_CUBIC_REL            = 7;
        constant unsigned short SVG_PATHSEG_CURVETO_QUADRATIC_ABS        = 8;
        constant unsigned short SVG_PATHSEG_CURVETO_QUADRATIC_REL        = 9;
        constant unsigned short SVG_PATHSEG_ARC_ABS                      = 10;
        constant unsigned short SVG_PATHSEG_ARC_REL                      = 11;
        constant unsigned short SVG_PATHSEG_LINETO_HORIZONTAL_ABS        = 12;
        constant unsigned short SVG_PATHSEG_LINETO_HORIZONTAL_REL        = 13;
        constant unsigned short SVG_PATHSEG_LINETO_VERTICAL_ABS          = 14;
        constant unsigned short SVG_PATHSEG_LINETO_VERTICAL_REL          = 15;
        constant unsigned short SVG_PATHSEG_CURVETO_CUBIC_SMOOTH_ABS     = 16;
        constant unsigned short SVG_PATHSEG_CURVETO_CUBIC_SMOOTH_REL     = 17;
        constant unsigned short SVG_PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
        constant unsigned short SVG_PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;

                 attribute unsigned short pathSegType;
                 attribute DOMString      pathSegTypeAsLetter;
                 attribute float   x;
                 attribute float   y;
                 attribute float   x1;
                 attribute float   y1;
                 attribute float   x2;
                 attribute float   y2;
                 attribute float   r1;
                 attribute float   r2;
                 attribute float   angle;
                 attribute boolean largeArcFlag;
                 attribute boolean sweepFlag;
      };

      interface SVGRectElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength x;
                 attribute SVGLength y;
                 attribute SVGLength width;
                 attribute SVGLength height;
                 attribute SVGLength rx;
                 attribute SVGLength ry;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGCircleElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength cx;
                 attribute SVGLength cy;
                 attribute SVGLength r;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGEllipseElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength cx;
                 attribute SVGLength cy;
                 attribute SVGLength rx;
                 attribute SVGLength ry;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGLineElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength x1;
                 attribute SVGLength y1;
                 attribute SVGLength x2;
                 attribute SVGLength y2;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGPolylineElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
        readonly attribute SVGList points;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGPolygonElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
        readonly attribute SVGList points;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
    #endif EXCHANGESVG
      };

      interface SVGTextContentElement : SVGElement, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGTextContainerAttrs;
    #endif EXCHANGESVG

        long     getNumberOfChars (  );
        float    getLength (  );
        float    getSubStringLength ( in unsigned long charnum, in unsigned long nchars )
                        raises( DOMException, SVGException );
        SVGPoint getStartPositionOfChar ( in unsigned long charnum )
                        raises( DOMException );
        SVGPoint getEndPositionOfChar ( in unsigned long charnum )
                        raises( DOMException );
        SVGRect  getExtentOfChar ( in unsigned long charnum )
                        raises( DOMException );
        float    getRotationOfChar ( in unsigned long charnum )
                        raises( DOMException );
        long     getCharNumAtPosition ( in SVGPoint point )
                        raises( SVGException );
        void     selectSubString ( in unsigned long charnum, in unsigned long nchars )
                        raises( DOMException );
      };

      interface SVGTextElement : SVGTextContentElement, SVGTransformable {
                 attribute SVGLength x;
                 attribute SVGLength y;

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGTextPositioningElement : SVGTextContentElement {
                 attribute SVGLengthList x;
                 attribute SVGLengthList y;
                 attribute SVGLengthList dx;
                 attribute SVGLengthList dy;
                 attribute SVGLengthList rotate;
      };

      interface SVGTSpanElement : SVGTextPositioningElement;

      interface SVGTRefElement : SVGTextPositioningElement, SVGURIReference;

      interface SVGTextPathElement : SVGTextPositioningElement, SVGURIReference {
                 attribute SVGLength startOffset;
      };

      interface SVGAltGlyphElement : SVGTextContentElement, SVGURIReference;

      interface SVGAltGlyphDefElement : SVGElement;

      interface SVGGlyphSubElement : SVGElement {
                 attribute DOMString fontFamily;
                 attribute DOMString glyphRef;
                 attribute DOMString format;
      };

      interface SVGPaint : SVGColor {
        // Paint Types
        constant unsigned short SVG_PAINTTYPE_UNKNOWN               = 0;
        constant unsigned short SVG_PAINTTYPE_RGBCOLOR              = 1;
        constant unsigned short SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR     = 2;
        constant unsigned short SVG_PAINTTYPE_NONE                  = 101;
        constant unsigned short SVG_PAINTTYPE_CURRENTCOLOR          = 102;
        constant unsigned short SVG_PAINTTYPE_URI_NONE              = 103;
        constant unsigned short SVG_PAINTTYPE_URI_CURRENTCOLOR      = 104;
        constant unsigned short SVG_PAINTTYPE_URI_RGBCOLOR          = 105;
        constant unsigned short SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;

        readonly attribute unsigned short paintType;
        readonly attribute DOMString      uri;
        readonly attribute unsigned short animatedPaintType;
        readonly attribute DOMString      animatedUri;

        void setUri ( in DOMString uri )
                        raises( SVGException );
        void setPaint ( in unsigned short paintType, in DOMString uri, in RGBColor rgbColor, in SVGICCColor iccColor )
                        raises( SVGException );
      };

      interface SVGMarkerElement : SVGElement, SVGLangSpace, SVGFitToViewBox {
        // Marker Unit Types
        constant unsigned short SVG_MARKERUNITS_UNKNOWN        = 0;
        constant unsigned short SVG_MARKERUNITS_USERSPACE      = 1;
        constant unsigned short SVG_MARKERUNITS_USERSPACEONUSE = 2;
        constant unsigned short SVG_MARKERUNITS_STROKEWIDTH    = 3;
        // Marker Orientation Types
        constant unsigned short SVG_MARKER_ORIENT_UNKNOWN      = 0;
        constant unsigned short SVG_MARKER_ORIENT_AUTO         = 1;
        constant unsigned short SVG_MARKER_ORIENT_ANGLE        = 2;

                 attribute DOMString className;
        readonly attribute unsigned short markerUnits;
        readonly attribute unsigned short orientType;
        readonly attribute SVGAngle orientAngle;
                 attribute SVGLength refX;
                 attribute SVGLength refY;
                 attribute SVGLength markerWidth;
                 attribute SVGLength markerHeight;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG

        void setOrientToAuto (  );
        void setOrientToAngle ( in SVGAngle angle )
                        raises( SVGException );
      };

      interface SVGICCColor {
                 attribute DOMString colorProfile;
        readonly attribute SVGList   colors;
      };

      interface SVGColor {
        // Color Types
        constant unsigned short SVG_COLORTYPE_UNKNOWN           = 0;
        constant unsigned short SVG_COLORTYPE_RGBCOLOR          = 1;
        constant unsigned short SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2;

        readonly attribute unsigned short colorType;
        readonly attribute RGBColor       rgbColor;
        readonly attribute SVGICCColor    iccColor;
        readonly attribute unsigned short animatedColorType;
        readonly attribute RGBColor       animatedRGBColor;
        readonly attribute SVGICCColor    animatedICCColor;

        void        setRGBColor ( in RGBColor rgbColor )
                        raises( SVGException );
        void        setRGBColorICCColor ( in RGBColor rgbColor, in SVGICCColor iccColor )
                        raises( SVGException );
        RGBColor    createRGBColor (  );
        SVGICCColor createSVGICCColor (  );
      };

      interface SVGGradientElement : SVGElement, SVGURIReference, SVGUnitTypes {
                 attribute unsigned short   gradientUnits;
                 attribute SVGTransformList gradientTransform;
      };

      interface SVGLinearGradientElement : SVGGradientElement {
        // Spread Method Types
        constant unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
        constant unsigned short SVG_SPREADMETHOD_PAD     = 1;
        constant unsigned short SVG_SPREADMETHOD_REFLECT = 2;
        constant unsigned short SVG_SPREADMETHOD_REPEAT  = 3;

                 attribute SVGLength       x1;
                 attribute SVGLength       y1;
                 attribute SVGLength       x2;
                 attribute SVGLength       y2;
                 attribute unsigned short  spreadMethod;
      };

      interface SVGRadialGradientElement : SVGGradientElement {
                 attribute SVGLength cx;
                 attribute SVGLength cy;
                 attribute SVGLength r;
                 attribute SVGLength fx;
                 attribute SVGLength fy;
      };

      interface SVGStopElement : SVGElement {
                 attribute DOMString className;
                 attribute float offset;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG
      };

      interface SVGPatternElement : SVGElement, SVGLangSpace, SVGFitToViewBox, SVGURIReference, SVGUnitTypes {
                 attribute DOMString className;
                 attribute unsigned short   patternUnits;
                 attribute SVGTransformList patternTransform;
                 attribute SVGLength        x;
                 attribute SVGLength        y;
                 attribute SVGLength        width;
                 attribute SVGLength        height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

      interface SVGClipPathElement : SVGElement, SVGLangSpace, SVGUnitTypes {
                 attribute DOMString className;
                 attribute unsigned short clipPathUnits;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGMaskElement : SVGElement, SVGLangSpace, SVGUnitTypes {
                 attribute DOMString className;
                 attribute unsigned short maskUnits;
                 attribute SVGLength      x;
                 attribute SVGLength      y;
                 attribute SVGLength      width;
                 attribute SVGLength      height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

      interface SVGFilterElement : SVGElement, SVGLangSpace, SVGURIReference, SVGUnitTypes {
                 attribute unsigned short filterUnits;
                 attribute SVGLength      x;
                 attribute SVGLength      y;
                 attribute SVGLength      width;
                 attribute SVGLength      height;
        readonly attribute SVGInteger     filterResX;
        readonly attribute SVGInteger     filterResY;

        void setFilterRes ( in unsigned long filterResX, in unsigned long filterResY )
                        raises( SVGException );
      };

      interface SVGFilterNodeStandardAttributes {
                 attribute unsigned short filterUnits;
                 attribute SVGLength      x;
                 attribute SVGLength      y;
                 attribute SVGLength      width;
                 attribute SVGLength      height;
                 attribute DOMString      result;
      };

      interface SVGFEBlendElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Blend Mode Types
        constant unsigned short SVG_FEBLEND_MODE_UNKNOWN  = 0;
        constant unsigned short SVG_FEBLEND_MODE_NORMAL   = 1;
        constant unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
        constant unsigned short SVG_FEBLEND_MODE_SCREEN   = 3;
        constant unsigned short SVG_FEBLEND_MODE_DARKEN   = 4;
        constant unsigned short SVG_FEBLEND_MODE_LIGHTEN  = 5;

                 attribute DOMString      in;
                 attribute DOMString      in2;
                 attribute unsigned short mode;
      };

      interface SVGFEColorMatrixElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Color Matrix Types
        constant unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN          = 0;
        constant unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX           = 1;
        constant unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE         = 2;
        constant unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE        = 3;
        constant unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;

                 attribute DOMString      in;
                 attribute unsigned short type;
        readonly attribute SVGList        values;
      };

      interface SVGFEComponentTransferElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
      };

      interface SVGComponentTransferFunctionElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Component Transfer Types
        constant unsigned short SVG_FECOMPONENTTRANFER_TYPE_UNKNOWN  = 0;
        constant unsigned short SVG_FECOMPONENTTRANFER_TYPE_IDENTITY = 1;
        constant unsigned short SVG_FECOMPONENTTRANFER_TYPE_TABLE    = 2;
        constant unsigned short SVG_FECOMPONENTTRANFER_TYPE_LINEAR   = 3;
        constant unsigned short SVG_FECOMPONENTTRANFER_TYPE_GAMMA    = 4;

                 attribute unsigned short type;
        readonly attribute SVGList        tableValues;
                 attribute SVGNumber      slope;
                 attribute SVGNumber      intercept;
                 attribute SVGNumber      amplitude;
                 attribute SVGNumber      exponent;
                 attribute SVGNumber      offset;
      };

      interface SVGFEFuncRElement : SVGComponentTransferFunctionElement;

      interface SVGFEFuncGElement : SVGComponentTransferFunctionElement;

      interface SVGFEFuncBElement : SVGComponentTransferFunctionElement;

      interface SVGFEFuncAElement : SVGComponentTransferFunctionElement;

      interface SVGFECompositeElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Composite Operators
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN    = 0;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_OVER       = 1;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_IN         = 2;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_OUT        = 3;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP       = 4;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_XOR        = 5;
        constant unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;

                 attribute DOMString      in;
                 attribute DOMString      in2;
                 attribute unsigned short operator;
                 attribute SVGInteger     k1;
                 attribute SVGInteger     k2;
                 attribute SVGInteger     k3;
                 attribute SVGInteger     k4;
      };

      interface SVGFEConvolveMatrixElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Edge Mode Values
        constant unsigned short SVG_EDGEMODE_UNKNOWN   = 0;
        constant unsigned short SVG_EDGEMODE_DUPLICATE = 1;
        constant unsigned short SVG_EDGEMODE_WRAP      = 2;
        constant unsigned short SVG_EDGEMODE_NONE      = 3;

                 attribute SVGInteger     orderX;
                 attribute SVGInteger     orderY;
        readonly attribute SVGList        kernelMatrix;
                 attribute unsigned short edgeMode;
                 attribute SVGNumber      divisor;
                 attribute SVGInteger     targetX;
                 attribute SVGInteger     targetY;
                 attribute SVGNumber      kernelUnitLengthX;
                 attribute SVGNumber      kernelUnitLengthY;
      };

      interface SVGFEDiffuseLightingElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
                 attribute SVGNumber resultScale;
                 attribute SVGNumber surfaceScale;
                 attribute SVGNumber diffuseConstant;
                 attribute SVGColor  lightColor;
      };

      interface SVGFEDistantLightElement : SVGElement {
                 attribute SVGNumber azimuth;
                 attribute SVGNumber elevation;
      };

      interface SVGFEPointLightElement : SVGElement {
                 attribute SVGNumber x;
                 attribute SVGNumber y;
                 attribute SVGNumber z;
      };

      interface SVGFESpotLightElement : SVGElement {
                 attribute SVGNumber x;
                 attribute SVGNumber y;
                 attribute SVGNumber z;
                 attribute SVGNumber pointsAtX;
                 attribute SVGNumber pointsAtY;
                 attribute SVGNumber pointsAtZ;
                 attribute SVGNumber specularExponent;
      };

      interface SVGFEDisplacementMapElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Channel Selectors
        constant unsigned short SVG_CHANNEL_UNKNOWN = 0;
        constant unsigned short SVG_CHANNEL_R       = 1;
        constant unsigned short SVG_CHANNEL_G       = 2;
        constant unsigned short SVG_CHANNEL_B       = 3;
        constant unsigned short SVG_CHANNEL_A       = 4;

                 attribute DOMString      in;
                 attribute DOMString      in2;
                 attribute unsigned short xChannelSelector;
                 attribute unsigned short yChannelSelector;
                 attribute SVGNumber      scale;
      };

      interface SVGFEFloodElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString      in;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGfeFloodAttrs;
    #endif EXCHANGESVG
      };

      interface SVGFEGaussianBlurElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
        readonly attribute SVGLength stdDeviationX;
        readonly attribute SVGLength stdDeviationY;

        void setStdDeviation ( in SVGLength stdDeviationX, in SVGLength stdDeviationY )
                        raises( SVGException );
      };

      interface SVGFEImageElement : SVGElement, SVGFilterNodeStandardAttributes, SVGTransformable, SVGLangSpace, SVGURIReference {
                 attribute DOMString className;
                 attribute DOMString        in;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

      interface SVGFEMergeElement : SVGElement, SVGFilterNodeStandardAttributes;

      interface SVGFEMergeNodeElement : SVGElement {
                 attribute DOMString in;
      };

      interface SVGFEMorphologyElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Morphology Operators
        constant unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
        constant unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE   = 1;
        constant unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE  = 2;

                 attribute DOMString      in;
                 attribute unsigned short operator;
                 attribute SVGLength      radius;
      };

      interface SVGFEOffsetElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
                 attribute SVGLength dx;
                 attribute SVGLength dy;
      };

      interface SVGFESpecularLightingElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
                 attribute SVGNumber surfaceScale;
                 attribute SVGNumber specularConstant;
                 attribute SVGNumber specularExponent;
                 attribute SVGColor  lightColor;
      };

      interface SVGFETileElement : SVGElement, SVGFilterNodeStandardAttributes {
                 attribute DOMString in;
      };

      interface SVGFETurbulenceElement : SVGElement, SVGFilterNodeStandardAttributes {
        // Turbulence Types
        constant unsigned short SVG_TURBULENCE_TYPE_UNKNOWN      = 0;
        constant unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
        constant unsigned short SVG_TURBULENCE_TYPE_TURBULENCE   = 2;
        // Stitch Options
        constant unsigned short SVG_STITCHTYPE_UNKNOWN  = 0;
        constant unsigned short SVG_STITCHTYPE_STITCH   = 1;
        constant unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

                 attribute DOMString      in;
                 attribute SVGNumber      baseFrequencyX;
                 attribute SVGNumber      baseFrequencyY;
                 attribute SVGInteger     numOctaves;
                 attribute unsigned short type;
                 attribute SVGNumber      seed;
                 attribute unsigned short stitchTiles;
      };

      interface SVGCursorElement : SVGElement, SVGTests, SVGURIReference {
                 attribute SVGLength x;
                 attribute SVGLength y;
      };

      interface SVGAElement : SVGElement, SVGLangSpace, SVGTransformable, SVGTests, SVGURIReference, EventTarget, SVGURIReference {
                 attribute DOMString className;
                 attribute DOMString target;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
    #endif EXCHANGESVG
      };

      interface SVGViewSpec : SVGFitToViewBox {
                 attribute SVGTransformList transform;
                 attribute boolean          enableZoomAndPanControls;
                 attribute SVGElement       viewTarget;
        readonly attribute DOMString        viewBoxString;
        readonly attribute DOMString        preserveAspectRatioString;
        readonly attribute DOMString        transformString;
        readonly attribute DOMString        enableZoomAndPanControlsString;
        readonly attribute DOMString        viewTargetString;
      };

      interface SVGViewElement : SVGElement, SVGFitToViewBox {
                 attribute boolean    enableZoomAndPanControls;
                 attribute SVGElement viewTarget;
      };

      interface SVGScriptElement : SVGElement, SVGURIReference {
                 attribute DOMString language;
      };

      interface SVGZoomEvent : UIEvent {
                 attribute SVGRect zoomRectScreen;
                 attribute float previousScale;
                 attribute SVGPoint previousTranslate;
                 attribute float newScale;
                 attribute SVGPoint newTranslate;
      };

      interface ElementTimeControl {
        boolean beginElement (  )
                        raises( DOMException );
        boolean beginElementAt ( in float offset )
                        raises( DOMException );
        boolean endElement (  )
                        raises( DOMException );
        boolean endElementAt ( in float offset )
                        raises( DOMException );
      };

      interface SVGAnimationElement : SVGElement, SVGTests, ElementTimeControl {
        readonly attribute SVGElement targetElement;

        float getStartTime (  );
        float getCurrentTime (  );
        float getSimpleDuration (  )
                        raises( DOMException );
      };

      interface SVGAnimateElement : SVGAnimationElement;

      interface SVGSetElement : SVGAnimationElement;

      interface SVGAnimateMotionElement : SVGAnimationElement;

      interface SVGAnimateTransformElement : SVGAnimationElement;

      interface TimeEvent : events::Event {
        readonly attribute views::AbstractView view;
        readonly attribute long                detail;

        void initTimeEvent ( in DOMString typeArg, in views::AbstractView viewArg, in long detailArg );
      };

      interface SVGFontElement : SVGElement;

      interface SVGGlyphElement : SVGElement;

      interface SVGMissingGlyphElement : SVGElement;

      interface SVGHKernElement : SVGElement;

      interface SVGVKernElement : SVGElement;

      interface SVGMetadataElement : SVGElement;

      interface SVGForeignObjectElement : SVGElement, SVGTransformable, SVGLangSpace, SVGTests, EventTarget {
                 attribute DOMString className;
                 attribute SVGLength x;
                 attribute SVGLength y;
                 attribute SVGLength width;
                 attribute SVGLength height;

    #ifdef STYLABLESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Stylable SVG.
                 STYLABLESVGStyleAttribute;
    #endif STYLABLESVG

    #ifdef EXCHANGESVG
                 // The following pre-defined attribute collections are only
                 // available in the DOM for Exchange SVG.
                 EXCHANGESVGContainerAttrs;
                 EXCHANGESVGFillStrokeAttrs;
                 EXCHANGESVGGradientAttrs;
                 EXCHANGESVGGraphicsAttrs;
                 EXCHANGESVGMarkerAttrs;
                 EXCHANGESVGTextContainerAttrs;
                 EXCHANGESVGTextElementAttrs;
                 EXCHANGESVGViewportAttrs;
    #endif EXCHANGESVG
      };

    };

    #endif // _SVG_IDL_