Appendix M: Change History
Changes with the 29 June 2000 SVG Draft Specification
-
Global/miscellaneous changes
- Replaced the two-grammar approach from the March 3 spec
(i.e., Stylable SVG and Exchange SVG) with a single grammar
approach which allows styling either using CSS or via corresponding
XML attributes. The chapter on Exchange SVG has been removed as
a result of this. See the remainder of this change history for
what other changes occurred.
- Various minor error corrections to the sections of the specification
describing the language and the SVG DOM, along with various miscellaneous editorial fixes.
- DOM: Significant changes due to consolidating Stylable SVG and Exchange SVG
into a single grammar. All #ifdef STYLABLESVG and #ifdef EXCHANGESVG logic has been
removed. The various DOM attributes corresponding to the XML presentation attributes
have been removed in favor of a single method, getPresentationAttribute(attr-name),
that is present on interface "Stylable".
- DOM: Cleanup of SVG DOM to ensure that script writers have access to every attribute
which is animatable and to make the SVG DOM use a consistent approach to presenting
the current animated value, with many changes as a result. Defined new DOM interfaces
such as SVGAnimatedAngle, SVGAnimatedNumber, SVGAnimatedLength, etc. and modified
many attributes from previous types (e.g., SVGAngle, SVGNumber, SVGLength) to
the new types (e.g., SVGAnimatedAngle, SVGAnimatedNumber, SVGAnimatedLength).
Removed specific access to animated values from SVGPaint and SVGColor as the animated values of these
properties are available from the override style sheet.
Several bug fixes during this cleanup process where the DOM types did not match
the types in the language.
- DOM: Changed all indices to range from 0 to nItems-1, rather than 1 to nItems,
to conform to the way DOM numbers its indices, including interfaces
SVGList, SVGPath and SVGTextContentElement.
- DOM: Added DOMException NO_MODIFICATION_ALLOWED_ERR for all attributes
which are not readonly in case an attempt is made to change these attributes
when the underlying node is readonly.
- DOM: Moved DOM attribute "className" (corresponds to XML attribute 'class')
into interface SVGStylable as it is available the same places the
'style' attribute is.
-
Changes to Basic Data Types and Interfaces
- Added a new section, Recognized color keyword names, which lists the expanded
list of (147) color keywords, expected to be compatible with CSS3.
- Under the definition of <color>, included a note saying that any of the
user interface / system color keywords names from CSS2 can also be used.
- DOM: Changed attributes on SVGTests to be an SVGList so that it is possible
to access the individual entries in the list. Also, added a hasExtension()
method to match the core DOM call hasFeature().
- DOM: Changed the method names for SVGList from 'insertBefore()',
'replace()', 'remove()' and 'append()' to 'insertItemBefore()',
'replaceItem()', 'removeItem()', and 'appendItem()' in order
to purposely avoid using the same method names as the Node interface in DOM
since the
corresponding methods on SVGList take different parameter lists
than Node.
-
Changes to Document Structure
- Changed the description of the 'use' element to say that a 'use' is rendered
as if it were replaced by a 'g' rather than an 'svg'. The new description
eliminates problems in the areas of undesirable clipping and undesirable redefinition
of CSS units which existed in previous versions.
- Added a paragraph to the description of the 'image' element to make clear
that raster images are fitted into the region (x,y) to (x+width,y+height) and
that SVG files are processed using the standard rules for establishing a new viewport.
- Changed 'system-required' to 'requiredFeatures' and defined
the attribute to indicate whether the specified list of features is supported by
the user agent. Added
'requiredExtensions' to indicate whether the given list of extensions
is supported by the user agent.
- Renamed 'system-language' to 'systemLanguage' to match the upcoming change
with SMIL-Boston. Copied the description for this attribute from the latest SMIL-Boston draft.
- Added a note indicating what happens if an event attribute
is assigned to an element referenced directly or indirectly
via a 'use'.
- Added a paragraph to the description of the 'use' element to
talk explicitly about how the 'visibility' property inherits into
the referenced content of the 'use'.
- Added an additional paragraph to description of 'externalResourcesRequired'
to caution generators of SVG against setting this attribute to 'true' on the
outermost SVG element as that might preclude progressive rendering of the content.
- DOM: Added 'instanceRoot' and 'animatedInstanceRoot' to SVGUseElement and two new
interfaces, SVGElementInstance and
SVGElementInstanceList, to allow handling of events assigned
to elements references by a 'use' element.
-
Changes to Styling
- Added a bullet saying that any of the
user interface / system color keywords names from CSS2 are supported by SVG.
- Major changes to this chapter to reflect the change from the two-grammar
approach in the March 3 spec into a single, consolidated grammar which allows
styling either using CSS or via corresponding XML attributes. The discussion
now talks about properties in general and the two ways of expressing these
properties: via XML "presentation attributes" or CSS style declarations.
- Included simple examples of styling using an XSL external style sheet
and styling using a CSS external style sheet. Revised the example of an
internal CSS sheet.
- Changed the section titled "Default style sheet" to "User agent style sheet"
and clarified that the user agent style sheet shall only have the initial
values specified in this specification when rendering on visual media.
-
Changes to Coordinate Systems, Transformations and Units
- Created a new section, 7.13 Establishing a new user coordinate system via object bounding box,
that explains the rules for when coordinates are relative to an object bounding box.
Consolidated various descriptions that used to be scattered about the specification for
the exact rules concerning the computation of the bounding box and added a clarification
of how bounding box works on 'text' elements.
- Due to implementation difficulty and performance implications, removed
the ability to use unit identifiers within a 'transform' attribute.
-
Changes to Paths
- Minor bug fixes to BNF for path data.
- Changed the name of attribute 'length' to 'pathLength' to avoid
DOM conflict with the 'length' DOM attribute that exists on the Node interface.
- DOM: Major changes to the DOM for path segments. Now,
SVGPathSeg is a base interface, with a different interface defined for
each of the path segment types, such as SVGPathSegMovetoAbs.
SVGPathElement now contains factory methods for creating each
of the path segment types.
-
Changes to Basic Shapes
- Minor fixes to the BNF for the 'points' attribute for 'polyline' and
'polygon'.
- Changed the rules for negative values for rx/ry on 'rect',
r on 'circle' and rx/ry on 'ellipse' elements to be consistent
with the treatment of inappropriate negative values in the rest of the spec.
Now, negative values are an error.
-
Changes to Text
- Added new element 'glyphRun' to allow for a list of glyphs
with different rendering order versus search/selection order. This
feature addresses various internationalized text requirements.
- Added attribute 'textLength' on 'text', 'tspan', 'tref' and 'textPath' elements
to provide an option for an author to indicate the expected length
which a given text string is supposed to take up.
- Added new attribute 'lengthAdjust' to allow a choice between two
methods for fitting text to a particular textLength: either just adjust
the text advance values, or also stretch/compress the glyphs.
- Added attribute 'method' to 'textPath' to allow an option to warp/stretch
text-on-a-path. This facility will make cursive/script fonts (e.g., Arabic)
stay connected when rendered along a path.
- Added attribute 'spacing' to 'textPath' to allow an option for user agents to
apply algorithms to make the rendered results as visual pleasing as possible.
- Added clarification on objectBoundingBox on 'text' elements, documenting that
the bounding box covers the entire 'text' element even when the effect is specified
on a 'tspan' within the 'text' element.
- Expanded the description of 'text-decoration' to describe explicitly how
decorations are to be rendered and which properties are used to render the decorations.
Added an example to illustrate the rules.
- Fixed bug in spec where the default values for 'x' and 'y' on
'tspan' were defined as zero. The intent all along has been that a 'tspan'
continues at the current text position from the previous character.
As a result, there is new wording for what happens when
any of the attributes 'x', 'y', 'dx', 'dy' and 'rotate' are not provided.
-
Changes to Painting: Filling, Stroking and Marker Symbols
- Changed the initial value for 'fill' from 'currentColor' to 'black' due to
feedback from implementers and test developers that 'currentColor' does not
have a real initial value, thus causing any SVG file that uses the initial
value to have unknown rendering.
- For various properties defined in this chapter, specified what happens
when negative or zero values are supplied for items that represent lengths,
distances or percentages. Typically, negative values are an error and
positive values cause the item either to not be rendered or to fallback to some
default rendering.
- State explicitly that a zero stroke-width disables painting of the stroke.
- Changed the description of how to render 'marker' elements to improve clarity
and fix errors in the description. The order of the tranformations is described
differently, particularly how (refX,refY) are factored in.
- Changed the initial value for 'stroke-miterlimit' to 4 (instead of 8) as
this better matches current industry practice and publishing industry guidelines.
- Moved the 'display' property from the Styling chapter into this chapter, and then
moved both the 'display' and 'visibility' properties into their own section entitled
"Controlling visibility". Added a short discussion of the differences between
these two properties.
- Fixed bugs in definition of 'visibility' property. This property, which we
share with CSS2, had been defined as inheritable, but the property is not inheritable.
Also, the initial value was set incorrectly (should be 'inherit').
- Added 'collapse' keyword to 'visibility' property to match CSS2.
'collapse' is defined in CSS2 to mean the same as 'hidden' for everything but tables.
- Added clarification notes on the 'visibility' property about how
invisible 'tspan' elements still take up space and how invisible objects
still might receive events, depending on the value of property 'pointer-events'.
- Included a detailed description of the two options for 'fill-rule' and
included pictures illustrating the concept.
-
Changes to Color
- DOM: Changed the name of CSSColorProfileRule to SVGColorProfileRule
as it directly inherits from interface SVGCSSRule, not CSSRule.
As future version of the CSS OM evolve, this can be renamed to something like
CSSColorProfileRule and the current name can be deprecated.
- DOM: Added a note that SVGColorProfileRule that support for it
is only required for implementations that support CSS.
- DOM: Added DOM interfaces corresponding to elements
'color-profile' and 'color-profile-src'. Factored out
SVGRenderingIntent into a separate interface that is
shared between SVGColorProfileElement and SVGColorProfileRule.
-
Changes to Gradients and Patterns
- Changed the default for gradientUnits and patternUnits from 'userSpace'
to 'userSpaceOnUse' after implementation feedback about difficulty
achieving fast performance with 'userSpace'. The decision was that the
default needs to be something with good performance characteristics.
- Changed the description of 'linearGradient' to say if x1=x2 and y1=y2,
then the gradient is rendered as a solid color matching the last gradient stop.
- Changed the description of 'radialGradient' to say if r=0,
then the gradient is rendered as a solid color matching the last gradient stop.
- Clarified the behavior of linear/radial gradients in object bounding
box space as being rendered perpendicular/circular relative to object bounding
box space, which will result in non-perpendicular/elliptical results if
the bounding box is not square in user space.
- Clarified that the gradientTransform and patternTransform matrices
are inserted immediately to the right (i.e., post-multiplied) to the
transformation matrix
caused by 'gradientUnits' or 'patternUnits'.
- Changed the default values for fx/fy on radial gradients from "50%" to
"same as cx/cy".
- Added a 'spreadMethod' attribute to radial gradients for consistency
with the specification for linear gradients.
- Fixed bug introduced in April 13 spec where default value on y2 in 'linearGradient'
was erroneously set to "100%" instead of the correct value of "0%".
-
Changes to Clipping, Masking and Compositing
- Changed the default for clipPathUnits and maskUnits from 'userSpace'
to 'userSpaceOnUse' after implementation feedback about difficulty
achieving fast performance with 'userSpace'. The decision was that the
default needs to be something with good performance characteristics.
- Masks now use both the luminance of the color channels and the alpha channel.
Previously, there was a very arbitrary and confusing set of scenarios when the luminance
of the color channels were used in a mask. Now, the luminance is used always.
This change makes for a more consistent rendering model and better matches industry practice.
- Changed the initial value on 'clip-path' from "see prose" to 'none'. There is no
actual behavioral change with this change; the old prose described the same affect
as 'none'.
- Explicitly stated that if clipPathUnits="objectBoundingBox", the 'transform'
attribute on the 'clipPath' element is ignored as the coordinate system has become
defined relative to the bounding box on the referencing element.
- Added clarification to the description of 'clip-rule' indicating
that the property only applies to shapes within a 'clipPath' element.
-
Changes to Filter Effects
- Added attribute primitiveUnits as a separate attribute from filterUnits so that
different coordinate systems can be used to specify the filter region versus
the length and coordinate values within the filter primitives. For example, the
filter region might be specified relative to the object bounding box, but the
filter primitives might be specified relative to the current user coordinate system.
The separation is particularly useful if applying a common filter effect to multiple text strings,
where the filter effect region is defined in terms of object bounding box but the
primitives have a common light source position.
- Modified the coefficients for 'luminanceToAlpha' in feColorMatrix as the previous
coefficients were incorrect. (The old formulas were based on NTSC colors rather than sRGB).
- Changed the types of k1,k2,k3,k4 on feComposite to be numbers and removed the erroneous
comment about only 0 and 1 being the only valid values.
- Removed attribute resultScale from feDiffuseLighting as it did not really address the
presumed end user needs, and those needs can be accomplished in other ways.
- Added attribute 'bias' to feConvolveMatrix, which allows a constant
value to be added to each color channel after application of the kernel.
- Added attribute 'preserveAlpha' to feConvolveMatrix, which provides
an option to specify whether the kernel should be applied to all channels
or just the color channels.
- Added attribute 'limitingConeAngle' to feSpotLight, to allow for the effect
of a spotlight to be restricted to a particular conic area.
- Minor updates to code for feTurbulence after actual compilation and use
and verification across different implementations.
- Changed the default for filterUnits and primitiveUnits from 'userSpace'
to 'userSpaceOnUse' after implementation feedback about difficulty
achieving fast performance with 'userSpace'. The decision was that the
default needs to be something with good performance characteristics.
- Added a 'discrete' option to feComponentTransfer for a step function,
which is a common way to achieve a posterizing effect.
- Changed attribute 'lightColor' in 'feDiffuseLighting' and 'diffuseConstant'
into property 'lighting-color' for consistency so that everything that defines
a color value is done via a property. This also provides consistency with
'flood-color' in 'feFlood'.
- Change 'diffuseConstant' and 'specularConstant' to take any non-negative
value instead of just values in the range of 0 to 1. This change coincided
with dropping the 'resultScale' attribute for 'feDiffuseLighting'.
- DOM: Changed the name of DOM attribute "in" to "in1" since "in" is a keyword and
cannot be used as a DOM attribute name.
-
Changes to Interactivity
- Replaced attribute 'enableZoomAndPanControls="true|false"' with
attribute 'zoomAndPan="disable|magnify|zoom"', with the default being
'magnify'. This new formulation and new default helps alleviate unexpected
behavior that was occurring when filters and gradients were specified
using CSS units and the user zoomed in on the graphic.
-
Changes to Scripting
- Fixed bugs in the scripting example.
-
Changes to Animation
- Added an 'mpath' child element to 'animateMotion' so that the motion path
can be defined via a reference to a previously defined 'path' element.
- Added a few sentences under 'animateMotion' to clarify that the
motion animation provides a transformation that is supplemental
to any transformations from the elements 'transform' attribute
or any animations on the 'transform' attribute.
- Fixed bugs in the DOM animation example.
-
Changes to Fonts
- Made it possible for 'font-face' to be a child of 'font' so that
a single 'font' element can contain all information necessary for
other documents and other languages to make use of the font.
- Moved many font-descriptor attributes from the 'font' element to the
'font-face' element, such as 'font-size', font-weight', 'cap-height', etc.
This change reduces redundancy in the language.
- Minor modifications to the list of descriptors in 'font-face' to be the
union of the font descriptors from CSS2 and any new font descriptors
that are emerging from the work on XSL.
- Made the 'unicode' attribute on the 'glyph' element #IMPLIED to
allow for definition of glyphs which do not have corresponding
code points in Unicode. Such glyphs can only be accessed via
the 'altGlyph' facility.
- Added class/style/presentation attributes to the 'font' element per
decision that all container elements would allow all properties.
- Clarified that font metrics and the initial coordinate system for glyphs
is based on the CSS2 model of an em square. Also, clarified that the coordinate
system for SVG fonts has the Y axis pointing up to match common practice
with other font formats.
- Changed the default for attribute unicode-range from "U+0-7FFFFFFF" to "U+0-10FFFF",
as no XML characters beyond that range.
-
Changes to SVG DTD
- Substantial changes to the DTD to accommodate the consolidation of
Stylable SVG and Exchange SVG (from the March 3 spec)
into a single language which has both XML "presentation attributes"
and the ability to style with CSS (i.e., a 'style' element and a 'style' attribute).
Instead of three DTD files (shared, stylable, exchange), there is now only one DTD file.
All of the conditional logic based on the names "SVGStylable" versus "SVGExchange"
from the March 3 specification has been removed
- Substantial editorial cleanup of the DTD, including reordering the element definitions
to match the order in which they appear in the spec, grouping element definitions by
chapter, adding a table of contents with links to each section of the DTD,
comments over each section of the DTD, new names for
various entities, etc.
- Substantial cleanup of the list of "presentation attributes" on the various elements.
The rule is that if a given attribute collection might apply to a given element or
any of its descendants, then that collection of presentation attributes is available
on the given element. Defined a new entity PresentationAttributes-All which contains
a complete list of the presentation attributes. All container elements and the 'use'
element now reference this new entity so that all presentation attributes are
available for these elements.
- Unified the content models for 'mask', 'pattern', 'symbol', 'marker', 'glyph',
'missing-glyph' and 'a' for greater consistency and to
give implementers a greater ability to share code.
- Added 'desc' and 'title' to 'tspan', 'tref', 'textPath',
'linearGradient', 'radialGradient' and 'filter' for more DTD consistency.
- Allow a 'metadata' sub-element wherever a 'desc' or 'title' can go so that
metadata can be specified locally for each distinct container and graphics element.
- Made changes to ensure that attribute 'class' existed
everywhere where attribute 'style' existed, which means adding
'class' to 'feFlood', 'glyph' and 'missing-glyph'.
-
Changes to SVG DOM
- Added a section on "Invalid values" to clarify what happens
when an invalid value is assigned to an attribute.
-
Changes to IDL
- The IDL reflects all of the changes to the DOM mentioned in other parts of
this change history. Most significantly, the IDL reflect changes
to accommodate the consolidation of
Stylable SVG and Exchange SVG (from the March 3 spec), such
as the removal of all #ifdef STYLABLESVG and #ifdef EXCHANGESVG.
-
Changes to Java language DOM binding
- To accommodate the consolidation of
Stylable SVG and Exchange SVG (from the March 3 spec),
there is now only a single Java binding instead of two separate ones.
- Various fixes to the Java binding based on reports from implementers
have been incorporated into the Java binding that accompanies this draft.
-
Changes to ECMAScript language DOM binding
- To accommodate the consolidation of
Stylable SVG and Exchange SVG (from the March 3 spec),
there is now only a single ECMAScript binding instead of two separate ones.
- Added constants to the ECMAScript language binding as is now done
with other W3C specifications.
-
Changes to Conformance Criteria
- Modifications associated with replacing the two-grammar approach from the March 3 spec
(i.e., Stylable SVG and Exchange SVG) with a single grammar
approach which allows styling either using CSS or via corresponding
XML attributes. Now, all Conforming SVG Viewers must support the ability
to assign styling properties via the XML "presentation attributes", and any
CSS-enabled viewer must support the ability to assign styling properties via
CSS syntax in the form of CSS style sheets or style rules within a 'style' attribute.
-
Changes to Minimizing SVG File Sizes
- Updated the gzip compression table using five SVG files from the 20000608 test suite.
-
Changes to References
- Moved Authoring Tools Accessibility Guidelines into the normative section
as these guidelines are now a Recommendation and conformance to these guidelines
is a requirement for authoring tools that are Conforming SVG Generators.