epiphany/spikes/editor-toolkit/round2-textkit/FIXTURES_SUMMARY.md

4.6 KiB
Raw Permalink Blame History

Round 2 text fixtures — measured summary

Generated by round2-textkit. Em size: 1.28 staff space. Target: 1920x1080.

Faces

  • chain[0] /usr/share/fonts/tex-gyre/texgyrepagella-regular.otf — family TeX Gyre Pagella, version Some("Version 2.501;PS 2.501;ffdkm 0.1"), sha256 44e64260716d8f2bbe412baa1ee99b7c995190ac4573177c24def0b9200438c7
  • chain[1] /usr/share/fonts/liberation-fonts/LiberationSerif-Regular.ttf — family Liberation Serif, version Some("Version 2.1.5"), sha256 058ea80864aef09a23f45cbec2bb5400bc3dfbdea01c3f10538a21fcb497fb74

Shaping identity (from the first fixture; identical for all)

  • shaper: rustybuzz 0.20.1
  • unicode-bidi: crate 0.3.18, Unicode 16.0.0
  • unicode-segmentation: crate 1.13.3, Unicode 17.0.0
  • the two Unicode-data versions disagree — reported, not reconciled (crate::findings::W3_F2).

Fixtures

F-A — check 1 (faithful consumption), check 5 (accessibility)

text: "Allegro affettuoso — al fine"

28 codepoints, 30 bytes, 1 segments, 26 glyphs, 26 clusters

segment source face direction script glyphs
0 0..30 Some(0) Ltr Latn 26

check 5 (accessibility, disqualifying) — name must be exactly Allegro affettuoso — al fine (30 bytes, hex 416c6c6567726f20616666657474756f736f20e2809420616c2066696e65); Ligatures: the name must be the source ff/fi, never the ligature glyphs that drew them.

F-B — check 2 (fallback, forced)

text: "Coro אבג"

8 codepoints, 11 bytes, 2 segments, 8 glyphs, 8 clusters

segment source face direction script glyphs
0 0..5 Some(0) Ltr Latn 5
1 5..11 Some(1) Rtl Hebr 3

check 5 (accessibility, disqualifying) — name must be exactly Coro אבג (11 bytes, hex 436f726f20d790d791d792); Two segments, two faces: the name must be the whole logical string, assembled in logical order, not the visual order the Hebrew tail is drawn in.

F-C — check 2 (uncovered codepoint)

text: "Coro ا"

6 codepoints, 7 bytes, 2 segments, 5 glyphs, 6 clusters

segment source face direction script glyphs
0 0..5 Some(0) Ltr Latn 5
1 5..7 None Rtl Arab 0

check 5 (accessibility, disqualifying) — name must be exactly Coro ا (7 bytes, hex 436f726f20d8a7); Uncovered codepoint: U+0627 draws no ink in either declared face, and must appear in the name regardless — the tree carries the text, not the ink.

F-D — SUPPLEMENTARY bidi evidence (Hebrew/Latin) — check 3 remains NOT RUN (no Arabic-capable face; recipe §1.2)

text: "Allegro אבג con brio"

20 codepoints, 23 bytes, 3 segments, 20 glyphs, 20 clusters

segment source face direction script glyphs
0 0..8 Some(0) Ltr Latn 8
1 8..14 Some(1) Rtl Hebr 3
2 14..23 Some(0) Ltr Latn 9

check 5 (accessibility, disqualifying) — name must be exactly Allegro אבג con brio (23 bytes, hex 416c6c6567726f20d790d791d79220636f6e206272696f); Three visual runs at levels 0/1/0: the concatenation is logical-order, so a tree built by walking the visual runs left to right fails here and only here.

F-E — check 4 (hit testing / caret)

text: "Cafe\u{301} — resume\u{301}"

15 codepoints, 19 bytes, 1 segments, 13 glyphs, 13 clusters

segment source face direction script glyphs
0 0..19 Some(0) Ltr Latn 13

check 5 (accessibility, disqualifying) — name must be exactly Café — resumé (19 bytes, hex 43616665cc8120e2809420726573756d65cc81); NFD: Cafe\u{301} must surface as NFD. A tree exposing Café (NFC) has silently normalized, and that is a FAIL, not a formatting difference.

Check-5 role vocabulary (identical for every fixture)

platform accepted prohibited
accesskit-0.24 Label, TextRun, Paragraph Image, GraphicsObject, GraphicsSymbol, GenericContainer, Unknown, Pane
at-spi2 label, static, text, paragraph image, canvas, filler, panel, unknown
aria (none), text, paragraph img, presentation, none, graphics-object, graphics-symbol
macos-nsaccessibility AXStaticText AXImage, AXUnknown, AXGroup
windows-uia Text Image, Pane, Custom

Name composition: single-text-node-name, or logical-order concatenation of the run subtree's text-descendant names — either must equal name byte for byte

Prohibited outcomes, whatever the role: absent-from-tree, name-empty, name-normalized, name-is-shaped-glyphs, name-drops-unresolved-codepoints