Weft 0.2: code look-alikes, Latin Extended-A, combining marks, box drawing, hinting
Summary
machine-made Weft 0.2 (font version 0.200). Only the loom, tools and docs changed by hand. The fonts are rebuilt from them.
- Look-alikes for code. l (stem at x 3, longer tail), I (6-unit serifs), 1 (longer flag, wider base), 0 (longer slash), q (spur at the foot). The dotted zero is
ss01. The slashed zero stays the default: it gave fewer 0→O confusions than the dotted one, and both read the same overall. - wght 900. Accents above the base scale to 1.25 at Black, and the gap to the base grows with weight (0.95 units at Black). « » are two ‹ › components, and " “ ” „ two single quotes. They move apart at heavy weights. Offsets are piecewise linear between the master widths, so the variable font and the statics agree.
- Glyphs. All of Latin Extended-A, Ș ș Ț ț, ẞ, Ǿ ǿ, Ǎ ǎ Ǔ ǔ Ẽ ẽ. New marks: caron, vertical caron (ď ľ ť Ľ), breve, dot above, double acute, ogonek, comma below. 14 combining marks (U+0300 to U+0328) with no advance, a mark feature, GDEF, and ccmp for i/j. ‹ › ‚ „ − and the spacing accents. £ ¥ § ¶ ± × ÷ ¢ ½ ¼ ¾ were in 0.1 already.
- Code. Box drawing ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ with a new "butt" stroke kind (no caps): the lines end on the cell edges and join across cells and lines. Arrows ← → ↑ ↓. Every glyph keeps the 750 advance.
- Hinting. The static TTFs are hinted with ttfautohint (ttfautohint-py 0.6.1, pinned). The build stays byte-identical.
- Drift lock rebuilt with
tools/relock.py(now aware of the scaled accents). - Docs and site. CHANGELOG, RELEASE-NOTES-0.2.md, STATUS.md (deviations from the sketch, accepted WARNs). Site download links point to
releases/tag/weft-v0.2.0.
Checks
All run locally on this branch (weft.yml triggers only on pull requests and main, so there was no branch run).
-
pytest: 1749 passed.
-
Rebuild: byte-identical (hinted TTFs included); a fresh build leaves
fonts/weftunchanged. -
fonttools varLib.interpolatable: clean on the designspace, the 12 masters and the variable font. -
Fontspector 1.9.0 universal: 0 FAIL, 0 ERROR. VF 4 WARN, static TTF 31 WARN, static OTF 22 WARN, all in the accepted list in
weft/STATUS.md. -
OCR gate (Tesseract 5.3.4), look-alike CER (DejaVu Sans Mono 0.0875):
FRAG 0 FRAG 8 FRAG 15 Weft 0.1 0.121 0.128 0.122 Weft 0.2 0.071 0.079 0.078 Paragraph CER 0.0034 / 0.0011 / 0.0023 (DejaVu 0.0046). The gate now covers FRAG 8, q is in the look-alike set, and the look-alike margin is 0 (was 0.06).
-
shaperglot 1.2.2 (not in CI): all mandatory checks pass for the Central European, Baltic, Turkish and Romanian languages. Only the small-caps checks are skipped.
-
Site:
site/build.pypasses, the static checks pass, no external requests, no horizontal scroll at 360 px.
Review
Proofs to look at in proofs/weft/:
weft-before-after-lookalikes.png,weft-before-after-black.pngweft-lookalikes.png,weft-accents.png,weft-code.pngweft-charset.png,weft-designspace.png,weft-sketch-compare.png(coverage IoU 0.940)weft-weight-waterfall.png,weft-frag-waterfall.png,weft-body-text.png
Changed metrics: win ascent/descent go to 1250/403 (were 1167/339). The cause is the bigger accents at Black with FRAG 100 drift, and the comma below. The advance, typo/hhea (906/−281/0), x-height, cap height and axes do not change, so the tracking on machine-made.github.io stays valid. Its fonts.py would cut a 24.6 KB subset (was 23.7 KB).
Open: ½ ¼ ¾ still merge from Regular up, # merges at Black, and there are no small caps.
Generated by Claude Code