Files
Myna/build.py
2025-12-24 19:23:57 +05:30

50 lines
1.3 KiB
Python

import fontforge
import math
import psMat
def mkFont(name, weight):
font = fontforge.open(name + ".sfd")
font.mergeFeature("features.fea")
font.generate("./fonts/" + name + ".otf")
font.generate("./fonts/" + name + ".ttf")
font.selection.all()
angle = 12
font.transform(psMat.skew(angle * math.pi / 180))
font.familyname = "Myna"
font.weight = weight
font.italicangle = -angle
if weight == "Bold":
subfamily = "Bold Italic"
# 0x01 (Italic) + 0x20 (Bold) = 0x21
font.os2_stylemap = 0x21
full_name = "Myna Bold Oblique"
else:
subfamily = "Italic"
font.os2_stylemap = 0x01
full_name = "Myna Regular Oblique"
font.fullname = full_name
font.fontname = full_name.replace(" ", "")
# This is the critical part for app recognition:
font.appendSFNTName("English (US)", "SubFamily", subfamily)
# Preferred Style
# font.appendSFNTName("English (US)", "Preferred Style", weight + " Oblique")
# 7th is Letterform where 9 = Oblique and 2 = Italic
panoseL = list(font.os2_panose)
panoseL[7] = 9
font.os2_panose = tuple(panoseL)
font.generate("./fonts/" + name + "Oblique.otf")
font.generate("./fonts/" + name + "Oblique.ttf")
font.close()
mkFont("Myna-Regular", "Regular")
mkFont("Myna-Bold", "Bold")