feat(fonts): per-OS font model and fontconfig parity

fonts.json is now generated from the bundle by scripts/gen-fonts-json.py
(fc-scan + aliases + scan-time families, intersected with the per-OS manifest in
scripts/data/font-manifests.json) so every reportable family is renderable;
scripts/verify-fonts.py checks that invariant, the generics and the reject
globs. font-groups.json lets the draw keep co-shipped families together.

Linux fontconfig: stock metric aliases (Arial -> Liberation Sans, ...),
49-sansserif, urw-base35 and the non-Latin rule files in stock conf.d order,
generics resolving like a stock Ubuntu (Noto Sans / Noto Serif / DejaVu Sans
Mono / Z003), hintslight so advances are not pinned to whole pixels, and weak
<prefer> lists instead of strongly-bound generic pins so lang can promote a
script face. Windows fontconfig: GDI substitution aliases, MS Shell Dlg 2,
cursive/fantasy generics, duplicate-face rejects and Sitka / Segoe UI Variable
optical-size families.

NOTE: generated against a ~3.9 GB target font bundle that is not part of this
change (one file is over GitHub's 100 MB limit); see docs/FONTS.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jake Writer
2026-09-16 22:08:33 -06:00
co-authored by Claude Opus 5
parent 52c02c5677
commit 312ec689bf
8 changed files with 6400 additions and 19 deletions
+325
View File
@@ -0,0 +1,325 @@
{
"win": [
{
"id": "office",
"fonts": [
"Bodoni MT Condensed",
"Stencil",
"Perpetua Titling MT",
"Haettenschweiler",
"Matura MT Script Capitals",
"Elephant",
"Gill Sans MT Ext Condensed Bold",
"Palace Script MT",
"Modern No. 20",
"Perpetua",
"Wide Latin",
"Kunstler Script",
"Rockwell Extra Bold",
"Bell MT",
"Harrington",
"Vivaldi",
"Gill Sans Ultra Bold",
"Bookshelf Symbol 7",
"Rage Italic",
"Agency FB",
"Eras Bold ITC",
"Old English Text MT",
"Broadway",
"Copperplate Gothic Light",
"Snap ITC",
"Forte",
"Gigi",
"Rockwell Condensed",
"Colonna MT",
"Bauhaus 93",
"Poor Richard",
"Gill Sans MT",
"Centaur",
"MS Reference Specialty",
"Imprint MT Shadow",
"Copperplate Gothic Bold",
"Playbill",
"Harlow Solid Italic",
"Footlight MT Light",
"Viner Hand ITC",
"Bradley Hand ITC",
"Calisto MT",
"Eras Light ITC",
"Parchment",
"Bodoni MT Black",
"Engravers MT",
"Mistral",
"Goudy Stout",
"Pristina",
"Brush Script MT",
"High Tower Text",
"Niagara Solid",
"Ravie",
"Gill Sans MT Condensed",
"Informal Roman",
"Algerian",
"Maiandra GD",
"Tw Cen MT Condensed",
"Edwardian Script ITC",
"Britannic Bold",
"OCR A Extended",
"Bodoni MT Poster Compressed",
"Tempus Sans ITC",
"Eras Demi ITC",
"Jokerman",
"Niagara Engraved",
"Magneto",
"French Script MT",
"Tw Cen MT",
"Berlin Sans FB Demi",
"Tw Cen MT Condensed Extra Bold",
"Castellar",
"Script MT Bold",
"Freestyle Script",
"Blackadder ITC",
"Gloucester MT Extra Condensed",
"Bernard MT Condensed",
"Curlz MT",
"Felix Titling",
"Baskerville Old Face",
"Vladimir Script",
"Rockwell",
"Onyx",
"Kristen ITC",
"Bodoni MT",
"Cooper Black",
"Eras Medium ITC",
"Californian FB",
"Goudy Old Style",
"Gill Sans Ultra Bold Condensed",
"Papyrus",
"Chiller",
"Showcard Gothic",
"Juice ITC",
"Berlin Sans FB",
"MT Extra",
"Book Antiqua",
"Bookman Old Style",
"Century",
"Century Gothic",
"Century Schoolbook",
"Dubai",
"Franklin Gothic Book",
"Franklin Gothic Demi",
"Franklin Gothic Demi Cond",
"Franklin Gothic Heavy",
"Garamond",
"Lucida Bright",
"Lucida Calligraphy",
"Lucida Fax",
"Lucida Handwriting",
"Lucida Sans Typewriter",
"Monotype Corsiva",
"MS Outlook",
"MS Reference Sans Serif"
]
},
{
"id": "pan-euro",
"fonts": [
"Arial Nova",
"Georgia Pro",
"Gill Sans Nova",
"Neue Haas Grotesk Text Pro",
"Rockwell Nova",
"Verdana Pro"
]
},
{
"id": "libreoffice",
"fonts": [
"Caladea",
"Carlito",
"Liberation Sans",
"Liberation Serif",
"Liberation Mono",
"Liberation Sans Narrow",
"DejaVu Sans",
"DejaVu Serif",
"DejaVu Sans Mono",
"DejaVu Sans Condensed",
"DejaVu Serif Condensed",
"DejaVu Sans Light",
"DejaVu Math TeX Gyre",
"Source Sans 3",
"Source Serif 4",
"Source Code Pro",
"Noto Sans",
"Noto Serif",
"Noto Mono",
"Noto Sans Arabic",
"Noto Naskh Arabic",
"Noto Kufi Arabic",
"Noto Sans Hebrew",
"Noto Serif Hebrew",
"Noto Sans Armenian",
"Noto Serif Armenian",
"Noto Sans Georgian",
"Noto Serif Georgian",
"Noto Sans Lao",
"Noto Serif Lao",
"Noto Sans Lisu",
"Gentium Basic",
"Gentium Book Basic",
"Amiri",
"Amiri Quran",
"Scheherazade",
"Reem Kufi",
"David Libre",
"Alef",
"OpenSymbol",
"Rubik"
]
},
{
"id": "adobe-cc",
"fonts": [
"Minion Pro",
"Myriad Pro",
"Adobe Arabic",
"Adobe Hebrew",
"Adobe Devanagari",
"Adobe Thai"
]
},
{
"id": "cascadia",
"fonts": [
"Cascadia Code",
"Cascadia Mono"
]
},
{
"id": "meslo",
"fonts": [
"Meslo LG S",
"Meslo LG M",
"Meslo LG L"
]
}
],
"mac": [
{
"id": "adobe-cc",
"fonts": [
"Minion Pro",
"Myriad Pro",
"Adobe Arabic",
"Adobe Hebrew",
"Adobe Devanagari",
"Adobe Thai",
"Kozuka Gothic Pr6N",
"Kozuka Mincho Pr6N",
"Adobe Ming Std",
"Adobe Song Std",
"Adobe Heiti Std",
"Adobe Fan Heiti Std",
"Adobe Gothic Std",
"Adobe Myungjo Std"
]
},
{
"id": "meslo",
"fonts": [
"Meslo LG S",
"Meslo LG M",
"Meslo LG L"
]
}
],
"lin": [
{
"id": "libreoffice",
"fonts": [
"Caladea",
"Carlito",
"Liberation Sans",
"Liberation Serif",
"Liberation Mono",
"Liberation Sans Narrow",
"DejaVu Sans",
"DejaVu Serif",
"DejaVu Sans Mono",
"DejaVu Sans Condensed",
"DejaVu Serif Condensed",
"DejaVu Sans Light",
"DejaVu Math TeX Gyre",
"Source Sans 3",
"Source Serif 4",
"Source Code Pro",
"Noto Sans",
"Noto Serif",
"Noto Mono",
"Noto Sans Arabic",
"Noto Naskh Arabic",
"Noto Kufi Arabic",
"Noto Sans Hebrew",
"Noto Serif Hebrew",
"Noto Sans Armenian",
"Noto Serif Armenian",
"Noto Sans Georgian",
"Noto Serif Georgian",
"Noto Sans Lao",
"Noto Serif Lao",
"Noto Sans Lisu",
"Gentium Basic",
"Gentium Book Basic",
"Amiri",
"Amiri Quran",
"Scheherazade",
"Reem Kufi",
"David Libre",
"Alef",
"OpenSymbol",
"Rubik"
]
},
{
"id": "distro-i18n",
"fonts": [
"KacstBook",
"KacstOffice",
"Frank Ruehl CLM",
"Miriam CLM",
"Miriam Mono CLM",
"David CLM",
"Linux Libertine O",
"Linux Biolinum O",
"Linux Libertine Display O"
]
},
{
"id": "adobe-cc",
"fonts": [
"Minion Pro",
"Myriad Pro",
"Adobe Arabic",
"Adobe Hebrew",
"Adobe Devanagari",
"Adobe Thai",
"Kozuka Gothic Pr6N",
"Kozuka Mincho Pr6N",
"Adobe Ming Std",
"Adobe Song Std",
"Adobe Heiti Std",
"Adobe Fan Heiti Std",
"Adobe Gothic Std",
"Adobe Myungjo Std"
]
},
{
"id": "meslo",
"fonts": [
"Meslo LG S",
"Meslo LG M",
"Meslo LG L"
]
}
]
}
File diff suppressed because one or more lines are too long