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_