Greetings,
I write from the FontForge project. Of particular interest to me is the Spiro spline feature, which was originated around ten years ago by Raph Levien.
One thing I'd like to add, (which would benefit both our projects,) is the ability of FontForge to understand the Inkscape Spiro serialization format.
However, there are several things about the format which to me as an outsider appear to be defects serious enough that I have no idea how to even *import* these splines correctly, much less export our Spiro splines to this format. I would very much like to support the _de facto_ standard Inkscape has originated of supporting Spiro in SVG, but I am lost.
George Williams, FontForge's original author, noticed this defect over eleven years ago.[1] Things are virtually unchanged since then, I checked `git blame`.
Spiro has five point types, not including beginning and ending points. They are:
* G4 curve (o) * G2 curve (c) * Corner (v) * Left Constraint ([) * Right Constraint (])
The ASCII single letters are the normal method of Spiro serialization, as championed by Raph Levien and by us in FontForge.
Inkscape seems to create what I will call a "pseudo-SVG path". So, it is not really an SVG path, but rather is an SVG path which undergoes transformation into the typical Spiro format. Inkscape stores this in the "original-d" attribute.
So, given a Bezier spline with control points defined as (x, y, c1, c2), Inkscape interprets a control point with only (x, y) to be a corner, meanwhile a control point with all four is a G4 curve, and (x, y, c1, NULL) is a left constraint while (x, y, NULL, c2) is a right constraint.
I can probably overcome this, although George Williams was right to be skeptical of this format. There is no way I can see to define a G2 curve in this strange "original-d" format.
Thus, this email. I write to ask a few things. I suppose first of all, what are the chances that we can convince you guys to store Spiro splines in plate[2] format, or another widely accepted Spiro serialization format?
Second, if we cannot convince you to do that, how do I export FontForge spiros which contain G2 control points to Inkscape's original-d format? It's not possible, yes? So should I just silently fail and save them as G4? The curves will not be the same if I do that. Should I disallow export to SVG w/Spiro if glyph contains G2 control point? That seems a steep cost that will just confuse my users, so perhaps I should abandon the whole thing if it comes to that.
Cordial regards, Fredrick Brennan (@ctrlcctrlv)
[1]: https://narkive.com/63FADpG3.4 [2]: https://levien.com/garden/ppedit/README, section "Plate files"