From f8020320e298eca1e36c905df0ed101e0d1f9c5a Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 15:15:36 -0400 Subject: [PATCH 01/31] docs(math): frame the first inline-math vertical slice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The obvious next unit was Tier 2 (parser) plus Tier 3 (layout). This framing rejects that for the arc's own reason: the substrate lane's Q#LX5 refused to land the parser ahead of layout because MathNode's shape is only validated by a consumer, and that argument does not stop at Tier 2. MathBox is only validated once a renderer consumes it, so Tiers 2+3 with no Tier 4 reproduce the same objection one layer up. The unit is therefore thin and vertical: characters, sub/superscript and fractions, detected, parsed, laid out against a real OpenType MATH table, and drawn — with breadth deferred to follow-on work against an API that has been exercised rather than only designed. The scout also found a load-bearing error in the parent's integration table. It places math_parse.rs and math_layout.rs in the core crate, which cannot work: pmacs-gpu depends only on pmacs-protocol and never on pmacs, so a core-crate parser is unreachable from the frontend that renders it, and ttf-parser reaches only pmacs-gpu. Both also contradict the parent's own "instance never learns a pixel" contract and its "pure frontend responsibility in v0" protocol section. Q#MS1 moves both modules into pmacs-gpu. Two decisions buy the slice most of its simplicity. Rendering is suppressed whenever the caret is inside a span, which makes editing-shows-source and moving-away-renders mutually exclusive states and removes the caret-inside-math problem rather than approximating it. And layout positions characters rather than glyph IDs, which is sufficient for this subset and explicitly does not generalise: glyph variants are what stretchy fences and big operators need, and both are deferred. Acceptance puts every claim that something reaches the screen on real pixels through the existing headless render seam, because a layout engine wired to nothing would pass any weaker test. Framing only; no implementation, no runtime code. Co-Authored-By: Claude Opus 5 (1M context) --- docs/inline-math-slice-framing.md | 336 ++++++++++++++++++++++++++++++ 1 file changed, 336 insertions(+) create mode 100644 docs/inline-math-slice-framing.md diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md new file mode 100644 index 0000000..4428173 --- /dev/null +++ b/docs/inline-math-slice-framing.md @@ -0,0 +1,336 @@ +# Inline math — the first vertical slice (framing) + +**Revision 1 — pre-implementation, framing only. Ground truth scouted against +canonical `main` @ `352bf0b`, protocol v20, 2026-07-24.** + +Parent arc: `docs/inline-math-framing.md` (rev 2, merged as #154). Sibling +substrate lane: `docs/latex-grammar-math-substrate-framing.md` (rev 3), whose +Stage 1 landed as #144. + +This lane builds the **first end-to-end slice** of the parent's four-tier +pipeline: a deliberately small LaTeX-math subset that is detected, parsed, +laid out against a real OpenType MATH table, and **actually drawn on screen**. + +## 0. Why a slice, and not "Tier 2 + Tier 3" + +The obvious next unit was the parser (Tier 2) plus the layout engine +(Tier 3). It is rejected here for the parent arc's own reason. + +The substrate lane's **Q#LX5** refused to land the parser ahead of layout +because *"the `MathNode` shape is only validated once [a layout consumer] +exists"*. That argument does not stop at Tier 2. `MathBox` is only validated +once a **renderer** consumes it: an unrendered layout engine can be +self-consistent and still have the wrong shape — wrong units, wrong origin +convention, a baseline the draw path cannot use. Landing Tiers 2+3 with no +Tier 4 reproduces exactly the objection Q#LX5 raised, one layer up. + +So the unit of work is **thin and vertical, not broad and horizontal**: the +smallest grammar subset worth rendering, carried all the way to pixels. Every +layer acquires a real consumer immediately. Breadth — big operators, stretchy +fences, radicals, accents, display math — becomes follow-on work against an +API that has already been exercised rather than one that has only been +designed. + +The cost is honest and named in §7: the slice touches +`pmacs-gpu/src/main.rs`'s render path, which two other arcs also want. + +## 1. Ground truth (scouted 2026-07-24 @ `352bf0b`) + +### 1.1 Crate boundaries — the parent's file placement cannot work + +The parent framing's integration table lists `src/math_parse.rs` and +`src/math_layout.rs`, i.e. the **core `pmacs` crate**. Verified against the +tree, that placement is unusable: + +- **`pmacs-gpu` depends only on `pmacs-protocol`** (`pmacs-gpu/Cargo.toml:60`; + there is no `pmacs` dependency). A parser in the core crate is therefore + **unreachable from the frontend that renders it**. +- **`ttf-parser` reaches only `pmacs-gpu`.** Per-crate check: `pmacs` no, + `pmacs-protocol` no, `pmacs-gpu` yes (via `fontdb` → `cosmic-text` → + `glyphon`). A layout module in the core would be a genuinely new dependency + there, which is not what the parent's C1 established. + +Both also contradict the parent's own prose — its design contract ("the +instance never learns a pixel") and its protocol section ("math rendering is a +pure frontend responsibility in v0"). The table was the outlier. Q#MS1 fixes +it. + +### 1.2 The GPU text pipeline this slice hooks + +- `rebuild_code_slice` (`pmacs-gpu/src/main.rs:6136`) shapes **only the + visible byte slice**; spans/decorations/adornments arrive in whole-file + coordinates and are clipped and rebased onto it. +- Per line, `chunks_for_line` (`:5100`) produces `RichChunk`s whose + `ChunkSource` (`:7715`) is one of `Source { start }`, + `SourceTab { start }`, `Adornment { anchor }`. +- **Every existing variant is additive.** Adornments (inlay hints) inject text + *between* source bytes; nothing today *replaces* a source range with a box + of chosen width. That mechanism is what this slice must build (Q#MS4). +- `build_hit_runs` (`:7739`) derives the projected→source hit map from the + same chunks that feed glyphon, so the map and the shaped buffer cannot + disagree. Any new chunk kind must participate here or clicks land wrong. +- Custom drawing precedent: `SquiggleRenderer` (`:2825`) owns its WGSL shader + and pipeline; the menu/background quad pipeline is the precedent for filled + rectangles. +- Fonts are embedded with `include_bytes!` from `pmacs-gpu/fonts/` under OFL + (`JETBRAINS_MONO`, `:63`); `build_font_system` (`:217`) loads them into + `fontdb`. + +### 1.3 The acceptance seam already exists + +`headless_or_skip(w, h, text)` builds a real headless GPU state and +`render_offscreen()` returns mapped pixels (`copy_texture_to_buffer` at +`:6570`). `headless_diag_face_recolors_band_counter_despite_unchanged_text` +(`:12022`) is the precedent: render, mutate, render again, and assert on the +pixel difference. Real-GPU tests run under `PMACS_REQUIRE_GPU=1`. + +This matters because the slice's central claim — *math is actually drawn* — +is exactly the kind of claim that a non-rendering test would pass vacuously. + +## 2. What ships + +One PR: detection (inline `$…$` only) → parse → layout against the MATH table +→ draw, for the subset in Q#MS2, with the raw source shown whenever the +cursor is inside the span (Q#MS5). + +Explicitly **not** in this slice: display math `$$…$$`, big operators, +stretchy fences, radicals, accents, `\text{}`, style overrides, tree-sitter +injection detection, any wire surface, and the TUI. + +## 3. Decisions + +### Q#MS1 — Both modules live in `pmacs-gpu` + +`pmacs-gpu/src/math_parse.rs` and `pmacs-gpu/src/math_layout.rs`. Not +`src/`, for the three independent reasons in §1.1. This keeps v0 exactly what +the parent says it is — a pure frontend responsibility — and keeps the core +crate free of a font-metrics dependency it has no use for. + +If instance-side detection ever lands (the parent's v1 `MathSpans`), the +*parser* may move to a shared crate at that point. Nothing in this slice +should assume it will. + +### Q#MS2 — The subset: characters, sub/superscript, fraction + +`MathNode` for this slice: + +```rust +enum MathNode { + Char(char), // x, 2, + + Symbol(char), // \alpha → U+03B1 (seed map) + Group(Vec), + Script { base: Box, sub: Option>, sup: Option> }, + Fraction { num: Box, den: Box }, +} +``` + +This subset is chosen because it is the smallest one that **forces the MATH +table to matter**. Characters alone could be positioned by guesswork and prove +nothing. Scripts require `ScriptPercentScaleDown`, `SuperscriptShiftUp` and +`SubscriptShiftDown`; fractions require `AxisHeight` and the fraction rule +constants, plus nested box composition. Get those right and the remaining node +kinds are more of the same; get them wrong and no amount of breadth helps. + +The symbol map ships as a **seed** (Greek letters only, ~50 entries), not the +parent's full ~200. Growing it is mechanical and needs no design. + +### Q#MS3 — Detection is the frontend byte scanner, inline only + +A two-pass scan over the visible slice for unescaped `$…$` pairs, run where +the parent specifies — in `rebuild_code_slice`, after shaping decisions, not +on the edit path. `\$` is an escape and does not open or close a span. An +unpaired `$` yields no span (acceptance 6 of the parent). + +Tree-sitter injection detection is deliberately not used, even though #144 +gives us `math_environment` / `math_delimiter` for `.tex`: that path is +instance-side, the substrate lane already deferred it to this arc, and the +slice must work in the grammar-less buffers where most inline math is typed. +It stays available as the natural upgrade. + +### Q#MS4 — Suppression is a new chunk kind, and it owns its hit runs + +`ChunkSource` gains a variant carrying the suppressed source range and the +projected width the box occupies. The chunk contributes **no glyphs** to the +cosmic-text buffer; it reserves width so the surrounding text lays out around +it, and the math is drawn over that reserved space in a later pass. + +The invariant `build_hit_runs` exists to preserve — that the hit map is +derived from the same chunks glyphon shaped — is not weakened: the new +variant participates like any other. A click inside a math box maps to the +**start byte of the suppressed range**, the same "snap to anchor" rule +`Adornment` already uses. Sub-expression hit-testing is deferred; it needs a +box→byte map that this slice deliberately does not build. + +### Q#MS5 — The cursor rule: render math only when the cursor is outside + +When the caret is anywhere inside a math span (or on either delimiter), that +span is **not** suppressed — the raw `$…$` renders as ordinary source text. + +This is the parent's Q#IM5 proposal ("when the cursor approaches the boundary, +the raw `$` reappears") adopted as a hard rule, and it buys the slice a great +deal: there is no caret-inside-rendered-math problem to solve, because the two +states are mutually exclusive. Editing math shows source; moving away renders +it. Q#IM6's "best-effort fractional cursor projection" is then not needed at +all in v0, and is deferred rather than approximated. + +It also gives the feature an honest, self-explaining interaction model, which +is worth more in v0 than sub-glyph caret fidelity. + +### Q#MS6 — Layout positions CHARACTERS, not glyph IDs + +```rust +struct MathBox { width: f32, ascent: f32, descent: f32, items: Vec } +enum MathItem { + Glyph { ch: char, x: f32, baseline: f32, size_px: f32 }, + Rule { x: f32, y: f32, width: f32, thickness: f32 }, // fraction bar +} +``` + +Positions are in pixels relative to the box origin, resolved by the frontend +that owns font metrics — consistent with the parent's contract. + +**Characters, not glyph IDs, is a deliberate boundary.** Glyph-ID work exists +to select *variants* from the MATH table's `GlyphVariantRecord` / `Glyph‐ +Construction` chains — which is precisely what stretchy fences and big +operators need, and precisely what this slice defers. Positioning characters +lets each item be drawn with the existing text machinery. The slice must not +pretend this generalises: when stretchy delimiters arrive they will need glyph +IDs, and `MathItem` will gain a variant then. + +The fraction rule is a filled quad on the existing quad pipeline, not a glyph. + +### Q#MS7 — The MATH font and its feature declaration + +Bundle **Latin Modern Math** (OFL, GUST) as `pmacs-gpu/fonts/`, embedded with +`include_bytes!` beside JetBrains Mono, with its licence file. Two consumers +read the same bytes: `fontdb`/cosmic-text for drawing, and `ttf-parser` +directly for the MATH table, which cosmic-text does not expose. + +Declare the dependency exactly as the parent's rev-2 C1 records: + +```toml +ttf-parser = { version = "0.25", default-features = false, features = ["opentype-layout"] } +``` + +Bare `ttf-parser = "0.25"` unions `std` in and rebuilds the font chain. + +A font whose MATH table is absent or unparseable is a **hard startup error in +the math path only** — math spans fall back to raw source (Q#MS8), the editor +does not fail. Bundled-font regressions must not be silent. + +### Q#MS8 — Failure is always "show the source" + +Unparseable expression, unsupported node kind, missing MATH constant, or a box +that would exceed the line: the span is not suppressed and renders as ordinary +source. The parent's red-squiggle treatment (its Q#IM4) is **deferred** — it +reuses the diagnostic squiggle path, which is a second integration this slice +does not need in order to be correct. + +Consequence worth stating plainly: **an unsupported construct is +indistinguishable from ordinary text in v0.** That is acceptable precisely +because the subset is small and documented; it stops being acceptable when +breadth arrives, which is when Q#IM4 should land. + +### Q#MS9 — Caching is deferred + +The parent's hash-keyed `MathBox` cache is **not** in this slice. Layout runs +per visible span per reshape. This is a slice: the subset is tiny, the visible +span count is small, and an unmeasured cache is a guess. The parent's latency +targets stay as targets; the first measurement comes from this slice's own +render path, and the cache lands when a number justifies its invalidation +cost. + +## 4. Bets (falsifiable) + +- **B1 — the reserved-width chunk composes with the existing pipeline.** + Falsified if reserving width for a suppressed range requires changing how + cosmic-text shapes the surrounding line, rather than adding a chunk kind + that `chunks_for_line` and `build_hit_runs` both already iterate. +- **B2 — scripts and fractions are enough to validate `MathBox`.** Falsified + if adding a deferred node kind later forces a change to `MathBox`'s width / + ascent / descent / origin contract, rather than only adding a `MathItem` + variant. +- **B3 — character positioning suffices for the subset.** Falsified if any + node in Q#MS2 cannot be drawn correctly without selecting a glyph variant. +- **B4 — the cursor rule removes the caret problem rather than hiding it.** + Falsified if any caret position, selection, or click inside or across a math + span still needs a projected-position approximation to behave correctly. +- **B5 — `ttf-parser` supplies every constant the subset needs.** Falsified if + script or fraction layout requires a MATH value `ttf-parser` does not + expose. + +## 5. Acceptance + +Parser and layout are pure and get ordinary unit tests. Everything that claims +something reaches the screen runs on a real device through +`headless_or_skip` + `render_offscreen`, under `PMACS_REQUIRE_GPU=1`. + +1. **Parser** — `x^2`, `x_i`, `x_i^2`, `\frac{a}{b}`, `\alpha`, nested + `\frac{x^2}{y}` produce the expected `MathNode` trees. Unbalanced `{`, + unknown command, and an empty span are errors, not panics. +2. **Detection** — `$x^2$` yields one span; `Price: $5.00` yields none; + `\$5` yields none; `$a$ and $b$` yields two. +3. **MATH constants are actually consulted** — layout of `x^2` with the real + font places the `2` above the baseline and scaled down. Bite: stubbing + `ScriptPercentScaleDown` to 100% changes the laid-out box, proving the + constant is read rather than hardcoded. +4. **Fraction geometry** — numerator above, denominator below, rule at the + axis height, box ascent/descent enclose both. +5. **It renders** — a buffer containing `$x^2$` renders differently from the + same buffer with the math span suppressed. Asserted on pixels, so a layout + engine wired to nothing cannot pass it. +6. **The fraction rule is drawn** — `$\frac{a}{b}$` produces horizontal rule + pixels between the two operand rows. +7. **Cursor rule** — with the caret inside `$x^2$`, the raw `$x^2$` glyphs + render and no math is drawn; moving the caret out re-renders the math. + Both directions asserted. +8. **Hit mapping** — a click on a rendered math box places the caret at the + span's start byte, and the surrounding text's hit runs are unchanged. +9. **Failure shows source** — `$\frac{a$` and `$\unknown{}$` render as + ordinary source text with no panic and no missing glyphs. +10. **Surrounding layout is undisturbed** — `before $x^2$ after` keeps + `before`/`after` at the same positions as when the span is not math. +11. **Feature declaration** — `cargo tree -e features` shows `ttf-parser` + without `std`, i.e. the declaration did not widen the shared feature set. +12. Full gate suite per `CLAUDE.md`, including `PMACS_REQUIRE_GPU=1`. + +## 6. Deferred (named) + +Display math `$$…$$` and `\[…\]`; big operators; stretchy fences and glyph +variant/assembly (with the `MathItem` glyph-ID variant they require); +radicals; accents; `\text{}`; style overrides; the full ~200-entry symbol map; +the red-squiggle error treatment (parent Q#IM4); the `MathBox` cache (Q#MS9); +sub-expression hit-testing and caret projection inside rendered math (parent +Q#IM6); colour-by-context (parent Q#IM2); tree-sitter injection detection and +any `MathSpans` wire surface; the TUI's distinct-face fallback; Lua-registered +delimiters. + +## 7. Interaction with other work + +The slice's Tier 4 half edits `pmacs-gpu/src/main.rs`'s render path, which two +other lanes also claim: + +- **Bottom panel** — Stage 1 is in review as **#155**; its **Stage 2** takes + this render path *and* the next protocol version. +- **Folding Stage 3 (GPU)** — next ranked, still unframed, and inherits the + `BufferSnapshot` fold-mirror-clear obligation on the same path. + +This lane reserves **no protocol version** and adds no wire surface, so it +cannot collide there. For the render path the rule is the one the other two +framings already apply to each other: **whichever lands second re-scouts +against the first.** The parser and layout modules are new files and collide +with nothing; only the `rebuild_code_slice` / chunk / render hunks are +contended, and they are small and localised by design. + +Sequencing preference: land after #155's Stage 1, whose merge does not touch +this path, and re-scout if bottom-panel Stage 2 or folding Stage 3 lands +first. + +## 8. Prior art in pmacs + +`SquiggleRenderer` (`pmacs-gpu/src/main.rs:2825`) for owning a custom pipeline +beside glyphon; the menu/background quad path for filled rectangles; inlay +hints (`ChunkSource::Adornment`) for interleaving non-source content and for +the anchor-snapping hit rule; `headless_diag_face_recolors_band_counter…` +(`:12022`) for asserting a rendering claim on real pixels; #144's query +overlay for the eventual tree-sitter detection upgrade. From 67976dfc5f85f7a0a9e62e2a3ab92eeb7f961550 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 16:07:03 -0400 Subject: [PATCH 02/31] =?UTF-8?q?docs(math):=20slice=20framing=20rev=202?= =?UTF-8?q?=20=E2=80=94=20close=20review=20round=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nine findings, two of them decisions the implementation could not have proceeded without, one a compliance error. Two rev-1 claims were wrong rather than imprecise and are withdrawn where they occur. F1, the fraction height budget, was hidden inside "a box that would exceed the line" without saying width or height. Lines cannot grow — metrics are uniform at 16 px over a 22 px line — and a textstyle fraction does not fit. Q#MS10 now picks fit-to-line scaling with a 0.6x floor and source fallback below it, records why overdraw and line growth were rejected, and states the honest consequence: v0 shrinks nested math uniformly where TeX would use style levels. B6 makes the floor falsifiable against the flagship case. F3 was a genuine contradiction: acceptance 10 demanded source-width boxes while Q#MS4 implied layout-chosen width, and that gap IS the caret-toggle reflow question. Resolved for layout-chosen, because pinning to source width leaves every fraction sitting in a large permanent gap, whereas reflow is transient and tied to a deliberate caret move. Acceptance 10 is rewritten to bound it rather than forbid it. F2 withdrew the zero-glyph strut: a RichChunk's only width is its text, so the mechanism is the SourceTab precedent — projected spacer text, width quantized to whole advances. B1 is restated against the mechanism that exists. F5 would have bitten real prose immediately: the rev-1 rule renders "prices are $5 and $6 today" as math. Pandoc currency guards adopted, spans confined to one line, both in acceptance. F6 is factual and a licence matter. Latin Modern Math is the GUST Font License, not OFL, and is 733,736 bytes rather than ~200 KB — verified against a local TeX Live copy. The bundled licence file must say GFL, and this becomes the largest embedded asset in the repo. The parent framing carries the same error; correcting it is recorded as a follow-up rather than done here, since the parent is already merged. F4 names the new shaping-invalidation edge as the #120 trap class, including that suppression must read the effective caret or flap during optimistic typing. F7 puts math italic in scope, without which the flagship case renders a roman x. F8 clarifies that glyph IDs are still resolved internally and that drawing must pin Attrs to the math family. F9 closes the smaller gaps: the detection hook wording, an overlay rule for selections and washes, degradation of deferred display syntax, and folding Char/Symbol. Framing only; no implementation, no runtime code. Co-Authored-By: Claude Opus 5 (1M context) --- docs/inline-math-slice-framing.md | 322 +++++++++++++++++++++++++----- 1 file changed, 277 insertions(+), 45 deletions(-) diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md index 4428173..2460514 100644 --- a/docs/inline-math-slice-framing.md +++ b/docs/inline-math-slice-framing.md @@ -1,7 +1,29 @@ # Inline math — the first vertical slice (framing) -**Revision 1 — pre-implementation, framing only. Ground truth scouted against -canonical `main` @ `352bf0b`, protocol v20, 2026-07-24.** +**Revision 2 — pre-implementation, framing only. Ground truth scouted against +canonical `main` @ `352bf0b`, protocol v20, 2026-07-24. Rev 2 closes review +round 1 (F1–F9).** + +### Round 1 (rev 1 → rev 2) + +Verdict: the slice's shape survived, both load-bearing corrections held, and +nine findings landed — two of them decisions the implementation could not have +proceeded without, one a compliance error. + +| # | Finding | Closed in | +| --- | --- | --- | +| F1 | The fraction height budget was never confronted; lines cannot grow (`BASE_CODE_LINE_HEIGHT = 22.0` fixed) and a textstyle fraction does not fit | Q#MS10 (new) | +| F2 | "Contributes no glyphs, reserves width" is a mechanism the chunk model does not have — a `RichChunk`'s only width is its `text` | Q#MS4, B1 | +| F3 | Criterion 10 required source-width boxes while Q#MS4 implied layout-chosen width; the contradiction *is* the caret-toggle reflow question | Q#MS4, acceptance 10 | +| F4 | Q#MS5 makes shaping depend on the caret — a new invalidation edge, and it must read the *effective* caret or flap during optimistic typing | Q#MS5 | +| F5 | Detection had no currency guard (`$5 and $6` pairs) and no newline rule | Q#MS3 | +| F6 | **Factual:** Latin Modern Math is GUST Font License and ~717 KiB, not OFL and ~200 KB | Q#MS7, §9 | +| F7 | Without a math-italic mapping, `$x^2$` renders an upright roman `x` | Q#MS2 | +| F8 | Layout still resolves glyph IDs internally; drawing must pin `Attrs` to the math family or measured and drawn advances diverge | Q#MS6, Q#MS7 | +| F9 | Smaller: "after shaping decisions" contradicts Q#MS4; no selection/wash rule; `$$…$$` degradation untested; `Char` vs `Symbol` unmotivated | Q#MS3, Q#MS2, Q#MS11 (new), acceptance | + +Two rev-1 claims were **wrong, not merely imprecise**, and are called out +where they occur: the zero-glyph strut (F2) and the font licence (F6). Parent arc: `docs/inline-math-framing.md` (rev 2, merged as #154). Sibling substrate lane: `docs/latex-grammar-math-substrate-framing.md` (rev 3), whose @@ -116,14 +138,18 @@ should assume it will. ```rust enum MathNode { - Char(char), // x, 2, + - Symbol(char), // \alpha → U+03B1 (seed map) + Char(char), // resolved codepoint: x, 2, +, α Group(Vec), Script { base: Box, sub: Option>, sup: Option> }, Fraction { num: Box, den: Box }, } ``` +Rev 1 had both `Char` and `Symbol`, each carrying a `char`, with no stated +difference (F9d). Folded: `\alpha` resolves to `'α'` **in the parser**, so +layout sees one kind. Provenance would only matter for error messages, which +Q#MS8 does not produce. + This subset is chosen because it is the smallest one that **forces the MATH table to matter**. Characters alone could be positioned by guesswork and prove nothing. Scripts require `ScriptPercentScaleDown`, `SuperscriptShiftUp` and @@ -134,12 +160,45 @@ kinds are more of the same; get them wrong and no amount of breadth helps. The symbol map ships as a **seed** (Greek letters only, ~50 entries), not the parent's full ~200. Growing it is mechanical and needs no design. -### Q#MS3 — Detection is the frontend byte scanner, inline only +**Math italic is in scope (F7).** Neither rev 1 nor the parent mentioned it, +and without it `$x^2$` renders an upright roman `x` — which does not look like +math, and would make the slice's flagship acceptance case visibly wrong. +Variables map into the Mathematical Alphanumeric Symbols block +(U+1D400–U+1D7FF): ASCII letters become math-italic, **with the U+210E hole +for `h`** (that codepoint is Letterlike Symbols, not in the 1D4xx run) and +with digits and operators left upright. Because the slice positions +characters, this is a pure char→char mapping — the same mechanical class as +the Greek seed, and it is what makes the output read as math at all. -A two-pass scan over the visible slice for unescaped `$…$` pairs, run where -the parent specifies — in `rebuild_code_slice`, after shaping decisions, not -on the edit path. `\$` is an escape and does not open or close a span. An -unpaired `$` yields no span (acceptance 6 of the parent). +### Q#MS3 — Detection is the frontend byte scanner, inline only, currency-guarded + +A two-pass scan over the visible slice for unescaped `$…$` pairs, run in +`rebuild_code_slice` **off the edit path**. (Rev 1 said "after shaping +decisions", inherited from the parent's "post-shape hook"; that contradicts +Q#MS4, since a suppression chunk must exist *before* the line is shaped. The +property that actually matters is that detection does not run per keystroke — +F9a.) + +**Currency guards are mandatory, not a refinement (F5).** Rev 1 relied on the +parent's lone-`$` case and would have rendered `prices are $5 and $6 today` as +math over `5 and ` — in exactly the grammar-less prose buffers this rule +targets. Adopt Pandoc's rule: + +- an opening `$` must be followed by a **non-space**; +- a closing `$` must be preceded by a **non-space** and not followed by a + **digit**; +- `\$` is an escape and neither opens nor closes. + +**A span may not cross a newline in v0.** Chunking is per line and the visible +slice is line-ranged, so single-line spans are what keep visible-slice-scoped +scanning stable under scroll. A `$` with no same-line partner yields no span. + +Tree-sitter injection detection is deliberately not used, even though #144 +gives us `math_environment` / `math_delimiter` for `.tex`: that path is +instance-side, the substrate lane already deferred it to this arc, and the +slice must work in the grammar-less buffers where most inline math is typed. +It stays available as the natural upgrade — and it is the principled fix for +currency false-positives, which guards only approximate. Tree-sitter injection detection is deliberately not used, even though #144 gives us `math_environment` / `math_delimiter` for `.tex`: that path is @@ -147,19 +206,74 @@ instance-side, the substrate lane already deferred it to this arc, and the slice must work in the grammar-less buffers where most inline math is typed. It stays available as the natural upgrade. -### Q#MS4 — Suppression is a new chunk kind, and it owns its hit runs +### Q#MS4 — Suppression is a spacer chunk, width-quantized, layout-chosen (F2, F3) -`ChunkSource` gains a variant carrying the suppressed source range and the -projected width the box occupies. The chunk contributes **no glyphs** to the -cosmic-text buffer; it reserves width so the surrounding text lays out around -it, and the math is drawn over that reserved space in a later pass. +**Rev 1 was wrong about the mechanism.** It said the chunk "contributes no +glyphs… reserves width". A `RichChunk`'s only width *is* its `text: String` +(`pmacs-gpu/src/main.rs:7703`), which `line_from_chunks` feeds straight into a +`BufferLine`; cosmic-text has no zero-glyph strut. There is nothing to reserve +width with except text. -The invariant `build_hit_runs` exists to preserve — that the hit map is -derived from the same chunks glyphon shaped — is not weakened: the new -variant participates like any other. A click inside a math box maps to the -**start byte of the suppressed range**, the same "snap to anchor" rule -`Adornment` already uses. Sub-expression hit-testing is deferred; it needs a -box→byte map that this slice deliberately does not build. +The mechanism is therefore the **`SourceTab` precedent**: `ChunkSource` gains a +variant carrying the suppressed source range, and the chunk projects **spacer +text** — runs of spaces — whose advance covers the box. Reserved width is +consequently **quantized up to whole space advances**, which is a feature, not +a rounding error: the projection stays grid-aligned with the surrounding +monospace text, and hit runs stay integral. + +**Width is layout-chosen, not pinned to the source width (F3).** Rev 1 implied +both, and acceptance 10 demanded the latter. Resolved deliberately in favour of +layout-chosen: + +- Pinning to source width removes reflow, but `$\frac{a}{b}$` is 13 source + columns against a box roughly 2 wide, so every fraction would sit in a large + blank gap. That defect is permanent and visible on every render. +- Layout-chosen width means the line **reflows when the caret crosses a span + boundary** (Q#MS5 toggles suppression). That is a jump, but it is confined to + one line, it happens only on a deliberate caret move, and it is the same + behaviour `org-appear` has trained users to expect from Emacs. + +A permanent visual defect is worse than a transient one tied to an explicit +user action. Acceptance 10 is rewritten to match: text *before* the span never +moves, text *after* it moves by exactly the quantized difference, and the +reflow is confined to the affected line. + +`build_hit_runs`'s invariant — the hit map derives from the same chunks +glyphon shaped — is not weakened; the new variant participates like any other. +A click inside a math box maps to the **start byte of the suppressed range**, +the same snap-to-anchor rule `Adornment` uses. Sub-expression hit-testing is +deferred; it needs a box→byte map this slice deliberately does not build. + +### Q#MS10 — The height budget: fit to the line, or fall back (F1) + +The code buffer is one cosmic-text `Buffer` with uniform metrics — +`BASE_CODE_FONT_SIZE = 16.0`, `BASE_CODE_LINE_HEIGHT = 22.0` +(`pmacs-gpu/src/main.rs:362`, `:359`). **Lines cannot grow.** A textstyle +fraction at those metrics is roughly 17 px tall against an above-baseline +budget of ~12–14 px, so a simple fraction is marginal and acceptance 1's own +nested `\frac{x^2}{y}` plainly exceeds. Rev 1 hid this inside Q#MS8's "a box +that would exceed the line" without saying whether that meant width or height, +or what the budget was. + +**Rule: the box is uniformly scaled to fit the line box, down to a floor of +0.6×; below the floor the span falls back to source (Q#MS8).** No overdraw, no +reflow of line height, no clipping surprises. The available budget is the line +box less a one-pixel margin, split at the text baseline. + +Rejected alternatives, for the record: + +- **Overdraw into adjacent lines' leading.** The math pass draws after + glyphon and *could* paint outside the line box, but a tall fraction would + then visually collide with the line above — a defect the user cannot fix + except by not writing math. +- **Growing the line.** Not available: metrics are uniform for the whole + buffer. + +The honest consequence: **v0 shrinks nested math uniformly rather than by +proper style level.** TeX shrinks nested fractions too, but it does so through +display/text/script/scriptscript levels with per-level constants, which is the +real answer and is deferred by name in §6. A uniform scale is a visibly +cruder approximation of the same idea, and it is what keeps the slice thin. ### Q#MS5 — The cursor rule: render math only when the cursor is outside @@ -176,6 +290,28 @@ all in v0, and is deferred rather than approximated. It also gives the feature an honest, self-explaining interaction model, which is worth more in v0 than sub-glyph caret fidelity. +**This creates a new shaping-invalidation edge, and it is the #120 trap class +(F4).** Today caret motion within the visible slice touches no shaped line: +the `CursorByte` arm updates the cursor and reshapes only on scroll-follow, +and `rebuild_lines_reusing_scroll` (`pmacs-gpu/src/main.rs:5116`) retains +lines on the premise that content and styling are unchanged. Making +suppression a function of the caret breaks that premise. Two obligations +follow, both of which the implementation owns explicitly: + +- **Caret motion that crosses a span boundary must dirty the affected + lines**, and the line-reuse predicate gains suppression state as a third + input beside content and styling. A retained line computed under the + opposite suppression state is exactly the stale-mirror failure #120 taught. +- **The rule reads the *effective* caret the frontend draws**, not the last + confirmed `CursorByte`. The GPU holds an optimistic cursor during + unconfirmed edits; keying suppression off the confirmed value would make + spans flap between rendered and source while typing. + +Acceptance 7 exercises the behaviour; these two are named here because a test +that only moves the caret and re-renders would pass even if the reuse +predicate were left untouched, as long as something else happened to dirty the +line. + ### Q#MS6 — Layout positions CHARACTERS, not glyph IDs ```rust @@ -189,22 +325,51 @@ enum MathItem { Positions are in pixels relative to the box origin, resolved by the frontend that owns font metrics — consistent with the parent's contract. -**Characters, not glyph IDs, is a deliberate boundary.** Glyph-ID work exists -to select *variants* from the MATH table's `GlyphVariantRecord` / `Glyph‐ -Construction` chains — which is precisely what stretchy fences and big -operators need, and precisely what this slice defers. Positioning characters -lets each item be drawn with the existing text machinery. The slice must not -pretend this generalises: when stretchy delimiters arrive they will need glyph -IDs, and `MathItem` will gain a variant then. +**Characters, not glyph IDs, is a deliberate boundary — on the OUTPUT only +(F8a).** Layout still resolves glyph IDs *internally*: advances and +`MathItalicsCorrection` are glyph-keyed, so a `cmap` lookup happens whatever +the item type. What the boundary buys is that the *emitted* items are +drawable by the existing text machinery. + +Glyph-ID **output** exists to select *variants* from the MATH table's +`GlyphVariantRecord` / `GlyphConstruction` chains — precisely what stretchy +fences and big operators need, and precisely what this slice defers. The slice +must not pretend this generalises: when stretchy delimiters arrive they will +need glyph-ID items, and `MathItem` will gain a variant then. The fraction rule is a filled quad on the existing quad pipeline, not a glyph. ### Q#MS7 — The MATH font and its feature declaration -Bundle **Latin Modern Math** (OFL, GUST) as `pmacs-gpu/fonts/`, embedded with -`include_bytes!` beside JetBrains Mono, with its licence file. Two consumers -read the same bytes: `fontdb`/cosmic-text for drawing, and `ttf-parser` -directly for the MATH table, which cosmic-text does not expose. +Bundle **Latin Modern Math** in `pmacs-gpu/fonts/`, embedded with +`include_bytes!` beside JetBrains Mono. Two consumers read the same bytes: +`fontdb`/cosmic-text for drawing, and `ttf-parser` directly for the MATH +table, which cosmic-text does not expose. + +**Licence and size, corrected (F6).** Rev 1 said "OFL, GUST" and the parent's +table says "OFL (GUST)". Both are **wrong**. Verified against a local TeX Live +copy, `latinmodern-math.otf` is **733,736 bytes (~717 KiB)** and its own +copyright string reads *"released under the GUST Font License"* — an +LPPL-derived licence, not the SIL OFL. Consequences: + +- the bundled licence file must be the **GUST Font License**, named as such, + not `OFL.txt` (the existing `fonts/OFL.txt` covers JetBrains Mono only); +- the size claim must be honest: at ~717 KiB this becomes **the largest single + embedded asset in the repository**, roughly 3.5× the figure rev 1 quoted; +- GFL permits redistribution with its licence text, so the plan stands — but + it is a *different* obligation from OFL and must be discharged as one; +- if OFL-only ever becomes a requirement, **STIX Two Math** is the OFL + alternative already listed in the parent's font table. + +The parent framing carries the same error and needs the same correction; that +is recorded in §9 as a follow-up rather than smuggled into this lane. + +**Pin `Attrs` to the math family when drawing (F8b).** Layout measures with +`ttf-parser` against the bundled bytes; drawing goes through cosmic-text. If +fallback selects a different face for `α` or a math-italic `𝑥` than the one +measured, drawn advances diverge silently from computed geometry and the box +is subtly wrong everywhere. The draw path sets the family explicitly and does +not rely on fallback. Declare the dependency exactly as the parent's rev-2 C1 records: @@ -218,6 +383,25 @@ A font whose MATH table is absent or unparseable is a **hard startup error in the math path only** — math spans fall back to raw source (Q#MS8), the editor does not fail. Bundled-font regressions must not be silent. +### Q#MS11 — Selection, search washes, and peer carets over a box (F9b) + +Rev 1 named selection as a falsifier of B4 without proposing a rule. Any +overlay addressed in *source* bytes meets a span whose source is suppressed. + +- **A selection endpoint inside a span unsuppresses it.** This is Q#MS5's rule + generalised from the caret to any selection boundary: if the user is + addressing bytes inside the math, they see the bytes. A selection that + merely *spans* the region (both endpoints outside) leaves it rendered. +- **A wash that covers a rendered span washes the whole reserved rectangle.** + Search hits and peer-presence highlights paint the projected box, not a + sub-range of it — the box has no interior byte map (Q#MS4), so partial + washes cannot be placed honestly. +- **Peer carets snap to the span start**, the same rule as hits. + +This keeps every overlay addressable without inventing a box→byte projection +the slice does not build, and it makes "you are addressing this text" and "you +see this text" the same condition throughout. + ### Q#MS8 — Failure is always "show the source" Unparseable expression, unsupported node kind, missing MATH constant, or a box @@ -242,22 +426,31 @@ cost. ## 4. Bets (falsifiable) -- **B1 — the reserved-width chunk composes with the existing pipeline.** - Falsified if reserving width for a suppressed range requires changing how - cosmic-text shapes the surrounding line, rather than adding a chunk kind - that `chunks_for_line` and `build_hit_runs` both already iterate. +- **B1' (restated after F2) — a spacer chunk composes with the existing + pipeline.** Reserving width via projected spaces, quantized to whole space + advances, needs only a new `ChunkSource` variant that `chunks_for_line` and + `build_hit_runs` already iterate. Falsified if it requires changing how + cosmic-text shapes the surrounding line, or if quantized spacer width cannot + keep the projected hit map integral. *(Rev 1's "zero-glyph strut" wording is + withdrawn: no such mechanism exists.)* - **B2 — scripts and fractions are enough to validate `MathBox`.** Falsified if adding a deferred node kind later forces a change to `MathBox`'s width / ascent / descent / origin contract, rather than only adding a `MathItem` variant. - **B3 — character positioning suffices for the subset.** Falsified if any node in Q#MS2 cannot be drawn correctly without selecting a glyph variant. -- **B4 — the cursor rule removes the caret problem rather than hiding it.** - Falsified if any caret position, selection, or click inside or across a math - span still needs a projected-position approximation to behave correctly. +- **B4' (sharpened after F9b) — the cursor rule plus Q#MS11 remove the caret + problem rather than hiding it.** Falsified if any caret position, selection + endpoint, search wash, or peer caret inside or across a math span still needs + a projected-position approximation to behave correctly. - **B5 — `ttf-parser` supplies every constant the subset needs.** Falsified if script or fraction layout requires a MATH value `ttf-parser` does not expose. +- **B6 (new, F1) — fit-to-line with a 0.6× floor keeps the subset legible.** + Falsified if a plain `\frac{a}{b}` at default metrics lands below the floor + (making the flagship case fall back to source), or if scaled output is + illegible at the floor. Either outcome means the slice needs real TeX style + levels rather than a uniform scale, which would be a scope change. ## 5. Acceptance @@ -268,8 +461,11 @@ something reaches the screen runs on a real device through 1. **Parser** — `x^2`, `x_i`, `x_i^2`, `\frac{a}{b}`, `\alpha`, nested `\frac{x^2}{y}` produce the expected `MathNode` trees. Unbalanced `{`, unknown command, and an empty span are errors, not panics. -2. **Detection** — `$x^2$` yields one span; `Price: $5.00` yields none; - `\$5` yields none; `$a$ and $b$` yields two. +2. **Detection** — `$x^2$` yields one span; `$a$ and $b$` yields two; + `\$5` yields none. **Currency guards (F5):** `Price: $5.00` yields none, + `prices are $5 and $6 today` yields **none** (the rev-1 rule would have + matched `5 and `), `$ x $` yields none (space after opener), and a `$` + whose only partner is on the next line yields none. 3. **MATH constants are actually consulted** — layout of `x^2` with the real font places the `2` above the baseline and scaled down. Bite: stubbing `ScriptPercentScaleDown` to 100% changes the laid-out box, proving the @@ -288,11 +484,36 @@ something reaches the screen runs on a real device through span's start byte, and the surrounding text's hit runs are unchanged. 9. **Failure shows source** — `$\frac{a$` and `$\unknown{}$` render as ordinary source text with no panic and no missing glyphs. -10. **Surrounding layout is undisturbed** — `before $x^2$ after` keeps - `before`/`after` at the same positions as when the span is not math. -11. **Feature declaration** — `cargo tree -e features` shows `ttf-parser` +10. **Reflow is bounded and predictable (F3)** — in `before $x^2$ after`, + `before` occupies identical pixels whether or not the span is rendered; + `after` shifts by exactly the quantized width difference; no other line + moves. Toggling via the Q#MS5 caret rule reflows only the affected line. +11. **Line reuse honours suppression (F4)** — moving the caret across a span + boundary changes the rendered output. Bite: with suppression left out of + the line-reuse predicate, the retained line keeps the stale state and this + fails. Suppression follows the **effective** caret, so it does not flap + during an unconfirmed optimistic edit. +12. **Height budget (F1)** — a plain `$\frac{a}{b}$` renders at default + metrics within the line box and does not paint outside it (B6). A + deliberately over-tall nested case falls back to source rather than + overlapping the line above. +13. **Math italic (F7)** — `$x$` renders the math-italic glyph, not roman + `x`; `$h$` resolves through the U+210E hole rather than the 1D4xx run; + digits in `$x2$` stay upright. +14. **Overlays (Q#MS11)** — a selection endpoint inside a span unsuppresses + it; a selection enclosing a rendered span leaves it rendered and washes + the whole reserved rectangle; a peer caret inside a rendered span draws at + the span start. +15. **Deferred syntax degrades, not corrupts** — `$$x$$` renders as ordinary + source text through the empty-span error path, with no panic and no + half-rendered box (F9c). +16. **Font provenance** — the bundled licence file is the GUST Font License + and is distinct from the existing `fonts/OFL.txt`; a build with the MATH + table absent or unparseable falls back to source and surfaces the error + rather than failing silently (Q#MS7). +17. **Feature declaration** — `cargo tree -e features` shows `ttf-parser` without `std`, i.e. the declaration did not widen the shared feature set. -12. Full gate suite per `CLAUDE.md`, including `PMACS_REQUIRE_GPU=1`. +18. Full gate suite per `CLAUDE.md`, including `PMACS_REQUIRE_GPU=1`. ## 6. Deferred (named) @@ -303,7 +524,18 @@ the red-squiggle error treatment (parent Q#IM4); the `MathBox` cache (Q#MS9); sub-expression hit-testing and caret projection inside rendered math (parent Q#IM6); colour-by-context (parent Q#IM2); tree-sitter injection detection and any `MathSpans` wire surface; the TUI's distinct-face fallback; Lua-registered -delimiters. +delimiters; **proper TeX style levels** (display/text/script/scriptscript with +per-level MATH constants), for which Q#MS10's uniform fit-to-line scale is a +deliberately cruder stand-in; **sub-range washes** inside a rendered box +(Q#MS11 washes the whole rectangle). + +## 9. Follow-up outside this lane + +The parent framing (`docs/inline-math-framing.md`, rev 2, merged as #154) +carries the same font error F6 found here: its table row reads "Latin Modern +Math | Full | OFL (GUST)". It should be corrected to the GUST Font License, +with the ~717 KiB size, in its own docs change rather than in this branch — +the parent is a merged document and this lane should not quietly edit it. ## 7. Interaction with other work From 4b1af277e1c0efcf4a369e0bf238830a101711b0 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 17:57:39 -0400 Subject: [PATCH 03/31] =?UTF-8?q?docs(math):=20slice=20framing=20rev=203?= =?UTF-8?q?=20=E2=80=94=20close=20review=20round=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four findings, one of them a real gap. R2-2 is the substantive one. Rev 2's math-italic fix stopped at ASCII, which reintroduced the same defect one symbol over: the parser resolves \alpha to U+03B1, so $\alpha x$ would have drawn an upright alpha beside an italic x — mixed styles inside a single expression, with the Greek seed map being the slice's second flagship case after x^2. The mapping now follows TeX's actual convention and states it as a table: ASCII letters and lowercase Greek in math italic (U+1D434 and U+1D6FC runs, with the U+210E hole for h), uppercase Greek deliberately upright, digits and operators unchanged. Acceptance 13 gains $\alpha$ and $\Gamma$ cases so the uniformity is pinned rather than assumed. R2-1 was self-inflicted: rev 2's Q#MS3 rewrite added a corrected copy of the tree-sitter paragraph without deleting the original, leaving the stale rev-1 text immediately below the new one. Removed. R2-4 sharpens Q#MS11 from "covers" to "intersects". For selections the distinction is vacuous, but a search match can genuinely half-overlap a span — searching "2$ af" in "before $x^2$ after" matches from inside the span to outside it — and the whole-rectangle rule must apply there too, since the box has no interior byte map to place a partial wash against. R2-3 moves the follow-up section after prior art; the sections now run 0 through 9 in order. Acceptance 12 also absorbs a round-2 non-finding: the reviewer's arithmetic puts \frac{a}{b} near 0.85 and suggests \frac{x^2}{y} also clears the 0.6 floor, so the fallback case has to be computed against the real font rather than guessed — otherwise the fallback half of the test surprise-passes by rendering. The criterion now says so and asks for the computed scale to be pinned. Framing only; no implementation, no runtime code. Co-Authored-By: Claude Opus 5 (1M context) --- docs/inline-math-slice-framing.md | 105 ++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 35 deletions(-) diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md index 2460514..eb0098a 100644 --- a/docs/inline-math-slice-framing.md +++ b/docs/inline-math-slice-framing.md @@ -1,8 +1,24 @@ # Inline math — the first vertical slice (framing) -**Revision 2 — pre-implementation, framing only. Ground truth scouted against -canonical `main` @ `352bf0b`, protocol v20, 2026-07-24. Rev 2 closes review -round 1 (F1–F9).** +**Revision 3 — pre-implementation, framing only. Ground truth scouted against +canonical `main` @ `352bf0b`, protocol v20, 2026-07-24. Rev 2 closed review +round 1 (F1–F9); rev 3 closes round 2 (R2-1 – R2-4).** + +### Round 2 (rev 2 → rev 3) + +Verdict: converging — one deletion, one real gap, two nits. + +| # | Finding | Closed in | +| --- | --- | --- | +| R2-1 | The tree-sitter paragraph appeared **twice** in Q#MS3; the second was stale rev-1 text. Introduced by rev 2's own rewrite, which added a copy without removing the original | Q#MS3 | +| R2-2 | The F7 italic fix stopped at ASCII, so `$\alpha x$` drew an **upright α beside an italic 𝑥** — mixed styles inside one expression, and Greek is the slice's second flagship | Q#MS2, acceptance 13 | +| R2-3 | §9 sat between §6 and §7 | section order | +| R2-4 | Q#MS11 said a wash "covers" a span; a search match can **partially overlap** (`2$ af` in `before $x^2$ after`), which "covers" leaves unspecified | Q#MS11 | + +Carried into acceptance from a round-2 non-finding: the Q#MS10 arithmetic puts +`\frac{a}{b}` near 0.85 and suggests `\frac{x^2}{y}` also clears the 0.6 +floor, so criterion 12's fallback case must be **computed rather than guessed** +or it will surprise-pass by rendering. ### Round 1 (rev 1 → rev 2) @@ -160,15 +176,28 @@ kinds are more of the same; get them wrong and no amount of breadth helps. The symbol map ships as a **seed** (Greek letters only, ~50 entries), not the parent's full ~200. Growing it is mechanical and needs no design. -**Math italic is in scope (F7).** Neither rev 1 nor the parent mentioned it, -and without it `$x^2$` renders an upright roman `x` — which does not look like -math, and would make the slice's flagship acceptance case visibly wrong. -Variables map into the Mathematical Alphanumeric Symbols block -(U+1D400–U+1D7FF): ASCII letters become math-italic, **with the U+210E hole -for `h`** (that codepoint is Letterlike Symbols, not in the 1D4xx run) and -with digits and operators left upright. Because the slice positions -characters, this is a pure char→char mapping — the same mechanical class as -the Greek seed, and it is what makes the output read as math at all. +**Math italic is in scope, and it covers Greek too (F7, R2-2).** Neither rev 1 +nor the parent mentioned italics, and without them `$x^2$` renders an upright +roman `x` — which does not look like math, and would make the slice's flagship +acceptance case visibly wrong. + +Rev 2 fixed that for ASCII only, which reintroduced the same defect one symbol +over: `\alpha` resolves to U+03B1 in the parser, so `$\alpha x$` would have +drawn an upright α beside an italic 𝑥 — **mixed styles inside one +expression**, with the Greek seed map being the slice's *second* flagship case. +The mapping therefore follows TeX's actual convention: + +| Class | Treatment | Range | +| --- | --- | --- | +| ASCII letters | math italic | U+1D434–U+1D467, **with the U+210E hole for `h`** (Letterlike Symbols, not in the 1D4xx run) | +| Lowercase Greek | math italic | U+1D6FC–U+1D714 | +| Uppercase Greek | **upright** | left at U+0391–U+03A9 | +| Digits, operators | upright | unchanged | + +Uppercase-Greek-upright is not an omission; it is what TeX does, and matching +it is why the table is stated rather than left as "letters become italic". +Because the slice positions characters, this stays a pure char→char mapping — +the same mechanical class as the Greek seed itself. ### Q#MS3 — Detection is the frontend byte scanner, inline only, currency-guarded @@ -200,12 +229,6 @@ slice must work in the grammar-less buffers where most inline math is typed. It stays available as the natural upgrade — and it is the principled fix for currency false-positives, which guards only approximate. -Tree-sitter injection detection is deliberately not used, even though #144 -gives us `math_environment` / `math_delimiter` for `.tex`: that path is -instance-side, the substrate lane already deferred it to this arc, and the -slice must work in the grammar-less buffers where most inline math is typed. -It stays available as the natural upgrade. - ### Q#MS4 — Suppression is a spacer chunk, width-quantized, layout-chosen (F2, F3) **Rev 1 was wrong about the mechanism.** It said the chunk "contributes no @@ -392,10 +415,14 @@ overlay addressed in *source* bytes meets a span whose source is suppressed. generalised from the caret to any selection boundary: if the user is addressing bytes inside the math, they see the bytes. A selection that merely *spans* the region (both endpoints outside) leaves it rendered. -- **A wash that covers a rendered span washes the whole reserved rectangle.** - Search hits and peer-presence highlights paint the projected box, not a - sub-range of it — the box has no interior byte map (Q#MS4), so partial - washes cannot be placed honestly. +- **A wash that *intersects* a rendered span washes the whole reserved + rectangle.** Intersection, not containment (R2-4): for selections the + distinction is vacuous, since a contiguous selection with both endpoints + outside a span necessarily contains it — but a **search match can partially + overlap**, e.g. searching `2$ af` in `before $x^2$ after` matches from + inside the span to outside it. Search hits and peer highlights paint the + projected box, never a sub-range of it: the box has no interior byte map + (Q#MS4), so a partial wash cannot be placed honestly. - **Peer carets snap to the span start**, the same rule as hits. This keeps every overlay addressable without inventing a box→byte projection @@ -494,12 +521,19 @@ something reaches the screen runs on a real device through fails. Suppression follows the **effective** caret, so it does not flap during an unconfirmed optimistic edit. 12. **Height budget (F1)** — a plain `$\frac{a}{b}$` renders at default - metrics within the line box and does not paint outside it (B6). A - deliberately over-tall nested case falls back to source rather than - overlapping the line above. -13. **Math italic (F7)** — `$x$` renders the math-italic glyph, not roman - `x`; `$h$` resolves through the U+210E hole rather than the 1D4xx run; - digits in `$x2$` stay upright. + metrics within the line box and does not paint outside it (B6). A case + that exceeds the 0.6× floor falls back to source rather than overlapping + the line above. **The fallback case must be chosen by computing its scale + against the real font, not guessed:** the round-2 arithmetic puts + `\frac{a}{b}` near 0.85 and suggests even `\frac{x^2}{y}` clears the + floor, so a singly-nested case would surprise-pass by rendering. Expect a + doubly-nested `$\frac{\frac{a}{b}}{c}$`, and pin the computed scale in the + test so the boundary is asserted rather than assumed. +13. **Math italic (F7, R2-2)** — `$x$` renders the math-italic glyph, not + roman `x`; `$h$` resolves through the U+210E hole rather than the 1D4xx + run; digits in `$x2$` stay upright; **`$\alpha$` renders math-italic Greek + and `$\Gamma$` stays upright**, so `$\alpha x$` is uniformly italic rather + than mixed. 14. **Overlays (Q#MS11)** — a selection endpoint inside a span unsuppresses it; a selection enclosing a rendered span leaves it rendered and washes the whole reserved rectangle; a peer caret inside a rendered span draws at @@ -529,13 +563,6 @@ per-level MATH constants), for which Q#MS10's uniform fit-to-line scale is a deliberately cruder stand-in; **sub-range washes** inside a rendered box (Q#MS11 washes the whole rectangle). -## 9. Follow-up outside this lane - -The parent framing (`docs/inline-math-framing.md`, rev 2, merged as #154) -carries the same font error F6 found here: its table row reads "Latin Modern -Math | Full | OFL (GUST)". It should be corrected to the GUST Font License, -with the ~717 KiB size, in its own docs change rather than in this branch — -the parent is a merged document and this lane should not quietly edit it. ## 7. Interaction with other work @@ -566,3 +593,11 @@ hints (`ChunkSource::Adornment`) for interleaving non-source content and for the anchor-snapping hit rule; `headless_diag_face_recolors_band_counter…` (`:12022`) for asserting a rendering claim on real pixels; #144's query overlay for the eventual tree-sitter detection upgrade. + +## 9. Follow-up outside this lane + +The parent framing (`docs/inline-math-framing.md`, rev 2, merged as #154) +carries the same font error F6 found here: its table row reads "Latin Modern +Math | Full | OFL (GUST)". It should be corrected to the GUST Font License, +with the ~717 KiB size, in its own docs change rather than in this branch — +the parent is a merged document and this lane should not quietly edit it. From b9aed61e235a8e4b6a1db2dc20f0ebcaa117e943 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 18:14:43 -0400 Subject: [PATCH 04/31] feat(math): LaTeX math parser for the slice subset (Tier 2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pmacs-gpu/src/math_parse.rs — the Q#MS2 subset: characters, groups, sub/superscripts in either order, and \frac, plus the Greek seed map. Everything outside the subset is a typed error, which Q#MS8 turns into "render the raw source". The AST is semantic, not presentational: \alpha resolves to 'α' here, but the math-italic mapping stays in layout, where a codepoint becomes a glyph. Baking italics into the AST would make the tree disagree with the source and would have to be unpicked by any later non-italic style context. Two bugs the tests caught before they could reach layout, both from skipping whitespace in the wrong place. `parse_atom` consumed it, but the ^/_ dispatch happens in `parse_sequence` BEFORE atoms are read — so `x ^ 2` parsed the caret as a literal character, and an all-whitespace span produced an empty group instead of the Empty error. Whitespace is now skipped at the dispatch point, which fixes both at one seam. Interior `$` is rejected explicitly so `$$x$$` degrades through the error path (acceptance 15) rather than half-rendering. Clippy reports MathNode as dead code, which is correct and expected: the parser has no consumer until Tier 3 layout lands. That is exactly the condition Q#LX5 refused to ship, now enforced mechanically. It is not suppressed; it clears when layout arrives in this same branch. 11 unit tests, no GPU or font required. Co-Authored-By: Claude Opus 5 (1M context) --- pmacs-gpu/src/main.rs | 1 + pmacs-gpu/src/math_parse.rs | 417 ++++++++++++++++++++++++++++++++++++ 2 files changed, 418 insertions(+) create mode 100644 pmacs-gpu/src/math_parse.rs diff --git a/pmacs-gpu/src/main.rs b/pmacs-gpu/src/main.rs index 29acbe3..4370c19 100644 --- a/pmacs-gpu/src/main.rs +++ b/pmacs-gpu/src/main.rs @@ -23,6 +23,7 @@ //! the SIL Open Font License 1.1 (see `fonts/OFL.txt`). mod attach; +mod math_parse; mod terminal; use std::collections::HashMap; diff --git a/pmacs-gpu/src/math_parse.rs b/pmacs-gpu/src/math_parse.rs new file mode 100644 index 0000000..bbbe8e4 --- /dev/null +++ b/pmacs-gpu/src/math_parse.rs @@ -0,0 +1,417 @@ +//! LaTeX math-mode parser for the first inline-math slice. +//! +//! Framing: `docs/inline-math-slice-framing.md` (rev 3), Q#MS2. This parses +//! the deliberately small subset the slice renders — characters, groups, +//! sub/superscripts and fractions — and nothing else. Every other LaTeX +//! construct is an error, which Q#MS8 turns into "show the raw source". +//! +//! The AST is *semantic*, not presentational: `\alpha` resolves to `'α'` +//! here, but the math-italic mapping (Q#MS2's table) belongs to layout, which +//! is where a codepoint becomes a glyph. Keeping the split here means the AST +//! matches what the user wrote, and a future non-italic style context does +//! not have to unpick a decision the parser baked in. + +/// One node of the slice's math subset (Q#MS2). +/// +/// Rev 2 of the framing folded `Symbol` into `Char`: both carried a `char`, +/// and after symbol resolution layout cannot act on the difference. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum MathNode { + /// A resolved codepoint: `x`, `2`, `+`, `α`. + Char(char), + /// A braced group, or the top-level expression. + Group(Vec), + /// A base with optional sub- and superscript. + Script { + base: Box, + sub: Option>, + sup: Option>, + }, + /// `\frac{num}{den}`. + Fraction { + num: Box, + den: Box, + }, +} + +/// Why a span could not be parsed. Q#MS8 renders the raw source for all of +/// these; the variants exist so tests can assert *which* rejection fired. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum MathParseError { + /// The span held no math (`$$` after delimiter stripping). + Empty, + /// A `{` with no matching `}`, or a stray `}`. + UnbalancedBrace, + /// A control sequence outside the subset, e.g. `\sqrt`. + UnknownCommand(String), + /// `\frac` without two braced arguments. + MalformedCommand(&'static str), + /// `^` or `_` with nothing to attach to, or given twice for one base. + MalformedScript(&'static str), + /// A `$` inside the span: the delimiters are the caller's business, and + /// a bare one here means detection handed us something it should not + /// have (framing acceptance 15 — `$$x$$` degrades through this path). + UnexpectedDollar, +} + +/// Greek seed map (Q#MS2). Deliberately partial — growing it is mechanical. +const GREEK: &[(&str, char)] = &[ + ("alpha", 'α'), + ("beta", 'β'), + ("gamma", 'γ'), + ("delta", 'δ'), + ("epsilon", 'ε'), + ("zeta", 'ζ'), + ("eta", 'η'), + ("theta", 'θ'), + ("iota", 'ι'), + ("kappa", 'κ'), + ("lambda", 'λ'), + ("mu", 'μ'), + ("nu", 'ν'), + ("xi", 'ξ'), + ("pi", 'π'), + ("rho", 'ρ'), + ("sigma", 'σ'), + ("tau", 'τ'), + ("upsilon", 'υ'), + ("phi", 'φ'), + ("chi", 'χ'), + ("psi", 'ψ'), + ("omega", 'ω'), + ("Gamma", 'Γ'), + ("Delta", 'Δ'), + ("Theta", 'Θ'), + ("Lambda", 'Λ'), + ("Xi", 'Ξ'), + ("Pi", 'Π'), + ("Sigma", 'Σ'), + ("Upsilon", 'Υ'), + ("Phi", 'Φ'), + ("Psi", 'Ψ'), + ("Omega", 'Ω'), +]; + +/// Parse the *interior* of a math span — delimiters already stripped. +/// +/// # Errors +/// Returns [`MathParseError`] for anything outside the Q#MS2 subset. +pub fn parse(source: &str) -> Result { + let mut parser = Parser { + chars: source.chars().collect(), + pos: 0, + }; + let nodes = parser.parse_sequence(None)?; + if parser.pos < parser.chars.len() { + // Only a stray `}` can stop the top-level sequence early. + return Err(MathParseError::UnbalancedBrace); + } + if nodes.is_empty() { + return Err(MathParseError::Empty); + } + Ok(MathNode::Group(nodes)) +} + +struct Parser { + chars: Vec, + pos: usize, +} + +impl Parser { + fn peek(&self) -> Option { + self.chars.get(self.pos).copied() + } + + fn bump(&mut self) -> Option { + let ch = self.peek(); + if ch.is_some() { + self.pos += 1; + } + ch + } + + /// Parse until `close` (or end of input when `None`). + fn parse_sequence(&mut self, close: Option) -> Result, MathParseError> { + let mut out: Vec = Vec::new(); + loop { + // Whitespace is insignificant in math mode, and it must be + // skipped HERE rather than inside `parse_atom`: the `^`/`_` + // dispatch below happens before atoms are read, so leaving a + // space in front of a marker would make `x ^ 2` parse the caret + // as a literal character. + while self.peek().is_some_and(char::is_whitespace) { + self.pos += 1; + } + match self.peek() { + None => { + if close.is_some() { + return Err(MathParseError::UnbalancedBrace); + } + return Ok(out); + } + Some(ch) if Some(ch) == close => { + self.pos += 1; + return Ok(out); + } + // A `}` we were not asked to stop at is unbalanced. + Some('}') => return Err(MathParseError::UnbalancedBrace), + Some('$') => return Err(MathParseError::UnexpectedDollar), + Some('^' | '_') => { + let base = out.pop().ok_or(MathParseError::MalformedScript( + "sub/superscript with no base", + ))?; + out.push(self.parse_scripts(base)?); + } + Some(_) => { + let atom = self.parse_atom()?; + out.push(atom); + } + } + } + } + + /// One atom: a group, a command, or a single character. + fn parse_atom(&mut self) -> Result { + match self.bump() { + Some('{') => Ok(MathNode::Group(self.parse_sequence(Some('}'))?)), + Some('\\') => self.parse_command(), + Some(ch) => Ok(MathNode::Char(ch)), + None => Err(MathParseError::MalformedCommand("unexpected end of input")), + } + } + + fn parse_command(&mut self) -> Result { + let mut name = String::new(); + while let Some(ch) = self.peek() { + if ch.is_ascii_alphabetic() { + name.push(ch); + self.pos += 1; + } else { + break; + } + } + if name.is_empty() { + // `\$`, `\{` … — an escaped literal. + return match self.bump() { + Some(ch) => Ok(MathNode::Char(ch)), + None => Err(MathParseError::MalformedCommand("trailing backslash")), + }; + } + if name == "frac" { + let num = self.parse_required_group("\\frac numerator")?; + let den = self.parse_required_group("\\frac denominator")?; + return Ok(MathNode::Fraction { + num: Box::new(num), + den: Box::new(den), + }); + } + if let Some((_, ch)) = GREEK.iter().find(|(n, _)| *n == name) { + return Ok(MathNode::Char(*ch)); + } + Err(MathParseError::UnknownCommand(name)) + } + + /// A `{…}` argument, skipping leading whitespace. + fn parse_required_group(&mut self, what: &'static str) -> Result { + while self.peek().is_some_and(char::is_whitespace) { + self.pos += 1; + } + match self.peek() { + Some('{') => { + self.pos += 1; + Ok(MathNode::Group(self.parse_sequence(Some('}'))?)) + } + _ => Err(MathParseError::MalformedCommand(what)), + } + } + + /// Attach `^`/`_` to `base`, in either order, at most one each. + fn parse_scripts(&mut self, base: MathNode) -> Result { + let mut sub: Option> = None; + let mut sup: Option> = None; + while let Some(marker @ ('^' | '_')) = self.peek() { + self.pos += 1; + let slot = self.parse_script_operand()?; + match marker { + '^' if sup.is_some() => { + return Err(MathParseError::MalformedScript("double superscript")); + } + '_' if sub.is_some() => { + return Err(MathParseError::MalformedScript("double subscript")); + } + '^' => sup = Some(Box::new(slot)), + _ => sub = Some(Box::new(slot)), + } + } + Ok(MathNode::Script { + base: Box::new(base), + sub, + sup, + }) + } + + /// The operand of `^`/`_`: a braced group, or exactly one atom. + fn parse_script_operand(&mut self) -> Result { + while self.peek().is_some_and(char::is_whitespace) { + self.pos += 1; + } + match self.peek() { + None => Err(MathParseError::MalformedScript("script with no operand")), + Some('^' | '_') => Err(MathParseError::MalformedScript("script with no operand")), + Some('}') => Err(MathParseError::MalformedScript("script with no operand")), + Some(_) => self.parse_atom(), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn ch(c: char) -> MathNode { + MathNode::Char(c) + } + + fn group(nodes: Vec) -> MathNode { + MathNode::Group(nodes) + } + + #[test] + fn plain_characters_parse_in_order() { + assert_eq!(parse("x+1"), Ok(group(vec![ch('x'), ch('+'), ch('1')]))); + } + + #[test] + fn superscript_and_subscript_attach_to_the_preceding_atom() { + // Framing acceptance 1. + assert_eq!( + parse("x^2"), + Ok(group(vec![MathNode::Script { + base: Box::new(ch('x')), + sub: None, + sup: Some(Box::new(ch('2'))), + }])) + ); + assert_eq!( + parse("x_i"), + Ok(group(vec![MathNode::Script { + base: Box::new(ch('x')), + sub: Some(Box::new(ch('i'))), + sup: None, + }])) + ); + } + + #[test] + fn both_scripts_parse_in_either_order() { + let expected = MathNode::Script { + base: Box::new(ch('x')), + sub: Some(Box::new(ch('i'))), + sup: Some(Box::new(ch('2'))), + }; + assert_eq!(parse("x_i^2"), Ok(group(vec![expected.clone()]))); + assert_eq!(parse("x^2_i"), Ok(group(vec![expected]))); + } + + #[test] + fn braced_script_operands_group() { + assert_eq!( + parse("x^{i+1}"), + Ok(group(vec![MathNode::Script { + base: Box::new(ch('x')), + sub: None, + sup: Some(Box::new(group(vec![ch('i'), ch('+'), ch('1')]))), + }])) + ); + } + + #[test] + fn fraction_takes_two_braced_arguments() { + assert_eq!( + parse(r"\frac{a}{b}"), + Ok(group(vec![MathNode::Fraction { + num: Box::new(group(vec![ch('a')])), + den: Box::new(group(vec![ch('b')])), + }])) + ); + } + + #[test] + fn fractions_nest() { + // Framing acceptance 1 and 12's over-tall candidate. + let inner = MathNode::Fraction { + num: Box::new(group(vec![ch('a')])), + den: Box::new(group(vec![ch('b')])), + }; + assert_eq!( + parse(r"\frac{\frac{a}{b}}{c}"), + Ok(group(vec![MathNode::Fraction { + num: Box::new(group(vec![inner])), + den: Box::new(group(vec![ch('c')])), + }])) + ); + } + + #[test] + fn greek_seed_resolves_to_codepoints_not_markup() { + assert_eq!(parse(r"\alpha"), Ok(group(vec![ch('α')]))); + assert_eq!(parse(r"\Gamma"), Ok(group(vec![ch('Γ')]))); + // The AST stays semantic: no italic mapping here (that is layout's, + // per this module's header and Q#MS2). + assert_eq!(parse(r"\alpha x"), Ok(group(vec![ch('α'), ch('x')]))); + } + + #[test] + fn whitespace_is_insignificant() { + assert_eq!(parse("x ^ 2"), parse("x^2")); + assert_eq!(parse(r"\frac {a} {b}"), parse(r"\frac{a}{b}")); + } + + #[test] + fn subset_violations_are_errors_not_panics() { + // Framing acceptance 1 and 9. + assert_eq!(parse(""), Err(MathParseError::Empty)); + assert_eq!(parse(" "), Err(MathParseError::Empty)); + assert_eq!(parse("{a"), Err(MathParseError::UnbalancedBrace)); + assert_eq!(parse("a}"), Err(MathParseError::UnbalancedBrace)); + assert_eq!( + parse(r"\sqrt{2}"), + Err(MathParseError::UnknownCommand("sqrt".to_owned())) + ); + assert!(matches!( + parse(r"\frac{a}"), + Err(MathParseError::MalformedCommand(_)) + )); + assert!(matches!( + parse(r"\frac a b"), + Err(MathParseError::MalformedCommand(_)) + )); + assert!(matches!( + parse("^2"), + Err(MathParseError::MalformedScript(_)) + )); + assert!(matches!( + parse("x^"), + Err(MathParseError::MalformedScript(_)) + )); + assert!(matches!( + parse("x^2^3"), + Err(MathParseError::MalformedScript(_)) + )); + } + + #[test] + fn an_interior_dollar_is_rejected_so_display_math_degrades() { + // Framing acceptance 15: `$$x$$` reaches us as the interior `$x$` + // (outer delimiters stripped), and must degrade to source rather + // than half-render. The empty-span path covers `$$` alone. + assert_eq!(parse("$x$"), Err(MathParseError::UnexpectedDollar)); + assert_eq!(parse(""), Err(MathParseError::Empty)); + } + + #[test] + fn escaped_literals_survive_as_characters() { + assert_eq!(parse(r"\{"), Ok(group(vec![ch('{')]))); + assert_eq!(parse(r"\$"), Ok(group(vec![ch('$')]))); + } +} From 320bcce27606ea5fe94d56d0690c550282130fdc Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 18:27:34 -0400 Subject: [PATCH 05/31] feat(math): bundle Latin Modern Math and read its MATH constants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Font, licence, and the metrics half of Tier 3. The bundled font is Latin Modern Math under the GUST Font License, added as fonts/GUST-FONT-LICENSE.txt — deliberately a separate file from fonts/OFL.txt, which covers JetBrains Mono only. GFL is LPPL-derived, not the SIL OFL; the framing's F6 corrected that error and this is the discharge. At 733,736 bytes the font is now the largest embedded asset in the repository. ttf-parser is declared with default-features = false and only "opentype-layout". Verified differentially: the ttf-parser feature set from `cargo tree -e features` is byte-identical with and without this dependency line, so the declaration widens nothing and forces no rebuild of the font chain. That check also corrected acceptance 17, which asserted `std` would be absent. It is not — fontdb already enables it via `std = ["ttf-parser/std"]`, upstream and independent of us. As written the criterion would have failed a correct implementation, so it is now stated as the differential property that actually matters. MathConstants reads only what the Q#MS2 subset needs — axis height, script scale percent, the two script shifts, and fraction rule thickness. Reading more would be speculative: constants for deferred constructs have no consumer to validate them, which is the Q#LX5 discipline applied to metrics. A font with no MATH table is a typed error rather than plausible-looking zeros, so a bundled-font regression cannot be silent (Q#MS7). math_italic implements TeX's convention as the framing's table states it: ASCII letters and lowercase Greek italic, uppercase Greek upright, digits and operators unchanged, with U+210E for `h` because the 1D4xx run has a hole there and arithmetic would land on a reserved codepoint. Five tests, all against the real embedded bytes rather than fixtures, since B5 is the bet that would sink Tier 3 if false. One goes beyond the framing: every italic mapping must resolve to a glyph the bundled font actually has, because a mapping that produced tofu would be worse than the roman fallback it replaces. Co-Authored-By: Claude Opus 5 (1M context) --- Cargo.lock | 1 + docs/inline-math-slice-framing.md | 9 +- pmacs-gpu/Cargo.toml | 5 + pmacs-gpu/fonts/GUST-FONT-LICENSE.txt | 28 ++++ pmacs-gpu/fonts/latinmodern-math.otf | Bin 0 -> 733736 bytes pmacs-gpu/src/main.rs | 1 + pmacs-gpu/src/math_layout.rs | 207 ++++++++++++++++++++++++++ 7 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 pmacs-gpu/fonts/GUST-FONT-LICENSE.txt create mode 100644 pmacs-gpu/fonts/latinmodern-math.otf create mode 100644 pmacs-gpu/src/math_layout.rs diff --git a/Cargo.lock b/Cargo.lock index d7caff6..11b6fcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2597,6 +2597,7 @@ dependencies = [ "pollster", "sys-locale", "tempfile", + "ttf-parser", "unicode-width", "wgpu", "winit", diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md index eb0098a..cdeef71 100644 --- a/docs/inline-math-slice-framing.md +++ b/docs/inline-math-slice-framing.md @@ -545,8 +545,13 @@ something reaches the screen runs on a real device through and is distinct from the existing `fonts/OFL.txt`; a build with the MATH table absent or unparseable falls back to source and surfaces the error rather than failing silently (Q#MS7). -17. **Feature declaration** — `cargo tree -e features` shows `ttf-parser` - without `std`, i.e. the declaration did not widen the shared feature set. +17. **Feature declaration is differential, not absolute** — the `ttf-parser` + feature set from `cargo tree -e features` is **byte-identical with and + without this crate's dependency line**. Asserting "`std` is absent" would + be wrong and would fail a correct implementation: `std` is *already* + enabled upstream, because `fontdb` declares `std = ["ttf-parser/std"]`. + What the declaration must not do is *widen* the set, which only a + before/after comparison can show. 18. Full gate suite per `CLAUDE.md`, including `PMACS_REQUIRE_GPU=1`. ## 6. Deferred (named) diff --git a/pmacs-gpu/Cargo.toml b/pmacs-gpu/Cargo.toml index 40bc3ee..2715d57 100644 --- a/pmacs-gpu/Cargo.toml +++ b/pmacs-gpu/Cargo.toml @@ -37,6 +37,11 @@ similar_names = "allow" multiple_crate_versions = "allow" [dependencies] +# OpenType MATH table reader for inline math layout (Q#MS7). Already in the +# build graph via fontdb -> cosmic-text -> glyphon, so this declares a crate +# the build compiles anyway. The feature set is a SUBSET of fontdb's; a bare +# `ttf-parser = "0.25"` would union `std` in and rebuild the whole font chain. +ttf-parser = { version = "0.25", default-features = false, features = ["opentype-layout"] } # OS clipboard for cut/copy/paste (Q#CM6). `wayland-data-control` adds # the zwlr_data_control backend so the clipboard works under Wayland # without a window handle; the default X11 backend covers X sessions. diff --git a/pmacs-gpu/fonts/GUST-FONT-LICENSE.txt b/pmacs-gpu/fonts/GUST-FONT-LICENSE.txt new file mode 100644 index 0000000..604bf75 --- /dev/null +++ b/pmacs-gpu/fonts/GUST-FONT-LICENSE.txt @@ -0,0 +1,28 @@ +% This is version 1.0, dated 22 June 2009, of the GUST Font License. +% (GUST is the Polish TeX Users Group, http://www.gust.org.pl) +% +% For the most recent version of this license see +% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt +% or +% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt +% +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. +% +% Please also observe the following clause: +% 1) it is requested, but not legally required, that derived works be +% distributed only after changing the names of the fonts comprising this +% work and given in an accompanying "manifest", and that the +% files comprising the Work, as listed in the manifest, also be given +% new names. Any exceptions to this request are also given in the +% manifest. +% +% We recommend the manifest be given in a separate file named +% MANIFEST-.txt, where is some unique identification +% of the font family. If a separate "readme" file accompanies the Work, +% we recommend a name of the form README-.txt. +% +% The latest version of the LaTeX Project Public License is in +% http://www.latex-project.org/lppl.txt and version 1.3c or later +% is part of all distributions of LaTeX version 2006/05/20 or later. diff --git a/pmacs-gpu/fonts/latinmodern-math.otf b/pmacs-gpu/fonts/latinmodern-math.otf new file mode 100644 index 0000000000000000000000000000000000000000..0e4642e916c3e8206c8bf9c490c90eb3b20d9365 GIT binary patch literal 733736 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

1WqRB+)`&4rkF^#c#(W}7`xx-=!VMBU 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%0A+cVsA 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
Er`u0lNSZ%dE!ryx%)Q2w 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

KHd%&|8S^QlTavNt-kJ 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 OGPjg*S?asglm7=Ph_8_V literal 0 HcmV?d00001 diff --git a/pmacs-gpu/src/main.rs b/pmacs-gpu/src/main.rs index 4370c19..90bb515 100644 --- a/pmacs-gpu/src/main.rs +++ b/pmacs-gpu/src/main.rs @@ -23,6 +23,7 @@ //! the SIL Open Font License 1.1 (see `fonts/OFL.txt`). mod attach; +mod math_layout; mod math_parse; mod terminal; diff --git a/pmacs-gpu/src/math_layout.rs b/pmacs-gpu/src/math_layout.rs new file mode 100644 index 0000000..b75af60 --- /dev/null +++ b/pmacs-gpu/src/math_layout.rs @@ -0,0 +1,207 @@ +//! OpenType MATH metrics and the math-italic mapping (Tier 3, part one). +//! +//! Framing: `docs/inline-math-slice-framing.md` (rev 3), Q#MS6 / Q#MS7. +//! +//! Two consumers read the same bundled font bytes: cosmic-text draws with it, +//! and this module measures with it. cosmic-text does not expose the MATH +//! table, which is why `ttf-parser` is a direct dependency (Q#MS7) — already +//! in the build graph via `fontdb`, declared with a feature subset that +//! widens nothing. + +use ttf_parser::Face; + +/// Bundled math font (GUST Font License — see `fonts/GUST-FONT-LICENSE.txt`). +/// +/// Distinct from `fonts/OFL.txt`, which covers JetBrains Mono only: Latin +/// Modern Math is GFL, an LPPL-derived licence, not the SIL OFL (framing F6). +pub const LATIN_MODERN_MATH: &[u8] = include_bytes!("../fonts/latinmodern-math.otf"); + +/// The MATH constants this slice's subset needs, in font units. +/// +/// Deliberately narrow: Q#MS2 covers scripts and fractions, so these are the +/// constants those two require. Reading more would be speculative — the +/// values for deferred constructs are only meaningful once they have a +/// consumer (the Q#LX5 discipline, applied to metrics). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct MathConstants { + /// Units per em, for scaling everything below into pixels. + pub units_per_em: u16, + /// Vertical position of the fraction bar / math axis. + pub axis_height: i16, + /// Percentage (0–100) to scale one script level down. + pub script_percent_scale_down: i16, + /// Baseline shift for a superscript. + pub superscript_shift_up: i16, + /// Baseline shift for a subscript. + pub subscript_shift_down: i16, + /// Thickness of the fraction rule. + pub fraction_rule_thickness: i16, +} + +/// Why the bundled font could not supply math metrics. +/// +/// Q#MS7: this is a failure of the *math path only* — spans fall back to +/// source and the editor keeps running. It is surfaced rather than swallowed +/// so a bundled-font regression cannot be silent. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum MathFontError { + /// The bytes are not a parseable font. + Unparseable, + /// Parsed, but carries no MATH table (e.g. a text-only font). + NoMathTable, + /// MATH table present but missing a constant the subset needs. + MissingConstant(&'static str), +} + +impl MathConstants { + /// Read the subset's constants from font bytes. + /// + /// # Errors + /// [`MathFontError`] when the face, the MATH table, or a needed constant + /// is absent. + pub fn from_font_bytes(bytes: &[u8]) -> Result { + let face = Face::parse(bytes, 0).map_err(|_| MathFontError::Unparseable)?; + let math = face.tables().math.ok_or(MathFontError::NoMathTable)?; + let constants = math + .constants + .ok_or(MathFontError::MissingConstant("constants"))?; + Ok(Self { + units_per_em: face.units_per_em(), + axis_height: constants.axis_height().value, + script_percent_scale_down: constants.script_percent_scale_down(), + superscript_shift_up: constants.superscript_shift_up().value, + subscript_shift_down: constants.subscript_shift_down().value, + fraction_rule_thickness: constants.fraction_rule_thickness().value, + }) + } + + /// Convert a font-unit value to pixels at `font_size_px`. + #[must_use] + pub fn to_px(self, value: i16, font_size_px: f32) -> f32 { + if self.units_per_em == 0 { + return 0.0; + } + f32::from(value) * font_size_px / f32::from(self.units_per_em) + } + + /// The per-level script scale, as a fraction (e.g. 0.7). + #[must_use] + pub fn script_scale(self) -> f32 { + let pct = f32::from(self.script_percent_scale_down); + if pct <= 0.0 { 0.7 } else { pct / 100.0 } + } +} + +/// Map a resolved codepoint to its math-mode presentation form (Q#MS2). +/// +/// TeX's convention, which is why uppercase Greek is deliberately upright: +/// +/// | Class | Treatment | +/// |---|---| +/// | ASCII letters | math italic, with the U+210E hole for `h` | +/// | Lowercase Greek | math italic | +/// | Uppercase Greek | upright | +/// | Digits, operators | upright | +/// +/// Without this, `$x^2$` draws a roman `x` and `$\alpha x$` draws an upright +/// α beside an italic 𝑥 — mixed styles inside one expression (framing F7, +/// R2-2). +#[must_use] +pub fn math_italic(ch: char) -> char { + // U+210E PLANCK CONSTANT is the italic `h`; the 1D4xx run has a hole + // there, so mapping arithmetically would produce a reserved codepoint. + if ch == 'h' { + return '\u{210E}'; + } + let mapped = match ch { + 'A'..='Z' => 0x1D434 + (ch as u32 - 'A' as u32), + 'a'..='z' => 0x1D44E + (ch as u32 - 'a' as u32), + // Lowercase Greek α..ω → MATHEMATICAL ITALIC SMALL ALPHA..OMEGA. + '\u{3B1}'..='\u{3C9}' => 0x1D6FC + (ch as u32 - 0x3B1), + // Uppercase Greek, digits, operators: upright, per TeX. + _ => return ch, + }; + char::from_u32(mapped).unwrap_or(ch) +} + +#[cfg(test)] +mod tests { + use super::*; + + /// B5 — `ttf-parser` supplies every constant the subset needs, from the + /// bundled font. This is the bet that would sink Tier 3 if false, so it + /// runs against the real embedded bytes rather than a fixture. + #[test] + fn bundled_font_yields_every_math_constant_the_subset_needs() { + let c = MathConstants::from_font_bytes(LATIN_MODERN_MATH) + .expect("bundled Latin Modern Math must expose MATH constants"); + assert_eq!(c.units_per_em, 1000, "LM Math is a 1000 upem font"); + assert!(c.axis_height > 0, "axis height: {}", c.axis_height); + assert!( + (50..=100).contains(&c.script_percent_scale_down), + "script scale percent out of range: {}", + c.script_percent_scale_down + ); + assert!(c.superscript_shift_up > 0); + assert!(c.subscript_shift_down > 0); + assert!(c.fraction_rule_thickness > 0); + } + + #[test] + fn a_text_font_without_a_math_table_is_rejected_not_defaulted() { + // Q#MS7: a font with no MATH table must surface, not silently + // produce plausible-looking zeros. + let err = MathConstants::from_font_bytes(crate::JETBRAINS_MONO) + .expect_err("JetBrains Mono has no MATH table"); + assert_eq!(err, MathFontError::NoMathTable); + assert_eq!( + MathConstants::from_font_bytes(b"not a font"), + Err(MathFontError::Unparseable) + ); + } + + #[test] + fn font_units_convert_to_pixels_against_upem() { + let c = MathConstants::from_font_bytes(LATIN_MODERN_MATH).expect("constants"); + // Half an em at 16 px is 8 px. + let half_em = i16::try_from(c.units_per_em / 2).expect("fits"); + assert!((c.to_px(half_em, 16.0) - 8.0).abs() < 0.01); + let scale = c.script_scale(); + assert!((0.5..=1.0).contains(&scale), "script scale: {scale}"); + } + + #[test] + fn math_italic_follows_tex_convention_including_the_planck_hole() { + // Framing acceptance 13. + assert_eq!(math_italic('x'), '\u{1D465}'); + assert_eq!(math_italic('A'), '\u{1D434}'); + // The 1D4xx run has a hole at italic `h`; arithmetic would land on a + // reserved codepoint, so `h` maps to U+210E instead. + assert_eq!(math_italic('h'), '\u{210E}'); + // Lowercase Greek is italic... + assert_eq!(math_italic('α'), '\u{1D6FC}'); + assert_eq!(math_italic('ω'), '\u{1D714}'); + // ...uppercase Greek is NOT (TeX convention, deliberate). + assert_eq!(math_italic('Γ'), 'Γ'); + assert_eq!(math_italic('Ω'), 'Ω'); + // Digits and operators stay upright. + assert_eq!(math_italic('2'), '2'); + assert_eq!(math_italic('+'), '+'); + } + + #[test] + fn every_italic_mapping_lands_on_a_real_glyph_in_the_bundled_font() { + // A mapping that produces codepoints the bundled font cannot draw + // would render tofu — worse than the roman fallback it replaced. + let face = Face::parse(LATIN_MODERN_MATH, 0).expect("parse bundled font"); + let sample = "abhxyzABXYZαβωΓΩ0129+="; + for ch in sample.chars() { + let mapped = math_italic(ch); + assert!( + face.glyph_index(mapped).is_some(), + "no glyph for {ch:?} -> {mapped:?} (U+{:04X})", + mapped as u32 + ); + } + } +} From f708ccb2a4cc9dc10a6fb0397af830ce0b4407ae Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 18:39:26 -0400 Subject: [PATCH 06/31] feat(math): box layout, and measure the real height budget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MathBox/MathItem composition for the Q#MS2 subset: characters advance a pen, scripts shift by the MATH table's superscript/subscript amounts at script scale, and \frac stacks its operands around a rule at the math axis. Inline \frac sets its operands one style down, which is TeX's rule and also what the parent framing's Tier 3 specifies — and it is load-bearing for Q#MS10, since full-size operands would not fit the line at all. The height budget is now measured rather than assumed, and the round-2 review was right to insist on that. Two things were wrong. First, my own test derived the budget from the MATH font's metrics. Q#MS10 says the budget is the LINE BOX, whose baseline the CODE font places — JetBrains Mono ascends 16.32 px and descends 4.80 px at 16 px inside the 22 px line, against Latin Modern Math's 12.90/3.10. Using the wrong font made a plain \frac{a}{b} score 0.485 and appear to fall below the floor, which would have meant the flagship case never rendering. Second, with the budget derived correctly, B6 holds — \frac{a}{b} scales to 0.732 — but rev 3's guessed fallback case does not. A doubly-nested fraction scores 0.744 and still renders; the floor is not tripped until depth 3, at 0.580. Round 2 predicted precisely this surprise-pass. Worth keeping: depth 2 scores HIGHER than depth 1, because the binding constraint flips from descent to ascent as nesting grows asymmetrically, so "deeper is always tighter" is false. The test therefore SEARCHES for the tripping depth instead of hardcoding it, and fails if no depth trips the floor at all — which would mean the fallback arm is unreachable and the floor is dead code. Acceptance 12 records the measured table. Co-Authored-By: Claude Opus 5 (1M context) --- docs/inline-math-slice-framing.md | 31 +- pmacs-gpu/src/math_layout.rs | 530 ++++++++++++++++++++++++++++++ 2 files changed, 552 insertions(+), 9 deletions(-) diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md index cdeef71..a100073 100644 --- a/docs/inline-math-slice-framing.md +++ b/docs/inline-math-slice-framing.md @@ -520,15 +520,28 @@ something reaches the screen runs on a real device through the line-reuse predicate, the retained line keeps the stale state and this fails. Suppression follows the **effective** caret, so it does not flap during an unconfirmed optimistic edit. -12. **Height budget (F1)** — a plain `$\frac{a}{b}$` renders at default - metrics within the line box and does not paint outside it (B6). A case - that exceeds the 0.6× floor falls back to source rather than overlapping - the line above. **The fallback case must be chosen by computing its scale - against the real font, not guessed:** the round-2 arithmetic puts - `\frac{a}{b}` near 0.85 and suggests even `\frac{x^2}{y}` clears the - floor, so a singly-nested case would surprise-pass by rendering. Expect a - doubly-nested `$\frac{\frac{a}{b}}{c}$`, and pin the computed scale in the - test so the boundary is asserted rather than assumed. +12. **Height budget (F1) — measured, not assumed.** Computed against the + bundled font, with the budget derived as Q#MS10 defines it (the line box + less a 1 px margin, baseline placed by the **code** font — JetBrains Mono + asc 16.32 / desc 4.80 at 16 px inside the 22 px line, *not* the math + font's own 12.90/3.10): + + | expression | ascent | descent | scale | + | --- | --- | --- | --- | + | `x^2`, `\alpha x` | 13.27 | 0.18 | 1.000 | + | `\frac{a}{b}` | 11.57 | 6.40 | **0.732** | + | `\frac{x^2}{y}` | 15.91 | 5.75 | 0.814 | + | nesting depth 2 | — | — | 0.744 | + | nesting depth 3 | — | — | **0.580** | + + So **B6 holds** — the flagship fraction renders at 0.732 — and the + fallback case is **depth 3**, not the doubly-nested one rev 3 guessed. + Round 2 predicted exactly this trap. Two things worth keeping: depth 2 + scores *higher* than depth 1 because the binding constraint flips from + descent to ascent as nesting grows asymmetrically, so "deeper is always + tighter" is false; and the test **searches** for the tripping depth rather + than hardcoding it, so a font or metric change cannot silently leave the + fallback arm unexercised. 13. **Math italic (F7, R2-2)** — `$x$` renders the math-italic glyph, not roman `x`; `$h$` resolves through the U+210E hole rather than the 1D4xx run; digits in `$x2$` stay upright; **`$\alpha$` renders math-italic Greek diff --git a/pmacs-gpu/src/math_layout.rs b/pmacs-gpu/src/math_layout.rs index b75af60..f41c4cb 100644 --- a/pmacs-gpu/src/math_layout.rs +++ b/pmacs-gpu/src/math_layout.rs @@ -124,10 +124,540 @@ pub fn math_italic(ch: char) -> char { char::from_u32(mapped).unwrap_or(ch) } +/// A laid-out expression. Baseline at `y = 0`, positive `y` upward. +/// +/// Q#MS6: items carry CHARACTERS, not glyph IDs. Layout still resolves glyph +/// ids internally for advances and bounds — the boundary is on the emitted +/// items, so each is drawable by the existing text machinery. Glyph-id items +/// arrive with stretchy fences and big operators, both deferred. +#[derive(Clone, Debug, PartialEq)] +pub struct MathBox { + pub width: f32, + pub ascent: f32, + pub descent: f32, + pub items: Vec, +} + +/// One drawable piece of a [`MathBox`]. +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum MathItem { + /// A character at its own size, `baseline` relative to the box baseline. + Glyph { + ch: char, + x: f32, + baseline: f32, + size_px: f32, + }, + /// The fraction bar. Not a glyph — drawn on the existing quad pipeline. + Rule { + x: f32, + y: f32, + width: f32, + thickness: f32, + }, +} + +impl MathItem { + fn shifted(self, dx: f32, dy: f32) -> Self { + match self { + Self::Glyph { + ch, + x, + baseline, + size_px, + } => Self::Glyph { + ch, + x: x + dx, + baseline: baseline + dy, + size_px, + }, + Self::Rule { + x, + y, + width, + thickness, + } => Self::Rule { + x: x + dx, + y: y + dy, + width, + thickness, + }, + } + } +} + +impl MathBox { + fn empty() -> Self { + Self { + width: 0.0, + ascent: 0.0, + descent: 0.0, + items: Vec::new(), + } + } + + /// Absorb `other` at offset `(dx, dy)`, growing this box's extents. + fn absorb(&mut self, other: &Self, dx: f32, dy: f32) { + self.items + .extend(other.items.iter().map(|item| item.shifted(dx, dy))); + self.ascent = self.ascent.max(other.ascent + dy); + self.descent = self.descent.max(other.descent - dy); + } + + /// Uniformly scale every extent and item (Q#MS10 fit-to-line). + #[must_use] + pub fn scaled(&self, factor: f32) -> Self { + Self { + width: self.width * factor, + ascent: self.ascent * factor, + descent: self.descent * factor, + items: self + .items + .iter() + .map(|item| match *item { + MathItem::Glyph { + ch, + x, + baseline, + size_px, + } => MathItem::Glyph { + ch, + x: x * factor, + baseline: baseline * factor, + size_px: size_px * factor, + }, + MathItem::Rule { + x, + y, + width, + thickness, + } => MathItem::Rule { + x: x * factor, + y: y * factor, + width: width * factor, + thickness: thickness * factor, + }, + }) + .collect(), + } + } +} + +/// The smallest uniform scale the slice will apply before giving up (Q#MS10). +pub const MIN_FIT_SCALE: f32 = 0.6; + +/// Scale `boxed` to fit `(ascent_budget, descent_budget)`, or `None` when +/// that would fall below [`MIN_FIT_SCALE`] — in which case Q#MS8 shows the +/// raw source rather than overdrawing into the neighbouring line. +#[must_use] +pub fn fit_to_line(boxed: &MathBox, ascent_budget: f32, descent_budget: f32) -> Option { + let need_up = boxed.ascent; + let need_down = boxed.descent; + let up = if need_up <= 0.0 { + 1.0 + } else { + ascent_budget / need_up + }; + let down = if need_down <= 0.0 { + 1.0 + } else { + descent_budget / need_down + }; + let scale = up.min(down).min(1.0); + if scale < MIN_FIT_SCALE { + return None; + } + if scale >= 1.0 { + return Some(boxed.clone()); + } + Some(boxed.scaled(scale)) +} + +/// Lays a [`MathNode`] tree out against the bundled MATH font. +pub struct MathLayout<'a> { + face: Face<'a>, + constants: MathConstants, +} + +impl<'a> MathLayout<'a> { + /// Build a layout engine over font bytes. + /// + /// # Errors + /// [`MathFontError`] when the face or its MATH table is unusable. + pub fn new(bytes: &'a [u8]) -> Result { + let face = Face::parse(bytes, 0).map_err(|_| MathFontError::Unparseable)?; + let constants = MathConstants::from_font_bytes(bytes)?; + Ok(Self { face, constants }) + } + + #[must_use] + pub fn constants(&self) -> MathConstants { + self.constants + } + + /// Lay `node` out at `size_px`. + #[must_use] + pub fn layout(&self, node: &crate::math_parse::MathNode, size_px: f32) -> MathBox { + use crate::math_parse::MathNode; + match node { + MathNode::Char(ch) => self.layout_char(*ch, size_px), + MathNode::Group(children) => { + let mut out = MathBox::empty(); + let mut pen = 0.0; + for child in children { + let child_box = self.layout(child, size_px); + out.absorb(&child_box, pen, 0.0); + pen += child_box.width; + } + out.width = pen; + out + } + MathNode::Script { base, sub, sup } => self.layout_script(base, sub, sup, size_px), + MathNode::Fraction { num, den } => self.layout_fraction(num, den, size_px), + } + } + + fn layout_char(&self, ch: char, size_px: f32) -> MathBox { + let presented = math_italic(ch); + let upem = f32::from(self.constants.units_per_em.max(1)); + let (advance, ascent, descent) = self + .face + .glyph_index(presented) + .map(|gid| { + let adv = self + .face + .glyph_hor_advance(gid) + .map_or(0.0, |a| f32::from(a) * size_px / upem); + // Per-glyph bounds keep boxes tight, which is what makes a + // fraction's extents honest; fall back to face metrics when + // a glyph has no bounding box (e.g. a space). + let (asc, desc) = self.face.glyph_bounding_box(gid).map_or_else( + || { + ( + f32::from(self.face.ascender()) * size_px / upem, + -f32::from(self.face.descender()) * size_px / upem, + ) + }, + |bb| { + ( + f32::from(bb.y_max) * size_px / upem, + -f32::from(bb.y_min) * size_px / upem, + ) + }, + ); + (adv, asc.max(0.0), desc.max(0.0)) + }) + .unwrap_or((0.0, 0.0, 0.0)); + MathBox { + width: advance, + ascent, + descent, + items: vec![MathItem::Glyph { + ch: presented, + x: 0.0, + baseline: 0.0, + size_px, + }], + } + } + + fn layout_script( + &self, + base: &crate::math_parse::MathNode, + sub: &Option>, + sup: &Option>, + size_px: f32, + ) -> MathBox { + let base_box = self.layout(base, size_px); + let script_px = size_px * self.constants.script_scale(); + let mut out = MathBox::empty(); + out.absorb(&base_box, 0.0, 0.0); + let mut widest = base_box.width; + if let Some(sup) = sup { + let sup_box = self.layout(sup, script_px); + let shift = self + .constants + .to_px(self.constants.superscript_shift_up, size_px); + out.absorb(&sup_box, base_box.width, shift); + widest = widest.max(base_box.width + sup_box.width); + } + if let Some(sub) = sub { + let sub_box = self.layout(sub, script_px); + let shift = self + .constants + .to_px(self.constants.subscript_shift_down, size_px); + out.absorb(&sub_box, base_box.width, -shift); + widest = widest.max(base_box.width + sub_box.width); + } + out.width = widest; + out + } + + fn layout_fraction( + &self, + num: &crate::math_parse::MathNode, + den: &crate::math_parse::MathNode, + size_px: f32, + ) -> MathBox { + // TeX sets an inline \frac's operands one style down, which is also + // what the parent framing's Tier 3 specifies (70%). It is load-bearing + // for Q#MS10: full-size operands would not fit the line at all. + let operand_px = size_px * self.constants.script_scale(); + let num_box = self.layout(num, operand_px); + let den_box = self.layout(den, operand_px); + let axis = self.constants.to_px(self.constants.axis_height, size_px); + let thickness = self + .constants + .to_px(self.constants.fraction_rule_thickness, size_px) + .max(1.0); + let gap = thickness * 2.0; + + let width = num_box.width.max(den_box.width); + let mut out = MathBox::empty(); + // Numerator sits above the bar, denominator below it. + let num_baseline = axis + thickness / 2.0 + gap + num_box.descent; + let den_baseline = axis - thickness / 2.0 - gap - den_box.ascent; + out.absorb(&num_box, (width - num_box.width) / 2.0, num_baseline); + out.absorb(&den_box, (width - den_box.width) / 2.0, den_baseline); + out.items.push(MathItem::Rule { + x: 0.0, + y: axis, + width, + thickness, + }); + out.ascent = out.ascent.max(axis + thickness / 2.0); + out.descent = out.descent.max(-(axis - thickness / 2.0)); + out.width = width; + out + } +} + #[cfg(test)] mod tests { use super::*; + use crate::math_parse::parse; + + fn engine() -> MathLayout<'static> { + MathLayout::new(LATIN_MODERN_MATH).expect("bundled font") + } + + fn lay(src: &str, size: f32) -> MathBox { + let node = parse(src).expect("parses"); + engine().layout(&node, size) + } + + /// Framing acceptance 3, including its bite: the MATH constant must be + /// READ, not hardcoded. + #[test] + fn superscript_is_raised_and_scaled_from_the_math_table() { + let plain = lay("x", 16.0); + let script = lay("x^2", 16.0); + assert!(script.width > plain.width, "the 2 adds width"); + assert!( + script.ascent > plain.ascent, + "superscript must raise the box: {} vs {}", + script.ascent, + plain.ascent + ); + let two = script + .items + .iter() + .find_map(|i| match *i { + MathItem::Glyph { + ch, + baseline, + size_px, + .. + } if ch == '2' => Some((baseline, size_px)), + _ => None, + }) + .expect("the 2 is emitted"); + assert!(two.0 > 0.0, "raised above baseline: {}", two.0); + assert!(two.1 < 16.0, "scaled down: {}", two.1); + + // Bite: with the script scale stubbed to 100%, the box changes — + // proving the constant is consulted rather than assumed. + let c = engine().constants(); + assert!( + c.script_percent_scale_down < 100, + "font advertises a real script scale ({}%), so 100% is a \ + meaningful stub", + c.script_percent_scale_down + ); + let stubbed = MathConstants { + script_percent_scale_down: 100, + ..c + }; + assert!( + (stubbed.script_scale() - c.script_scale()).abs() > 0.01, + "stubbing the constant must change the scale actually used" + ); + } + + #[test] + fn subscript_drops_below_the_baseline() { + let script = lay("x_i", 16.0); + let i = script + .items + .iter() + .find_map(|item| match *item { + MathItem::Glyph { ch, baseline, .. } if ch == math_italic('i') => Some(baseline), + _ => None, + }) + .expect("the i is emitted"); + assert!(i < 0.0, "subscript sits below the baseline: {i}"); + assert!(script.descent > lay("x", 16.0).descent); + } + + /// Framing acceptance 4. + #[test] + fn fraction_stacks_operands_around_a_rule_at_the_axis() { + let frac = lay(r"\frac{a}{b}", 16.0); + let rule = frac + .items + .iter() + .find_map(|item| match *item { + MathItem::Rule { + y, + width, + thickness, + .. + } => Some((y, width, thickness)), + MathItem::Glyph { .. } => None, + }) + .expect("a fraction draws a rule"); + assert!(rule.0 > 0.0, "rule sits at the math axis, above baseline"); + assert!(rule.2 > 0.0 && rule.1 > 0.0); + + let mut above = 0; + let mut below = 0; + for item in &frac.items { + if let MathItem::Glyph { baseline, .. } = *item { + if baseline > rule.0 { + above += 1; + } else if baseline < rule.0 { + below += 1; + } + } + } + assert_eq!((above, below), (1, 1), "one operand each side of the bar"); + assert!(frac.ascent > 0.0 && frac.descent > 0.0); + } + + /// F1 / B6 — the height budget, computed rather than guessed. + /// + /// The round-2 review warned that acceptance 12's fallback case must be + /// derived by computation or it would "surprise-pass by rendering". It + /// was right, and rev 3's guess was wrong: a doubly-nested fraction still + /// fits. This test derives the budget the way Q#MS10 defines it — from + /// the LINE BOX, whose baseline the CODE font places — and then searches + /// for the depth that actually trips the floor, so the case can never + /// drift out from under the acceptance criterion. + #[test] + fn fit_to_line_admits_real_fractions_and_finds_the_true_fallback_depth() { + // Q#MS10: the budget is the line box less a one-pixel margin, split + // at the text baseline. The baseline is where the CODE font puts it + // (JetBrains Mono at BASE_CODE_FONT_SIZE inside BASE_CODE_LINE_HEIGHT), + // NOT where the math font's own metrics would. + let code = Face::parse(crate::JETBRAINS_MONO, 0).expect("code face"); + let code_upem = f32::from(code.units_per_em()); + let baseline_from_top = f32::from(code.ascender()) * crate::BASE_CODE_FONT_SIZE / code_upem; + let margin = 1.0; + let asc_budget = baseline_from_top - margin; + let desc_budget = crate::BASE_CODE_LINE_HEIGHT - baseline_from_top - margin; + assert!( + asc_budget > 0.0 && desc_budget > 0.0, + "budget must be positive: {asc_budget} / {desc_budget}" + ); + + let scale_of = |src: &str| { + let boxed = lay(src, crate::BASE_CODE_FONT_SIZE); + let up = asc_budget / boxed.ascent.max(f32::EPSILON); + let down = desc_budget / boxed.descent.max(f32::EPSILON); + (up.min(down).min(1.0), boxed) + }; + + // The flagship cases must RENDER, not fall back (B6). + for src in [r"\frac{a}{b}", r"\frac{x^2}{y}", "x^2", r"\alpha x"] { + let (scale, boxed) = scale_of(src); + eprintln!( + "{src}: asc={:.2} desc={:.2} scale={scale:.3}", + boxed.ascent, boxed.descent + ); + assert!( + scale >= MIN_FIT_SCALE, + "{src} must render, not fall back: scale {scale:.3} < {MIN_FIT_SCALE}" + ); + assert!(fit_to_line(&boxed, asc_budget, desc_budget).is_some()); + } + + // Now FIND the depth that trips the floor rather than assuming one. + // Nest fractions until the scale drops below it. + let mut src = String::from(r"\frac{a}{b}"); + let mut depth = 1; + let tripped = loop { + let (scale, _) = scale_of(&src); + eprintln!("depth {depth}: scale={scale:.3}"); + if scale < MIN_FIT_SCALE { + break Some((depth, src.clone())); + } + if depth >= 6 { + break None; + } + src = format!(r"\frac{{{src}}}{{c}}"); + depth += 1; + }; + let (depth, deep_src) = tripped.expect( + "some nesting depth must exceed the floor, or Q#MS10's fallback \ + arm is unreachable and the floor is dead code", + ); + assert!( + depth > 2, + "rev 3 guessed a doubly-nested fraction would fall back; the real \ + depth is {depth}, so acceptance 12 must use that case" + ); + assert!( + fit_to_line( + &lay(&deep_src, crate::BASE_CODE_FONT_SIZE), + asc_budget, + desc_budget + ) + .is_none() + ); + } + + #[test] + fn fitting_scales_extents_and_items_together() { + let boxed = lay(r"\frac{a}{b}", 16.0); + let half = boxed.scaled(0.5); + assert!((half.ascent - boxed.ascent * 0.5).abs() < 0.001); + assert!((half.width - boxed.width * 0.5).abs() < 0.001); + for (before, after) in boxed.items.iter().zip(half.items.iter()) { + if let (MathItem::Glyph { size_px: b, .. }, MathItem::Glyph { size_px: a, .. }) = + (before, after) + { + assert!((a - b * 0.5).abs() < 0.001, "glyph size scales too"); + } + } + } + + #[test] + fn a_group_advances_the_pen_left_to_right() { + let boxed = lay("abc", 16.0); + let xs: Vec = boxed + .items + .iter() + .filter_map(|item| match *item { + MathItem::Glyph { x, .. } => Some(x), + MathItem::Rule { .. } => None, + }) + .collect(); + assert_eq!(xs.len(), 3); + assert!(xs[0] < xs[1] && xs[1] < xs[2], "left to right: {xs:?}"); + assert!(boxed.width > xs[2], "width covers the last advance"); + } + /// B5 — `ttf-parser` supplies every constant the subset needs, from the /// bundled font. This is the bet that would sink Tier 3 if false, so it /// runs against the real embedded bytes rather than a fixture. From 8c25e0dddedb47e3384da0c73a069af8db9101e2 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 18:47:48 -0400 Subject: [PATCH 07/31] feat(math): currency-guarded inline span detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per-line `$…$` scanning with the Pandoc guards F5 required: an opener must be followed by a non-space, a closer must be preceded by a non-space and not followed by a digit, and `\$` escapes. Without them "prices are $5 and $6 today" renders "5 and " as math, in exactly the grammar-less prose buffers this scanner targets. Spans never cross a newline (Q#MS3), so callers scan one line at a time. `$$` is opaque, and the test that forced this is worth keeping in mind. My first version simply refused to OPEN on `$$`, reasoning that display math would then never match. It still did: in `$$x$$` the first `$` declines to open, the second one opens, and the third closes it — matching the inner `$x$`, whose interior parses perfectly well. So display math would have half-rendered as math with a stray `$` on each side, which is precisely what acceptance 15 forbids. `$$` now neither opens nor closes and abandons any pending opener. The test that caught it was itself nearly vacuous. It asserted "every span found must fail to parse", which passes trivially when the matched interior is `x`. Asserting that NO span is found is the form that actually holds the contract; the weaker version would have shipped the bug. Co-Authored-By: Claude Opus 5 (1M context) --- pmacs-gpu/src/math_parse.rs | 164 ++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/pmacs-gpu/src/math_parse.rs b/pmacs-gpu/src/math_parse.rs index bbbe8e4..73833d6 100644 --- a/pmacs-gpu/src/math_parse.rs +++ b/pmacs-gpu/src/math_parse.rs @@ -264,6 +264,99 @@ impl Parser { } } +/// One detected inline span, as byte offsets into the scanned line. +/// +/// `start`/`end` bracket the WHOLE span including both `$` delimiters, which +/// is what Q#MS4 suppresses; [`Self::interior`] is what the parser sees. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct MathSpan { + pub start: usize, + pub end: usize, +} + +impl MathSpan { + /// Byte range of the math source between the delimiters. + #[must_use] + pub fn interior(self) -> std::ops::Range { + self.start + 1..self.end - 1 + } +} + +/// Find inline `$…$` spans in ONE line (Q#MS3). +/// +/// Spans never cross a newline: chunking is per line and the visible slice is +/// line-ranged, so single-line spans are what keep visible-slice-scoped +/// scanning stable under scroll. Callers pass one line at a time. +/// +/// Currency guards are mandatory, not a refinement (framing F5). Without +/// them `prices are $5 and $6 today` pairs the two `$` and renders `5 and ` +/// as math — in exactly the grammar-less prose buffers this scanner targets. +/// Pandoc's rule: +/// +/// - an opening `$` must be followed by a non-space; +/// - a closing `$` must be preceded by a non-space and not followed by a digit; +/// - `\$` is an escape and neither opens nor closes. +#[must_use] +pub fn detect_math_spans(line: &str) -> Vec { + let bytes = line.as_bytes(); + let mut spans = Vec::new(); + let mut i = 0; + let mut open: Option = None; + while i < bytes.len() { + if bytes[i] == b'\\' { + // Skip the escaped byte: `\$` is literal, so it can neither open + // nor close. Stepping two also stops `\\$` from being read as an + // escape of the dollar. + i += 2; + continue; + } + if bytes[i] != b'$' { + i += 1; + continue; + } + if bytes.get(i + 1) == Some(&b'$') { + // `$$` is display math, which this slice defers. It is NOT two + // inline delimiters: reading it that way makes `$$x$$` match the + // inner `$x$`, which parses, so the span would half-render as + // math with a stray `$` on each side. Acceptance 15 requires it + // to degrade to source, so `$$` is opaque — it neither opens nor + // closes, and abandons any pending opener. + i += 2; + open = None; + continue; + } + match open { + None => { + // Opener: next byte must exist and be a non-space. + let opens = bytes + .get(i + 1) + .is_some_and(|b| !b.is_ascii_whitespace() && *b != b'$'); + if opens { + open = Some(i); + } + } + Some(start) => { + let prev_ok = i > start + 1 && !bytes[i - 1].is_ascii_whitespace(); + let next_ok = bytes.get(i + 1).is_none_or(|b| !b.is_ascii_digit()); + if prev_ok && next_ok { + spans.push(MathSpan { start, end: i + 1 }); + open = None; + } else if !prev_ok { + // `$foo $` — the closer is disqualified by the space + // before it. Treat this `$` as a fresh opener candidate + // rather than letting the span run to the next one. + open = bytes + .get(i + 1) + .is_some_and(|b| !b.is_ascii_whitespace() && *b != b'$') + .then_some(i); + } + } + } + i += 1; + } + spans +} + #[cfg(test)] mod tests { use super::*; @@ -276,6 +369,77 @@ mod tests { MathNode::Group(nodes) } + #[test] + fn detection_finds_inline_spans() { + assert_eq!( + detect_math_spans("$x^2$"), + vec![MathSpan { start: 0, end: 5 }] + ); + let two = detect_math_spans("$a$ and $b$"); + assert_eq!(two.len(), 2, "{two:?}"); + let line = "before $x^2$ after"; + let span = detect_math_spans(line)[0]; + assert_eq!(&line[span.start..span.end], "$x^2$"); + assert_eq!(&line[span.interior()], "x^2"); + } + + /// Framing F5 / acceptance 2 — the case rev 1's rule would have + /// mis-rendered as math over "5 and ". + #[test] + fn currency_guards_reject_prose_dollars() { + assert!(detect_math_spans("Price: $5.00").is_empty()); + assert!( + detect_math_spans("prices are $5 and $6 today").is_empty(), + "a digit after the closer disqualifies it" + ); + assert!( + detect_math_spans("$ x $").is_empty(), + "space after the opener disqualifies it" + ); + assert!( + detect_math_spans("costs $5 or $6").is_empty(), + "both guards together" + ); + } + + #[test] + fn escaped_dollars_neither_open_nor_close() { + assert!(detect_math_spans(r"\$5 and \$6").is_empty()); + // An escaped dollar inside a span does not close it. + let line = r"$a\$b$"; + let spans = detect_math_spans(line); + assert_eq!(spans.len(), 1); + assert_eq!(&line[spans[0].start..spans[0].end], r"$a\$b$"); + } + + #[test] + fn an_unpaired_dollar_yields_nothing() { + assert!(detect_math_spans("$x").is_empty()); + assert!(detect_math_spans("x$").is_empty()); + // Q#MS3: spans never cross a newline. Callers scan per line, so a + // partner on the next line is simply not visible to this call. + assert!(detect_math_spans("$x").is_empty()); + assert!(detect_math_spans("y$").is_empty()); + } + + #[test] + fn empty_and_display_delimiters_degrade_rather_than_half_match() { + // Acceptance 15. `$$` is opaque, so display math yields NO span and + // falls through to source. Asserting emptiness rather than "any span + // found must fail to parse" matters: the interior of the inner `$x$` + // parses perfectly well, so the weaker form passed vacuously while + // `$$x$$` half-rendered with a stray `$` on each side. + assert!(detect_math_spans("$$").is_empty()); + assert!( + detect_math_spans("$$x$$").is_empty(), + "display math must not match the inner $x$" + ); + assert!(detect_math_spans(r"$$\frac{a}{b}$$").is_empty()); + // A real inline span beside display math is still found. + let mixed = detect_math_spans("$a$ then $$b$$"); + assert_eq!(mixed.len(), 1, "{mixed:?}"); + } + #[test] fn plain_characters_parse_in_order() { assert_eq!(parse("x+1"), Ok(group(vec![ch('x'), ch('+'), ch('1')]))); From 8e4bc00015786baea71de4c596d5004553efece4 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 18:57:18 -0400 Subject: [PATCH 08/31] feat(math): ChunkSource::MathBox and spacer width quantization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The suppression mechanism F2 forced: a RichChunk's only width is its text, so a suppressed span reserves room with SPACER SPACES the way SourceTab already does, quantized up to whole advances. Quantizing up keeps the projection grid-aligned with the surrounding monospace text and keeps hit runs integral, at the cost of under one advance of slack on the right. Adding the variant to an exhaustive enum made the compiler enumerate every seam it must participate in, which is why it is wired through all five rather than the two I had in mind: projected_to_source, source_to_projected, the tab expander's source remap, and offset_chunk_source. Hits anywhere inside a box snap to the span start — the Adornment rule, because Q#MS4 gives the box no interior byte map — and source positions inside it collapse to the box's left edge, so text after the span accounts for the whole reserved width. Two details the tab expander needed: a math chunk's spacer text is generated rather than source, so it holds no tab byte to expand, and its suppressed range is already in slice coordinates and never split, so a within-chunk offset does not move it. spacer_for_width guards its inputs: a non-finite width, a non-positive advance, or a pathological ratio reserves nothing or clamps, rather than panicking or minting an enormous string from a cast. 184 pmacs-gpu tests pass, including the 155 that predate this branch. Co-Authored-By: Claude Opus 5 (1M context) --- pmacs-gpu/src/main.rs | 115 +++++++++++++++++++++++++++++++++++ pmacs-gpu/src/math_layout.rs | 52 ++++++++++++++++ 2 files changed, 167 insertions(+) diff --git a/pmacs-gpu/src/main.rs b/pmacs-gpu/src/main.rs index 90bb515..961e0fc 100644 --- a/pmacs-gpu/src/main.rs +++ b/pmacs-gpu/src/main.rs @@ -7722,6 +7722,13 @@ enum ChunkSource { /// Injected adornment text (inlay hint) anchored at this slice /// byte offset. Hits inside it snap to the anchor. Adornment { anchor: u64 }, + /// A suppressed inline-math span (Q#MS4). The chunk's text is SPACER + /// spaces reserving the laid-out box's width — a `RichChunk`'s only + /// width is its text, so there is no zero-glyph strut to reserve with + /// (framing F2). `start`..`end` is the suppressed source range, + /// delimiters included; hits inside snap to `start`, the same rule + /// `Adornment` uses, because the box has no interior byte map. + MathBox { start: u64, end: u64 }, } /// One run of the projected→source hit map (Q#M2), built by @@ -7738,6 +7745,95 @@ struct ProjectedRun { /// Build the projected→source run map plus the projected text's line /// start table (cosmic-text reports hits as line + byte-within-line). + +#[cfg(test)] +mod math_chunk_tests { + use super::*; + + fn spacer_chunk(start: u64, end: u64, spaces: usize) -> RichChunk { + RichChunk { + text: " ".repeat(spaces), + color: None, + source: ChunkSource::MathBox { start, end }, + } + } + + /// Q#MS4: hits anywhere inside a suppressed span snap to its start, the + /// same rule `Adornment` uses, because the box has no interior byte map. + #[test] + fn hits_inside_a_math_box_snap_to_the_span_start() { + // `ab` + `$x^2$` suppressed to 3 spacer columns + `cd` + let chunks = vec![ + RichChunk { + text: "ab".to_owned(), + color: None, + source: ChunkSource::Source { start: 0 }, + }, + spacer_chunk(2, 7, 3), + RichChunk { + text: "cd".to_owned(), + color: None, + source: ChunkSource::Source { start: 7 }, + }, + ]; + let (runs, _) = build_hit_runs(&chunks); + assert_eq!(projected_to_source(&runs, 0), Some(0)); + assert_eq!(projected_to_source(&runs, 1), Some(1)); + // Every boundary within the spacer maps to the span start (2). + for projected in 2..=4 { + assert_eq!( + projected_to_source(&runs, projected), + Some(2), + "projected {projected} must snap to the span start" + ); + } + // Past the box, ordinary source mapping resumes. + assert_eq!(projected_to_source(&runs, 5), Some(7)); + assert_eq!(projected_to_source(&runs, 6), Some(8)); + } + + /// The inverse direction: a caret anywhere in the suppressed range sits + /// at the box's left edge, and text after it accounts for the full + /// reserved width (acceptance 10's "shifts by the quantized difference"). + #[test] + fn source_positions_inside_a_math_box_map_to_its_left_edge() { + let chunks = vec![ + RichChunk { + text: "ab".to_owned(), + color: None, + source: ChunkSource::Source { start: 0 }, + }, + spacer_chunk(2, 7, 3), + RichChunk { + text: "cd".to_owned(), + color: None, + source: ChunkSource::Source { start: 7 }, + }, + ]; + assert_eq!(source_to_projected(&chunks, 0), Some(0)); + assert_eq!(source_to_projected(&chunks, 2), Some(2)); + // Interior source bytes collapse onto the left edge. + assert_eq!(source_to_projected(&chunks, 4), Some(2)); + assert_eq!(source_to_projected(&chunks, 7), Some(2)); + // The first byte after the span lands past the reserved width. + assert_eq!(source_to_projected(&chunks, 8), Some(6)); + } + + /// A math chunk carries generated spacer text, so tab expansion must + /// leave it alone rather than treating a space as a source tab. + #[test] + fn tab_expansion_preserves_a_math_chunk_untouched() { + let chunks = vec![spacer_chunk(0, 5, 4)]; + let expanded = expand_chunk_tabs(chunks); + assert_eq!(expanded.len(), 1); + assert_eq!(expanded[0].text, " "); + assert!(matches!( + expanded[0].source, + ChunkSource::MathBox { start: 0, end: 5 } + )); + } +} + fn build_hit_runs(chunks: &[RichChunk]) -> (Vec, Vec) { let mut runs = Vec::with_capacity(chunks.len()); let mut line_starts = vec![0u64]; @@ -7776,6 +7872,9 @@ fn projected_to_source(runs: &[ProjectedRun], projected: u64) -> Option { ChunkSource::Source { start } => Some(start + within), ChunkSource::SourceTab { start } => Some(start + u64::from(within > 0)), ChunkSource::Adornment { anchor } => Some(anchor), + // Q#MS4: the box has no interior byte map, so every boundary inside + // it snaps to the span start rather than inventing a sub-position. + ChunkSource::MathBox { start, .. } => Some(start), } } @@ -7810,6 +7909,16 @@ fn source_to_projected(chunks: &[RichChunk], source: u64) -> Option { return Some(projected); } } + ChunkSource::MathBox { start, end } => { + // Anywhere within the suppressed range maps to the box's + // left edge; past it, the box's full reserved width applies. + if source <= start { + return Some(projected); + } + if source <= end { + return Some(projected); + } + } } projected += len; } @@ -9131,6 +9240,9 @@ fn expand_chunk_tabs(chunks: Vec) -> Vec { }, ChunkSource::Adornment { anchor } => ChunkSource::Adornment { anchor }, ChunkSource::SourceTab { start } => ChunkSource::SourceTab { start }, + // A suppressed math span's spacer text is generated, not + // source, so it holds no tab byte to expand. + ChunkSource::MathBox { start, end } => ChunkSource::MathBox { start, end }, }, }); column += tab_width; @@ -9156,6 +9268,9 @@ fn offset_chunk_source(source: ChunkSource, byte_offset: u64) -> ChunkSource { }, ChunkSource::SourceTab { start } => ChunkSource::SourceTab { start }, ChunkSource::Adornment { anchor } => ChunkSource::Adornment { anchor }, + // The suppressed range is already in slice coordinates and is never + // split, so a within-chunk offset does not move it. + ChunkSource::MathBox { start, end } => ChunkSource::MathBox { start, end }, } } diff --git a/pmacs-gpu/src/math_layout.rs b/pmacs-gpu/src/math_layout.rs index f41c4cb..be0cec1 100644 --- a/pmacs-gpu/src/math_layout.rs +++ b/pmacs-gpu/src/math_layout.rs @@ -432,12 +432,64 @@ impl<'a> MathLayout<'a> { } } +/// Spacer text reserving `width_px`, quantized UP to whole space advances. +/// +/// Q#MS4 / B1': a `RichChunk`'s only width is its text, so a suppressed math +/// span reserves room the way `SourceTab` does — with spaces. Quantizing up +/// is deliberate: it keeps the projection grid-aligned with the surrounding +/// monospace text and keeps hit runs integral, at the cost of up to one +/// advance of slack on the right of the box. +#[must_use] +pub fn spacer_for_width(width_px: f32, space_advance_px: f32) -> String { + if !width_px.is_finite() || width_px <= 0.0 || space_advance_px <= 0.0 { + return String::new(); + } + let n = (width_px / space_advance_px).ceil(); + // Guard the cast: a pathological advance must not mint a giant string. + let n = n.clamp(0.0, 4096.0) as usize; + " ".repeat(n) +} + #[cfg(test)] mod tests { use super::*; use crate::math_parse::parse; + #[test] + fn spacer_quantizes_up_to_whole_advances() { + // Exactly two advances stays two; a sliver over rounds up, so the + // box never overlaps the text that follows it. + assert_eq!(spacer_for_width(20.0, 10.0).len(), 2); + assert_eq!(spacer_for_width(20.1, 10.0).len(), 3); + assert_eq!(spacer_for_width(0.1, 10.0).len(), 1); + // Degenerate inputs reserve nothing rather than panicking or + // minting an enormous string. + assert!(spacer_for_width(0.0, 10.0).is_empty()); + assert!(spacer_for_width(-5.0, 10.0).is_empty()); + assert!(spacer_for_width(10.0, 0.0).is_empty()); + assert!(spacer_for_width(f32::NAN, 10.0).is_empty()); + assert!(spacer_for_width(f32::INFINITY, 10.0).is_empty()); + assert!(spacer_for_width(1e9, 0.001).len() <= 4096); + } + + #[test] + fn a_real_box_reserves_at_least_its_own_width() { + let boxed = lay(r"\frac{a}{b}", crate::BASE_CODE_FONT_SIZE); + let advance = 9.6_f32; // a plausible monospace advance at 16 px + let spacer = spacer_for_width(boxed.width, advance); + let reserved = spacer.len() as f32 * advance; + assert!( + reserved >= boxed.width, + "reserved {reserved} must cover box width {}", + boxed.width + ); + assert!( + reserved - boxed.width < advance, + "slack stays under one advance" + ); + } + fn engine() -> MathLayout<'static> { MathLayout::new(LATIN_MODERN_MATH).expect("bundled font") } From cbf7782726b3e6bd797feeac1cc31bd581d72fbd Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 20:19:40 -0400 Subject: [PATCH 09/31] =?UTF-8?q?fix(math):=20review=20round=203=20?= =?UTF-8?q?=E2=80=94=20mapping=20bug,=20whitespace=20defect,=20real=20MATH?= =?UTF-8?q?=20gaps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit F1 was a real bug pinned by my own committed test. `end` in ChunkSource::MathBox is EXCLUSIVE, so source position `end` is the first byte AFTER the span — but the arm claimed it for the box's left edge, and the test asserted that wrong value while calling the byte "interior". Consequences it would have caused once overlays land: a search match starting just after a span washes the whole box it does not intersect, violating Q#MS11; a peer caret after the span draws at the box's left edge; caret geometry jumps backwards. The same class existed in projected_to_source for a line-FINAL box, where `within` clamps to the run length and the arm returned `start` unconditionally, so a click past end-of-line landed on the span start. Both committed hit tests put a chunk after the box, so that edge was never exercised; there is now a test with the box last. F2: parse_scripts peeked for the next marker without skipping whitespace, so `x^2 _i` built a NESTED script — drawing the subscript displaced right by the superscript's width — and `x^2 ^3` parsed where TeX errors, contradicting the module's own "whitespace is insignificant" rule. F3: layout is now fallible. A character the math font cannot draw used to yield zero metrics and still emit a Glyph item, rendering tofu at zero advance over its neighbour. Q#MS8's rule is "failure is always show the source", and the draw pass needs a refusal signal — changed now, before that pass consumes the API. F4: the fraction gap was a hardcoded `thickness * 2.0` while the MATH table's FractionNumeratorGapMin / FractionDenominatorGapMin went unread. Reading them moved the flagship \frac{a}{b} from 0.732 to 0.867 and the fallback boundary from depth 3 to depth 5. The round-2 review's hand-arithmetic estimate of ~0.85 was right; my 0.732 was inflated by the guess. The depth-SEARCHING test absorbed the change without edits, which is the property it was written for. F5: TeX's \epsilon and \phi are the lunate/symbol forms (U+03F5, U+03D5), not U+03B5/U+03C6. Their italic mappings had to land with the seed change, since both sit outside math_italic's U+03B1..03C9 run and would otherwise render upright beside italic neighbours. F7: the line-box budget derivation moved out of the test into `line_box_budget`, so the draw pass and the acceptance test cannot compute different splits while both stay green. F8: the live-code clippy items are cleared. The 25 that remain are all dead-code awaiting the draw pass. 189 pmacs-gpu tests pass. Co-Authored-By: Claude Opus 5 (1M context) --- docs/inline-math-slice-framing.md | 19 ++-- pmacs-gpu/src/main.rs | 58 ++++++++--- pmacs-gpu/src/math_layout.rs | 154 +++++++++++++++++++++++------- pmacs-gpu/src/math_parse.rs | 47 +++++++-- 4 files changed, 219 insertions(+), 59 deletions(-) diff --git a/docs/inline-math-slice-framing.md b/docs/inline-math-slice-framing.md index a100073..2c9f626 100644 --- a/docs/inline-math-slice-framing.md +++ b/docs/inline-math-slice-framing.md @@ -529,13 +529,20 @@ something reaches the screen runs on a real device through | expression | ascent | descent | scale | | --- | --- | --- | --- | | `x^2`, `\alpha x` | 13.27 | 0.18 | 1.000 | - | `\frac{a}{b}` | 11.57 | 6.40 | **0.732** | - | `\frac{x^2}{y}` | 15.91 | 5.75 | 0.814 | - | nesting depth 2 | — | — | 0.744 | - | nesting depth 3 | — | — | **0.580** | + | `\frac{a}{b}` | 10.57 | 5.40 | **0.867** | + | `\frac{x^2}{y}` | 14.91 | 4.75 | 0.986 | + | nesting depth 2 | — | — | 0.872 | + | nesting depth 4 | — | — | 0.613 | + | nesting depth 5 | — | — | **0.540** | - So **B6 holds** — the flagship fraction renders at 0.732 — and the - fallback case is **depth 3**, not the doubly-nested one rev 3 guessed. + So **B6 holds** — the flagship fraction renders at 0.867 — and the + fallback case is **depth 5**. Rev 3 guessed depth 2; the first + measurement said depth 3 while the fraction gap was still a hardcoded + `2 × thickness` guess; reading the MATH table's real + `FractionNumeratorGapMin` / `FractionDenominatorGapMin` (round-3 F4) + moved the flagship from 0.732 to 0.867 and the boundary to depth 5. The + round-2 hand-arithmetic estimate of ~0.85 was right all along; the 0.732 + was inflated by the guessed gap. Round 2 predicted exactly this trap. Two things worth keeping: depth 2 scores *higher* than depth 1 because the binding constraint flips from descent to ascent as nesting grows asymmetrically, so "deeper is always diff --git a/pmacs-gpu/src/main.rs b/pmacs-gpu/src/main.rs index 961e0fc..677a0be 100644 --- a/pmacs-gpu/src/main.rs +++ b/pmacs-gpu/src/main.rs @@ -7743,9 +7743,6 @@ struct ProjectedRun { source: ChunkSource, } -/// Build the projected→source run map plus the projected text's line -/// start table (cosmic-text reports hits as line + byte-within-line). - #[cfg(test)] mod math_chunk_tests { use super::*; @@ -7812,13 +7809,38 @@ mod math_chunk_tests { ]; assert_eq!(source_to_projected(&chunks, 0), Some(0)); assert_eq!(source_to_projected(&chunks, 2), Some(2)); - // Interior source bytes collapse onto the left edge. + // Interior source bytes collapse onto the left edge. `end` (7) is + // EXCLUSIVE and therefore NOT interior — an earlier revision of this + // test asserted Some(2) for it and pinned the bug. assert_eq!(source_to_projected(&chunks, 4), Some(2)); - assert_eq!(source_to_projected(&chunks, 7), Some(2)); - // The first byte after the span lands past the reserved width. + assert_eq!(source_to_projected(&chunks, 6), Some(2)); + assert_eq!(source_to_projected(&chunks, 7), Some(5), "end is exclusive"); assert_eq!(source_to_projected(&chunks, 8), Some(6)); } + /// A box at the END of a line has no following chunk to catch the + /// trailing boundary, which is exactly where the interior-snap rule used + /// to send a click back to the span start. + #[test] + fn a_line_final_math_box_maps_its_trailing_boundary_after_the_span() { + let chunks = vec![ + RichChunk { + text: "ab".to_owned(), + color: None, + source: ChunkSource::Source { start: 0 }, + }, + spacer_chunk(2, 7, 3), + ]; + let (runs, _) = build_hit_runs(&chunks); + assert_eq!(projected_to_source(&runs, 2), Some(2), "interior snaps"); + assert_eq!(projected_to_source(&runs, 4), Some(2), "interior snaps"); + assert_eq!( + projected_to_source(&runs, 5), + Some(7), + "the trailing boundary lands after the span, not on its start" + ); + } + /// A math chunk carries generated spacer text, so tab expansion must /// leave it alone rather than treating a space as a source tab. #[test] @@ -7834,6 +7856,8 @@ mod math_chunk_tests { } } +/// Build the projected→source run map plus the projected text's line +/// start table (cosmic-text reports hits as line + byte-within-line). fn build_hit_runs(chunks: &[RichChunk]) -> (Vec, Vec) { let mut runs = Vec::with_capacity(chunks.len()); let mut line_starts = vec![0u64]; @@ -7872,9 +7896,11 @@ fn projected_to_source(runs: &[ProjectedRun], projected: u64) -> Option { ChunkSource::Source { start } => Some(start + within), ChunkSource::SourceTab { start } => Some(start + u64::from(within > 0)), ChunkSource::Adornment { anchor } => Some(anchor), - // Q#MS4: the box has no interior byte map, so every boundary inside - // it snaps to the span start rather than inventing a sub-position. - ChunkSource::MathBox { start, .. } => Some(start), + // Q#MS4: interior boundaries snap to the span start, since the box + // has no interior byte map. The TRAILING boundary is not interior — + // it maps after the span, matching `SourceTab`'s rule and keeping a + // click past a line-final box off the span start. + ChunkSource::MathBox { start, end } => Some(if within >= run.len { end } else { start }), } } @@ -7910,14 +7936,16 @@ fn source_to_projected(chunks: &[RichChunk], source: u64) -> Option { } } ChunkSource::MathBox { start, end } => { - // Anywhere within the suppressed range maps to the box's - // left edge; past it, the box's full reserved width applies. - if source <= start { - return Some(projected); - } - if source <= end { + // `end` is EXCLUSIVE: it is the first byte AFTER the span, so + // it must NOT claim the box's left edge. Letting it fall + // through gives it the position past the reserved width — + // which also keeps caret geometry continuous and stops a + // search match starting at `end` from washing a box it does + // not intersect (Q#MS11). + if source < end { return Some(projected); } + let _ = start; } } projected += len; diff --git a/pmacs-gpu/src/math_layout.rs b/pmacs-gpu/src/math_layout.rs index be0cec1..b7a2490 100644 --- a/pmacs-gpu/src/math_layout.rs +++ b/pmacs-gpu/src/math_layout.rs @@ -12,7 +12,7 @@ use ttf_parser::Face; /// Bundled math font (GUST Font License — see `fonts/GUST-FONT-LICENSE.txt`). /// -/// Distinct from `fonts/OFL.txt`, which covers JetBrains Mono only: Latin +/// Distinct from `fonts/OFL.txt`, which covers `JetBrains` Mono only: Latin /// Modern Math is GFL, an LPPL-derived licence, not the SIL OFL (framing F6). pub const LATIN_MODERN_MATH: &[u8] = include_bytes!("../fonts/latinmodern-math.otf"); @@ -36,6 +36,10 @@ pub struct MathConstants { pub subscript_shift_down: i16, /// Thickness of the fraction rule. pub fraction_rule_thickness: i16, + /// Minimum gap between the numerator and the rule. + pub fraction_numerator_gap_min: i16, + /// Minimum gap between the rule and the denominator. + pub fraction_denominator_gap_min: i16, } /// Why the bundled font could not supply math metrics. @@ -51,6 +55,12 @@ pub enum MathFontError { NoMathTable, /// MATH table present but missing a constant the subset needs. MissingConstant(&'static str), + /// The math font cannot draw this codepoint (F3). Q#MS8's rule is + /// "failure is always show the source", so layout REFUSES rather than + /// emitting a zero-width item that would render tofu over its neighbour. + /// Layout is fallible for this reason alone; the draw pass needs a + /// refusal signal, and it must exist before that pass consumes the API. + UncoverableGlyph(char), } impl MathConstants { @@ -72,6 +82,8 @@ impl MathConstants { superscript_shift_up: constants.superscript_shift_up().value, subscript_shift_down: constants.subscript_shift_down().value, fraction_rule_thickness: constants.fraction_rule_thickness().value, + fraction_numerator_gap_min: constants.fraction_numerator_gap_min().value, + fraction_denominator_gap_min: constants.fraction_denominator_gap_min().value, }) } @@ -118,6 +130,12 @@ pub fn math_italic(ch: char) -> char { 'a'..='z' => 0x1D44E + (ch as u32 - 'a' as u32), // Lowercase Greek α..ω → MATHEMATICAL ITALIC SMALL ALPHA..OMEGA. '\u{3B1}'..='\u{3C9}' => 0x1D6FC + (ch as u32 - 0x3B1), + // The SYMBOL forms TeX's \epsilon and \phi resolve to sit OUTSIDE + // that run, so they need explicit italic mappings — without them the + // seed map's correction would render them upright beside italic + // neighbours, which is the defect it was fixing. + '\u{3F5}' => 0x1D716, // ϵ lunate epsilon + '\u{3D5}' => 0x1D719, // ϕ phi symbol // Uppercase Greek, digits, operators: upright, per TeX. _ => return ch, }; @@ -243,6 +261,26 @@ impl MathBox { } } +/// The line-box height budget a math box must fit (Q#MS10), as +/// `(above_baseline, below_baseline)` pixels. +/// +/// Extracted rather than left inside a test: the draw pass must compute the +/// SAME split the acceptance test asserts, and a duplicated derivation is +/// exactly how a renderer and its test drift apart while both stay green. +/// +/// The baseline is placed by the CODE font, not the math font — using the +/// math font's own metrics understates the descent budget badly enough to +/// make a plain fraction appear not to fit. +#[must_use] +pub fn line_box_budget(code_font: &Face<'_>, font_size_px: f32, line_height_px: f32) -> (f32, f32) { + const MARGIN_PX: f32 = 1.0; + let upem = f32::from(code_font.units_per_em().max(1)); + let baseline_from_top = f32::from(code_font.ascender()) * font_size_px / upem; + let above = (baseline_from_top - MARGIN_PX).max(0.0); + let below = (line_height_px - baseline_from_top - MARGIN_PX).max(0.0); + (above, below) +} + /// The smallest uniform scale the slice will apply before giving up (Q#MS10). pub const MIN_FIT_SCALE: f32 = 0.6; @@ -296,8 +334,15 @@ impl<'a> MathLayout<'a> { } /// Lay `node` out at `size_px`. - #[must_use] - pub fn layout(&self, node: &crate::math_parse::MathNode, size_px: f32) -> MathBox { + /// + /// # Errors + /// [`MathFontError::UncoverableGlyph`] when the math font has no glyph + /// for a character, so the caller can fall back to source (Q#MS8). + pub fn layout( + &self, + node: &crate::math_parse::MathNode, + size_px: f32, + ) -> Result { use crate::math_parse::MathNode; match node { MathNode::Char(ch) => self.layout_char(*ch, size_px), @@ -305,19 +350,21 @@ impl<'a> MathLayout<'a> { let mut out = MathBox::empty(); let mut pen = 0.0; for child in children { - let child_box = self.layout(child, size_px); + let child_box = self.layout(child, size_px)?; out.absorb(&child_box, pen, 0.0); pen += child_box.width; } out.width = pen; - out + Ok(out) + } + MathNode::Script { base, sub, sup } => { + self.layout_script(base, sub.as_deref(), sup.as_deref(), size_px) } - MathNode::Script { base, sub, sup } => self.layout_script(base, sub, sup, size_px), MathNode::Fraction { num, den } => self.layout_fraction(num, den, size_px), } } - fn layout_char(&self, ch: char, size_px: f32) -> MathBox { + fn layout_char(&self, ch: char, size_px: f32) -> Result { let presented = math_italic(ch); let upem = f32::from(self.constants.units_per_em.max(1)); let (advance, ascent, descent) = self @@ -347,8 +394,10 @@ impl<'a> MathLayout<'a> { ); (adv, asc.max(0.0), desc.max(0.0)) }) - .unwrap_or((0.0, 0.0, 0.0)); - MathBox { + // F3: no glyph means no honest box. Emitting a zero-width item + // would draw tofu on top of the next character. + .ok_or(MathFontError::UncoverableGlyph(ch))?; + Ok(MathBox { width: advance, ascent, descent, @@ -358,23 +407,23 @@ impl<'a> MathLayout<'a> { baseline: 0.0, size_px, }], - } + }) } fn layout_script( &self, base: &crate::math_parse::MathNode, - sub: &Option>, - sup: &Option>, + sub: Option<&crate::math_parse::MathNode>, + sup: Option<&crate::math_parse::MathNode>, size_px: f32, - ) -> MathBox { - let base_box = self.layout(base, size_px); + ) -> Result { + let base_box = self.layout(base, size_px)?; let script_px = size_px * self.constants.script_scale(); let mut out = MathBox::empty(); out.absorb(&base_box, 0.0, 0.0); let mut widest = base_box.width; if let Some(sup) = sup { - let sup_box = self.layout(sup, script_px); + let sup_box = self.layout(sup, script_px)?; let shift = self .constants .to_px(self.constants.superscript_shift_up, size_px); @@ -382,7 +431,7 @@ impl<'a> MathLayout<'a> { widest = widest.max(base_box.width + sup_box.width); } if let Some(sub) = sub { - let sub_box = self.layout(sub, script_px); + let sub_box = self.layout(sub, script_px)?; let shift = self .constants .to_px(self.constants.subscript_shift_down, size_px); @@ -390,7 +439,7 @@ impl<'a> MathLayout<'a> { widest = widest.max(base_box.width + sub_box.width); } out.width = widest; - out + Ok(out) } fn layout_fraction( @@ -398,25 +447,36 @@ impl<'a> MathLayout<'a> { num: &crate::math_parse::MathNode, den: &crate::math_parse::MathNode, size_px: f32, - ) -> MathBox { + ) -> Result { // TeX sets an inline \frac's operands one style down, which is also // what the parent framing's Tier 3 specifies (70%). It is load-bearing // for Q#MS10: full-size operands would not fit the line at all. let operand_px = size_px * self.constants.script_scale(); - let num_box = self.layout(num, operand_px); - let den_box = self.layout(den, operand_px); + let num_box = self.layout(num, operand_px)?; + let den_box = self.layout(den, operand_px)?; let axis = self.constants.to_px(self.constants.axis_height, size_px); let thickness = self .constants .to_px(self.constants.fraction_rule_thickness, size_px) .max(1.0); - let gap = thickness * 2.0; + // F4: the gaps come from the MATH table, not a guess. An earlier + // revision used `thickness * 2.0`, which made fractions roughly twice + // as airy as the font specifies and inflated the height budget the + // fit-to-line scale is measured against. + let num_gap = self + .constants + .to_px(self.constants.fraction_numerator_gap_min, size_px) + .max(thickness); + let den_gap = self + .constants + .to_px(self.constants.fraction_denominator_gap_min, size_px) + .max(thickness); let width = num_box.width.max(den_box.width); let mut out = MathBox::empty(); // Numerator sits above the bar, denominator below it. - let num_baseline = axis + thickness / 2.0 + gap + num_box.descent; - let den_baseline = axis - thickness / 2.0 - gap - den_box.ascent; + let num_baseline = axis + thickness / 2.0 + num_gap + num_box.descent; + let den_baseline = axis - thickness / 2.0 - den_gap - den_box.ascent; out.absorb(&num_box, (width - num_box.width) / 2.0, num_baseline); out.absorb(&den_box, (width - den_box.width) / 2.0, den_baseline); out.items.push(MathItem::Rule { @@ -428,7 +488,7 @@ impl<'a> MathLayout<'a> { out.ascent = out.ascent.max(axis + thickness / 2.0); out.descent = out.descent.max(-(axis - thickness / 2.0)); out.width = width; - out + Ok(out) } } @@ -456,6 +516,22 @@ mod tests { use crate::math_parse::parse; + #[test] + fn tex_symbol_greek_forms_are_italicised_too() { + // F5's trap: correcting the seed map alone leaves these upright, + // because they sit outside the U+03B1..03C9 run. + assert_eq!(math_italic('\u{3F5}'), '\u{1D716}'); + assert_eq!(math_italic('\u{3D5}'), '\u{1D719}'); + let face = Face::parse(LATIN_MODERN_MATH, 0).expect("face"); + for ch in ['\u{3F5}', '\u{3D5}'] { + assert!( + face.glyph_index(math_italic(ch)).is_some(), + "no glyph for the italic form of U+{:04X}", + ch as u32 + ); + } + } + #[test] fn spacer_quantizes_up_to_whole_advances() { // Exactly two advances stays two; a sliver over rounds up, so the @@ -496,7 +572,21 @@ mod tests { fn lay(src: &str, size: f32) -> MathBox { let node = parse(src).expect("parses"); - engine().layout(&node, size) + engine().layout(&node, size).expect("lays out") + } + + /// F3 — a codepoint the math font cannot draw REFUSES, so the caller can + /// fall back to source (Q#MS8) instead of drawing tofu at zero advance + /// on top of the next character. + #[test] + fn an_uncoverable_character_refuses_layout_instead_of_emitting_a_void() { + let node = parse("x日").expect("parses — coverage is layout's problem"); + assert_eq!( + engine().layout(&node, 16.0), + Err(MathFontError::UncoverableGlyph('日')) + ); + // The covered neighbour on its own still lays out. + assert!(engine().layout(&parse("x").unwrap(), 16.0).is_ok()); } /// Framing acceptance 3, including its bite: the MATH constant must be @@ -517,11 +607,11 @@ mod tests { .iter() .find_map(|i| match *i { MathItem::Glyph { - ch, + ch: '2', baseline, size_px, .. - } if ch == '2' => Some((baseline, size_px)), + } => Some((baseline, size_px)), _ => None, }) .expect("the 2 is emitted"); @@ -613,11 +703,11 @@ mod tests { // (JetBrains Mono at BASE_CODE_FONT_SIZE inside BASE_CODE_LINE_HEIGHT), // NOT where the math font's own metrics would. let code = Face::parse(crate::JETBRAINS_MONO, 0).expect("code face"); - let code_upem = f32::from(code.units_per_em()); - let baseline_from_top = f32::from(code.ascender()) * crate::BASE_CODE_FONT_SIZE / code_upem; - let margin = 1.0; - let asc_budget = baseline_from_top - margin; - let desc_budget = crate::BASE_CODE_LINE_HEIGHT - baseline_from_top - margin; + let (asc_budget, desc_budget) = line_box_budget( + &code, + crate::BASE_CODE_FONT_SIZE, + crate::BASE_CODE_LINE_HEIGHT, + ); assert!( asc_budget > 0.0 && desc_budget > 0.0, "budget must be positive: {asc_budget} / {desc_budget}" diff --git a/pmacs-gpu/src/math_parse.rs b/pmacs-gpu/src/math_parse.rs index 73833d6..e93bf3e 100644 --- a/pmacs-gpu/src/math_parse.rs +++ b/pmacs-gpu/src/math_parse.rs @@ -60,7 +60,8 @@ const GREEK: &[(&str, char)] = &[ ("beta", 'β'), ("gamma", 'γ'), ("delta", 'δ'), - ("epsilon", 'ε'), + // TeX's \epsilon is LUNATE (U+03F5); U+03B5 is \varepsilon. + ("epsilon", '\u{3F5}'), ("zeta", 'ζ'), ("eta", 'η'), ("theta", 'θ'), @@ -75,7 +76,8 @@ const GREEK: &[(&str, char)] = &[ ("sigma", 'σ'), ("tau", 'τ'), ("upsilon", 'υ'), - ("phi", 'φ'), + // TeX's \phi is U+03D5; U+03C6 is \varphi. + ("phi", '\u{3D5}'), ("chi", 'χ'), ("psi", 'ψ'), ("omega", 'ω'), @@ -229,7 +231,19 @@ impl Parser { fn parse_scripts(&mut self, base: MathNode) -> Result { let mut sub: Option> = None; let mut sup: Option> = None; - while let Some(marker @ ('^' | '_')) = self.peek() { + loop { + // Whitespace is insignificant, here too: without this skip + // `x^2 _i` builds a nested Script instead of one merged double + // script (drawing the subscript displaced right by the + // superscript's width), and `x^2 ^3` parses where TeX errors. + let resume = self.pos; + while self.peek().is_some_and(char::is_whitespace) { + self.pos += 1; + } + let Some(marker @ ('^' | '_')) = self.peek() else { + self.pos = resume; + break; + }; self.pos += 1; let slot = self.parse_script_operand()?; match marker { @@ -256,9 +270,9 @@ impl Parser { self.pos += 1; } match self.peek() { - None => Err(MathParseError::MalformedScript("script with no operand")), - Some('^' | '_') => Err(MathParseError::MalformedScript("script with no operand")), - Some('}') => Err(MathParseError::MalformedScript("script with no operand")), + None | Some('^' | '_' | '}') => { + Err(MathParseError::MalformedScript("script with no operand")) + } Some(_) => self.parse_atom(), } } @@ -440,6 +454,27 @@ mod tests { assert_eq!(mixed.len(), 1, "{mixed:?}"); } + #[test] + fn whitespace_before_a_script_marker_still_merges_the_scripts() { + // F2: without skipping whitespace in `parse_scripts`, `x^2 _i` built + // a NESTED script and drew the subscript displaced right. + assert_eq!(parse("x^2 _i"), parse("x^2_i")); + assert_eq!(parse("x _i ^2"), parse("x_i^2")); + // And a doubled script is still an error with space between. + assert!(matches!( + parse("x^2 ^3"), + Err(MathParseError::MalformedScript(_)) + )); + } + + #[test] + fn the_greek_seed_uses_tex_letter_forms() { + // F5: TeX's \epsilon is lunate and \phi is the symbol form; the + // U+03B5 / U+03C6 glyphs are \varepsilon / \varphi. + assert_eq!(parse(r"\epsilon"), Ok(group(vec![ch('\u{3F5}')]))); + assert_eq!(parse(r"\phi"), Ok(group(vec![ch('\u{3D5}')]))); + } + #[test] fn plain_characters_parse_in_order() { assert_eq!(parse("x+1"), Ok(group(vec![ch('x'), ch('+'), ch('1')]))); From 7f7ad1934cc36ebff2b611dae1cd8415483b7715 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 20:33:32 -0400 Subject: [PATCH 10/31] docs: record bottom-panel Stage 1 (#155) landing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Handoff §1 gains the arc entry: the window-parameter substrate, the two production `Layout::compute` callers, the recursive minima, hiding as a durable transition, per-window input gating, the per-frontend jump origins, and the shared initial-target load seam. §5 gains four durable lessons, three of them the same class: - a guard with no production caller passes every direct-call test; - a geometric readout (`at_bottom`) is not a state predicate; - a PTY does not translate LF to CRLF, so text equality over clipped output is vacuous; - widening an ambient resolver into a scoped one can make a total function partial — which is what took CI red on all four Test jobs. The roadmap position, the arc's named deferrals, and DAP's unblocking are recorded too. active-work closes the lane, refreshes the canonical base to `e745068`, and keeps Stage 2's named obligations plus the two gating facts found on the way (the sweep needs an isolated XDG_CONFIG_HOME; compile_mode acceptance is load-sensitive, verified pre-existing). Co-Authored-By: Claude Opus 5 (1M context) --- docs/active-work.md | 208 ++++++++++++------------------------------ docs/agent-handoff.md | 134 +++++++++++++++++++++++++-- 2 files changed, 185 insertions(+), 157 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index fb835a6..cb0d839 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -14,10 +14,10 @@ backlog. machine-local: `origin` may name this canonical URL, a release mirror, or something else, and therefore has no authority by name alone. - Canonical base at this snapshot: - `githubsucks/main` @ `0dd16a5` (GPU initial-target #148 atop folding Stage 2 - landed-doc refresh #150, folding Stage 2 #149, the ledger refresh #147, web - grammars HTML+CSS #146, and the LaTeX Stage 1 #144 / inline-math framing - #145 pair; protocol v20). + `githubsucks/main` @ `e745068` (bottom-panel Stage 1 #155 atop GPU + initial-target #148, folding Stage 2 landed-doc refresh #150, folding + Stage 2 #149, the ledger refresh #147, web grammars HTML+CSS #146, and + the LaTeX Stage 1 #144 / inline-math framing #145 pair; protocol v20). - On the transfer source, `origin/main` named a release mirror at `d3fa632` and lagged badly. On the current destination, `origin` names the canonical URL. This difference is why all recovery begins by @@ -51,156 +51,34 @@ git worktree list git status --short --branch ``` -The `git log` command must expose `0dd16a5` or a newer intentional main. +The `git log` command must expose `e745068` or a newer intentional main. If it does not, stop and repair the remote/fetch configuration. -## Bottom-panel lane (window placement + side windows) — Stage 1 IN REVIEW +## Bottom-panel lane (Arc 7) — Stage 1 MERGED; Stage 2 (GPU band) is next -- Portable branch: `githubsucks/bottom-panel`, worktree - `../pmacs-bottom-panel`, based on `githubsucks/main` @ `ddaa80d`. -- Approved framing: `docs/bottom-panel-framing.md` revision 4, committed - as the branch's first commit (`c27f75a`). -- **Stage 1 implemented; no wire change (protocol stays v20).** What - landed on the branch: - - `src/window.rs`: `WindowParams` (`side` / `fixed_rows` / `dedicated` - + implementation-owned `quit_action` and `origin_document`), `Side`, - a depth-bounded `QuitAction`, `MIN_WINDOW_OUTER_ROWS = 2`, - `Layout::compute(area, fixed)`, the `subtree_min_rows` / - `interactive_min_rows` recursions, `boundary_below`, and the three - new `FrontendView` fields (`panel_capable`, `frame_geometry`, - `panel_hidden`). - - `src/editor_core.rs`: `primary_document_window`, the non-side target - rule, `display_buffer` + the Q#BP3 placement policy, `quit_window`, - `reconcile_panel_layout_core`, `resize_boundary`, per-frontend - `JumpEntry`s, and the shared `resolve_target_buffer` seam that the - #148 initial-target bootstrap now routes through as well. - - `src/editor.rs`: the reconciliation transaction, geometry - declaration, the side-window `dispatch_idle_for` gate, the divider - paint, and the divider drag. - - `src/lua_bindings/window_panel.rs`: the whole `pmacs.window` panel - surface plus the shared adopter-placement helpers; - `builtin/runtime/window.lua` owns `window.panel-height` / - `window.min-height` and the resize commands. - - Adopters: `listview.open`, `compile.run`, `pmacs.terminal.open` all - take `display = "current" | "panel"` (Stage 1 default `"current"`); - LSP/compile visits route through `display_file`. -- **Review round 1 addressed.** The load-bearing finding: the Q#BP6 - side-window split guard (`try_split_active`) had **no production - caller** — `pmacs.window.split_horizontal` / `split_vertical`, and so - `C-x 2` / `C-x 3`, still went through plain `split_active`. Splitting a - focused panel made the root wrapper's final child a split rather than - `Leaf(side)`, which both `Layout::compute`'s fixed pass and - `document_subtree` key on. It survived the first round because the - acceptance test called the core method **directly**; it now goes - through the real Lua binding. This is the folding-arc round-2 lesson - repeating exactly: *after wiring a guard into a production hook, pin it - through the real path — a direct-call test misses the wiring.* - Also fixed: the armed divider drag was not scoped to its arming - frontend (it could cancel and swallow a peer's mouse events); a - recompile carries no `display` and duplicated a panel-placed - `*compilation*` into the document window; and - `paint_mode_line_graphemes` had lost its doc block to an insertion. - Five bite-verified fixes (three via `scripts/bite`, two by manual - revert since their tests share `src/daemon.rs` with the production - code). -- Two Stage-2 hazard pins now exist in `src/daemon.rs`, closing the gap - the review named: a fresh attach while `LOCAL` is focused in a panel - inherits `LOCAL`'s **document** buffer, and an initial-target bootstrap - whose `after-load` hook creates and selects a panel still reasserts - into a document window. -- **Review round 2 addressed.** The load-bearing finding: **Q#BP7 item 1 - — "growth reaching the live tail re-arms follow" — was never - implemented.** `at_bottom` is the instantaneous geometric readout - `scroll_offset == 0`, which a still-anchored view satisfies whenever it - is momentarily tall enough to reach the tail, so the round-1 assertion - could not see the gap: the next rows the child printed pushed the - anchored view back into history. `src/terminal/view.rs` now has - `rearm_follow_on_growth`, reached by one shared `declare_view_size` - helper from every size-declaring path (`snapshot_for_view`, - `record_view_size`, `view_status_for_size`) so grid and semantic - declarations cannot disagree. - Also fixed: the PTY fixtures emitted LF-only output, which staircases - until every row clips to blanks — so the anchor assertions compared - `""` with `""` and could not fail (now CRLF, each guarded by - `assert!(!top_before.is_empty())`); acc33's contrast case asserted - nothing; `start_run` let `already_in_panel` override an **explicit** - `display = "current"`, which is the documented opt-out from the Stage 3 - flip (now gated on omission); and `window_drag` was a daemon-global - slot that a peer's mode-line press could clear. -- Durable test lessons from this round, both the same class: - 1. **A geometric readout is not a state predicate.** `at_bottom` says - "the viewport currently reaches the tail", not "this view follows - the tail". Pinning follow requires feeding MORE output and asserting - the view moved (acc32b uses a filesystem gate between two bursts). - 2. **A PTY in the default mode does not translate LF to CRLF.** An - `echo`-driven fixture staircases rightward and clips to blanks past - the viewport width, so any text equality over it is vacuously true. - Emit `\r\n`, and guard text comparisons with a non-empty assertion - the way the daemon pin guards on `!panel_hidden`. -- **Round-2 self-review caught a regression the round-2 commit - introduced**, in the change it labelled "minor": routing - `pmacs.window.buffer()`'s **no-argument** arm through the fid-scoped - `selected_window` validator made it **fallible**, and - `acting_frontend` can name a frontend with **no registered view** (a - bare `dispatch_key` from an unattached peer does exactly that). The - runtime calls that function on ordinary edits from `killring`, - `syntax`, `autosave`, `pair`, `indent` and `comment` **without - `pcall`**, so the raise never surfaced as an error — it silently - dropped the operation. `kill_ring_acceptance` went 30/30 → 25/5 - (`frontend_detached_drops_per_frontend_state`: "B has kill state"). - The no-arg arm is back on ambient `active_buffer_id()` and documented - as deliberately infallible; the explicit-window arm keeps its Q#BP11 - validation. New **acc19c** pins it through the real path (a - `buffer.after-edit` subscriber during a viewless peer's `dispatch_key`) - and bites against the regressing commit. - Generalizes: **a "uniformity" cleanup that changes a function's - fallibility is not minor** — check every caller's error discipline - first, and remember that an ambient resolver's fallback IS its - contract. -- Verification on this branch: `cargo fmt --check` clean; strict - workspace Clippy clean; 1,817 default + 1,994 CRDT library tests; - `bottom_panel_stage1_acceptance` 46/46; kill ring 30 default + 30 CRDT; - vterm Stage 1 9 default + 10 CRDT; M4 121; required GPU 152; - compile 67; vterm Stage 2 4 / Stage 3 5 (7 CRDT); folding Stage 2 48; - statusline 7; listview 6; - **isolated-config workspace sweep 3,130 passed across 89 suites, zero - failures**; `git diff --check` clean. - - **Run the sweep with an isolated `XDG_CONFIG_HOME`.** The real - `~/.config/pmacs/init.lua` on this desktop calls - `pmacs.packages.install_local(...)`, so every editor the sweep builds - races on one shared install root; a losing race sets a status message - that leaks into the mode line and breaks - `folding_stage2_acceptance::unfolded_frame_is_identical_to_the_pre_folding_baseline`, - which compares whole painted frames. Standalone it is 48/48. This - generalizes the known `compile_mode_acceptance` real-config trap: - any suite that paints the status area inherits it. - - **A latent pre-existing `main` bug surfaced while gating and is NOT - this branch's**: `buffer::tests::proptests::rope_matches_crdt_projection_after_arbitrary_edits` - fails on `main` @ `352bf0b` with `ops = [Insert(0,"a"), - Insert(0,"aaa"), Replace(0,1,"a"), Undo]` — undo of a textually-null - `Replace` returns a no-op edit result still carrying `crdt_op = - Some`, violating the suite's own shape invariant. `src/buffer.rs` is - byte-identical here, and the seed was deliberately **not** committed - (it would make an unrelated failure deterministically red on this - PR). Needs its own lane. - - Durable test lesson from this round: `TerminalViewStatus.scroll_offset` - is documented as the retained rows between **this viewport** and the - live tail, so it necessarily tracks the viewport height. Asserting it - constant across a panel height change is either vacuous or wrong — - the invariant Q#BP7 actually states is that the **anchor** is frozen, - which the acceptance now pins by comparing the first visible row's - text, plus `at_bottom` for the follow re-arm. - - `compile_mode_acceptance` needs `--test-threads=1` locally; it is - 67/67 there. Under default parallelism it fails roughly 1 run in 3, - with a *different* test each time (acc14/acc25a, then acc24) — - **verified pre-existing** by swapping in `githubsucks/main`'s - `builtin/runtime/compile.lua` and reproducing the same rate. The - `pmacs-gpu` bin tests have historically gone red under a loaded sweep - (wgpu device contention). Rerun isolated before treating either as a - regression. -- Stage 2 (the GPU panel band, next available protocol version) has its - own re-framing obligation before implementation; Stage 3 is the default - placement flip. +Stage 1 is on `main`; nothing in this arc is in flight. Stage 2 has **no +branch and no framing yet** — the approved parent framing +`docs/bottom-panel-framing.md` (rev 4) is what it re-scouts against. + +- Stage 1 merged as **#155** (`main` @ `e745068`, 2026-07-24, after two + review rounds). No protocol change. Durable substrate facts live in + `docs/agent-handoff.md` §1; the two round lessons are in §5. +- Retained, carrying nothing unmerged: branch `bottom-panel` and worktree + `../pmacs-bottom-panel`. +- **Stage 2 obligations, already named by the framing** — the starting + point for its own framing doc: `InstanceMessage::PanelFrame` plus + `FrontendEvent::{FrontendCellGeometry, PanelResizeRows, PanelPointer}` + at the next available protocol version, gated in both directions and + each extended enum byte-pinned on its own previous final variant; + extracting `paint_frame`'s per-window body *together with* the + active-window auto-scroll preparation; routing every consumer in the + framing's §1.3 census of 23 transitive active-context reads through + `primary_document_window`; the focus-chrome surface matrix (Q#BP14b); + and Q#BP17's fold-projection parameter plus the stale invariant comment + at `src/window.rs`. Stage 3 is the adopter default flip. +- **Folding Stage 3 and this arc's Stage 2 both touch the semantic + projection.** Whichever is framed second re-scouts the other's landed + state. ## Folding lane (Arc 6) — Stages 1 and 2 MERGED; Stage 3 (GPU) is next @@ -258,6 +136,34 @@ git worktree add --track \ ## Closed since the last snapshot +- **Bottom panel Stage 1 — MERGED as #155** (`main` @ `e745068`, + 2026-07-24, after two review rounds). Window placement, window + parameters, TUI side windows, the divider, and the adopter `display` + opt-in, with no protocol change. Both rounds found the same class of + defect and are worth keeping: + - **Round 1**: the Q#BP6 side-window split guard had *no production + caller* — `C-x 2` still reached plain `split_active` — and survived + because the acceptance test called the core method directly. + - **Round 2**: Q#BP7's terminal growth re-arm had *never been + implemented*, and the assertion meant to pin it (`at_bottom`) is a + geometric readout that a still-anchored view satisfies; the anchor + assertions beside it compared `""` with `""` because the PTY fixture + emitted LF-only output. + - **Post-round-2 self-review**, caught by CI going red on all four Test + jobs: resolving `pmacs.window.buffer()`'s no-argument arm through the + acting frontend made a total function partial, and six runtime modules + silently dropped operations (`kill_ring_acceptance` 30/30 → 25/5). + Fixed in `9110f9f` before merge. + - Gating fact found on the way: **the workspace sweep must run with an + isolated `XDG_CONFIG_HOME`**, because the real user `init.lua` + installs a local package and the losing race leaks a status message + into painted-frame comparisons. There is also a latent pre-existing + `main` bug in the buffer CRDT undo path, unrelated to this arc. + - `compile_mode_acceptance` is load-sensitive under default + parallelism (~1 run in 3, a different test each time); verified + pre-existing by swapping in `main`'s `compile.lua`. It is 67/67 at + `--test-threads=1`. + - **GPU initial target — MERGED as #148** (`main` @ `0dd16a5`, 2026-07-24, after two review rounds). `pmacs --gpu [--socket …] FILE` opens a target before the GPU window appears. Protocol bumped 19 → 20: a semantic-session diff --git a/docs/agent-handoff.md b/docs/agent-handoff.md index fbdf4df..af0ac46 100644 --- a/docs/agent-handoff.md +++ b/docs/agent-handoff.md @@ -1,7 +1,8 @@ # Agent handoff — cross-machine continuity -**Last updated: 2026-07-24, after GPU initial-target (#148, protocol v20) -landed, following folding Stage 2 (#149) and its landed-doc refresh (#150), +**Last updated: 2026-07-24, after bottom-panel Stage 1 (#155) landed, +following GPU initial-target (#148, protocol v20), +folding Stage 2 (#149) and its landed-doc refresh (#150), web grammars HTML+CSS (#146), the LaTeX Stage 1 / inline-math framing pair (#144/#145), folding Stage 1 (#142), one-command GPU invocation (#141), the documentation refresh (#140), Vterm Stage 3 (#135), tab-width rendering @@ -21,12 +22,81 @@ commands, read `docs/active-work.md` immediately after this file. ## 1. Where the project stands (2026-07-24) -- `main` @ `0dd16a5` (GPU initial-target #148 atop folding Stage 2 landed-doc - refresh #150, folding Stage 2 #149, ledger refresh #147, web grammars #146, +- `main` @ `e745068` (bottom-panel Stage 1 #155 atop GPU initial-target #148, + folding Stage 2 landed-doc refresh #150, folding Stage 2 #149, ledger + refresh #147, web grammars #146, LaTeX Stage 1 #144 / inline-math framing #145, and folding Stage 1 #142), protocol **v20** (`SUPPORTED=[6..=20]`; v16 = `ThemeFacts`, v17 = `FontFacts`, v18 = `StatuslineSegments`, v19 = terminal frames/events, v20 = the GPU initial-target semantic bootstrap family). +- **Bottom panel Stage 1 (window placement + TUI side windows) LANDED — + #155** (`docs/bottom-panel-framing.md` rev 4; merge `e745068`; two review + rounds). **No protocol change (still v20).** Arc 7's substrate: pmacs now + has Emacs's `display-buffer` + window parameters, and a buffer can be + displayed in a fixed-height window pinned to the bottom of the frame that + feature code targets **by policy** instead of by stealing the selected + window. + - `src/window.rs`: `WindowParams { side, fixed_rows, dedicated }` plus + implementation-owned `quit_action` / `origin_document` (Lua reads them, + `set_params` refuses them); `MIN_WINDOW_OUTER_ROWS = 2`; + `Layout::compute(area, fixed)` subtracts fixed children before dividing + the remainder by weight, preserving last-flexible-takes-the-remainder, so + a tree with no fixed leaves computes byte-identically to before. + - **`Layout::compute` has TWO production callers**, and both must feed the + same shared `panel_fixed_rows` map: `window_placements` and + `src/overlay_paint.rs`'s peer-presence pass, which derives its own + text-area `Rect` and never routes through the first. Leaving the second + on unfixed geometry paints every peer cursor at the row it would occupy + with no panel open. + - **The minimum is recursive** (`subtree_min_rows`: horizontal splits sum, + vertical splits max). "Two rows at the root" does not give each nested + leaf two rows. `interactive_min_rows` is the same recursion over the + user's `window.min-height` preference, and applies to drag/keyboard + resize ONLY — the layout pass and frame-resize reconciliation use the + structural floor, so changing a preference can never invalidate an + existing layout. + - **Hiding a panel is a durable state transition, not a per-frame effect** + (`EditorState::reconcile_panel_layout`): it moves focus out and releases + the terminal controller, because the terminal resize path merely returns + on zero content without releasing. It runs after attach/resize/display/ + close and defensively before input dispatch, terminal sync, and paint. + - `FrontendView` gains `panel_capable`, `frame_geometry` + (`None` = **unknown**, never the GPU attach request's permanent 24×80 + placeholder), and derived `panel_hidden` — each spelled explicitly at + every construction site, preserving folding's non-`Default` discipline. + - `EditorCore::primary_document_window` is the Q#BP14 projection seam; + `display_buffer` is Phase 1 of the display transaction (exact target → + side affinity → ordinary reuse, with option-valued height/dedication); + the Lua layer owns Phase 2 (activate → hook → reconcile → revalidate → + final-focus matrix). + - **Optimistic input is gated per WINDOW, not per buffer**: + `dispatch_idle_for` returns `false` whenever the acting frontend's active + window is a side window. Marking the panel's BUFFER round-trip would be + wrong — `round_trip_buffers` is global by `BufferId`, so it would disable + optimistic apply for another frontend editing that buffer as its document. + - Jump entries are per frontend and carry their origin `WindowId`; a stale + **side** origin is SKIPPED, because degrading it to an active-window + switch is exactly the duplicate-panel corruption the arc removes. + - `pmacs.window.display / display_file / quit / panel / params / + set_params / resize / display_target`, plus `builtin/runtime/window.lua` + (`window.panel-height`, `window.min-height`, `C-x ^` / `C-x C-^`). + Adopters take `display = "current" | "panel"`; **Stage 1 default is + `"current"`** and Stage 3 flips it. + - The divider is the upper subtree's existing mode-line row — no row added + or consumed, `ui.divider` restyles every exposed segment of one boundary, + and drag state is `HashMap` so frontends cannot steal each + other's gestures. + - `open_initial_target` now shares one `resolve_target_buffer` + + exact-window install seam with `display_file`, and reasserts into a + document window after hooks (a startup hook can now create a panel). + - Final gates: 1,817 default + 1,994 CRDT library tests; the new + `bottom_panel_stage1_acceptance` 46; kill ring 30; compile 67; M4 121; + required GPU 152; initial-target 14 CRDT; all three vterm suites; folding + Stage 2 48. All 12 CI checks green at merge. + - **Stage 2 (the GPU panel band) needs its own re-framing** before + implementation and takes the next available protocol version; the + framing's §1.3 census of 23 transitive active-context reads is its map. + Stage 3 is the adopter default flip. - **GPU initial target LANDED — #148** (`docs/gpu-initial-target-framing.md` rev 3; merge `0dd16a5`; two review rounds). `pmacs --gpu [--socket NAME|PATH] FILE` transports exact Unix path @@ -524,8 +594,14 @@ commands, read `docs/active-work.md` immediately after this file. (GPU) is next**, unframed. - **Web grammars HTML+CSS LANDED — #146**, and **LaTeX Stage 1 — #144** with its inline-math parent framing **#145**. - - Remaining ranked arcs: 6 folding Stage 3, 7 DAP, 8 GPU splits, plus - the `.ipynb` arc (its JSON-grammar prerequisite shipped in #123). + - **Arc 7 (bottom panel) Stage 1 LANDED — #155** — window placement, + window parameters, TUI side windows, the divider, and the adopter + `display` opt-in. **Stage 2 (the GPU band) is next and needs its own + re-framing**; Stage 3 is the default flip. DAP was parked awaiting + exactly this arc's Stage 1 and can now re-baseline its touch census. + - Remaining ranked arcs: 6 folding Stage 3, 7 bottom-panel Stages 2–3, + DAP, 8 GPU splits, plus the `.ipynb` arc (its JSON-grammar + prerequisite shipped in #123). ## 2. How we work (the part that must not drift) @@ -756,6 +832,44 @@ final variant — its own round-trip cannot detect a discriminant shift. before any `FrontendEvent` touches render/size/editor state. Generalizes: when a new failure path can leave a handle installed without its owning session, dropping a handle is not the same as tearing down the connection. +- **A guard with no production caller passes every direct-call test.** + #155 round 1: `EditorCore::try_split_active` implemented the side-window + split refusal, but `pmacs.window.split_horizontal` / `split_vertical` — and + therefore `C-x 2` / `C-x 3` — still called plain `split_active`. The + acceptance test called the core method directly, so reverting the guard + entirely would have left every test green. Same shape as folding #142 + round 2. Assert through the outermost user-reachable seam + (`try_exec(&s, "pmacs.window.split_horizontal()")`), then falsify by + revert. When the test shares a file with the code it pins, `scripts/bite` + cannot swap it — break the production line by hand and `git checkout --`. +- **A geometric readout is not a state predicate.** + `TerminalViewStatus::at_bottom` is defined as `scroll_offset == 0` — "the + viewport currently reaches the tail", not "this view follows the tail". A + still-anchored view satisfies it whenever it happens to be tall enough, so + asserting it could not detect that Q#BP7's growth re-arm had never been + implemented (#155 round 2): the next rows the child printed pushed the + anchored view back into history. Pinning *following* requires advancing the + world — feed more child output through a filesystem gate — and asserting the + view came along. Related: `scroll_offset` is viewport-relative, so + "unchanged across a height change" is vacuous or wrong; the invariant is + the frozen ANCHOR. +- **A PTY in the default mode does not translate LF to CRLF.** An + `echo`-driven test fixture staircases rightward, and past the viewport + width every row clips to blanks — so `assert_eq!(top_before, top_after)` + compares `"" == ""` and passes for any regression (#155 round 2). Emit + `printf '...\r\n'`, and guard text comparisons with + `assert!(!observed.is_empty())` the same way the panel daemon pin guards on + `!panel_hidden`. +- **Widening an ambient resolver into a scoped one can make a total function + partial.** #155 round 2 resolved both arms of `pmacs.window.buffer()` + through the acting frontend "for uniformity". `acting_frontend` follows the + interactive origin, which can name a frontend with no registered view (a + bare `dispatch_key` from an unattached peer), so the no-argument arm began + raising instead of answering. No runtime caller `pcall`s it, so killring, + syntax, autosave, pair, indent and comment silently dropped operations — + `kill_ring_acceptance` went 30/30 to 25/5 on every CI platform. The ambient + resolver's fallback is what makes it *total*; keep it, and document that as + deliberate. Uniformity is not free when the paths have different totality. - **An upgrade decision must be tracked independently of the outcome that triggered it.** #148 published a target's fresh `BufferSnapshot` to existing grid replicas only when the buffer was `newly_loaded || @@ -836,6 +950,14 @@ setup (reader → editable → kernel execution) now has its JSON grammar prerequisite, but remains a real arc, not a one-shot. GPU: auto-reconnect after daemon restart, splits/multi-buffer, gutter riders (whitespace guides, folding, git markers). +Bottom panel (SHIPPED Stage 1, #155; full list in its framing "Deferred"): +left/right/top side windows, multiple slots per side, rehoming a leaf across +the tree, the whole `no_other_window` parameter, manual panel hide/show and +`window.toggle-panel`, `display-buffer-alist`-style user rules, panel +persistence (blocked on settings persistence), `OSC 22` pointer shape in the +TUI, per-panel statusline segments on the wire, proportional-font panels, +`window-configuration` registers, atomic windows, panel-local keymaps, and +horizontal (`C-x {`/`}`) resize. Themes (full list in theme-faces framing rev 9 "Deferred (named)"): popup/menu/dropdown bg + selected-row faces, `ui.background` / `ui.caret`, `ui.modeline.inactive`, minimap chrome, peer-cursor From 870209cca9775b9933f6acafd3401aa017e7ba78 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 21:34:08 -0400 Subject: [PATCH 11/31] test(buffer): capture the CRDT undo no-op-with-op case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Found during #155's sweep and recorded there as one line of prose with an uncommitted proptest seed. This turns it into something that cannot be lost and that states what is actually known. Reproduced on main @ e745068 with PROPTEST_CASES=2000 against rope_matches_crdt_projection_after_arbitrary_edits, then reduced by hand to five lines: replacing a byte range with IDENTICAL bytes is a textual no-op but a real CRDT operation, so undoing it advances the CRDT version while leaving the materialized text unchanged. `undo_crdt_mode` derives an empty replacement edit and still attaches the op `crdt.undo()` produced, which trips the proptest's "a no-op edit must have crdt_op = None" invariant. The test is `#[ignore]`d rather than asserted-as-correct or left as a seed, because the resolution is a judgement call I should not make silently: - the raw proptest seed is NOT committed, since it would fail the suite on every run for a case whose correct outcome is undecided; - the deterministic reduction reproduces without any seed, so nothing is lost by leaving the seed out. What the doc comment records, so the next reader need not redo it: content stays correct (rope and CRDT projection agree either side); both `crdt_op` consumers read the field unconditionally and do not short-circuit on an empty range, so replicas still converge; and `EditorCore::undo` never seeks `edit.range.start`, so no cursor jumps. The open question is whether the invariant is simply mis-scoped — it was written for the forward `apply_edit` short-circuit, which returns before producing an op, and CRDT-mode undo/redo never reach that path. One artifact is arbitrary either way: `derive_replacement_edit` reports the empty range at the buffer END rather than at the edit site. Co-Authored-By: Claude Opus 5 (1M context) --- src/buffer.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/buffer.rs b/src/buffer.rs index 304918b..7f048d5 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -2790,6 +2790,88 @@ mod tests { } } + /// Deterministic reduction of a `rope_matches_crdt_projection_ + /// after_arbitrary_edits` failure found by raising the case + /// count (`PROPTEST_CASES=2000`) on `main` @ `e745068`. + /// + /// **What happens.** Replacing a byte range with *identical* + /// bytes is a textual no-op but a real CRDT operation (a delete + /// plus an insert). Undoing it therefore advances the CRDT + /// version while leaving the materialized text unchanged, so + /// `undo_crdt_mode` derives an EMPTY replacement edit — and + /// still attaches the `crdt_op` that `crdt.undo()` produced. + /// That trips the proptest's `crdt_op` shape invariant, "a + /// no-op edit must have `crdt_op = None`". + /// + /// **What was verified about the consequences**, so the next + /// reader does not have to redo it: + /// + /// * content stays correct — rope and CRDT projection agree + /// before and after (asserted below); + /// * replicas stay converged — both `crdt_op` consumers + /// (`EditorCore::queue_daemon_origin_crdt_op` and the remote-op + /// path) read `edit.crdt_op` unconditionally and do **not** + /// short-circuit on an empty range, so the op is broadcast; + /// * the cursor does not jump — `EditorCore::undo` only clamps + /// to buffer length and never seeks `edit.range.start`. + /// + /// **The open question** is therefore whether the *invariant* is + /// simply mis-scoped rather than the behavior being wrong. It + /// was written for the FORWARD `apply_edit` short-circuit, which + /// returns before ever producing an op; CRDT-mode undo/redo + /// never reach that path. One artifact is genuinely arbitrary + /// either way: `derive_replacement_edit` reports the empty range + /// at the buffer END rather than at the edit site. + /// + /// Ignored, not deleted: it documents a real, reproducible + /// asymmetry that nothing else on `main` records, and un-ignoring + /// it is the first step of whichever resolution wins. + #[test] + #[ignore = "known pre-existing main behavior; see the doc comment \ + for the verified consequences and the open question"] + fn crdt_undo_of_an_identity_replace_reports_a_no_op_edit_carrying_an_op() { + let mut buffer = + Buffer::new_with_crdt(BufferId::next(), "*identity-undo*", 1).expect("crdt"); + buffer + .apply_edit(EditOp::Insert { + pos: 0, + bytes: b"hello", + }) + .expect("seed insert"); + + // Replace one byte with the SAME byte. + let forward = buffer + .apply_edit(EditOp::Replace { + range: Range::new(1, 2), + bytes: b"e", + }) + .expect("identity replace"); + assert_eq!(forward.range, Range::new(1, 2)); + assert_eq!(forward.inserted_len, 1); + + let undone = buffer.undo().expect("undo"); + assert!( + undone.range.is_empty() && undone.inserted_len == 0, + "the undo produced no textual change: {:?}/{}", + undone.range, + undone.inserted_len + ); + assert!( + undone.crdt_op.is_some(), + "…yet it carries a version-advancing CRDT op — the invariant \ + the proptest trips on" + ); + + // Content is unharmed in both projections. + let mut bytes = vec![0u8; buffer.len() as usize]; + buffer.snapshot_rope().slice(0, buffer.len(), &mut bytes); + assert_eq!(String::from_utf8(bytes).expect("utf8"), "hello"); + assert_eq!( + buffer.crdt_state().expect("crdt").materialize_string(), + "hello" + ); + } + proptest! { // Smaller proptest case count than the default (64) to keep // CI overhead modest; the per-op invariant check is the From 14c1c0104312ccd32e3e986f410a5cde83dc532a Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 24 Jul 2026 22:04:35 -0400 Subject: [PATCH 12/31] feat(math): caret-driven suppression, the draw pass, and the slice acceptance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two halves that touch live rendering, landed together because the acceptance criteria that make either honest need both. Suppression (Q#MS3/MS4/MS5/MS11). Detection runs in the per-line chunk builder — the chunk-build path, never the edit path — and substitutes each suppressed span's source bytes with ONE spacer chunk BEFORE tab expansion, so a literal tab inside a span vanishes with it while tabs outside keep their SourceTab provenance. The gate reads the EFFECTIVE caret (own_cursor, which optimistic edits predict forward — F4's no-flap requirement holds by construction) plus both own-selection endpoints. Three motion paths can flip a gate without a content change, and each now re-runs the per-line chunk compare, gated on a one-scan "does the visible slice hold a $" check: the CursorByte arm, finish_optimistic_edit (the text re-chunks under the OLD caret there; without the hook a typed char rendered one keystroke stale), and the Decorations arm — whose "no decoration change needs a reshape" premise acquires exactly one exception, the Selection endpoints Q#MS11 made suppression inputs. The line-reuse predicate (acceptance 11, the #120 edge). Per-line math state is cached in lockstep with line_chunk_cache: every detected span with the gate bit it was built under. The scroll-reuse path refuses a retained line whose cached bits disagree with the CURRENT caret/selection — content is unchanged on every reuse path, so the cached span set is authoritative and the gate bits are the only variable. The acceptance test drives the stale-gate case through rebuild_lines_reusing_scroll directly and fails if the gate is removed from the predicate. The hit map (B1'). hit_test_source_byte rebuilds its runs from a whole-slice chunk walk, so it now reads the substitutions BACK from the per-line caches — never re-planned under a possibly-newer caret — keeping the map and the shaped glyphs one source of truth. The draw pass (Q#MS6/MS7). Every MathItem::Glyph draws from its own mini-buffer with Attrs pinned to the bundled math family (F8b), placed at layout's exact x and the shaped line's REAL baseline; the mini-buffer itself is positioned by the line_y cosmic-text actually produced for it, so no font-metric rederivation can drift. Fraction rules ride the bg quad batch after the decoration washes and under the glyphs. Wash geometry gains Q#MS11's intersection rule: a wash touching a suppressed span widens to the box's whole reserved rectangle (a match strictly inside the span produced a zero-width interval before), while the round-3 exclusive-end fix keeps a non-intersecting wash off the box. Acceptance (framing §5). Criteria 5-11 and 14-16 run on real pixels through render_to_view: drawn ink where a literal-spacer control renders none, with the before-region pixel-identical; the fraction rule as a full-width run with operand ink both sides; caret-inside rendering EXACTLY as math-disabled (driven through the real CursorByte arm, which owns the refresh — a direct helper call would not have pinned the wiring); every failure mode (unbalanced, unknown command, $$, uncoverable glyph) pixel-equal to disabled; box clicks snapping to the span start with the trailing edge landing after the span; the scroll-reuse stale-gate bite; reflow confined to the affected line with the after-text shifted by exactly the quantized projection difference; selection gating and the whole-rectangle wash; and the licence provenance pair. Criterion 17 is discharged differentially: cargo tree -e features output for ttf-parser is byte-identical with and without this crate's dependency line. Also folded in, per the round-3 close-out: the F6 documenting test ($a$$b$ is eaten by the $$-opaque rule; one separating character restores both spans), the depth-search bound raised 6 -> 8 so a metric shift cannot make the "floor is dead code" expect fire with a misleading message, the MathBox { end, .. } pattern nit, and the active-work.md lane entry. Named v0 approximations, deliberate: the peer-caret half of acceptance 14 is pinned at the mapping level (unit tests), not pixels; a soft-wrapped spacer draws its box whole at the first run's origin (the one-rectangle model); the fit budget reads the bundled code face even under a custom set_font family — the draw anchors to the real shaped baseline either way, so only the fit margin is approximate. Clippy is CLEAN across the workspace at -D warnings for the first time on this branch: the draw pass consumed every formerly-dead item, and the three lints it could not fix (a test-only accessor, one doc string, one manual midpoint) are fixed here. Gates: cargo fmt --check; cargo clippy --workspace --all-targets -- -D warnings; 1,815 default + 1,992 CRDT library tests; M4 121 (basedpyright skipped); 199 pmacs-gpu tests under PMACS_REQUIRE_GPU=1; workspace sweep 3,131 across 88 suites (isolated XDG_CONFIG_HOME); git diff --check. Co-Authored-By: Claude Fable 5 --- docs/active-work.md | 35 ++ pmacs-gpu/src/main.rs | 1042 +++++++++++++++++++++++++++++++++- pmacs-gpu/src/math_layout.rs | 23 +- pmacs-gpu/src/math_parse.rs | 16 + 4 files changed, 1096 insertions(+), 20 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index 2b258bd..e5aa3ba 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -54,6 +54,41 @@ git status --short --branch The `git log` command must expose `0dd16a5` or a newer intentional main. If it does not, stop and repair the remote/fetch configuration. +## Inline-math slice lane — IN FLIGHT + +- Portable branch: `githubsucks/inline-math-slice`; worktree + `../pmacs-math-slice`. +- Framing: `docs/inline-math-slice-framing.md` rev 3, approved after two + review rounds; parent arc framing merged as #154. +- State: parser, font bundle (GUST licence), MATH-table layout with the + measured height budget, currency-guarded detection, and the + `ChunkSource::MathBox` spacer substrate are implemented and + round-3-reviewed (review fixes at `cbf7782`: the exclusive-`end` + mapping bug its own test had pinned, script-marker whitespace, fallible + layout via `UncoverableGlyph`, real fraction gap-min constants — + flagship scale 0.867, fallback depth 5). +- Caret-driven suppression (the Q#MS5 gate over the effective caret and + Q#MS11 selection endpoints, chunk substitution before tab expansion, + the line-reuse predicate's third input, and the CursorByte / + optimistic-edit / Decorations refresh triggers), the draw pass + (per-glyph mini-buffers positioned by each shaped line's real + baseline, fraction-rule quads over the washes, the F8b family pin), + the Q#MS11 whole-rectangle wash widening, and the pixel acceptance + battery (criteria 5–11, 14–16; 17 discharged by the differential + `cargo tree -e features` check — byte-identical with and without the + dependency line) are implemented on the branch tip. +- Clippy is CLEAN on the whole workspace at `-D warnings` — the draw + pass consumed every formerly-dead item. +- Verification at the tip: 199 `pmacs-gpu` tests under + `PMACS_REQUIRE_GPU=1`; 1,815 default + 1,992 CRDT library tests; M4 + 121; full workspace sweep green (isolated `XDG_CONFIG_HOME`). +- Remaining before PR: nothing known; awaiting the user's review pass. + Named v0 approximations: the peer-caret half of acceptance 14 is + pinned at the mapping level (unit tests), not pixels; a soft-wrapped + spacer draws its box whole at the first run's origin; the fit budget + reads the bundled code face even under a custom `set_font` family + (the draw anchors to the real shaped baseline either way). + ## Folding lane (Arc 6) — Stages 1 and 2 MERGED; Stage 3 (GPU) is next Both shipped stages are on `main`; nothing in this arc is in flight. Stage 3 diff --git a/pmacs-gpu/src/main.rs b/pmacs-gpu/src/main.rs index 677a0be..bf6766a 100644 --- a/pmacs-gpu/src/main.rs +++ b/pmacs-gpu/src/main.rs @@ -224,6 +224,13 @@ fn build_font_system(extra_sources: &[&'static [u8]]) -> (FontSystem, FontDefaul let bundled_id = *bundled_ids .first() .expect("bundled JetBrains Mono contains one face"); + // Inline-math slice (Q#MS7): the math glyphs draw through + // cosmic-text, so the same bytes the layout engine measures must + // resolve as a family here — the F8b pin. Proportional, so the + // same-family monospace filter below cannot touch it. + db.load_font_source(fontdb::Source::Binary(std::sync::Arc::new( + math_layout::LATIN_MODERN_MATH, + ))); let extra_ids: Vec = extra_sources .iter() .flat_map(|bytes| db.load_font_source(fontdb::Source::Binary(std::sync::Arc::new(*bytes)))) @@ -277,6 +284,22 @@ fn query_normal_face(db: &fontdb::Database, family: &str) -> Option }) } +/// The family name the bundled math font resolves to in fontdb; the +/// draw pass pins `Attrs` to it so drawn advances come from the same +/// face layout measured (framing F8b). +const MATH_FONT_FAMILY: &str = "Latin Modern Math"; + +/// The Q#MS10 fit budget at the given code metrics, derived from the +/// bundled code face's baseline placement (the framing's pinned rule). +/// A custom `set_font` family shifts the painted baseline slightly; v0 +/// accepts that — boxes draw against the real shaped baseline, so only +/// the fit margin is approximate. +fn math_code_budget(fm: FontMetrics) -> (f32, f32) { + ttf_parser::Face::parse(JETBRAINS_MONO, 0).map_or((0.0, 0.0), |face| { + math_layout::line_box_budget(&face, fm.code_font_size(), fm.code_line_height()) + }) +} + /// The fixed ASCII advance probe (framing Q#F6). The measurement uses /// its total shaped width divided by this logical cell count; it does /// not assume one glyph per digit because a valid monospace face may @@ -343,6 +366,19 @@ const TERMINAL_CURSOR_RGBA: [f32; 4] = [0.85, 0.85, 0.9, 0.55]; /// B1. const CARET_WIDTH: f32 = 2.0; const CARET_COLOR: [f32; 4] = [0.90, 0.90, 0.96, 0.90]; + +/// Math ink (Q#MS6): the plain code text color, as glyph color for +/// the mini-buffers and quad rgba for the fraction rule. Colour-by- +/// context is the parent arc's deferred Q#IM2. +const MATH_INK_COLOR: Color = Color::rgb(230, 230, 235); +const MATH_INK_RGBA: [f32; 4] = [230.0 / 255.0, 230.0 / 255.0, 235.0 / 255.0, 1.0]; + +/// Line-height factor for a math glyph's mini-buffer: roomy enough +/// that a lone glyph's ascender/descender never clips against the +/// buffer's own line box. Positioning ignores it — the `TextArea` top +/// is set from the mini-buffer's SHAPED `line_y`, so the glyph's +/// baseline lands exactly where layout put it. +const MATH_GLYPH_LINE_FACTOR: f32 = 2.0; /// Extra source lines shaped beyond the visible window so a 1-line /// scroll doesn't always re-slice and the bottom partial line renders /// (Q#S3). Kept small — overscan is wasted shaping. @@ -1488,6 +1524,21 @@ struct State { /// frames re-shape ONLY lines whose styling actually changed, and /// lets scroll reuse retained lines wholesale. line_chunk_cache: Vec>, + /// Per-shaped-line math suppression state, in lockstep with + /// `line_chunk_cache`: the detected spans with the Q#MS5 gate bit + /// each was built under (the line-reuse predicate's third input + /// beside content and styling), and the placed boxes the draw + /// pass paints into the reserved spacer rectangles. + line_math_cache: Vec, + /// The MATH layout engine over the bundled font, or `None` when + /// the font failed to yield math metrics at startup — a hard + /// error in the math path only (Q#MS7): spans render as source + /// and the editor keeps running. + math_engine: Option>, + /// `(above_baseline, below_baseline)` budget a math box must fit + /// (Q#MS10), derived by `math_layout::line_box_budget` from the + /// CODE font's baseline placement. Recomputed when metrics change. + math_budget: (f32, f32), /// Absolute source-line index of `buffer.lines[0]`. shaped_top: usize, bg_vertex_buffer: ReusableVertexBuffer, @@ -1538,6 +1589,12 @@ struct State { /// Dedicated text renderer for the minibuffer dropdown (its own /// layer over the buffer, like the menu's). mb_text_renderer: TextRenderer, + /// Dedicated text renderer for inline-math glyphs (Q#MS6): each + /// `MathItem::Glyph` draws from its own mini-buffer positioned at + /// layout's exact x/baseline, so an accumulated shaping advance + /// can never move a glyph off its measured origin — the same + /// per-run argument the terminal renderer made. + math_text_renderer: TextRenderer, /// Minibuffer dropdown background + selection quads (Q#MB1). mb_bg_vertex_buffer: ReusableVertexBuffer, /// Arc 1a Q#C5 — the live in-buffer completion popup (protocol @@ -3017,6 +3074,17 @@ impl State { // filter, generic defaults, THEN FontSystem construction so // its monospace-ID set sees the final database. let (mut font_system, font_defaults) = build_font_system(extra_font_sources); + // Inline-math slice (Q#MS7): the layout engine over the bundled + // Latin Modern Math. Failure is surfaced once and disables only + // the math path — spans keep rendering as source. + let math_engine = match math_layout::MathLayout::new(math_layout::LATIN_MODERN_MATH) { + Ok(engine) => Some(engine), + Err(e) => { + eprintln!("pmacs-gpu: bundled math font unusable ({e:?}); inline math disabled"); + None + } + }; + let math_budget = math_code_budget(fm); let swash_cache = SwashCache::new(); let cache = Cache::new(&device); let mut viewport = Viewport::new(&device, &cache); @@ -3036,6 +3104,9 @@ impl State { // Q#MB1 — a third renderer for the minibuffer dropdown layer. let mb_text_renderer = TextRenderer::new(&mut atlas, &device, MultisampleState::default(), None); + // Inline-math slice (Q#MS6) — a renderer for the math glyph layer. + let math_text_renderer = + TextRenderer::new(&mut atlas, &device, MultisampleState::default(), None); // Arc 1a Q#C5 — a renderer for the completion dropdown layer. let completion_text_renderer = TextRenderer::new(&mut atlas, &device, MultisampleState::default(), None); @@ -3190,6 +3261,9 @@ impl State { styled_redraw_deadline: None, hit_map_dirty: false, line_chunk_cache: Vec::new(), + line_math_cache: Vec::new(), + math_engine, + math_budget, shaped_top: 0, bg_vertex_buffer: ReusableVertexBuffer::new(), squiggle_vertex_buffer: ReusableVertexBuffer::new(), @@ -3210,6 +3284,7 @@ impl State { menu_bg_vertex_buffer: ReusableVertexBuffer::new(), mb_buffer, mb_text_renderer, + math_text_renderer, mb_bg_vertex_buffer: ReusableVertexBuffer::new(), completion: None, completion_buffer, @@ -3434,6 +3509,12 @@ impl State { // `moved == false`, so deferring wrapped-run repair here // would leave a newly wrapped caret off-screen indefinitely. self.ensure_caret_painted(); + // Q#MS5/F4: the text applied above re-chunked under the OLD + // caret; the effective caret only just moved. Suppression keys + // on `own_cursor`, so re-run the compare — without this, a + // typed char that lands the caret against a span boundary + // renders one keystroke stale. + self.refresh_math_suppression(); let viewport = self.viewport_send_if_changed(predicted.buffer_id); CrdtOpSend { buffer_id: predicted.buffer_id, @@ -3932,7 +4013,13 @@ impl State { // in `render()`. No decoration change needs a // reshape, so none triggers one — diagnostic // publishes no longer pay set_rich_text + - // shape_until_scroll. + // shape_until_scroll... with ONE exception since the + // inline-math slice: a Selection endpoint is a Q#MS11 + // suppression gate, so a selection change re-runs the + // per-line compare when the slice could hold math + // (no-op for every other decoration kind and for + // math-free text). + self.refresh_math_suppression(); self.request_redraw(); None } @@ -4127,6 +4214,13 @@ impl State { // the band never scrolled into view. if moved { self.ensure_caret_painted(); + // Q#MS5: the caret is a suppression input now. A + // move that crosses a math-span boundary must + // re-chunk the affected lines even when no scroll + // or edit follows — the follow above only reshapes + // on scroll, and a retained line under the stale + // suppression state is the #120 edge. + self.refresh_math_suppression(); if let Some(vp) = self.viewport_send_if_changed(buffer_id) { return Some(vp); } @@ -4899,18 +4993,65 @@ impl State { } } + /// The shaped slice's math substitutions, read back from the + /// per-line chunk caches and rebased to slice-relative offsets — + /// the spacer text and suppressed range are both in the cached + /// `MathBox` chunks, so the hit map reproduces the shaped state + /// exactly instead of re-planning under a possibly-newer caret. + fn cached_math_subs_for_slice(&self, vstart: u64, vend: u64) -> Vec { + let mut subs = Vec::new(); + if self.math_engine.is_none() { + return subs; + } + let (top, ranges) = self.slice_line_ranges(vstart, vend); + if top != self.shaped_top || ranges.len() != self.line_chunk_cache.len() { + // The caches describe a different slice; a math-blind map + // (boxes unclickable at worst) beats a wrong one. + return subs; + } + for (i, &(ls, _)) in ranges.iter().enumerate() { + let base = ls - vstart; + for chunk in &self.line_chunk_cache[i] { + if let ChunkSource::MathBox { start, end } = chunk.source { + subs.push(MathSubstitution { + span: math_parse::MathSpan { + start: (base + start) as usize, + end: (base + end) as usize, + }, + spacer: chunk.text.clone(), + boxed: math_layout::MathBox { + width: 0.0, + ascent: 0.0, + descent: 0.0, + items: Vec::new(), + }, + }); + } + } + } + subs + } + fn hit_test_source_byte(&mut self, x: f64, y: f64) -> Option { self.current_buffer_id?; if self.hit_map_dirty { // Q#R2 — a per-line reshape deferred this; rebuild from // the same chunk source the shaped buffer was built from. let (vstart, vend) = self.view_range; + // B1': the hit map must see the SAME math suppressions the + // shaped lines carry, so the slice-wide substitution list + // is read back from the per-line caches (never recomputed + // — a caret that moved since the last reshape must not + // make the map disagree with the glyphs), rebased from + // line-relative to slice-relative offsets. + let subs = self.cached_math_subs_for_slice(vstart, vend); let rich = clipped_chunks_for_range( &self.current_text, &self.current_spans, &self.current_adornments, vstart, vend, + &subs, ); let (hit_runs, projected_line_starts) = build_hit_runs(&rich); self.current_hit_runs = hit_runs; @@ -5050,15 +5191,19 @@ impl State { let Some(shaped_idx) = line_idx.checked_sub(self.shaped_top) else { return false; }; - if shaped_idx >= self.buffer.lines.len() || shaped_idx >= self.line_chunk_cache.len() { + if shaped_idx >= self.buffer.lines.len() + || shaped_idx >= self.line_chunk_cache.len() + || shaped_idx >= self.line_math_cache.len() + { // E.g. typing on the phantom empty line after a trailing // newline — no BufferLine exists for it; full reshape // handles those shapes correctly. return false; } - let chunks = self.chunks_for_line(line_start, content_end); + let (chunks, math) = self.chunks_for_line(line_start, content_end); self.buffer.lines[shaped_idx] = line_from_chunks(&chunks, &self.resolved_family); self.line_chunk_cache[shaped_idx] = chunks; + self.line_math_cache[shaped_idx] = math; self.view_range = (vstart, vend); self.buffer.shape_until_scroll(&mut self.font_system, false); // The edited line's wrap count can shrink under a retained @@ -5099,14 +5244,148 @@ impl State { (top, ranges) } - fn chunks_for_line(&self, line_start: u64, content_end: u64) -> Vec { - clipped_chunks_for_range( + fn chunks_for_line( + &self, + line_start: u64, + content_end: u64, + ) -> (Vec, MathLineState) { + let (subs, mut state) = self.math_plan_for_line(line_start, content_end); + let chunks = clipped_chunks_for_range( &self.current_text, &self.current_spans, &self.current_adornments, line_start, content_end, - ) + &subs, + ); + state.placed = placed_math_boxes(&chunks, &subs); + (chunks, state) + } + + /// The line's math suppression plan (Q#MS3/Q#MS4). Detection runs + /// here — the chunk-build path, never the edit path — and the gate + /// reads the EFFECTIVE caret (`own_cursor`, which optimistic edits + /// predict forward) plus the own-selection endpoints, so + /// suppression cannot flap during an unconfirmed edit (framing + /// Q#MS5/F4). Any failure — parse, layout, fit, degenerate spacer — + /// leaves that span as source (Q#MS8). + fn math_plan_for_line( + &self, + line_start: u64, + content_end: u64, + ) -> (Vec, MathLineState) { + let mut subs = Vec::new(); + let mut state = MathLineState::default(); + let Some(engine) = self.math_engine.as_ref() else { + return (subs, state); + }; + let Some(line) = self + .current_text + .get(line_start as usize..content_end as usize) + else { + return (subs, state); + }; + if !line.as_bytes().contains(&b'$') { + return (subs, state); + } + let spans = math_parse::detect_math_spans(line); + if spans.is_empty() { + return (subs, state); + } + let gates = self.math_gate_positions(line_start, content_end); + let advance = self.mono_advance(); + for span in spans { + let gated = gates + .iter() + .any(|&p| span.start as u64 <= p && p <= span.end as u64); + state.gates.push((span, gated)); + if gated { + continue; + } + let Ok(node) = math_parse::parse(&line[span.interior()]) else { + continue; + }; + let Ok(boxed) = engine.layout(&node, self.fm.code_font_size()) else { + continue; + }; + let Some(fitted) = + math_layout::fit_to_line(&boxed, self.math_budget.0, self.math_budget.1) + else { + continue; + }; + let spacer = math_layout::spacer_for_width(fitted.width, advance); + if spacer.is_empty() { + continue; + } + subs.push(MathSubstitution { + span, + spacer, + boxed: fitted, + }); + } + (subs, state) + } + + /// Line-relative byte positions whose presence inside a span + /// unsuppresses it: the effective caret and both own-selection + /// endpoints (Q#MS5 generalised by Q#MS11 — "you are addressing + /// this text" and "you see this text" are the same condition). + fn math_gate_positions(&self, line_start: u64, content_end: u64) -> Vec { + let mut gates = Vec::new(); + let mut push = |byte: u64| { + if byte >= line_start && byte <= content_end { + gates.push(byte - line_start); + } + }; + if let Some(own) = self.own_cursor + && Some(own.buffer_id) == self.current_buffer_id + { + push(own.byte); + } + for d in &self.current_decorations { + if d.kind == DecorationKind::Selection { + push(d.range.start); + push(d.range.end); + } + } + gates + } + + /// Whether a retained line's cached gate bits match the current + /// effective caret/selection — the suppression input to the + /// line-reuse predicate beside content and styling (Q#MS5; a + /// retained line shaped under the opposite suppression state is + /// the #120 stale-mirror failure). Content is unchanged on every + /// reuse path, so the cached span set is authoritative and only + /// the gate bits can differ. + fn math_gates_match(&self, line_start: u64, content_end: u64, state: &MathLineState) -> bool { + if state.gates.is_empty() { + return true; + } + let gates = self.math_gate_positions(line_start, content_end); + state.gates.iter().all(|&(span, was_gated)| { + let now = gates + .iter() + .any(|&p| span.start as u64 <= p && p <= span.end as u64); + now == was_gated + }) + } + + /// Caret or selection motion can flip a span's Q#MS5 gate without + /// any content change, which the frame-driven refresh paths never + /// see; re-run the per-line chunk compare when the visible slice + /// could hold math at all. Cheap when it cannot (one `$` scan). + fn refresh_math_suppression(&mut self) { + if self.math_engine.is_none() || self.terminal.is_some() { + return; + } + let (vstart, vend) = self.view_range; + let Some(slice) = self.current_text.get(vstart as usize..vend as usize) else { + return; + }; + if slice.as_bytes().contains(&b'$') { + self.refresh_changed_lines(); + } } /// Rebuild the shaped slice, reusing any retained line whose @@ -5129,30 +5408,52 @@ impl State { .into_iter() .map(Some) .collect(); + let mut old_math: Vec> = std::mem::take(&mut self.line_math_cache) + .into_iter() + .map(Some) + .collect(); let mut lines = Vec::with_capacity(ranges.len()); let mut cache = Vec::with_capacity(ranges.len()); + let mut math = Vec::with_capacity(ranges.len()); let mut any_reused = false; for (i, &(ls, ce)) in ranges.iter().enumerate() { let abs = new_top + i; let reused = abs.checked_sub(old_top).and_then(|j| { - if j < old_lines.len() && j < old_cache.len() { - old_lines[j].take().zip(old_cache[j].take()) + if j < old_lines.len() && j < old_cache.len() && j < old_math.len() { + // Reuse is sound only when suppression state is a + // third invariant beside content and styling + // (Q#MS5): a caret-follow scroll lands here with a + // caret that may have crossed a span boundary, and + // a retained line shaped under the opposite + // suppression state is the #120 stale-mirror + // failure (framing acceptance 11). + if !self.math_gates_match(ls, ce, old_math[j].as_ref()?) { + return None; + } + Some(( + old_lines[j].take()?, + old_cache[j].take()?, + old_math[j].take()?, + )) } else { None } }); - if let Some((line, chunks)) = reused { + if let Some((line, chunks, m)) = reused { any_reused = true; lines.push(line); cache.push(chunks); + math.push(m); } else { - let chunks = self.chunks_for_line(ls, ce); + let (chunks, m) = self.chunks_for_line(ls, ce); lines.push(line_from_chunks(&chunks, &self.resolved_family)); cache.push(chunks); + math.push(m); } } self.buffer.lines = lines; self.line_chunk_cache = cache; + self.line_math_cache = math; self.shaped_top = new_top; self.buffer .set_scroll(Scroll::new(0, self.code_scroll_residual, 0.0)); @@ -5183,6 +5484,7 @@ impl State { if (vstart, vend) != self.view_range || top != self.shaped_top || ranges.len() != self.line_chunk_cache.len() + || ranges.len() != self.line_math_cache.len() || ranges.len() != self.buffer.lines.len() { self.reshape(); @@ -5190,12 +5492,17 @@ impl State { } let mut any = false; for (i, &(ls, ce)) in ranges.iter().enumerate() { - let chunks = self.chunks_for_line(ls, ce); + let (chunks, m) = self.chunks_for_line(ls, ce); if chunks != self.line_chunk_cache[i] { self.buffer.lines[i] = line_from_chunks(&chunks, &self.resolved_family); self.line_chunk_cache[i] = chunks; any = true; } + // Always current, even when the chunks are unchanged: an + // unsuppressible span's gate bit can flip with no chunk + // difference, and a stale bit would defeat the reuse + // comparison later. + self.line_math_cache[i] = m; } if any { self.buffer.shape_until_scroll(&mut self.font_system, false); @@ -6147,13 +6454,16 @@ impl State { let (top, ranges) = self.slice_line_ranges(vstart, vend); let mut lines = Vec::with_capacity(ranges.len()); let mut cache = Vec::with_capacity(ranges.len()); + let mut math = Vec::with_capacity(ranges.len()); for &(ls, ce) in &ranges { - let chunks = self.chunks_for_line(ls, ce); + let (chunks, m) = self.chunks_for_line(ls, ce); lines.push(line_from_chunks(&chunks, &self.resolved_family)); cache.push(chunks); + math.push(m); } self.buffer.lines = lines; self.line_chunk_cache = cache; + self.line_math_cache = math; self.shaped_top = top; self.buffer .set_scroll(Scroll::new(0, self.code_scroll_residual, 0.0)); @@ -6416,6 +6726,9 @@ impl State { scale, advance_ratio, }; + // The Q#MS10 fit budget follows the code metrics; the reshape + // below rebuilds every line's math plan against it. + self.math_budget = math_code_budget(self.fm); // The default family already has an exact, pre-preference // geometry path: a shaped glyph when present, otherwise the // ratio-scaled baseline constant. Keep using it so resetting @@ -6675,6 +6988,16 @@ impl State { // status band and the popup layers above it stay, because they // are buffer-independent chrome the daemon still drives. let terminal_mode = self.terminal.is_some(); + // Inline-math ink (Q#MS6): glyph mini-buffers plus fraction-rule + // quads. The rules ride the bg quad batch AFTER the decoration + // washes, so a selection/search wash under a rendered box never + // paints over its fraction bar; the glyphs get their own layer + // in the code z-slot below. + let (math_buffers, math_rules) = if terminal_mode { + (Vec::new(), Vec::new()) + } else { + self.build_math_paint() + }; // The band's strip rides the bg quad batch so it draws under // the band text (text renders after the first quad draw). let mut bg_vertices = if terminal_mode { @@ -6682,6 +7005,11 @@ impl State { } else { self.decoration_background_vertex_bytes() }; + bg_vertices.extend(rects_to_vertex_bytes( + &math_rules, + self.config.width, + self.config.height, + )); bg_vertices.extend(self.status_band_vertex_bytes()); let bg_vertex_count = (bg_vertices.len() / QUAD_VERTEX_STRIDE as usize) as u32; let bg_buffer = self @@ -6867,6 +7195,37 @@ impl State { ) .expect("text_renderer prepare"); + // Inline-math glyph layer (Q#MS6): one TextArea per glyph, + // clipped by the same code-area bounds as the code layer. + let math_areas: Vec