ufoLib2
ufoLib2 copied to clipboard
A library to deal with UFO font sources.
### Update [attrs](https://pypi.org/project/attrs) from **23.1.0** to **23.2.0**. *The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)* Links - PyPI: https://pypi.org/project/attrs ### Update [fonttools[ufo]](https://pypi.org/project/fonttools) from **4.46.0**...
Bumps [black](https://github.com/psf/black) from 23.11.0 to 24.3.0. Release notes Sourced from black's releases. 24.3.0 Highlights This release is a milestone: it fixes Black's first CVE security vulnerability. If you run Black...
Something is going on when renaming layers. ``` u = Font.open("test/data/MutatorSansLightWide.ufo") u.renameLayer("background", "public.background2") u.save() ``` This renames the layer but it is now empty.
One can use `on_setattr=attrs.setters.convert` on a field that has an attrs converter defined (e.g. Font.lib or Glyph.lib) to run the field converter whenever the attribute is set, not just at...
This changes ufoLib2 to use https://github.com/madig/readwrite-ufo-glif for glyph and layer loading.
RoboFont has the very useful glyph attributes `glyph.angledLeftMargin` and `glyph.angledRightMargin` in its API. This is pretty vital when scripting Italic fonts. If I just ask for the basic left/right margin,...
When reading a .glif, the `glyph.height` is set to zero if it is not defined in the file. That makes it impossible to distinguish between manually defined zero height glyphs...
When ufoLib2 reads a UFO that contains a glif file with invalid XML, we do not provide enough information to identify which glif file is causing the problem. ### Example...
A method `def items(self) -> Iterator[str, GlyphOrLayer]`, so one does not have to access GlyphOrLayer to get at the name. See https://github.com/fonttools/ufoLib2/issues/231 for the original discussion.
## Problem Some recent changes (eg, https://github.com/fonttools/ufoLib2/pull/189) have created difficulties for Pylance/Pyright to infer that Font.kerning is of type Kerning: See also a non-property for comparison: Is it because that...