Repository navigation
Conversation
d0dfddc to
221c27f
Compare
221c27f to
f626b14
Compare
f5ddd30 to
f53bd1d
Compare
f53bd1d to
73cb0fc
Compare
Resolve integration conflicts without dropping validated parent fixes. Assisted-by: OpenAI Codex
|
The restack exposed one runtime regression in this PR and its four immediate descendants (#2270–#2273): I compiled every restacked boundary and tested the final tip, but did not run each intermediate boundary's tests. That missed this regression. I will run the full Skera test suite on each of the five affected versions, then push the fixes and ancestry updates atomically. Later source trees can remain identical to their already validated versions. |
Check both variation indexes before reading the row. Extend the existing regression to cover large indexes and the no-variation sentinel. Assisted-by: OpenAI Codex
|
Fixed and pushed the missing variation-row checks on all five affected PRs. The full Skera all-feature test suite passed separately at every affected boundary:
Clippy and formatting checks pass. All 50 later branches were updated with tree-preserving ancestry merges, and the 55 branches were pushed atomically. Replacement CI is running. The final source tree is unchanged from the previously validated integration tip. |
Retain both full and partial instancing regressions while propagating the reviewed parent. Assisted-by: OpenAI Codex
|
The self-audit of this PR found a reproducible regression against current HarfBuzz in the new A generated four-axis TrueType fixture demonstrates this through the public CLI in both full and partial instancing. Its three active peak coordinates are I will remove the private scalar implementation and use Design review: the residual-tuple layer has a useful separation between reading tuples, rebasing/inference, and writing packed streams, and it bounds tuple/header/data sizes explicitly. Its direct packed-delta serializer already has a shared-writer oracle at integer and run boundaries. I will retain those boundaries while correcting the arithmetic and verifying second-stage instancing. |
|
The residual-IUP check confirms a second instance of the same stale arithmetic policy. For contour x coordinates I will use float interpolation here too and retain the example in the public instancing regression fixture. This change concerns TrueType tuple evaluation and inference; the CFF/ItemVariationStore precision policies need to be assessed separately at their respective consumers. |
|
The tent-rebasing check also reproduces a precision difference in serialized residual regions. For a tent I will make the existing solver support both scalar types using one implementation, use |
Reuse the reader float scalar evaluator and infer residual IUP deltas in float. Parameterize the existing tent solver so TrueType uses float tents without changing CFF or ItemVariationStore precision. Keep independent public regressions for outline/CVT rounding, residual IUP, and serialized region boundaries. All-feature Skera and writer suites, Clippy with warnings denied, and Rust 1.85 checks pass. Each regression reproduces a difference against current HarfBuzz before the fix. Assisted-by: OpenAI Codex
|
The broader partial-instance sweep exposed one more float/double mismatch in rebuilding a changed avar segment map. With Two other sweep discrepancies are glyph bounding boxes when HarfBuzz pins an already-partial font at its default. Cross-instancing both partial outputs reproduces the same result: Skera recomputes the bounds, while HarfBuzz retains the source glyph header even though it recomputes metrics/global bounds. In the Anek example, the stored component offset 749 plus the child xMax 256 gives xMax 1005; HarfBuzz leaves 1004. I am treating this separately as a HarfBuzz follow-up rather than reproducing the stale bounds in Skera. |
Renormalize changed map coordinates in float and use HarfBuzz rounding toward positive infinity at half units. Keep the MPLUS shifted-default regression and a second-stage outline assertion. Use a bounded sparse contour in the tuple arithmetic fixture so all axis extrema remain representable. Validation: full Skera and writer all-feature tests, Clippy with warnings denied, Rust 1.85 checks, formatting, and typos pass. Assisted-by: OpenAI Codex
|
Pushed all four precision corrections through the stack: shared-reader float tuple scalars, float residual IUP interpolation, one generic tent solver with TrueType float tents, and float avar-map renormalization with ties toward positive infinity. Public regressions exercise stored outline/CVT rounding, inferred residual deltas, rebased region boundaries, and a second-stage avar instance. The reviewed boundary passes 485 Skera tests and 383 writer tests, Clippy and Rust 1.85 checks. All 204 full TrueType cases match HarfBuzz. The 132 partial cases and 660 second-stage locations have no execution/decoding errors. The Anek and Roboto default-pin header discrepancies match after HarfBuzz #6436; the self-contained avar2 policy remains the explicit later #2291 slice. |
Pin TrueType axes or restrict their ranges, fold default gvar/cvar deltas into outlines, metrics, and control values, and emit residual tuples over the surviving axes. Rebase requested axes in tag order, infer missing IUP deltas, merge equal tents, discard constants, and compile shared peaks and packed streams. Preserve untouched avar segment maps.
The self-audit corrects four arithmetic mismatches against current HarfBuzz: reuse the reader's float tuple scalar, infer residual IUP deltas in float, use float tent rebasing, and renormalize changed avar knots in float with half-unit rounding toward positive infinity. The shared solver has one implementation parameterized by scalar type; existing CFF/ItemVariationStore types are preserved. Public regressions cover each mismatch, including second-stage instancing.
Validation: 485 Skera tests and 383 write-fonts tests with all features; Clippy with warnings denied; Rust 1.85 checks. All 204 full TrueType cases match HarfBuzz. The broader sweep covers 132 partial cases and 660 second-stage locations without execution/decoding errors. Two glyph-bounds discrepancies are HarfBuzz's stale-header default-pin bug, fixed and cross-checked in harfbuzz/harfbuzz#6436. The self-contained avar2 pin choice is handled in the later axis-compensation PRs. Other sampled partial outputs and second-stage results agree.
Checked-in references cover pins, shifted defaults, ranges, components, cvar, and flat avar segments. Stream serializers have writer-oracle tests at integer/count/run boundaries. Quantized residuals do not imply exact equivalence for every possible composition.
Stacked on #2268. Shared readers and write-fonts owned models remain in use; there is no secondary generated table tree.