Skip to content

text-orientation:upright, selection polish, honest CSS-tail dispositions - #14

Merged
andrevanzuydam merged 3 commits into
mainfrom
feature/rendering-fidelity-8
Sep 17, 2026
Merged

andrevanzuydam merged 3 commits into
mainfrom
feature/rendering-fidelity-8

Conversation

@andrevanzuydam

Copy link
Copy Markdown
Owner

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-upright 0.28%.

Selection polish

  • Double-click selects the word under the point (core click-timing detection, gated to user-select:text/all so a rapid double-tap on a control still just activates it).
  • Cmd/Ctrl+A selects all selectable text (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

andrevanzuydam and others added 3 commits September 17, 2026 14:23
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>
@andrevanzuydam
andrevanzuydam merged commit ec89607 into main Sep 17, 2026
3 checks passed
@andrevanzuydam
andrevanzuydam deleted the feature/rendering-fidelity-8 branch September 17, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant