Appendix M: Change History

Changes since the last public draft specification (02August2000)

Separated out the Expanded Table of Contents similar to how it was
done with the DOM2 Proposed Recommendation.

Added copyright page similar to how it was
done with the DOM2 Proposed Recommendation.

Various minor editorial changes to fix typographical errors.

DOM: Various cleanups relating to readonly attribute handling in the DOM.
Previously, some DOM attributes which referenced non-primitive types
were classified as read/write, which was a mistake. Only primitive types
can be read/write. As a result, various DOM attribute were changed
to readonly. Some attributes were defined to raise an exception on setting
if the referenced object cannot have its content changed.

DOM: Removed SVGList interface due to feedback from implementers that having
a template base class approach using a "Object" class is problematic.
Instead, replaced SVGList with a series of SVGxxxList interfaces
(SVGStringList, SVGPathSegList, SVGPointList,
SVGLengthList, SVGNumberList and SVGTransformList), all of which share
the exact same set of attributes and methods. A note has been added to
each of these interfaces indicating that an implementer could choose
to implement these interfaces using a common base class. Updated
the definitions of SVGLengthList, SVGNumberList and SVGTransformList
to no longer inherit from SVGList, but instead define all of the attributes
and methods that used to be on SVGList on the given interface directly.
Added new interfaces SVGStringList, SVGPathSegList and SVGPointList.
Also, removed createItem() method from all of the list elements and instead
made sure that create methods exist for all
object types used as items in SVGXXXList interfaces, usually on the
SVGSVGElement.
Added a clarification to the SVGXXXList interfaces that, for
methods insertItemBefore(), replaceItem() and appendItem(),
if parameter newItem is already in a list, then it is removed from the
old list before being inserted into the specified list.

DOM: Removed methods createRGBColor and createSVGICCColor from interface SVGColor.
Changed parameters to setRGBColor() and setRGBColorICCColor() to DOMStrings.
These changes were done after implementation feedback that pointed out that
an RGBColor object can exist only when attached to a CSSStyleDeclaration.

DOM: Removed method getAnimatedPresentationAttribute(), since presentation attributes
are not animatable as attributes but only as the properties to which they correspond.

DOM: Defined base interface SVGLocatable which has all of the attributes and methods
for SVGTransformable except for 'transform', and changed SVGTransformable to inherit
from SVGLocatable and only add 'transform'. Thus, SVGTransformable is identical
to what it was before, but there is a new interface SVGLocatable. This new interface was created
so that SVGSVGElement could inherit from SVGLocatable, thereby allowing
scripters to call useful methods such as 'getBBox()' from an SVGSVGElement.

Changed the 'width' and 'height' attributes on the 'svg' element
to #IMPLIED versus #REQUIRED, meaning that these attributes no longer
have to be supplied. If not provided, a default value of 100% will be used.
This change should have no effect on existing content. It just provides
a suitable default as a convenience to content creators.

Changed 'externalResourcesRequired' to be non-inheritable (from an attribute inheritance perspective)
and non-animatable.
Implementers pointed out that specifying the attribute on a container
causes the scope of the attribute to effect the children; thus, it did not need
to be cast an an inheritable attribute. The fact that previous versions shows this attribute
as being animatable was considered an error, as attributes having to do with basic
structuring are not supposed to be subject to animation.

Moved the description 'externalResourcesRequired' into its own section. It used to
be bundled in the "Common attributes" section, but it has structural implications,
so a new section was created just after "Conditional processing."

Fix typo under 'requiredExtensions' section (5.8.4) where
the described referred to 'requiredFeatures' rather than
'requiredExtensions'.

Fixed editorial errors in descriptions of some methods in SVGSVGElement
where it used to say there was no return value when in fact there was.

DOM: Removed methods createRGBColor and createSVGICCColor from interface SVGSVGElement.
These changes were done after implementation feedback that pointed out that
an RGBColor object can exist only when attached to a CSSStyleDeclaration.

Added %descExt and %titleExt to DTD definitions for 'desc' and 'title' elements
for consistency with the rest of the DTD. There should be no backwards compatibility
impact on such a change.

DOM: Changed SVGSVGElement to inherit from SVGLocatable so that scripter can call
useful methods such as 'getBBox()' from an SVGSVGElement.

Additional clarification about how presentation attributes fit into the CSS cascade.
The new language says that the presentation attributes
are conceptually
inserted into a new author style sheet which is the first in the author style sheet collection,
and states explicitly that !important declarations are not allowed with presentation attributes.

Modifications to user agent style sheet in the area of which elements have
'overflow:hidden' by default to make consistent with other areas in the language.
Now, 'svg', 'symbol', 'image', 'marker', 'pattern', and 'foreignObject' have 'overflow:hidden'

Clarified that animation of presentation attributes is
equivalent to animating the corresponding property.

Based on feedback from implementers that the absolute and percentage CSS units
specifiers were very difficult to implement and would cause major impact
on performance, and with the observation that the processing rules for CSS units
produced considerable confusion in the user community and often did not produce
the results users expected, the CSS unit processing rules have been revamped to enable
simpler implementation, faster processing and more predictable behavior.
With the new CSS unit processing rules, an implementation no longer will
have to bubble up to the nearest viewport element
and perform major computation to determine how large "1px" is.
The intent behind the old rules was to allow for certain parts of the
graphic (e.g., stroke widths or font sizes) to be invariant across zoom levels,
but the previous CSS unit processing rules did an incomplete job of addressing these needs.
The feeling is that the ability to achieve invariance requires a more thorough
feature set which will be considered in a future version of the language.
For now, developers will have to use scripting to achieve invariance across zoom levels.

Added clarification that "translate(<tx>)" is equivalent to "translate(<tx>,0)".

Correctly a poorly worded paragraph that talked about the meaning of percentage values
using in conjunction with a user coordinate system established using object bounding box space.

DOM: As part of removing SVGList (see note on
Basic Data Types and Interfaces, above),
replaced all references to SVGList with references to an appropriate SVGxxxList interface.

Fixed editorial errors where an incorrect parenthetical comment had been
included in previous drafts in the descriptions of 'polyline' and 'polygon'
which implied that CSS units might be allowable on the coordinate values.
These parenthetical remarks have been removed. The previous BNF was correct
in showing that only user coordinates are allowed.

DOM: As part of removing SVGList (see note on
Basic Data Types and Interfaces, above),
replaced all references to SVGList with references to an appropriate SVGxxxList interface.

Based on feedback from implementers and content creators over interoperability
issues,
added property 'kerning' which allows for author control over enabling
or disabling the auto-kerning tables found in many fonts.

Based on feedback from reviewers and implementers, modified the definitions
of elements 'altGlyphItem' and 'glyphRef'. Now, if an 'altGlyphDef' consists
of a simple list of 'glyphRef' elements, then all referenced glyphs must be
available and all will get rendered. If an 'altGlyphDef' consists of
a list of 'altGlyphItem' elements, then the first 'altGlyphItem' is chosen
whose children 'glyphRef' elements are all available, and all of the referenced
glyphs from the first 'altGlyphItem' whose glyphs are all available will get rendered.

Added styling attributes to the 'altGlyph' element as it was noticed that
it was not possible to color the rendered contents of an 'altGlyph'.

Removed 'glyphRun' element after feedback from I18N interest group.
Most of the facilities available from 'glyphRun' are achievable using
the 'altGlyph' element now that 'altGlyph' has x/y/dx/dy/rotate.

Added event attributes to the 'altGlyph' element to make it consistent
with other text elements and to make the language definition match the DOM definition.

DOM: Added 'x', 'y', 'dx', 'dy', 'rotate' attributes to SVGAltGlyphElement
by making it inherit from SVGTextPositioningElement instead of SVGTextContentElement.

Added 'x', 'y', 'dx' and 'dy' attributes to the 'glyphRef' element
to allow for individual glyphs to be positioned within the font cell
for the case where multiple component glyphs are used to render a given sequence of characters.

DOM: Added 'x', 'y', 'dx' and 'dy' to the SVGGlyphRefElement.

Added a clarification on how the 'transform' attribute works on 'path' elements
referenced by a 'textPath' element.

DOM: As part of removing SVGList (see note on
Basic Data Types and Interfaces, above),
replaced all references to SVGList with references to an appropriate SVGxxxList interface.

Added a clarification for 'lengthAdjust' attribute to say that intermediate
character positions are not predictable because user agents might employ
different algorithms for stretching/compressing to still achieve optimal typography.

Fixed error in DTD definition of 'glyphRef' element where xlink:href was #REQUIRED. It
has been changed to #IMPLIED. Added clarification that you either use xlink:href or
font selection properties plus format plus glyphID. If neither is provided, then
the given 'glyphRef' element is not processed. Also, xlink:href, if present, has precedence over
the other properties and attributes.

Added a clarification about ligature formation, stating explicitly that ligature formation
should be disabled across different text nodes, different text chunks, or when inter-character
spacing is other than the default.

Added a clarification that baseline shifts can nest, that nested baseline shifts are additive,
and that baseline-shift values are supplemental to all other positioning and alignment features.

Removed 'auto' keyword from 'rotate' attribute on 'tspan', etc. after implementation feedback
that 'auto' had the same meaning as zero.

DOM: Removed interfaces SVGTextRotate and SVGAnimatedTextRotate due to removal of 'auto'
keyword from 'rotate' attribute on 'tspan', etc. Changed 'rotate' attribute
on interface SVGTextPositioningElement from SVGAnimatedTextRotate to SVGAnimatedNumberList.

DOM: Changed SVGTextPathElement to inherit from SVGTextContentElement instead
of SVGTextPositioningElement as 'textPath' does not have attributes x/y/dx/dy/rotate.

Changed the initial value for 'fill-rule' and 'clip-rule' to "nonzero" instead
of the old default value of "evenodd" due to implementation feedback associated
with SVG fonts where it was discovered that "evenodd" produced undesirable results.
The new default also is in better alignment with the desktop publishing world
(e.g., PostScript, PDF and associated authoring tools)
and the Java2D implementation platform as "nonzero" is the default in these cases.

Removed 'userSpace' as a possible value for 'markerUnits'
after implementation feedback about how difficult these features are to implement
and their impact on performance.

Removed reference to filters for 'color-interpolation' property, as the definition
for filters is that they are all done in linear RGB space.

Changed the icc-color(...) function to permit zero-or-more color values instead
of the previous one-or-more color values. This change came from implementation feedback
where the DOM interface for a list of color values would have to be implemented
differently than the other lists in the DOM.

New wording for the keywords 'auto', 'optimizeQuality' and 'optimizeSpeed' for
property 'image-rendering'. Stated explicitly that 'optimizeQuality' means
"at least as good as bilinear resampling" and that 'optimizeSpeed' means
"at least as good as nearest neighbor resampling."

DOM: Changed parameters on interface SVGPaint
for setPaint() to DOMStrings.
These changes were done after implementation feedback that pointed out that
an RGBColor object can exist only when attached to a CSSStyleDeclaration.

Clarifications about the relationship between markers and the 'overflow' property.
The clarifications note explicitly that markers do not establish a new viewport, but the 'overflow' property
applies by default (i.e., a clipping rectangle is created by default).

Reworded some of the sections on markers using the same approach and terminology
as the corresponding write-ups on patterns. The actual behavior of markers is unchanged.

Added definition of property 'color-profile', which was left out of
earlier specifications inadvertently. This property allows the SVG content
to assign or override the color profile for a given raster image resource.

Fixed error in definition of 'src' descriptor in @color-profile. The initial
value was "auto", but this wasn't one of the possible values. The
initial value is now "sRGB".

Fixed syntax for 'src' descriptor for @font-face and added 'local' attribute to
'font-face' element to allow for specification of local profiles.

Added 'class' and 'style' attributes and presentation attributes 'stop-color'
and 'stop-opacity' to 'linearGradient' and 'radialGradient' to be consistent
in the handling of properties across the language.

Removed 'userSpace' as a possible value for 'gradientUnits' and 'patternUnits'
after implementation feedback about how difficult these features are to implement
and their impact on performance.

Changed the defaults for 'gradientUnits' and 'patternUnits'
to objectBoundingBox. Changed meaning of 'patternUnits' to only apply to attributes x/y/width/height
and added new attribute 'patternContentUnits' to indicate the coordinate system
of the contents of the pattern. These changes were done to adapt to other
spec changes regarding CSS units and percentages.

Fix typographical errors in description of xlink:href attribute on
patterns. Previously, the text said "If this element has children", and has been fixed
to say "If this element has no children". Also, the last sentence
incorrectly referred to referenced gradient stops, and now refers
to referenced children.

Fixed editorial error where spreadMethod had a default value. Now,
the DTD has been modified to define spreadMethod to be #IMPLIED.
(Other
gradient attributes were defined to be #IMPLIED as this is necessary
for the xlink:href inheritance mechanism to work properly.
Not doing this for spreadMethod was an oversight.)

More detailed description of how patterns behave, including
clarifications about the relationship between patterns and the 'overflow' property.
The clarifications note explicitly that patterns do not establish a new viewport, but the 'overflow' property
applies by default (i.e., a clipping rectangle is created by default) and
the origin for the pattern definition is always aligned to the top/left of the
pattern tile.

Changed the initial value for 'fill-rule' and 'clip-rule' to "nonzero" instead
of the old default value of "evenodd" due to implementation feedback associated
with SVG fonts where it was discovered that "evenodd" produced undesirable results.
The new default also is in better alignment with the desktop publishing world
(e.g., PostScript, PDF and associated authoring tools)
and the Java2D implementation platform as "nonzero" is the default in these cases.

Removed 'userSpace' as a possible value for 'clipPathUnits' and 'maskUnits'
after implementation feedback about how difficult these features are to implement
and their impact on performance.

Changed the defaults for 'maskUnits' and 'x', 'y', 'width' and 'height' on the 'mask' element
to objectBoundingBox, -10%, -10%, 120% and 120%, respectively.
Changed meaning of 'maskUnits' to only apply to attributes x/y/width/height
and added new attribute 'maskContentUnits' to indicate the coordinate system
of the contents of the pattern. These changes were done to adapt to other
spec changes regarding CSS units and percentages.

Removed 'userSpace' as a possible value for 'filterUnits' and 'primitiveUnits'
after implementation feedback about how difficult these features are to implement
and their impact on performance.

Changed the defaults for 'filtersUnits' and 'x', 'y', 'width' and 'height' on the 'filter' element
to objectBoundingBox, -10%, -10%, 120% and 120%, respectively.
These changes were done to adapt to other
spec changes regarding CSS units and percentages.

Default values have been provided for all filter effect attributes which
did not have default values in previous versions of the specification.

Fix error in description of height of feMorphology kernel ("2*" was missing).

Fix error in Ly formula for feDiffuseLighting. Previously, the formula said
"Ly = -sin(azimuth)*cos(elevation)". Now, the formula removes the minus sign
and says "Ly = sin(azimuth)*cos(elevation)". This change makes angles in feDiffuseLighting
consistent with angles in the rest of the specification.

Revised version of pseudo code for feTurbulence. Changes include:

The old code did not account for the fact that fact that there can be separate X and Y values for baseFrequency. The new code does.

As part of redefinition of CSS units (see change notes above under
Coordinate Systems, Transformations and Units),
removed the 'zoom' keyword on "zoomAndPan" attribute. It is no longer
possible to have aspects of a document that are invariant with zooming
except via scripting.

Fixed editorial mistake where property and presentation attribute 'pointer-events'
was shown to allow values 'visibleFillStroke' and 'fillstroke', whereas these
keywords were eliminated previously. The descriptions of these keywords had been
eliminated, but the property summarizes and DTD still showed these keywords.

In response to implementation feedback, made a minor change to the description of how
'pointer-events' relates to text and images. Now, there are five possible options (equivalent
to none, all, visible, painted and visiblePainted), whereas before there were
only three (none, all, visible).

Removed a reference to keyboard events in introductory section
as keyboard events are not included in the DOM2 specification.

Added 'tspan', 'tref', 'textPath' and 'altGlyph' to content model for 'a' - not having
this was an oversight that prevented hyperlinks around text that might have
different styling attributes per character.

Added attribute vert-orig-x and vert-orig-y to 'glyph' and 'missing-glyph'
due to implementation feedback indicating that it is sometimes necessary
to specify different origins for vertical text on a per-glyph basis.
The same attributes still exist on the 'font' element, but are now
just defined to be the default values in case the glyph doesn't provide an override.

Fixed typos in the descriptions of attributes 'horiz-adv-x' and 'vert-adv-y'
on the 'glyph' element.

Created a new section called "Glyph selection rules", which contains text
extracted from the description of the 'unicode' attribute. The extracted text
dealt with user agent character-to-glyph mapping behavior, not the 'unicode' attribute per se.

Explicitly stated that the default kerning value is zero.

In response to implementation feedback,
changed the name of attribute 'vert-text-orient' to 'orientation' with values 'h', 'v' or nothing
to indicate whether the given glyph can be used only for horizontal text,
only for vertical text, or the default that it can be used for either.

Renamed attribute 'arabic' to 'arabic-form'.

Renamed attribute 'han' to 'lang' and generalized its definition. Now,
the given glyph can be used if the xml:lang for a text string matches
one of the languages specified in the 'lang' attribute on the glyph.

Fixed the list of baselines to match the XSL list of baselines. Thus,
'baseline' becomes 'alphabetic' and 'mathline' becomes 'mathematical',
'centerline' and 'topline' have been removed (these are computed baselines,
not font baselines), and 'v-alphabetic', 'v-ideographic', 'v-hanging' and
'v-mathematical' have been added.

Clarified the description of the 'hasFeature' method call to indicate that all
SVG features are version 1.0, whereas features from other specifications have
the version numbers documented in the relevant other specification.