付録 A. IDL 定義 — IDL Definitions

この付録は規範的である。 ◎ This appendix is normative.

この付録は、~SVG文書~obj~model定義~用の完全な~Web~IDLを包含する。 ◎ This appendix contains the complete Web IDL for the SVG Document Object Model definitions.


[Exposed=Window]
interface `SVGElement@I : `Element$I {

  [SameObject] readonly attribute `SVGAnimatedString$I `className$m;

  readonly attribute `SVGSVGElement$I? `ownerSVGElement$m;
  readonly attribute `SVGElement$I? `viewportElement$m;
};

`SVGElement$I includes `GlobalEventHandlers$I;
`SVGElement$I includes `DocumentAndElementEventHandlers$I;
`SVGElement$I includes `SVGElementInstance$I;
`SVGElement$I includes `HTMLOrSVGElement$I;

dictionary `SVGBoundingBoxOptions$I {
  boolean fill = true;
  boolean stroke = false;
  boolean markers = false;
  boolean clipped = false;
};

[Exposed=Window]
interface `SVGGraphicsElement@I : `SVGElement$I {
  [SameObject] readonly attribute `SVGAnimatedTransformList$I `transform$m;

  `DOMRect$I `getBBox$m(optional `SVGBoundingBoxOptions$I %options);
  `DOMMatrix$I? `getCTM$m();
  `DOMMatrix$I? `getScreenCTM$m();
};

`SVGGraphicsElement$I includes `SVGTests$I;

[Exposed=Window]
interface `SVGGeometryElement@I : `SVGGraphicsElement$I {
  [SameObject] readonly attribute `SVGAnimatedNumber$I `pathLength$m;

  boolean `isPointInFill$m(optional `DOMPointInit$I %point);
  boolean `isPointInStroke$m(optional `DOMPointInit$I %point);
  float `getTotalLength$m();
  `DOMPoint$I `getPointAtLength$m(float %distance);
};

[Exposed=Window]
interface `SVGNumber@I {
  attribute float `value$m;
};

[Exposed=Window]
interface `SVGLength@I {

  // Length Unit Types
  const unsigned short `SVG_LENGTHTYPE_UNKNOWN$m = 0;
  const unsigned short `SVG_LENGTHTYPE_NUMBER$m = 1;
  const unsigned short `SVG_LENGTHTYPE_PERCENTAGE$m = 2;
  const unsigned short `SVG_LENGTHTYPE_EMS$m = 3;
  const unsigned short `SVG_LENGTHTYPE_EXS$m = 4;
  const unsigned short `SVG_LENGTHTYPE_PX$m = 5;
  const unsigned short `SVG_LENGTHTYPE_CM$m = 6;
  const unsigned short `SVG_LENGTHTYPE_MM$m = 7;
  const unsigned short `SVG_LENGTHTYPE_IN$m = 8;
  const unsigned short `SVG_LENGTHTYPE_PT$m = 9;
  const unsigned short `SVG_LENGTHTYPE_PC$m = 10;

  readonly attribute unsigned short `unitType$m;
           attribute float `value$m;
           attribute float `valueInSpecifiedUnits$m;
           attribute DOMString `valueAsString$m;

  undefined `newValueSpecifiedUnits$m(unsigned short %unitType, float %valueInSpecifiedUnits);
  undefined `convertToSpecifiedUnits$m(unsigned short %unitType);
};

[Exposed=Window]
interface `SVGAngle@I {

  // Angle Unit Types
  const unsigned short `SVG_ANGLETYPE_UNKNOWN$m = 0;
  const unsigned short `SVG_ANGLETYPE_UNSPECIFIED$m = 1;
  const unsigned short `SVG_ANGLETYPE_DEG$m = 2;
  const unsigned short `SVG_ANGLETYPE_RAD$m = 3;
  const unsigned short `SVG_ANGLETYPE_GRAD$m = 4;

  readonly attribute unsigned short `unitType$m;
           attribute float `value$m;
           attribute float `valueInSpecifiedUnits$m;
           attribute DOMString `valueAsString$m;

  undefined `newValueSpecifiedUnits$m(unsigned short %unitType, float %valueInSpecifiedUnits);
  undefined `convertToSpecifiedUnits$m(unsigned short %unitType);
};

[Exposed=Window]
interface `SVGNumberList@I {

  readonly attribute unsigned long `length$n;
  readonly attribute unsigned long `numberOfItems$n;

  undefined `clear$n();
  `SVGNumber$I `initialize$n(`SVGNumber$I %newItem);
  getter `SVGNumber$I `getItem$n(unsigned long %index);
  `SVGNumber$I `insertItemBefore$n(`SVGNumber$I %newItem, unsigned long %index);
  `SVGNumber$I `replaceItem$n(`SVGNumber$I %newItem, unsigned long %index);
  `SVGNumber$I `removeItem$n(unsigned long %index);
  `SVGNumber$I `appendItem$n(`SVGNumber$I %newItem);
  `setter$n undefined (unsigned long %index, `SVGNumber$I %newItem);
};

[Exposed=Window]
interface `SVGLengthList@I {

  readonly attribute unsigned long `length$n;
  readonly attribute unsigned long `numberOfItems$n;

  undefined `clear$n();
  `SVGLength$I `initialize$n(`SVGLength$I %newItem);
  getter `SVGLength$I `getItem$n(unsigned long %index);
  `SVGLength$I `insertItemBefore$n(`SVGLength$I %newItem, unsigned long %index);
  `SVGLength$I `replaceItem$n(`SVGLength$I %newItem, unsigned long %index);
  `SVGLength$I `removeItem$n(unsigned long %index);
  `SVGLength$I `appendItem$n(`SVGLength$I %newItem);
  `setter$n undefined (unsigned long %index, `SVGLength$I %newItem);
};

[Exposed=Window]
interface `SVGStringList@I {

  readonly attribute unsigned long `length$n;
  readonly attribute unsigned long `numberOfItems$n;

  undefined `clear$n();
  DOMString `initialize$n(DOMString %newItem);
  getter DOMString `getItem$n(unsigned long %index);
  DOMString `insertItemBefore$n(DOMString %newItem, unsigned long %index);
  DOMString `replaceItem$n(DOMString %newItem, unsigned long %index);
  DOMString `removeItem$n(unsigned long %index);
  DOMString `appendItem$n(DOMString %newItem);
  `setter$n undefined (unsigned long %index, DOMString %newItem);
};

[Exposed=Window]
interface `SVGAnimatedBoolean@I {
           attribute boolean `baseVal$m;
  readonly attribute boolean `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedEnumeration@I {
           attribute unsigned short `baseVal$m;
  readonly attribute unsigned short `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedInteger@I {
           attribute long `baseVal$m;
  readonly attribute long `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedNumber@I {
           attribute float `baseVal$m;
  readonly attribute float `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedLength@I {
  [SameObject] readonly attribute `SVGLength$I `baseVal$m;
  [SameObject] readonly attribute `SVGLength$I `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedAngle@I {
  [SameObject] readonly attribute `SVGAngle$I `baseVal$m;
  [SameObject] readonly attribute `SVGAngle$I `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedString@I {
           attribute DOMString `baseVal$m;
  readonly attribute DOMString `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedRect@I {
  [SameObject] readonly attribute `DOMRect$I `baseVal$m;
  [SameObject] readonly attribute `DOMRectReadOnly$I `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedNumberList@I {
  [SameObject] readonly attribute `SVGNumberList$I `baseVal$m;
  [SameObject] readonly attribute `SVGNumberList$I `animVal$m;
};

[Exposed=Window]
interface `SVGAnimatedLengthList@I {
  [SameObject] readonly attribute `SVGLengthList$I `baseVal$m;
  [SameObject] readonly attribute `SVGLengthList$I `animVal$m;
};

[Exposed=Window]
interface `SVGUnitTypes@I {
  // Unit Types
  const unsigned short `SVG_UNIT_TYPE_UNKNOWN$m = 0;
  const unsigned short `SVG_UNIT_TYPE_USERSPACEONUSE$m = 1;
  const unsigned short `SVG_UNIT_TYPE_OBJECTBOUNDINGBOX$m = 2;
};

interface mixin `SVGTests@I {
  [SameObject] readonly attribute `SVGStringList$I `requiredExtensions$m;
  [SameObject] readonly attribute `SVGStringList$I `systemLanguage$m;
};

interface mixin `SVGFitToViewBox@I {
  [SameObject] readonly attribute `SVGAnimatedRect$I `viewBox$m;
  [SameObject] readonly attribute `SVGAnimatedPreserveAspectRatio$I `preserveAspectRatio$m;
};

interface mixin `SVGURIReference@I {
  [SameObject] readonly attribute `SVGAnimatedString$I `href$m;
};

partial interface `Document@I {
  readonly attribute `SVGSVGElement$I? `rootElement$n;
};

[Exposed=Window]
interface `SVGSVGElement@I : `SVGGraphicsElement$I {

  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;

  attribute float `currentScale$m;
  [SameObject] readonly attribute `DOMPointReadOnly$I `currentTranslate$m;

  `NodeList$I `getIntersectionList$m(`DOMRectReadOnly$I %rect, `SVGElement$I? %referenceElement);
  `NodeList$I `getEnclosureList$m(`DOMRectReadOnly$I %rect, `SVGElement$I? %referenceElement);
  boolean `checkIntersection$m(`SVGElement$I %element, `DOMRectReadOnly$I %rect);
  boolean `checkEnclosure$m(`SVGElement$I %element, `DOMRectReadOnly$I %rect);

  undefined `deselectAll$m();

  `SVGNumber$I `createSVGNumber$m();
  `SVGLength$I `createSVGLength$m();
  `SVGAngle$I `createSVGAngle$m();
  `DOMPoint$I `createSVGPoint$m();
  `DOMMatrix$I `createSVGMatrix$m();
  `DOMRect$I `createSVGRect$m();
  `SVGTransform$I `createSVGTransform$m();
  `SVGTransform$I `createSVGTransformFromMatrix$m(optional `DOMMatrix2DInit$I %matrix = {});

  `Element$I `getElementById$m(DOMString %elementId);

  /* 
非推奨にされた~method
— ~callされても効果はないが、互換性の理由から保たれている。
◎
Deprecated methods that have no effect when called, but which are kept for compatibility reasons.
 */
  unsigned long `suspendRedraw$m(unsigned long %maxWaitMilliseconds);
  undefined `unsuspendRedraw$m(unsigned long %suspendHandleID);
  undefined `unsuspendRedrawAll$m();
  undefined `forceRedraw$m();
};

`SVGSVGElement$I includes `SVGFitToViewBox$I;
`SVGSVGElement$I includes `WindowEventHandlers$I;

[Exposed=Window]
interface `SVGGElement@I : `SVGGraphicsElement$I {
};

[Exposed=Window]
interface `SVGDefsElement@I : `SVGGraphicsElement$I {
};

[Exposed=Window]
interface `SVGDescElement@I : `SVGElement$I {
};

[Exposed=Window]
interface `SVGMetadataElement@I : `SVGElement$I {
};

[Exposed=Window]
interface `SVGTitleElement@I : `SVGElement$I {
};

[Exposed=Window]
interface `SVGSymbolElement@I : `SVGGraphicsElement$I {
};

`SVGSymbolElement$I includes `SVGFitToViewBox$I;

[Exposed=Window]
interface `SVGUseElement@I : `SVGGraphicsElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;
  [SameObject] readonly attribute `SVGElement$I? `instanceRoot$m;
  [SameObject] readonly attribute `SVGElement$I? `animatedInstanceRoot$m;
};

`SVGUseElement$I includes `SVGURIReference$I;

[Exposed=Window]
interface `SVGUseElementShadowRoot@I : `ShadowRoot$I {
};

interface mixin `SVGElementInstance@I {
  [SameObject] readonly attribute `SVGElement$I? `correspondingElement$m;
  [SameObject] readonly attribute `SVGUseElement$I? `correspondingUseElement$m;
};

[Exposed=Window]
interface `ShadowAnimation@I : `Animation$I {
  constructor(`Animation$I %source, (`Element$I or `CSSPseudoElement$I) %newTarget);
  [SameObject] readonly attribute `Animation$I `sourceAnimation$m;
};

[Exposed=Window]
interface `SVGSwitchElement@I : `SVGGraphicsElement$I {
};

interface mixin `GetSVGDocument@I {
  `Document$I `getSVGDocument$m();
};

[Exposed=Window]
interface `SVGStyleElement@I : `SVGElement$I {
  attribute DOMString `type$m;
  attribute DOMString `media$m;
  attribute DOMString `title$m;
};

`SVGStyleElement$I includes `LinkStyle$I;

[Exposed=Window]
interface `SVGTransform@I {

  // Transform Types
  const unsigned short `SVG_TRANSFORM_UNKNOWN$m = 0;
  const unsigned short `SVG_TRANSFORM_MATRIX$m = 1;
  const unsigned short `SVG_TRANSFORM_TRANSLATE$m = 2;
  const unsigned short `SVG_TRANSFORM_SCALE$m = 3;
  const unsigned short `SVG_TRANSFORM_ROTATE$m = 4;
  const unsigned short `SVG_TRANSFORM_SKEWX$m = 5;
  const unsigned short `SVG_TRANSFORM_SKEWY$m = 6;

  readonly attribute unsigned short `type$m;
  [SameObject] readonly attribute `DOMMatrix$I `matrix$m;
  readonly attribute float `angle$m;

  undefined `setMatrix$m(optional `DOMMatrix2DInit$I %matrix = {});
  undefined `setTranslate$m(float %tx, float %ty);
  undefined `setScale$m(float %sx, float %sy);
  undefined `setRotate$m(float %angle, float %cx, float %cy);
  undefined `setSkewX$m(float %angle);
  undefined `setSkewY$m(float %angle);
};

[Exposed=Window]
interface `SVGTransformList@I {

  readonly attribute unsigned long `length$n;
  readonly attribute unsigned long `numberOfItems$n;

  undefined `clear$n();
  `SVGTransform$I `initialize$n(`SVGTransform$I %newItem);
  getter `SVGTransform$I `getItem$n(unsigned long %index);
  `SVGTransform$I `insertItemBefore$n(`SVGTransform$I %newItem, unsigned long %index);
  `SVGTransform$I `replaceItem$n(`SVGTransform$I %newItem, unsigned long %index);
  `SVGTransform$I `removeItem$n(unsigned long %index);
  `SVGTransform$I `appendItem$n(`SVGTransform$I %newItem);
  `setter$n undefined (unsigned long %index, `SVGTransform$I %newItem);

  /* 
他の~list~interfaceと共通しない追加的な~method。
◎
Additional methods not common to other list interfaces.

  `SVGTransform$I `createSVGTransformFromMatrix$m(optional `DOMMatrix2DInit$I %matrix = {});
  `SVGTransform$I? `consolidate$m();
};

[Exposed=Window]
interface `SVGAnimatedTransformList@I {
  [SameObject] readonly attribute `SVGTransformList$I `baseVal$m;
  [SameObject] readonly attribute `SVGTransformList$I `animVal$m;
};

[Exposed=Window]
interface `SVGPreserveAspectRatio@I {

  // Alignment Types
  const unsigned short `SVG_PRESERVEASPECTRATIO_UNKNOWN$m = 0;
  const unsigned short `SVG_PRESERVEASPECTRATIO_NONE$m = 1;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMINYMIN$m = 2;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMIDYMIN$m = 3;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMAXYMIN$m = 4;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMINYMID$m = 5;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMIDYMID$m = 6;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMAXYMID$m = 7;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMINYMAX$m = 8;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMIDYMAX$m = 9;
  const unsigned short `SVG_PRESERVEASPECTRATIO_XMAXYMAX$m = 10;

  // Meet-or-slice Types
  const unsigned short `SVG_MEETORSLICE_UNKNOWN$m = 0;
  const unsigned short `SVG_MEETORSLICE_MEET$m = 1;
  const unsigned short `SVG_MEETORSLICE_SLICE$m = 2;

  attribute unsigned short `align$m;
  attribute unsigned short `meetOrSlice$m;
};

[Exposed=Window]
interface `SVGAnimatedPreserveAspectRatio@I {
  [SameObject] readonly attribute `SVGPreserveAspectRatio$I `baseVal$m;
  [SameObject] readonly attribute `SVGPreserveAspectRatio$I `animVal$m;
};

[Exposed=Window]
interface `SVGPathElement@I : `SVGGeometryElement$I {
};

[Exposed=Window]
interface `SVGRectElement@I : `SVGGeometryElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `rx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `ry$m;
};

[Exposed=Window]
interface `SVGCircleElement@I : `SVGGeometryElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `cx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `cy$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `r$m;
};

[Exposed=Window]
interface `SVGEllipseElement@I : `SVGGeometryElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `cx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `cy$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `rx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `ry$m;
};

[Exposed=Window]
interface `SVGLineElement@I : `SVGGeometryElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x1$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y1$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `x2$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y2$m;
};

interface mixin `SVGAnimatedPoints@I {
  [SameObject] readonly attribute `SVGPointList$I `points$m;
  [SameObject] readonly attribute `SVGPointList$I `animatedPoints$m;
};

[Exposed=Window]
interface `SVGPointList@I {

  readonly attribute unsigned long `length$n;
  readonly attribute unsigned long `numberOfItems$n;

  undefined `clear$n();
  `DOMPoint$I `initialize$n(`DOMPoint$I %newItem);
  getter `DOMPoint$I `getItem$n(unsigned long %index);
  `DOMPoint$I `insertItemBefore$n(`DOMPoint$I %newItem, unsigned long %index);
  `DOMPoint$I `replaceItem$n(`DOMPoint$I %newItem, unsigned long %index);
  `DOMPoint$I `removeItem$n(unsigned long %index);
  `DOMPoint$I `appendItem$n(`DOMPoint$I %newItem);
  `setter$n undefined (unsigned long %index, `DOMPoint$I %newItem);
};

[Exposed=Window]
interface `SVGPolylineElement@I : `SVGGeometryElement$I {
};

`SVGPolylineElement$I includes `SVGAnimatedPoints$I;

[Exposed=Window]
interface `SVGPolygonElement@I : `SVGGeometryElement$I {
};

`SVGPolygonElement$I includes `SVGAnimatedPoints$I;

[Exposed=Window]
interface `SVGTextContentElement@I : `SVGGraphicsElement$I {

  // lengthAdjust Types
  const unsigned short `LENGTHADJUST_UNKNOWN$m = 0;
  const unsigned short `LENGTHADJUST_SPACING$m = 1;
  const unsigned short `LENGTHADJUST_SPACINGANDGLYPHS$m = 2;

  [SameObject] readonly attribute `SVGAnimatedLength$I `textLength$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `lengthAdjust$m;

  long `getNumberOfChars$m();
  float `getComputedTextLength$m();
  float `getSubStringLength$m(unsigned long %charnum, unsigned long %nchars);
  `DOMPoint$I `getStartPositionOfChar$m(unsigned long %charnum);
  `DOMPoint$I `getEndPositionOfChar$m(unsigned long %charnum);
  `DOMRect$I `getExtentOfChar$m(unsigned long %charnum);
  float `getRotationOfChar$m(unsigned long %charnum);
  long `getCharNumAtPosition$m(optional `DOMPointInit$I %point);
  undefined `selectSubString$m(unsigned long %charnum, unsigned long %nchars);
};

[Exposed=Window]
interface `SVGTextPositioningElement@I : `SVGTextContentElement$I {
  [SameObject] readonly attribute `SVGAnimatedLengthList$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLengthList$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLengthList$I `dx$m;
  [SameObject] readonly attribute `SVGAnimatedLengthList$I `dy$m;
  [SameObject] readonly attribute `SVGAnimatedNumberList$I `rotate$m;
};

[Exposed=Window]
interface `SVGTextElement@I : `SVGTextPositioningElement$I {
};

[Exposed=Window]
interface `SVGTSpanElement@I : `SVGTextPositioningElement$I {
};

[Exposed=Window]
interface `SVGTextPathElement@I : `SVGTextContentElement$I {

  // textPath Method Types
  const unsigned short `TEXTPATH_METHODTYPE_UNKNOWN$m = 0;
  const unsigned short `TEXTPATH_METHODTYPE_ALIGN$m = 1;
  const unsigned short `TEXTPATH_METHODTYPE_STRETCH$m = 2;

  // textPath Spacing Types
  const unsigned short `TEXTPATH_SPACINGTYPE_UNKNOWN$m = 0;
  const unsigned short `TEXTPATH_SPACINGTYPE_AUTO$m = 1;
  const unsigned short `TEXTPATH_SPACINGTYPE_EXACT$m = 2;

  [SameObject] readonly attribute `SVGAnimatedLength$I `startOffset$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `method$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `spacing$m;
};

`SVGTextPathElement$I includes `SVGURIReference$I;

[Exposed=Window]
interface `SVGImageElement@I : `SVGGraphicsElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;
  [SameObject] readonly attribute `SVGAnimatedPreserveAspectRatio$I `preserveAspectRatio$m;
  attribute DOMString? `crossOrigin$m;
};

`SVGImageElement$I includes `SVGURIReference$I;

[Exposed=Window]
interface `SVGForeignObjectElement@I : `SVGGraphicsElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;
};

[Exposed=Window]
interface `SVGMarkerElement@I : `SVGElement$I {

  // Marker Unit Types
  const unsigned short `SVG_MARKERUNITS_UNKNOWN$m = 0;
  const unsigned short `SVG_MARKERUNITS_USERSPACEONUSE$m = 1;
  const unsigned short `SVG_MARKERUNITS_STROKEWIDTH$m = 2;

  // Marker Orientation Types
  const unsigned short `SVG_MARKER_ORIENT_UNKNOWN$m = 0;
  const unsigned short `SVG_MARKER_ORIENT_AUTO$m = 1;
  const unsigned short `SVG_MARKER_ORIENT_ANGLE$m = 2;

  [SameObject] readonly attribute `SVGAnimatedLength$I `refX$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `refY$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `markerUnits$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `markerWidth$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `markerHeight$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `orientType$m;
  [SameObject] readonly attribute `SVGAnimatedAngle$I `orientAngle$m;
  attribute DOMString `orient$m;

  undefined `setOrientToAuto$m();
  undefined `setOrientToAngle$m(`SVGAngle$I %angle);
};

`SVGMarkerElement$I includes `SVGFitToViewBox$I;

[Exposed=Window]
interface `SVGGradientElement@I : `SVGElement$I {

  // Spread Method Types
  const unsigned short `SVG_SPREADMETHOD_UNKNOWN$m = 0;
  const unsigned short `SVG_SPREADMETHOD_PAD$m = 1;
  const unsigned short `SVG_SPREADMETHOD_REFLECT$m = 2;
  const unsigned short `SVG_SPREADMETHOD_REPEAT$m = 3;

  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `gradientUnits$m;
  [SameObject] readonly attribute `SVGAnimatedTransformList$I `gradientTransform$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `spreadMethod$m;
};

`SVGGradientElement$I includes `SVGURIReference$I;


[Exposed=Window]
interface `SVGLinearGradientElement@I : `SVGGradientElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `x1$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y1$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `x2$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y2$m;
};

[Exposed=Window]
interface `SVGRadialGradientElement@I : `SVGGradientElement$I {
  [SameObject] readonly attribute `SVGAnimatedLength$I `cx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `cy$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `r$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `fx$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `fy$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `fr$m;
};

[Exposed=Window]
interface `SVGStopElement@I : `SVGElement$I {
  [SameObject] readonly attribute `SVGAnimatedNumber$I `offset$m;
};

[Exposed=Window]
interface `SVGPatternElement@I : `SVGElement$I {
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `patternUnits$m;
  [SameObject] readonly attribute `SVGAnimatedEnumeration$I `patternContentUnits$m;
  [SameObject] readonly attribute `SVGAnimatedTransformList$I `patternTransform$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `x$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `y$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `width$m;
  [SameObject] readonly attribute `SVGAnimatedLength$I `height$m;
};

`SVGPatternElement$I includes `SVGFitToViewBox$I;
`SVGPatternElement$I includes `SVGURIReference$I;


[Exposed=Window]
interface `SVGScriptElement@I : `SVGElement$I {
  attribute DOMString `type$m;
  attribute DOMString? `crossOrigin$m;
};

`SVGScriptElement$I includes `SVGURIReference$I;

[Exposed=Window]
interface `SVGAElement@I : `SVGGraphicsElement$I {
  [SameObject] readonly attribute `SVGAnimatedString$I `target$m;
  attribute DOMString `download$m;
  attribute USVString `ping$m;
  attribute DOMString `rel$m;
  [SameObject, PutsForwards=value] readonly attribute `DOMTokenList$I `relList$m;
  attribute DOMString `hreflang$m;
  attribute DOMString `type$m;

  attribute DOMString `text$m;

  attribute DOMString `referrerPolicy$m;
};

`SVGAElement$I includes `SVGURIReference$I;
`SVGAElement$I includes `HTMLHyperlinkElementUtils$I;

[Exposed=Window]
interface `SVGViewElement@I : `SVGElement$I {};

`SVGViewElement$I includes `SVGFitToViewBox$I;