From 62a3ab0d6619ba0eb40fb224b7238752e45edaa4 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Sat, 2 May 2026 23:11:22 +0200 Subject: [PATCH] Add SD card font families and styles Updated SD card font families configuration with detailed descriptions and styles for various fonts. --- assets/sd-fonts/sd-fonts.yaml | 294 +++++++++++++++++++++++++++++++++- 1 file changed, 293 insertions(+), 1 deletion(-) diff --git a/assets/sd-fonts/sd-fonts.yaml b/assets/sd-fonts/sd-fonts.yaml index fc0626f9..36b39c31 120000 --- a/assets/sd-fonts/sd-fonts.yaml +++ b/assets/sd-fonts/sd-fonts.yaml @@ -1 +1,293 @@ -../../lib/EpdFont/scripts/sd-fonts.yaml +# SD Card Font Families for CrossPoint++ Reader +# +# This file is the single source of truth for which fonts are generated, +# how they're sourced, and how they're described in the download manifest. +# +# Adding a new font family = adding a block here. No code changes needed. +# +# Fields: +# name: Output family name (used in filenames and on-device UI) +# description: Human-readable description (shown in download UI and manifest) +# intervals: Comma-separated Unicode interval presets for fontconvert_sdcard.py +# sizes: Point sizes to generate +# force_autohint: (optional) Force FreeType auto-hinter instead of native hinting +# styles: Map of style name -> font source +# path: relative to lib/EpdFont (for committed fonts) +# url: download URL (for fonts not in the repo) +# +# Variable fonts: +# Some fonts (Bitter, Inter, Alegreya) are distributed as variable fonts. +# freetype-py can't set variable font axis values, so the build script +# uses fonttools.instancer to extract static instances automatically. +# +# To use a variable font, add a 'variable' key to the style spec with +# axis values to pin: +# +# styles: +# regular: {url: "https://...Font[wght].ttf", variable: {wght: 400}} +# bold: {url: "https://...Font[wght].ttf", variable: {wght: 700}} +# +# Extracted static fonts are cached in instanced_fonts/ (gitignored). +# Requires fonttools: pip install -r requirements.txt + +families: + # ── Serif ────────────────────────────────────────────────────────────── + + - name: Literata + description: "Screen-optimized serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/googlefonts/literata/main/fonts/ttf/Literata-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/googlefonts/literata/main/fonts/ttf/Literata-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/googlefonts/literata/main/fonts/ttf/Literata-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/googlefonts/literata/main/fonts/ttf/Literata-BoldItalic.ttf"} + + - name: SourceSerif4 + description: "Adobe transitional serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/adobe-fonts/source-serif/release/TTF/SourceSerif4-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/adobe-fonts/source-serif/release/TTF/SourceSerif4-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-serif/release/TTF/SourceSerif4-It.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-serif/release/TTF/SourceSerif4-BoldIt.ttf"} + + - name: NotoSerifExtended + description: "Serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/notofonts/NotoSerif/main/fonts/ttf/unhinted/instance_ttf/NotoSerif-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/notofonts/NotoSerif/main/fonts/ttf/unhinted/instance_ttf/NotoSerif-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/notofonts/NotoSerif-Italic/main/fonts/ttf/unhinted/instance_ttf/NotoSerif-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/notofonts/NotoSerif-Italic/main/fonts/ttf/unhinted/instance_ttf/NotoSerif-BoldItalic.ttf"} + + - name: Merriweather + description: "Warm serif for long-form reading (Latin, Cyrillic)" + intervals: latin-ext,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/SorkinType/Merriweather/master/fonts/ttf/Merriweather-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/SorkinType/Merriweather/master/fonts/ttf/Merriweather-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/SorkinType/Merriweather/master/fonts/ttf/Merriweather-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/SorkinType/Merriweather/master/fonts/ttf/Merriweather-BoldItalic.ttf"} + + - name: Lora + description: "Calligraphic serif for literary reading (Latin, Cyrillic)" + intervals: latin-ext,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/cyrealtype/Lora-Cyrillic/main/fonts/ttf/Lora-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/cyrealtype/Lora-Cyrillic/main/fonts/ttf/Lora-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/cyrealtype/Lora-Cyrillic/main/fonts/ttf/Lora-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/cyrealtype/Lora-Cyrillic/main/fonts/ttf/Lora-BoldItalic.ttf"} + + - name: Gelasio + description: "Readable old-style serif (Latin, Cyrillic)" + intervals: latin-ext,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gelasio/Gelasio%5Bwght%5D.ttf", variable: {wght: 400}} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gelasio/Gelasio%5Bwght%5D.ttf", variable: {wght: 700}} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gelasio/Gelasio-Italic%5Bwght%5D.ttf", variable: {wght: 400}} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gelasio/Gelasio-Italic%5Bwght%5D.ttf", variable: {wght: 700}} + + - name: GentiumBookPlus + description: "Scholarly serif with wide Unicode coverage (Latin, Greek, Cyrillic, IPA)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gentiumbookplus/GentiumBookPlus-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gentiumbookplus/GentiumBookPlus-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gentiumbookplus/GentiumBookPlus-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/gentiumbookplus/GentiumBookPlus-BoldItalic.ttf"} + + - name: IBMPlexSerif + description: "Professional serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexserif/IBMPlexSerif-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexserif/IBMPlexSerif-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexserif/IBMPlexSerif-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexserif/IBMPlexSerif-BoldItalic.ttf"} + + - name: Bitter + description: "Slab serif designed for e-ink (Latin, Cyrillic)" + intervals: latin-ext,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/bitter/Bitter%5Bwght%5D.ttf", variable: {wght: 400}} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/bitter/Bitter%5Bwght%5D.ttf", variable: {wght: 700}} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/bitter/Bitter-Italic%5Bwght%5D.ttf", variable: {wght: 400}} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/bitter/Bitter-Italic%5Bwght%5D.ttf", variable: {wght: 700}} + + # ── Sans-serif ───────────────────────────────────────────────────────── + + - name: NotoSansExtended + description: "Sans-serif (Latin, Greek, Cyrillic, Georgian, Armenian, Ethiopic)" + intervals: latin-ext,greek,cyrillic,georgian,armenian,ethiopic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {path: "builtinFonts/source/NotoSans/NotoSans-Regular.ttf"} + bold: {path: "builtinFonts/source/NotoSans/NotoSans-Bold.ttf"} + italic: {path: "builtinFonts/source/NotoSans/NotoSans-Italic.ttf"} + bolditalic: {path: "builtinFonts/source/NotoSans/NotoSans-BoldItalic.ttf"} + + - name: Inter + description: "Modern sans-serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/inter/Inter%5Bopsz%2Cwght%5D.ttf", variable: {wght: 400, opsz: 14}} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/inter/Inter%5Bopsz%2Cwght%5D.ttf", variable: {wght: 700, opsz: 14}} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/inter/Inter-Italic%5Bopsz%2Cwght%5D.ttf", variable: {wght: 400, opsz: 14}} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/inter/Inter-Italic%5Bopsz%2Cwght%5D.ttf", variable: {wght: 700, opsz: 14}} + + - name: SourceSans3 + description: "Adobe humanist sans-serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/adobe-fonts/source-sans/release/TTF/SourceSans3-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/adobe-fonts/source-sans/release/TTF/SourceSans3-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-sans/release/TTF/SourceSans3-It.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-sans/release/TTF/SourceSans3-BoldIt.ttf"} + + - name: IBMPlexSans + description: "IBM corporate sans-serif (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/IBM/plex/master/packages/plex-sans/fonts/complete/ttf/IBMPlexSans-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/IBM/plex/master/packages/plex-sans/fonts/complete/ttf/IBMPlexSans-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/IBM/plex/master/packages/plex-sans/fonts/complete/ttf/IBMPlexSans-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/IBM/plex/master/packages/plex-sans/fonts/complete/ttf/IBMPlexSans-BoldItalic.ttf"} + + - name: Alegreya + description: "Calligraphic serif/display (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/alegreya/Alegreya%5Bwght%5D.ttf", variable: {wght: 400}} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/alegreya/Alegreya%5Bwght%5D.ttf", variable: {wght: 700}} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/alegreya/Alegreya-Italic%5Bwght%5D.ttf", variable: {wght: 400}} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/alegreya/Alegreya-Italic%5Bwght%5D.ttf", variable: {wght: 700}} + + # ── Monospace ────────────────────────────────────────────────────────── + + - name: IBMPlexMono + description: "Monospace for code and technical reading (Latin, Greek, Cyrillic)" + intervals: latin-ext,greek,cyrillic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexmono/IBMPlexMono-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexmono/IBMPlexMono-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexmono/IBMPlexMono-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/ibmplexmono/IBMPlexMono-BoldItalic.ttf"} + + - name: SourceCodePro + description: "Adobe monospace with excellent hinting (Latin)" + intervals: latin-ext + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/adobe-fonts/source-code-pro/release/TTF/SourceCodePro-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/adobe-fonts/source-code-pro/release/TTF/SourceCodePro-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-code-pro/release/TTF/SourceCodePro-It.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/adobe-fonts/source-code-pro/release/TTF/SourceCodePro-BoldIt.ttf"} + + # ── Accessibility ────────────────────────────────────────────────────── + + - name: AtkinsonHyperlegibleNext + description: "Accessibility font for low vision (Latin)" + intervals: latin-ext + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/main/fonts/ttf/AtkinsonHyperlegibleNext-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/main/fonts/ttf/AtkinsonHyperlegibleNext-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/main/fonts/ttf/AtkinsonHyperlegibleNext-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/main/fonts/ttf/AtkinsonHyperlegibleNext-BoldItalic.ttf"} + + - name: LexicaUltralegible + description: "Accessibility font for low vision / dyslexia (Latin)" + intervals: latin-ext + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/jacobxperez/lexica-ultralegible/main/fonts/ttf/LexicaUltralegible-Regular.ttf"} + bold: {url: "https://raw.githubusercontent.com/jacobxperez/lexica-ultralegible/main/fonts/ttf/LexicaUltralegible-Bold.ttf"} + italic: {url: "https://raw.githubusercontent.com/jacobxperez/lexica-ultralegible/main/fonts/ttf/LexicaUltralegible-Italic.ttf"} + bolditalic: {url: "https://raw.githubusercontent.com/jacobxperez/lexica-ultralegible/main/fonts/ttf/LexicaUltralegible-BoldItalic.ttf"} + + # OpenDyslexic was previously baked into the firmware. It is now distributed + # as an SD-card font so users who don't need it don't pay the ~3MB flash cost. + # Sizes 8/10 retained for backward compatibility with the previous built-in mapping. + - name: OpenDyslexic + description: "Dyslexia-friendly font (Latin, Latin-Extended)" + intervals: latin-ext + sizes: [8, 10, 12, 14, 16] + styles: + regular: {path: "builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf"} + bold: {path: "builtinFonts/source/OpenDyslexic/OpenDyslexic-Bold.otf"} + italic: {path: "builtinFonts/source/OpenDyslexic/OpenDyslexic-Italic.otf"} + bolditalic: {path: "builtinFonts/source/OpenDyslexic/OpenDyslexic-BoldItalic.otf"} + + # ── CJK & Hangul ────────────────────────────────────────────────────── + + - name: NotoSansCJK + description: "Sans-serif (Chinese, Japanese, Korean)" + intervals: ascii,latin1,punctuation,cjk + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://github.com/notofonts/noto-cjk/raw/main/Sans/OTF/SimplifiedChinese/NotoSansCJKsc-Regular.otf"} + + - name: NotoSerifCJK + description: "Serif (Chinese, Japanese, Korean)" + intervals: ascii,latin1,punctuation,cjk + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://github.com/notofonts/noto-cjk/raw/main/Serif/OTF/SimplifiedChinese/NotoSerifCJKsc-Regular.otf"} + + - name: NotoSansHangul + description: "Sans-serif (Korean Hangul)" + intervals: ascii,latin1,punctuation,hangul + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://github.com/notofonts/noto-cjk/raw/main/Sans/OTF/Korean/NotoSansCJKkr-Regular.otf"} + + # ── Additional scripts (no complex shaping needed) ───────────────────── + + - name: NotoSansArmenian + description: "Armenian script" + intervals: armenian + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/notosansarmenian/NotoSansArmenian%5Bwdth%2Cwght%5D.ttf", variable: {wght: 400, wdth: 100}} + + - name: NotoSansGeorgian + description: "Georgian script" + intervals: georgian + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/notosansgeorgian/NotoSansGeorgian%5Bwdth%2Cwght%5D.ttf", variable: {wght: 400, wdth: 100}} + + - name: NotoSansEthiopic + description: "Ethiopic/Ge'ez script" + intervals: ethiopic + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/notosansethiopic/NotoSansEthiopic%5Bwdth%2Cwght%5D.ttf", variable: {wght: 400, wdth: 100}} + + - name: NotoSansCherokee + description: "Cherokee syllabary" + intervals: cherokee + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/notosanscherokee/NotoSansCherokee%5Bwght%5D.ttf", variable: {wght: 400}} + + - name: NotoSansTifinagh + description: "Tifinagh script" + intervals: tifinagh + sizes: [10, 12, 14, 16, 18] + styles: + regular: {url: "https://raw.githubusercontent.com/google/fonts/main/ofl/notosanstifinagh/NotoSansTifinagh-Regular.ttf"}