29b9d815a1df
replace 15 weak layer-4 glyphs with stronger runic forms per tuning brief
- time
- 2026-04-27 20:45 UTC · 6 months ago
- machine
- koh2
- parent
- f3478eae923b
↓ peach-browser-29b9d815.tar.gzatlas at this save
files changed2 files
public/fonts/PeachScript-Regular.otfbinaryscripts/build-peachscript.py+112 −0scripts/build-peachscript.py+112 −0
@@ -814,6 +814,118 @@814814 815815 816816 # ---------------------------------------------------------------------------817+# Tuning overrides — replace specific weak glyphs with stronger forms.818+#819+# These overrides come from peachscript_tuning_brief.md. Each entry820+# replaces a final-index glyph (post-layer-assembly position) with a821+# hand-tuned stroke set. Reasons range from broken-rendering risk822+# (curved fallback at 214), accidental duplicates (240 = Isa), and823+# forms too sparse to read at 11–18px display.824+# ---------------------------------------------------------------------------825+826+OVERRIDES: dict[int, list[Stroke]] = {827+ # 187 — short-twig Yr : stave + small downward fork high828+ 187: [829+ (C, B, C, T),830+ (C, T * 2 // 3, L + (R - L) // 3, T // 3),831+ (C, T * 2 // 3, L + (R - L) * 2 // 3, T // 3),832+ ],833+ # 188 — short-twig As : stave with one upward-right and one downward-right branch.834+ # The brief's pseudocode collapses the branch endpoints onto the stave;835+ # interpreting the descriptive text instead.836+ 188: [837+ (C, B, C, T),838+ (C, T * 3 // 4, R - 60, T),839+ (C, T // 4, R - 60, B),840+ ],841+ # 192 — mirrored Laguz : stave + diagonal foot pointing down-left + mid crossbar842+ 192: [843+ (C, B, C, T),844+ (C, B, L, T // 3),845+ (L, M, L + (R - L) // 2, M),846+ ],847+ # 205 — Hälsinge Hagalaz : tilted X, no stave848+ 205: [849+ (L, T // 4, R, T * 3 // 4),850+ (L, T * 3 // 4, R, T // 4),851+ ],852+ # 206 — Hälsinge Naudiz : long diagonal + offset short diagonal853+ 206: [854+ (L, B, R, T),855+ (L + (R - L) // 3, T, R, T // 4),856+ ],857+ # 207 — Hälsinge Tiwaz : open chevron, no stave858+ 207: [859+ (L, T // 3, C, T),860+ (C, T, R, T // 3),861+ ],862+ # 213 — Hälsinge Kenaz pair : > opening left at top + vertical connector863+ 213: [864+ (L, T // 4, L + (R - L) * 2 // 3, T // 2),865+ (L + (R - L) * 2 // 3, T // 2, L, T * 3 // 4),866+ (L + (R - L) * 2 // 3, T // 4, L + (R - L) * 2 // 3, T * 3 // 4),867+ ],868+ # 214 — Dagaz horizontal bowtie : two triangles meeting at center869+ 214: [870+ (L, B, C, M),871+ (C, M, R, B),872+ (L, T, C, M),873+ (C, M, R, T),874+ ],875+ # 225 — Armanen Man variant : two outer staves + downward V from top corners + cross876+ 225: [877+ (L, B, L, T),878+ (R, B, R, T),879+ (L, T, C, M),880+ (C, M, R, T),881+ (L, T, R, M),882+ ],883+ # 226 — compressed Naudiz : stave + two short branches angled in at mid884+ 226: [885+ (C, B, C, T),886+ (C, M + 20, C - (R - L) // 3, M - 20),887+ (C, M + 20, C + (R - L) // 3, M - 20),888+ ],889+ # 228 — Dalecarlian Beorc : stave + horizontal at mid + two diagonals back to stave890+ 228: [891+ (C, B, C, T),892+ (C, M, C + (R - L) // 2, M),893+ (C + (R - L) // 2, M, C, T // 4),894+ (C + (R - L) // 2, M, C, T * 3 // 4),895+ ],896+ # 230 — Franks Casket vowel cryptogram : stave + two short horizontals near top/bottom897+ 230: [898+ (C, B, C, T),899+ (C, T // 6, C + (R - L) // 3, T // 6),900+ (C, T * 5 // 6, C + (R - L) // 3, T * 5 // 6),901+ ],902+ # 231 — Hälsinge Jera : two near-parallel diagonals with deliberate gap903+ 231: [904+ (L, T * 3 // 4, R, T // 4),905+ (L, T // 4 + 30, R, T * 3 // 4 - 30),906+ ],907+ # 240 — Armanen Gibor : horizontal mid + two outward-opening K shapes908+ 240: [909+ (L, M, R, M),910+ (L, M, L + (R - L) // 3, B),911+ (L, M, L + (R - L) // 3, T),912+ (R, M, L + (R - L) * 2 // 3, B),913+ (R, M, L + (R - L) * 2 // 3, T),914+ ],915+ # 241 — crossed Isa : two parallel verticals + X916+ 241: [917+ (L + (R - L) // 3, B, L + (R - L) // 3, T),918+ (L + (R - L) * 2 // 3, B, L + (R - L) * 2 // 3, T),919+ (L, T // 3, R, T * 2 // 3),920+ (L, T * 2 // 3, R, T // 3),921+ ],922+}923+924+for _idx, _strokes in OVERRIDES.items():925+ ALL_GLYPHS[_idx] = _strokes926+927+928+# ---------------------------------------------------------------------------817929 # Build the OTF818930 # ---------------------------------------------------------------------------819931