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

96 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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