Are you a student qualified to run for Summer of Code 2020? I'm willing to mentor the following project for librsvg.
Project: Revamp the text engine in librsvg
Librsvg supports only a few features of the SVG Text specification. It requires extra features to be really useful:
-
Proper bidirectional support. Librsvg supports the
direction
andunicode-bidi
properties for text elements, among others, but in a very rudimentary fashion. It just translates those properties to Pango terminology and asksPangoLayout
to lay out the text. SVG really wants finer control of that, for which... -
... ideally you would make librsvg use Harfbuzz directly, or a wrapper that is close to its level of operation. Pango is a bit too high level for the needs of SVG.
-
Manual layout of text glyphs. After a text engine like Harfbuzz does the shaping, librsvg would need to lay out the produced glyphs in the way of the SVG attributes
dx, dy, x, y
, etc. The SVG Text specification has the algorithms for this. -
The cherry on top: text-on-a-path. Again, the spec has the details. You would make Wikimedia content creators very happy with this!
Requirements: Rust for programming language; some familiarity with Unicode concepts and text layout. Familiarity with Cairo and Harfbuzz would help a lot. Preference will be given to people who can write a right-to-left human language, or a language that requires complex shaping.