open-standards/wai/vector-conformance/vectors/a11y/index.json
Transaction Science 10ba6e9bcc wai-vector: the text layer and section 5, text and accessibility (D7-7)
graphics-vector.md section 5 (Draft): what a sink exposes to assistive
technology and to a text consumer, and how. Each text block's active set (the
effective windows of the items that draw it, merged), the projection at a
frame and the transcript as exact JSON, the text record and its digest, ruby,
purposes, writing modes and the cluster rule.

- wai-vector: src/text.rs (no_std, no dependency), the a11y and text commands,
  and vectors verify recomputing every text record.
- The corpus: a new a11y group, each payload with its text record
  (<name>.a11y.jsonl) and its digest in the expected file; canonical and
  refusal vectors for TEXT. No existing expected file changes.
- tests/text_layer.rs: each rule of section 5, with expected JSON written by
  hand from the text, each falsified once.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 02:43:02 -04:00

16 lines
3.5 KiB
JSON

{
"alternatives":"a logo block and a graphic block, each the text alternative of a path and active over that path's window; a block drawn by a path and later by a run, active over both windows; and a path with no alternative: accepted",
"clipped":"a document whose window is [50000, 144000), its first frame at tick 52800: windows that begin before it, end after it or span it are cut to it; a window that ends where it begins, and one that begins where it ends, leave their blocks never active, with an empty active set; two windows are cut and then merged: accepted",
"decorative":"three blocks drawn for the whole document, the second of purpose 13 (decorative): the transcript and every projection hold blocks 0 and 2 only, with their own indices: accepted",
"groups":"a lower third of two blocks in group 1, an ungrouped label, and three credits in group 2, the last entering later: each node carries its group number, and reading order is block order: accepted",
"intervals":"five blocks, each drawn by one run a word over that word's own window: windows that touch merge into one interval, as do windows that overlap and a window inside another; windows one tick apart stay two intervals; and the intervals are sorted whatever the items' order: accepted",
"modes":"three blocks equal in everything but the writing mode: vertical-rl (1), vertical-lr (2) and horizontal-tb (0), the vertical ones upright and stacked; each node carries its mode, and the three block identities differ: accepted",
"nested-groups":"runs inside item groups: each run's effective window is its own cut by every enclosing group's, so a run active throughout is active over its group's window only, a run in two groups over the intersection of all three, and a run in a group whose window misses its parent's is never active: accepted",
"no-text":"a payload with no text blocks: the transcript and every projection are the empty array: accepted",
"purposes":"one block of each purpose 1 to 13, then of the unregistered purposes 14, 200 and 255: every node carries the TEXT byte as an integer, 200 as 200; the decorative block (13) is left out: accepted",
"rates":"one block active over [24000, 50000) in a document listed at 24000/1001, 25, 30000/1001 and 60 fps: the record gives every frame of each rate in RATE order; at 60 fps frame 12 sits on the window's first tick and is in it, and frame 25 sits on its end and is not: accepted",
"ruby":"a Devanagari base block of two syllables and two ruby blocks, one over the base's first 9 bytes and one over the 6 bytes after them: each node's ruby object gives the base's index, the range's length and its start; the second annotation stays active after its base's window ends, and keeps its ruby object: accepted",
"strings":"strings as JSON: a quotation mark, a backslash and U+000A take the three escapes, and nothing else is escaped: markup characters, a solidus, a soft hyphen, Hebrew, Devanagari and U+1F600 are written as their UTF-8 bytes; a language tag keeps its letter case: accepted",
"windows":"a title active over [24000, 96000) whose opacity reaches 0 at tick 86400, and a credit active over [120000, 216000): frames before, between and after the windows project nothing, and the title stays in the projection at opacity 0 until its window ends: accepted",
"worked-example":"the worked example of section 5.4: a lower third of an Arabic block and an English block in group 1, both active over [24000, 264000), and a ruby annotation of the first 8 bytes of the second, active over [24000, 120000): accepted"
}