Working with kerning & groups in code has been a pain every time I've had to do it, and a lot of that comes from having relatively basic functionality not being available because both Python & Rust libraries; they just expose raw dictionary/map types and provide zero convenience methods. This has become somewhat of a pet peeve of mine and something I'd like to fix.
Some of my ideas are as follows, and I'd like to gauge interest/discuss them before starting work:
Kerning look-up methods (one with group resolution, one without)
Kerning/Group modifying methods that uphold invariants (as opposed to validation on write-to-disk)
Generating reverse look-ups for kerning & groups
Transparent caching of reverse look-ups to make resolving kerns faster (transparent as in, requires no thought/involvement from the library user at any point, will require interior mutability)
Renaming group method
Culling empty groups method
Culling 0 kerns method
The breaking change would be privatising Font.kerning and Font.groups and/or changing the underlying type. Interested in hearing any use cases for kerning/group information beyond what I've outlined in my points. Iterating over groups/kerning would of course still be available
Working with kerning & groups in code has been a pain every time I've had to do it, and a lot of that comes from having relatively basic functionality not being available because both Python & Rust libraries; they just expose raw dictionary/map types and provide zero convenience methods. This has become somewhat of a pet peeve of mine and something I'd like to fix.
Some of my ideas are as follows, and I'd like to gauge interest/discuss them before starting work:
The breaking change would be privatising
Font.kerning
andFont.groups
and/or changing the underlying type. Interested in hearing any use cases for kerning/group information beyond what I've outlined in my points. Iterating over groups/kerning would of course still be available