From ea6dbcf627e9a440590d0d35ff16ca7ae60d5719 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Mon, 28 Sep 2026 16:13:58 +0100 Subject: Kern with class subtables too (kern formats 2 and 3) The kern table's class subtables, OpenType's and Apple's, as HarfBuzz reads them (hb-aat-layout-kerx-table.hh, hb-ot-kern-table.hh): format 2's class tables give byte offsets into a kerning array, format 3's byte classes index a value list. Both go through the same pass as pairs (marks skipped, the kerning split between the pair). Format 2 filters the glyphs by the class tables' digests, as HarfBuzz's accelerator does, so a digest's false positive reads class 0 there too; what a subtable reads must lie within it, the last one's within the table. The build checks the subtables as HarfBuzz's sanitizer does, and still refuses state machines (format 1) and cross-stream kerning. text/test-kern.py makes fonts with format 2 and 3 subtables in every order, with the edge cases that reading has (value 1, glyphs outside a table, offsets below the array or odd, values past a subtable's or the table's end, classes and indexes past their counts): 24 fonts, 96 plans, the same as HarfBuzz. make check runs it where fontTools is. HarfBuzz's suite: 5017 of 5199 the same. --- text/harfbuzz-suite.known | 3 --- 1 file changed, 3 deletions(-) (limited to 'text/harfbuzz-suite.known') diff --git a/text/harfbuzz-suite.known b/text/harfbuzz-suite.known index 4b93ab4..76a5be4 100644 --- a/text/harfbuzz-suite.known +++ b/text/harfbuzz-suite.known @@ -13,9 +13,6 @@ in-house/arabic-fallback-shaping.tests:4 in-house/arabic-fallback-shaping.tests:5 in-house/arabic-fallback-shaping.tests:6 -# A kern table of class pairs (format 2; refused). -in-house/kern-format2.tests:* - # Myanmar as Zawgyi encodes it (Qaag; refused). in-house/myanmar-zawgyi.tests:* -- cgit v1.2.3