diff options
| author | eunhhu <[email protected]> | 2026-09-28 14:49:05 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-28 14:49:05 +0100 |
| commit | 60a3c0232bbca8d5d8c1107ab8197d272212ef42 (patch) | |
| tree | ba7b4bad98b79ad1abd40cdb038c493d50df0c19 /.gitignore | |
| parent | c23b79f1cb599ee7766002ad23756643e72113e5 (diff) | |
| download | vega-60a3c0232bbca8d5d8c1107ab8197d272212ef42.tar.gz vega-60a3c0232bbca8d5d8c1107ab8197d272212ef42.zip | |
Shape the nine Indic scripts as HarfBuzz does
The Indic shaper, from HarfBuzz 10.2's source: syllables found by the
Indic machine; each syllable's base consonant, its pre-base matras and
reph moved around it and masked for the basic features, applied one at
a time within the syllable; then matras, reph and pre-base-reordering
consonants placed again by what the features made. Vowel constraints,
Indic decompositions and compositions, dotted circles for broken
syllables, and per-syllable matching come with it.
Plans carry GSUB pauses (steps where the shaper does its part) and the
stages of the features the shaper asks whether they would substitute;
the runtime answers with each subtable's would_apply, as HarfBuzz does.
Masks are now the common ones and each shaper's own.
text/syllabic.py reads HarfBuzz's Ragel grammars (Indic, Khmer,
Myanmar) and compiles each to a minimal DFA with Ragel's scanner
semantics; beside the machines Ragel generated from the same grammars,
100,000 random runs each find no syllable that differs. It also reads
HarfBuzz's Indic table (Unicode 16) cell for cell.
Every installed font shapes as HarfBuzz does (213 fonts, 1,688 plans);
the Indic ones at 20,000 runs a plan (FreeSerif's eight scripts,
FreeSans, Unifont's nine without GSUB), and nine new-spec Noto Sans
fonts at 5,000.
Diffstat (limited to '.gitignore')
0 files changed, 0 insertions, 0 deletions
