70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
|
import os
|
||
|
import sys
|
||
|
import tempfile
|
||
|
import json
|
||
|
import fontforge
|
||
|
|
||
|
# Need to change working directory in case we run via AppImage
|
||
|
os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '..'))
|
||
|
|
||
|
autowidth = False
|
||
|
font_em = 512
|
||
|
font_design_size = 16
|
||
|
jsonfile = os.environ['JSON_FILE']
|
||
|
fontname = os.environ['FONT_NAME']
|
||
|
outputdir = os.environ['OUTPUT_DIR']
|
||
|
vectorsdir = 'vectors'
|
||
|
start_codepoint = int(os.environ['START_CODEPOINT'], base=0)
|
||
|
design_px = font_em // font_design_size
|
||
|
outjsonfile = os.path.join(outputdir, fontname+'.out.json')
|
||
|
font = fontforge.font()
|
||
|
# font.encoding = 'UnicodeFull'
|
||
|
font.fontname = fontname
|
||
|
font.familyname = fontname
|
||
|
font.fullname = fontname
|
||
|
font.design_size = font_design_size
|
||
|
font.em = font_em
|
||
|
font.copyright = os.environ['COPYRIGHT']
|
||
|
|
||
|
# if autowidth:
|
||
|
# font.autoWidth(0, 0, font.em)
|
||
|
font.autoWidth(0, 0, font.em)
|
||
|
|
||
|
# Add valid space glyph to avoid "unknown character" box on IE11
|
||
|
glyph = font.createChar(32)
|
||
|
glyph.width = 200
|
||
|
|
||
|
outputInfo = {
|
||
|
'em': font.em,
|
||
|
'icons': {},
|
||
|
}
|
||
|
|
||
|
def addIcon(iconId, icon):
|
||
|
glyph = font.createChar(icon['codepoint'], icon['name'])
|
||
|
glyph.importOutlines(
|
||
|
os.path.join(vectorsdir, (iconId+'.svg')),
|
||
|
)
|
||
|
glyph.left_side_bearing = 0
|
||
|
glyph.right_side_bearing = 0
|
||
|
|
||
|
outputInfo['icons'][iconId] = {
|
||
|
'width': glyph.width,
|
||
|
}
|
||
|
|
||
|
with open(jsonfile) as f:
|
||
|
fontData = json.load(f)
|
||
|
|
||
|
for iconId, icon in fontData['icons'].items():
|
||
|
addIcon(iconId, icon)
|
||
|
|
||
|
font.appendSFNTName("English (US)", "Version", fontData['version']['string'])
|
||
|
font.appendSFNTName("English (US)", "Vendor URL", os.environ['VENDORURL'])
|
||
|
font.version = fontData['version']['string']
|
||
|
|
||
|
font.generate(os.path.join(outputdir, fontname + '.ttf'))
|
||
|
font.generate(os.path.join(outputdir, fontname + '.woff'))
|
||
|
font.generate(os.path.join(outputdir, fontname + '.woff2'))
|
||
|
|
||
|
with open(outjsonfile, 'w') as f:
|
||
|
json.dump(outputInfo, f, indent=2)
|