Anmelden
DE
games/webrtc-demo / tools / fonts.py · commit 87ad512
#!/usr/bin/env python3"""Rebuilds assets/fonts/ja.ttf, zh.ttf, ko.ttf: Noto Sans JP / SC / KR (SIL OFL 1.1, Google Fonts) cut down to the characters ofconfig/lang.yaml in that language plus printable ASCII and a few signs, at weight 500. A few kilobytes each instead of 10-17 MB.  python3 -m pip install fonttools pyyaml        (once)  python3 tools/fonts.py <folder with NotoSansJP.ttf, NotoSansSC.ttf, NotoSansKR.ttf>The source fonts: https://github.com/google/fonts/tree/main/ofl (notosansjp, notosanssc, notosanskr: the [wght].ttf files, renamed)."""import os, sysimport yamlfrom fontTools.ttLib import TTFontfrom fontTools.varLib import instancerfrom fontTools import subsethere = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))src = sys.argv[1] if len(sys.argv) > 1 else '.'langs = yaml.safe_load(open(os.path.join(here, 'config/lang.yaml'), encoding='utf-8'))extra = ''.join(chr(c) for c in range(0x20, 0x7f)) + '–·…’'names = {'ja': '日本語', 'zh': '中文', 'ko': '한국어'}for lang, source in (('ja', 'NotoSansJP.ttf'), ('zh', 'NotoSansSC.ttf'), ('ko', 'NotoSansKR.ttf')):    text = extra + names[lang] + ''.join(langs.get(lang, {}).values())    font = TTFont(os.path.join(src, source))    if 'fvar' in font:        font = instancer.instantiateVariableFont(font, {'wght': 500})    options = subset.Options()    options.name_IDs = ['*']    options.layout_features = ['*']    options.notdef_outline = True    sub = subset.Subsetter(options)    sub.populate(text=text)    sub.subset(font)    out = os.path.join(here, 'assets/fonts', lang + '.ttf')    font.save(out)    print(out, os.path.getsize(out), 'bytes,', len(set(text)), 'characters')