text-orientation:upright, selection polish, honest CSS-tail dispositions - #14
Merged
Merged
Conversation
In a vertical writing mode, `text-orientation:upright` now stands each glyph up: the run painter counter-rotates every glyph -90° about its own centre, cancelling the column's 90° CW rotation, so CJK reads top-to- bottom upright instead of lying on its side. Per-glyph, UTF-8 aware. text-orientation is parsed + inherited (mixed/sideways keep the default rotated flow). Verified visually against headless Chrome (日本語文 stacks identically); reftest css-text-orientation-upright 0.28% ours-vs-ours. DOM, compliance 215/215, raster 10/10, interaction, leak-clean 30x. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Each outstanding item now records WHY it's not ✅ and what it would take, so the index reflects deliberate scope boundaries rather than gaps: - preserve-3d + perspective property: needs a real 3D scene compositor (matrix composition through the tree, per-corner Z, z-sort, backface cull) AND is hard-blocked on Linux X11 (no transform matrix at all) - mask-composite: needs the mask pipeline widened to a compositing stack; near-zero real-world use, deferred - hyphens:auto: needs an embedded Liang/TeX pattern dictionary; degrades to `manual` today (correct-but-conservative, not wrong) - multicol line-level fragmentation: needs a fragmentation engine (shared with page-break/break-inside) None marked ✅ without proof, per the index-is-truth rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Completes the text-selection feature: - Double-click selects the whole word under the point. Detected in the core by click timing (two downs <400ms, <6px apart), gated to user-select:text/all elements so a rapid double-tap on a control still just activates it twice. TinaSelectWordAt finds the run, expands the char to whitespace-delimited word boundaries, selects that pixel span. - Cmd/Ctrl+A selects every selectable glyph (TinaSelectAll); skips user-select:none via the same paint filter. Wired in Cocoa keyDown. Runtime-proven in tests/test_interact.pas (39/39): TinaSelectWordAt returns "Bravo"; two rapid taps (the real double-click path) select the word; select-all includes selectable text and excludes user-select:none. DOM, compliance 215/215, raster 10/10, leak-clean 30x. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
text-orientation: upright
CJK stands upright in a vertical column — the run painter counter-rotates each glyph -90° about its centre, cancelling the column's 90° rotation. Verified visually against Chrome (日本語文 stacks identically); reftest
css-text-orientation-upright0.28%.Selection polish
user-select:text/allso a rapid double-tap on a control still just activates it).TinaSelectAll), wired in Cocoa keyDown.Runtime-proven in
tests/test_interact.pas(39/39).Honest dispositions for the remaining CSS tail
Each outstanding item now records why it's not ✅ and what it would take (subsystem needed / platform blocker / near-zero use), per the index-is-truth rule — no fake ✅.
Verification
Interaction 39/39, compliance 215/215, raster 10/10, DOM pass, leak-clean 30×. Chrome sweep: 0 unexpected failures, 209/215 green. Coverage 132 ✅ · 3 🟡 · 1 📦.
🤖 Generated with Claude Code