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
2 files public/fonts/PeachScript-Regular.otfbinaryscripts/build-peachscript.py+112 −0
public/fonts/PeachScript-Regular.otfbinary

binary file, not shown

view file

scripts/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 

view file