JA
apps/caramail-chat / tools / fonts / make_cjk.py · commit 6eebcdb
"""assets/fonts/cjk.ttf for Japanese, Chinese and Korean: the Latin of Liberation Sans (assets/fonts/ui.ttf) first, thenDroid Sans Fallback's CJK (Apache 2.0). TtfFont draws with one file, so both alphabets must be in it.    python3 -I tools/fonts/make_cjk.py [/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf]"""import sysfrom pathlib import Pathfrom fontTools.ttLib import TTFontfrom fontTools.ttLib.scaleUpem import scale_upemfrom fontTools.merge import Merger, Optionsapp = Path(__file__).resolve().parents[2]droid_src = sys.argv[1] if len(sys.argv) > 1 else '/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf'tmp = Path('/tmp') if not len(sys.argv) > 2 else Path(sys.argv[2])latin = TTFont(app / 'assets/fonts/ui.ttf')droid = TTFont(droid_src)upem = droid['head'].unitsPerEmif latin['head'].unitsPerEm != upem:    scale_upem(latin, upem)for font in (latin, droid):    for tag in ('fpgm', 'prep', 'cvt ', 'hdmx', 'LTSH', 'VDMX', 'kern', 'GPOS', 'GSUB', 'GDEF', 'gasp', 'DSIG'):        if tag in font:            del font[tag]a, b = tmp / 'cjk-latin.ttf', tmp / 'cjk-droid.ttf'latin.save(a)droid.save(b)merged = Merger(options=Options(drop_tables=['vhea', 'vmtx'])).merge([str(a), str(b)])merged['name'].setName('CaraChat CJK', 1, 3, 1, 0x409)merged.save(app / 'assets/fonts/cjk.ttf')print('assets/fonts/cjk.ttf', (app / 'assets/fonts/cjk.ttf').stat().st_size)