Skip to main content

max / shop

Re-take the two measurements that were about the old bundled face Both were stated as measured facts about IosevkaTerm and went stale with the swap, which is what the task asked for rather than an edit that keeps the sentence and changes the name. `.notdef` is a filled cell with four triangular counters in Quasi Mono, 102..530 by 0..700 units, where it was a hollow box in IosevkaTerm. It is the base's own drawing either way: the pipeline patches gaps and does not replace what a base draws. The precomposed-glyph case holds. Quasi Mono maps U+00E9 to a glyph of its own, so a shaper that composes `e` + acute into one glyph still has nothing after the base to place, and the comment's third case is still reachable.
Author: Max Johnson <me@maxj.phd> · 2026-08-17 15:40 UTC
Signed with PGP, not checked
Commit: 21aa2f735d5b57b16b0f44a349f7d294b30f62e1
Parent: 584d119
4 files changed, +40 insertions, -23 deletions
M Cargo.lock +20 -20
@@ -2383,12 +2383,24 @@
2383 2383 ]
2384 2384
2385 2385 [[patch.unused]]
2386 - name = "synckit-client"
2387 - version = "0.8.0"
2386 + name = "kberg"
2387 + version = "0.1.0"
2388 2388
2389 2389 [[patch.unused]]
2390 - name = "synckit-config"
2391 - version = "0.2.0"
2390 + name = "ops-status"
2391 + version = "0.1.0"
2392 +
2393 + [[patch.unused]]
2394 + name = "painhours"
2395 + version = "0.1.0"
2396 +
2397 + [[patch.unused]]
2398 + name = "tagtree"
2399 + version = "0.4.0"
2400 +
2401 + [[patch.unused]]
2402 + name = "docengine"
2403 + version = "0.7.0"
2392 2404
2393 2405 [[patch.unused]]
2394 2406 name = "quasi-axum"
@@ -2423,21 +2435,9 @@
2423 2435 version = "0.18.0"
2424 2436
2425 2437 [[patch.unused]]
2426 - name = "docengine"
2427 - version = "0.7.0"
2438 + name = "synckit-client"
2439 + version = "0.8.0"
2428 2440
2429 2441 [[patch.unused]]
2430 - name = "kberg"
2431 - version = "0.1.0"
2432 -
2433 - [[patch.unused]]
2434 - name = "ops-status"
2435 - version = "0.1.0"
2436 -
2437 - [[patch.unused]]
2438 - name = "painhours"
2439 - version = "0.1.0"
2440 -
2441 - [[patch.unused]]
2442 - name = "tagtree"
2443 - version = "0.4.0"
2442 + name = "synckit-config"
2443 + version = "0.2.0"
@@ -18,4 +18,16 @@
18 18 # The house font pipeline. A git dependency rather than a vendored binary: the
19 19 # face rebuilds from a checkout, which is the rule that keeps the glyph set and
20 20 # the face from becoming two sources of truth.
21 - quasi-type = { git = "https://makenot.work/git/max/quasi-type.git", version = "0.1" }
21 + #
22 + # PINNED BY REVISION, which nothing else in the tree does and which this one
23 + # needs. A git dep here decides what a shipped binary *draws*, and Alloy asserts
24 + # that the face shop bundles is the face the image installs — its Containerfile
25 + # cuts the same two faces from a `QUASI_TYPE_REV` of its own. Resolving this at
26 + # branch head would let one image ship a terminal drawing an older glyph set
27 + # than everything around it, and nothing would say so.
28 + #
29 + # Under `~/Code/.cargo/config.toml`'s `[patch]` the working copy wins and this
30 + # rev is ignored, which is the point of that block; off the tree it is what a
31 + # build resolves. Bump it in the same pass as a glyph-set change, alongside
32 + # Alloy's `QUASI_TYPE_REV`.
33 + quasi-type = { git = "https://makenot.work/git/max/quasi-type.git", version = "0.1", rev = "6d076b7f85268381f6cd34dd0d28e84c574929cc" }
@@ -431,7 +431,8 @@
431 431 //
432 432 // The two other shapes this can take are handled by the
433 433 // same line: where the shaper composes the pair into one
434 - // precomposed glyph (both faces do for e + acute) there is
434 + // precomposed glyph (Quasi Mono maps U+00E9 to a glyph of
435 + // its own, measured 2026-08-17, as IosevkaTerm did) there is
435 436 // nothing after the base to place, and where a font
436 437 // positions marks by GPOS the mark's advance is zero and
437 438 // its offsets do the work.
@@ -161,7 +161,11 @@
161 161 /// Char → the font that has it and its glyph id there.
162 162 ///
163 163 /// Falls back to `(PRIMARY, 0)` when nothing has it, which draws whatever
164 - /// the bundled font puts at `.notdef` — a hollow box in most faces. The
164 + /// the bundled font puts at `.notdef`. Measured on Quasi Mono 2026-08-17:
165 + /// a filled cell with four triangular counters, 102..530 by 0..700 units —
166 + /// the base's own drawing, not the house set's, since the pipeline patches
167 + /// gaps rather than replacing what a base draws. It was a hollow box under
168 + /// IosevkaTerm. Either reads as "this is not a character". The
165 169 /// cell still holds its columns either way, so a missing glyph costs the
166 170 /// look of the line and never its layout.
167 171 pub(crate) fn glyph_id_for(&mut self, c: char) -> (FontId, GlyphId) {