Repository navigation
Conversation
9ed9e1d to
e439bc7
Compare
e439bc7 to
2f1ab92
Compare
906c63e to
d933abf
Compare
d933abf to
98e8823
Compare
Assisted-by: OpenAI Codex
Resolve integration conflicts without dropping validated parent fixes. 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
Move the existing #2338 correction into the width-reduction PR. Assisted-by: OpenAI Codex
Reject unsupported versions and oversized arrays before ownership. Keep current HarfBuzz references with complete feature parameters. Assisted-by: OpenAI Codex
|
Self-review findings before further fixes:
The earlier complete feature-parameter comparisons and ownership guards remain part of this branch. This review is not complete until the new regression, propagation and checks pass. |
Honor float32 pinned-axis products before carrying double-precision residuals into condition scaling. Drop regions that reach zero. Reject partial condition instancing when nonzero subnormal pinned scalars would lose their underflow threshold after positive rescaling. Add public full/composed regressions for zero scalars, nonzero defaults, and explicit subnormal rejection. Both regressions fail before their fixes. All 534 Skera tests, Clippy, MSRV, formatting and typo checks pass. Assisted-by: OpenAI Codex
|
The scalar fixes are now pushed through the stack: regions whose pinned float32 product reaches zero stay inactive, and partial conditions with nonzero subnormal pinned products are rejected instead of being rescaled across their underflow boundary. Full instancing remains supported. Both public regressions fail before their respective fixes. This PR passes 534 Skera tests, Clippy and MSRV; the final combined tip also passes the three partial-condition regressions on actual i686. Upstream fixes are open in HarfBuzz #6441 and FontTools #4348. HarfBuzz's full Meson suite passes 272 tests with one skip; all FontTools CI checks are green. The remaining stack audit continues. |
Partial instancing must preserve a variable-value condition’s sign boundary before integer rounding. A condition could previously become constant when its residual deltas rounded to zero, or move its threshold when its folded default was fractional.
Follow HarfBuzz’s condition instancing algorithm: test unrounded residual deltas, positively rescale the expression to preserve fractional values, and give it a private store row when scaling or a large default requires one. Keep shared positioning rows unchanged. Cache matching condition rows and use a neutral region for defaults outside the signed 16-bit field.
Validation: 219 unit tests and focused BASE, conditions, feature-parameter, and layout integration tests pass. The new regression fails on the previous implementation. Boundary tests cover shared rows, fractional defaults, positive/negative quarter-unit residuals, and large defaults; 180 fresh HarfBuzz partial-then-full cases match GSUB/GPOS output. Clippy, rustfmt, and the CI typo checker pass.
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.