SVG Working Group (WG) has demonstrated considerable willingness to
collect input from the community about the sorts of features that the language
should contain to best support the needs of its user community. Like its cousin,
HTML, SVG has a most remarkably divergent set of user needs. Given its emphasis
on material displayed on planar devices, and given the intrinsic importance of
spatial relations in the presentation of content using a spatial metaphor, SVG's
user community may be expected to grow to embrace and support more diversity
even than HTML, which at its core is (with the exception of the <table> element
and possibly other elements related to spatial arrangement) 1.5 dimensional:
that is, its fundamental metaphor consists of written speech (text), with
occasional embedded belches of multimedia (<object>, <img>, <audio>, <video>)
plus graph theoretic cross-references that provide a modest foray into
translinearity.
SVG has every bit as much semantic and pragmatic reference to
meaning as HTML, it is every bit as hypertextual, but its core metaphor for
expression is the plane rather than the line. As such it has come to attract,
already, artists, physical and social scientists, and mathematicians whose needs
for expression transcend the ability to belch static frames generated elsewhere
into an otherwise translinear stream of text. For this community,
multidimensional space is not the occasional 2D painting on the wall of an
otherwise 1.5 dimensional hypertext, rather for n>=2, n- dimensional space is
home.
In addition to being quite close to wrapping up one specification, the WG has
been working hard on another and has announced both that it is focusing some of
its efforts into extensions of the spec into focused areas of initiative (such
as filters, gradients, transforms, accessibility, etc.) and that it is
interested in engaging the community in broader dialogue about its needs. In
response to community feedback it is already planning to consider extensions
into non-affine transformations, richer sets of filter primitives, and improved
control over layout and flow.
At the same time, it is important for the SVG community to respect the facts
that a) standards development is hard work involving intense amounts of
behind-the-scenes work with validation, test suites, conformance and other
magical things I don't pretend to understand b) the WG already has a large
agenda mandated by the standards process and c) there are not that many
individuals in the WG to be able to do all the work already present. In part,
this is why the SVG-IG has come into existence: to help with the workload (and
hopefully, to shrink it at least as much as we add to it.)
I will discuss the following: the <contour>, an object consisting of
concentric subpaths (closed curves) that instructs the gadget-browser[2] to
interpolate those subpaths into something resembling a path filled with a
gradient that is considerably more flexible than the radial or linear gradients,
applied as effects.
A syntactically similar notion is the <superpath>. Like the <contour> it has
<path> elements within it, but those path elements are never closed by z in
their "d" attribute and represent the different borders that a given region
might share with its neighbors (as in a geopolitical map). It is likely to be
used both for map processing, graph theoretic purposes (like diagramming), animation,
and for layout (that is more flexible than the HTML table or its CSS
counterparts since it affiliates regions, connections and boundaries of
arbitrary partitions of the plane)..
Also included (with increasingly less clarity in my mind as to exactly how
they would work are the doodle, the editable attribute for <path>s and for
certain <animate>s, the editable <sound> and the fractal (is it a basic shape or
is it a filter?).
Speaking of filters, I believe the universe of possible filters (like the
class of permutations of strings) is a large set. While, we might observe that a
small number of primitives may suffice to generate all expressions in that
expressive realm[3] I am not clear how best to optimize the size of that set,
and to make matters worse, I think the boundary between filters and transforms
occasionally becomes blurry -- perhaps because of Photoshop's inclusion of
"distort" options in the fillter menu while simpler transforms live in the edit
menu. Given the already rather high learning curve (so It would seem based on
the expertise level of the audience that might show up for a workshop on
filters) associated with filters, I think we should exercise caution about
expanding that set too quickly. I am reminded of how quickly Kai's Power Tools
became accessible as Photoshop plugins In the 1980's so we may wish to consider
extensible grammars in this area. Nevertheless, I have three things to say on
this topic: spherize and pinch (as either transforms or filters) are quite handy
(owing to their relationship to common lenses) and a mechanism for weaving
pictures together as in http://srufaculty.sru.edu/david.dailey/javascript/weave/weaframe2.html
could prove useful both in artistic and cryptological communities[4]. Last and
foremost it'd be nice to have a filter to convert bitmaps to paths like
apparently happens in the diffusion curves video at http://www.youtube.com/watch
. The fellow from Los Alamos at SVG Open 2007 was doing pretty cool stuff with
SVG and realtime data processing of scenes -- his algorithms were quite fast
though USDOE has gotten rather stuck with cost recovery lately so I don't know
if the stuff is still covered by the "works of the US govt / copyright" proviso.
If nothing else the stuff that Adobe was doing in its early Illustrator (88) and
the stuff in Inkscape (which is pretty darn sophisticated) and NIH image would
give us an ample start in that direction.
The <doodle> is a somewhat declarative alternative to the <path>. Rather than
drawing it by enumerating coordinates and transitions as in its simpler cousin
<path>, one enumerates coordinates and transitions,but also extrapolations,
iterations and simple enumerated, conditional and recursive operations.
It and the others will be discussed in more detail now.
Basically, the contour and the superpath are like groups <g>, but all the
visible elements inside are <paths>. Each gives explicit instructions to how
those objects inside are combined, extrapolated, animated on the screen and how
they are processed through certain JavaScript (or other language) calls. (I know
the Spec refers to ECMAscript rather than JavaScript but ours is, after all, not
a standards group and it is probably best to keep a sense of informality, and
even, occasional humor to our discussions.)
As mentioned earlier, <contour> is an object consisting typically of
concentric subpaths (closed curves). It interpolates those subpaths into
something resembling a single path filled with a gradient that is considerably
more flexible than the radial or linear gradients, applied as effects. It is
like a contour map, but since the border (stroke) is not required, it resembles,
when the curves are concentric, a shape gradient that may have multiple shapes
inside. I had started writing this up before I had a chance to look at the stuff
that we heard about concerning Diffusion curves, so I don't know how the two
ideas compare. This idea is straightforward to implement and would rely on some
code the browser implementers have probably already built (like following
movement along a path). So with that in mind, here goes:
Their fill must be either a simple color or a gradient (no patterns or
filters). If two fills of type gradient are adjacent (in markup) then both must
be of the same type (radial or linear). If two gradients of different type are
adjacent then one must be of the null type (e.g. a simple fill=color) so as to
allow a nonambiguous interpolation.