Skip to content

Fix getVariation() for WOFF and WOFF2 fonts#377

Open
lehni wants to merge 1 commit into
foliojs:masterfrom
lineto:fix/woff-getvariation
Open

Fix getVariation() for WOFF and WOFF2 fonts#377
lehni wants to merge 1 commit into
foliojs:masterfrom
lineto:fix/woff-getvariation

Conversation

@lehni
Copy link
Copy Markdown

@lehni lehni commented May 21, 2026

The getVariation() API was broken for compressed source formats: WOFF threw because the variation constructor was always plain SFNT and couldn't reparse the directory, and WOFF2 silently returned default-instance glyphs because the transformed-glyf path bypassed the variation pipeline entirely.

  • WOFF previously crashed; WOFF2 silently returned default-instance glyphs
  • Variations now keep the original source format instead of falling back to plain SFNT
  • WOFF tables are decompressed up front so internal offsets stay valid for variation processing
  • WOFF2 transformed glyphs now flow through the variation pipeline
  • Source state is shared across variations so brotli/inflate doesn't re-run per call

Tests cover TTF/WOFF/WOFF2 parity for the upstream variable fixtures (gvar point sharing, HVAR advance variation, HVAR fallback), plus invariants: subclass is preserved, source font isn't mutated, and repeated calls with the same coords are stable.

- WOFF previously crashed; WOFF2 silently returned default-instance glyphs
- Variations now keep the original source format instead of falling back to plain SFNT
- WOFF tables are decompressed up front so internal offsets stay valid for variation processing
- WOFF2 transformed glyphs now flow through the variation pipeline
- Source state is shared across variations so brotli/inflate doesn't re-run per call
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant