# Change Log

## 0.10.0

Compiler changes:

- Support entry 1093 (PostScript Hinting Options)
- Support entry 1136 (PCLT Table)
- Support entry 1138 (fontnames)
- Support entry 1141 (Custom CMAPs)
- Support entry 1250 (unicodes)
- Support entry 1253 (Glyph Unicode Non-BMP)
- Support entry 1254 (Primary Instances)
- Support entry 1264 (ttinfo)
- Support entry 1265 (gasp)
- Support entry 1266 (TrueType Stem PPEMs 2 And 3)
- Support entry 1268 (TrueType Stem PPEMs)
- Support entry 1269 (TrueType Stems)
- Support entry 1271 (vdmx)
- Support entry 1294 (Global Guides)
- Support entry 1296 (Global Guide Properties)
- Support entry 1505 (Master Location)
- Support entry 1515 (Axis Mappings Count)
- Support entry 1516 (Axis Mappings)
- Support entry 1523 (Anisotropic Interpolation Mappings)
- Support entry 1524 (TrueType Stem PPEMs 1)
- Support entry 1536 (PostScript Info)
- Support entry 1742 (Mapping Mode)
- Support entry 1743 (OpenType Export Options)
- Support entry 1744 (Export Options)
- Support entry 2008 (Links)
- Support entry 2009 (mask)
- Support entry 2010 (Glyph Hinting Options)
- Support entry 2011 (mask.metrics)
- Support entry 2018 (Glyph GDEF Data)
- Support entry 2020 (Glyph Anchors Supplemental)
- Support entry 2023 (unknown)
- Support entry 2024 (OpenType Metrics Class Flags)
- Support entry 2026 (OpenType Kerning Class Flags)
- Support entry 2027 (Glyph Origin)
- Support entry 2028 (mask.metrics_mm)
- Support entry 2029 (Glyph Anchors MM)
- Support entry 2031 (Glyph Guide Properties)
- Compile "marker" entries (271, 513, 527) with HexStringCompiler
- Compile 1121 (vendor) padded to 4 characters
- Add option to pad a written string with null bytes
- Support writing unsigned encoded values
- Don't write empty glyph fields

Parser changes:

- Add `read_str_with_len` method
- Don't strip spaces from strings

Breaking changes:

- Rename entries `"Binary cvt Table"` to `cvt`, `Binary prep Table` to `prep`, `Binary fpgm Table` to `fpgm` to match FLS5 Python API
- Change decompiled format of `Custom CMAPs` from `dict` to `list`
- Fix guide properties parsing (separate lists for h/v directions)


## 0.9.6

Compiler changes:

- Support entry 1255 (TrueType Zones)
- Support entry 1273 (TrueType Zone Deltas)

## 0.9.5

Parser changes:

- Add entry 1093 (global PostScript Hinting Options)
- Add entry 2010 (Glyph Hinting Options)

UFO:

- Store `postscriptDefaultWidthX` and `postscriptNominalWidthX`
- Warn about duplicate hint sets per point

Other:

- Store "links" in `VfbGlyph`
- Store global/glyph PS hinting options when decompiling glyphs
- Use separate `HintSet` and `UfoHintSet` types
- Add methods to handle hints and hint sets, links to hints to `VfbGlyph`
- Improve `VfbGlyph.draw()` (don't go through UFO conversion)


## 0.9.4

Parser changes:

- Add entry 1266 (TrueType Stem PPMs 2 and 3)
- Add entry 1295 (Global Mask)
- Add entry 2011, 2028 (Mask Metrics)

UFO:

- Export FL mask layer as background layer in UFO
- Add verbose output option (`-v/--verbose`) to vfb3ufo
- Fix export of head flags
- Improve logging, throw an error if no UFO could be extracted
- Synthesize master names if they are not present in the VFB


## 0.9.3

Parser changes:

- Add new entry `pcl_chars_set` (1059)
- Add entry 2034, String
- Remove unused read_float
- Handle read_double right in StreamReader
- Rename and use size constants (6502088)
- Use our own hexStr/deHexStr

Compiler changes:

- Implement writing double-precision floats
- Support compiling entries without data
- Add HexStringCompiler for fallbacks
- Add more numeric compilers
- Add compiler for UnicodeRanges
- Improve hash update error
- Handle json export in a separate file
- Write kerning gid as int (comes in as str from json)
- Use HexStringCompiler for binary tables
- Remove write_float(s) from compiler
- Use our own hexStr/deHexStr


## 0.9.2

- Update dependencies
- Fix duplicate UFO info key mapping for `styleMapFamilyName`
- Fix deprecated entry in `pyproject.toml`
- Remove debug logging for glyph names
- Improve error message for entries with no compiler
- VfbEntry: Improve init and id setter logic
- Better message if an entry could not be decompiled

Breaking changes:

- Rename entries `x_u_id` to `xuid`, `x_u_id_num` to `xuid_num` to match FLS5 Python API


## 0.9.1

- Fix error in `vfbcu2qu` introduced in the previous release.

## v0.9.0

Parser changes:

- Change the internal `VfbHeader` format

Compiler changes:

- Support the new internal `VfbHeader` format

Breaking changes:

- Modify many `VfbEntry` names to better match the FLS5 Python API attribute names

## v0.8.3

- HTML-escape XML attributes in glyph program
- Use `orjson` for faster JSON export
- Move to modern Python packaging (`pyproject.toml`)

## v0.8.2

- Fix hintmask conversion in UFO builder (broken since v0.8.0)

## v0.8.1

- Add vfb2tth command for TrueType hinting export
- Don't read VFB if no path has been passed
- Add Python 3.13 support
- Drop Python 3.9 support
- Update dependencies
- Remove deprecated/obsolete setup options

Parser changes:

- Add "Glyph Sketch" entry
- Add a few IDs found in FL3
- Improve PCLT table parsing
- Add specialised parsers for various int types
- Improve error message when parser did not consume all bytes
- Support header compilation
- Decode mapping mode
- Fix: Kerning and metrics class flags are stored slightly differently
- Store header reserved field as hexStr
- Change name of IntParser to Int16Parser, add compiler
- Add Binary table parser

Compiler changes:

- Make compiler structure similar to parser structure
- Improve compiler class inheritance
- Differentiate string parsers
- Introduce StringCompiler
- Add GlyphEncodingCompiler
- Fix modification detection
- Init glyph with empty structure
- Implement compiling hint masks
- Compile binary table
- Compile OpenType features

Breaking changes:

- Store OpenType classes as strings
- Store hintmasks as tuples
