summaryrefslogtreecommitdiffstats
path: root/lib/silfont/scripts/psffixffglifs.py
blob: f496737d8b9f035b6ae7521802af2ccca99f036c (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
#!/usr/bin/env python
__doc__ = '''Make changes needed to a UFO following processing by FontForge.
'''
__url__ = 'http://github.com/silnrsi/pysilfont'
__copyright__ = 'Copyright (c) 2019 SIL International (http://www.sil.org)'
__license__ = 'Released under the MIT License (http://opensource.org/licenses/MIT)'
__author__ = 'David Raymond'

from silfont.core import execute

argspec = [
    ('ifont',{'help': 'Input font file'}, {'type': 'infont'}),
    ('ofont',{'help': 'Output font file','nargs': '?' }, {'type': 'outfont'}),
    ('-l','--log',{'help': 'Log file'}, {'type': 'outfile', 'def': '_postff.log'})]

def doit(args) :

    font = args.ifont
    logger = args.logger

    advances_removed = 0
    unicodes_removed = 0
    for layer in font.layers:
        if layer.layername == "public.background":
            for g in layer:
                glyph = layer[g]
                # Remove advance and unicode fields from background layer
                # (FF currently copies some from default layer)
                if "advance" in glyph:
                    glyph.remove("advance")
                    advances_removed += 1
                    logger.log("Removed <advance> from " + g, "I")
                uc = glyph["unicode"]
                if uc != []:
                    while glyph["unicode"] != []: glyph.remove("unicode",0)
                    unicodes_removed += 1
                    logger.log("Removed unicode value(s) from " + g, "I")

    if advances_removed + unicodes_removed > 0 :
        logger.log("Advance removed from " + str(advances_removed) + " glyphs and unicode values(s) removed from "
                   + str(unicodes_removed) + " glyphs", "P")
    else:
        logger.log("No advances or unicodes removed from glyphs", "P")

    return args.ifont

def cmd() : execute("UFO",doit, argspec)
if __name__ == "__main__": cmd()