96 lines
4.6 KiB
Markdown
96 lines
4.6 KiB
Markdown
# 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
|