Skip to content

[skera] Preserve BASE versions and coordinate formats - #2275

Closed
behdad wants to merge 12 commits into
skera-layout-precisionfrom
skera-base-version
Closed

behdad wants to merge 12 commits into
skera-layout-precisionfrom
skera-base-version

Conversation

@behdad

@behdad behdad commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

BASE subsetting downgraded a 1.1 table to 1.0 when its variation-store offset was null. Instancing did the same after removing the store, and converted resolved format-3 coordinates to format 1. These changes preserved the coordinates but introduced unnecessary structural differences from HarfBuzz.

Preserve the source BASE version and its required null Offset32 field through ordinary subsetting and instancing. Keep format-3 coordinates after resolving their variation devices, following HarfBuzz's BASE subset path. A small writer wrapper retains the source version without changing the public owned BASE representation.

Validation: all 215 skera unit tests, three new BASE integration tests, existing layout precision tests, Clippy, formatting, and the CI typos checker pass. Three synthetic table references match fresh local HarfBuzz c82300aefb. BASE tables also match in 27 ordinary subset cases and 49 full/partial instancing cases across nine and six source fonts respectively, with no shaping differences.

Stacked on #2274.

Readers use read-fonts directly. write-fonts handles font assembly and owned table rebuilding; Skera retains its direct serializers and repacker. There is no separate generated Skera table tree.

@behdad
behdad force-pushed the skera-base-version branch from 7e5a785 to 8a85f51 Compare October 14, 2026 23:11
behdad added 11 commits October 15, 2026 14:52
Propagate reviewed fixes and repaired ancestry through #2275.

Assisted-by: OpenAI Codex
This tree is unchanged; the replacement evaluator already handles missing
variation rows. Preserve the repaired parent ancestry.

Assisted-by: OpenAI Codex
Preserve reviewed parent ancestry and each PR's existing feature changes.

Assisted-by: OpenAI Codex
Preserve the independently validated TrueType changes and all feature code.

Assisted-by: OpenAI Codex
Keep empty record counts and allocation bounds at each PR boundary.

Assisted-by: OpenAI Codex
@behdad

behdad commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Self-review completed at the prepared #2275 boundary:

  • The source version determines the BASE header length. A version 1.1 table retains its null Offset32 field after the store disappears; a version 1.0 table does not acquire that field. I checked both direct subsetting and the instancing writer wrapper, including offset bases and delegation to owned-table validation.
  • Keeping a resolved BaseCoord format 3 is intentional and agrees with HarfBuzz. Ordinary hint devices remain present, while fully pinned variation devices disappear after their deltas are folded.
  • The small VersionedBase wrapper retains source metadata that the owned writer otherwise infers from store presence. It avoids adding another owned table model or generated code.

No new defect found in this slice. All three BASE integration tests pass at the prepared boundary, including horizontal/vertical axes, null stores, pins/ranges, and a subsequent subset. They also pass with all three references freshly regenerated using current HarfBuzz. Parent layout precision and ownership corrections remain included.

@behdad

behdad commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

The reviewed parent fixes are now pushed. No new BASE defect was found: all three integration tests pass at this boundary with freshly regenerated HarfBuzz references, including the null 1.1 store field and retained coordinate formats.

@behdad

behdad commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by the rebuilt, consolidated instancing stack in #2416–#2423. MATH and name-table overrides remain separately covered by #2415 and #2411.

@behdad behdad closed this Oct 28, 2026
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