2
0
Files
font/aifont.py
2026-03-30 20:40:34 +09:00

75 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
import subprocess, sys, os
# download MesloLGS NF
meslo = "/tmp/MesloLGS NF Regular.ttf"
if not os.path.exists(meslo):
meslo_url = "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz"
subprocess.run(["curl", "-sL", "-o", "/tmp/Meslo.tar.xz", meslo_url], check=True)
subprocess.run(["tar", "xf", "/tmp/Meslo.tar.xz", "-C", "/tmp", "MesloLGSNerdFont-Regular.ttf"], check=True)
os.rename("/tmp/MesloLGSNerdFont-Regular.ttf", meslo)
# download SVG icons
base = "https://git.syui.ai/ai/app/raw/branch/main/icon"
for name in ["ai.svg", "syui.svg", "bluesky.svg"]:
subprocess.run(["curl", "-sL", "-o", f"/tmp/{name}", f"{base}/{name}"], check=True)
subprocess.run(["fontforge", "-script", "/dev/stdin"], input=b"""
import fontforge
icons = fontforge.font()
icons.em = 1024
scale = 200
glyph = icons.createChar(0xE001, "ai")
glyph.importOutlines("/tmp/ai.svg")
bb = glyph.boundingBox()
glyph.transform((scale/100.0, 0, 0, scale/100.0, 0, 0))
glyph.width = 1024
glyph = icons.createChar(0xE002, "syui")
glyph.importOutlines("/tmp/syui.svg")
glyph.transform((scale/100.0, 0, 0, scale/100.0, 0, 0))
glyph.width = 1024
glyph = icons.createChar(0xE003, "bluesky")
glyph.importOutlines("/tmp/bluesky.svg")
# center vertically: move to baseline
bb = glyph.boundingBox()
yshift = -bb[1] # move bottom to y=0
glyph.transform((1, 0, 0, 1, 0, yshift))
s = scale / 100.0
glyph.transform((s, 0, 0, s, 0, 0))
glyph.width = 1024
icons.generate("/tmp/icons.ttf")
icons.close()
font = fontforge.open("/tmp/MesloLGS NF Regular.ttf")
font.selection.select(0xE001)
font.clear()
font.selection.select(0xE002)
font.clear()
font.selection.select(0xE003)
font.clear()
font.selection.none()
font.mergeFonts("/tmp/icons.ttf")
font.fontname = "aifont"
font.familyname = "aifont"
font.fullname = "aifont"
font.appendSFNTName("English (US)", "Family", "aifont")
font.appendSFNTName("English (US)", "SubFamily", "Regular")
font.appendSFNTName("English (US)", "UniqueID", "aifont-regular")
font.appendSFNTName("English (US)", "Fullname", "aifont")
font.appendSFNTName("English (US)", "PostScriptName", "aifont")
font.appendSFNTName("English (US)", "Preferred Family", "aifont")
font.appendSFNTName("English (US)", "Preferred Styles", "Regular")
font.generate("/tmp/aifont.ttf")
font.close()
print("done: /tmp/aifont.ttf")
""", check=True)