xmlgraphics-batik-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas DeWeese <Thomas.DeWe...@Kodak.com>
Subject RFC: Support for SVG 1.2
Date Fri, 12 Nov 2004 00:00:56 GMT
Hi all,

    This is to document the changes I have made to support SVG 1.2
and SVG 1.0/1.1 in Batik.

    The goal is to as much as possible keep SVG 1.2 code out of the
SVG 1.0 support, while at the same time letting the SVG 1.2 code
leverage the 1.0 code as much as possible.

    There are four major pieces to Batik's support for features of SVG:

	1) DOM	  - This is the SVG DOM element interfaces.  Also
		    Batik will reject as invalid any document that
		    includes elements in the SVG namespace that it
		    doesn't know about.
		Primary 'control' interface: DOMImplementation
	2) CSS	  - This handles the CSS properties that SVG uses.  A
		    couple of new properties are needed to support SVG
		Primary 'control' interface: CSSEngine
	3) Bridge - Maps DOM elements into the Graphics tree (GVT).
		Primary 'control' interface: BridgeContext
	4) GVT	  - The Graphics tree.  New elements are likely to
		    need new graphics tree node types.
		Primary 'control' interface: None

    Towards this end I have introduced a number of new subclasses
and packages:

New Packages:
	gvt/svg12  (I don't like this as GVT is supposed to be svg 	

DOM Specifics:
    Right now there is an SVGDOMImplementation and a class called
    ExtensibleSVGDOMImplementation.  This was problematic for adding
    SVG 1.2 since you really want SVG12DOMImplementation to derive off
    SVGDOMImplementation but you don't want to replicate the work of
    ExtensibleSVGDOMImplementation.  As a result there is now
    o.a.b.dom.ExtensibleDOMImplementation which is a baseclass for
    SVGDOMImplementation, and SVG12DOMImplementation derives off that.

    This still needs some work, but I plan to add an alternate
interface to SAXDocumentFactory that allows one to pass in a
DOMImplementationSelector which is called with the information
from the first 'startElement'.  In our case we will look for the
root element to be an svg:svg element and check the version
attribute to see if it is "1.0", "1.1" or "1.2".  When it is
"1.2" we will use the SVG12DOMImplementation.

CSS Specifics:
    Right now there is a CSSEngine that does all of the CSS work
and SVGCSSEngine derives off that and mostly just provides an
appropriate list of Properties.  SVG12CSSEngine will simply subclass
the current SVGCSSEngine to provide SVG 1.2 properties and shorthands
as needed.   Because the CSSEngine is built by the DOMImplementation
it is easy for the SVGDOM and SVG12DOM Implementations to construct
the appropriate subclass.

Bridge Specifics:

    Right now all the SVG 1.1 bridges are registered by something
called the SVGBridgeExtension.  I've created a subclass called
SVG12BridgeExtension.  Right now the selection (based on the
version attribute) is hard coded into the BridgeContext.  I may move
this to a method on the bridge.UserAgent.

GVT Specifics:

   Not much really interesting here.  I've put any new graphics nodes
or graphics related code in the svg12 subdirectory.

    Most of these changes shouldn't effect people.  The changes I
think might effect people are the changes to the DOMImplementation.
In particular there is no longer an ExtensibleSVGDOMImplementation
(this is what SVGDOMImplementation is) - if there was interest I
could preserve the class as an empty subclass of SVGDOMImplementation.
I'm not worried too much about this since I suspect that most
people only use the SAXSVGDocumentFactory to construct documents.
What do people think should I preserve this class?

To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org

View raw message