summaryrefslogtreecommitdiff
path: root/dtinth.py
blob: 0b4108b648c9ad9c197407a4fc04cd9bb1d095b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env python2
# -*- coding: utf-8 -*-

"""Update the glyph metrics so that they all really have the same size."""

# Based on
# - monospacifier: https://github.com/cpitclaudel/monospacifier/blob/master/monospacifier.py
# - YosemiteAndElCapitanSystemFontPatcher: https://github.com/dtinth/YosemiteAndElCapitanSystemFontPatcher/blob/master/bin/patch

import os
import re
import sys

reload(sys)
sys.setdefaultencoding('UTF8')

import fontforge
import psMat
import unicodedata

def height(font):
    return float(font.capHeight)

def adjust_height(source, template):
    source.selection.all()
    source.transform(psMat.scale(height(template) / height(source)))
    for attr in ['ascent', 'descent',
                'hhea_ascent', 'hhea_ascent_add',
                'hhea_linegap',
                'hhea_descent', 'hhea_descent_add',
                'os2_winascent', 'os2_winascent_add',
                'os2_windescent', 'os2_windescent_add',
                'os2_typoascent', 'os2_typoascent_add',
                'os2_typodescent', 'os2_typodescent_add',
                ]:
        setattr(source, attr, getattr(template, attr))
    source.transform(psMat.scale(0.9))

font = fontforge.open('comic-shanns.otf')
ref = fontforge.open('vendor/Menlo.ttc')
for g in font.glyphs():
    uni = g.unicode
    category = unicodedata.category(unichr(uni)) if 0 <= uni <= sys.maxunicode else None
    if g.width > 0 and category not in ['Mn', 'Mc', 'Me']:
        target_width = 510
        if g.width != target_width:
            delta = target_width - g.width
            g.left_side_bearing += delta / 2
            g.right_side_bearing += delta - g.left_side_bearing
            g.width = target_width

adjust_height(font, ref)
font.sfnt_names = [] # Get rid of 'Prefered Name' etc.
font.fontname = 'Comic Shanns dtinth'
font.familyname = 'Comic Shanns dtinth'
font.fullname = 'Comic Shanns dtinth'
font.generate('comic-shanns-dtinth.otf')
font.generate('comic-shanns-dtinth.ttf')
Software created with 💖