Skip to content

Commit

Permalink
Merge pull request #554 from m4rc1e/fs-sel
Browse files Browse the repository at this point in the history
fix-fsselection: save output
  • Loading branch information
m4rc1e authored May 10, 2022
2 parents 45c6f6f + 393987f commit daba0b0
Showing 1 changed file with 44 additions and 52 deletions.
96 changes: 44 additions & 52 deletions bin/gftools-fix-fsselection.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,70 +19,62 @@
import os
import sys

from fontTools import ttLib
from fontTools.ttLib import TTFont
import tabulate
from gftools.utils import get_fsSelection_byte1, get_fsSelection_byte2
from gftools.util.styles import STYLE_NAMES, is_filename_canonical
from gftools.fix import fix_fs_selection, FontFixer

parser = argparse.ArgumentParser(description='Print out fsSelection'
' bitmask of the fonts')
parser.add_argument('font', nargs="+")
parser.add_argument('--csv', default=False, action='store_true')
parser.add_argument('--usetypometrics', default=False, action='store_true')
parser.add_argument('--autofix', default=False, action='store_true')
parser = argparse.ArgumentParser(
description="Print out fsSelection" " bitmask of the fonts"
)
parser.add_argument("fonts", nargs="+")
parser.add_argument("--csv", default=False, action="store_true")
parser.add_argument("--usetypometrics", default=False, action="store_true")
parser.add_argument("--autofix", default=False, action="store_true")


def printInfo(fonts, print_csv=False):
rows = []
headers = ['filename', 'fsSelection']
for font in fonts:
ttfont = ttLib.TTFont(font)
row = [os.path.basename(font)]
row.append(('{:#010b} '
'{:#010b}'
'').format(get_fsSelection_byte2(ttfont),
get_fsSelection_byte1(ttfont)).replace('0b', ''))
rows.append(row)
rows = []
headers = ["filename", "fsSelection"]
for font in fonts:
row = [os.path.basename(font.reader.file.name)]
row.append(
("{:#010b} " "{:#010b}" "")
.format(get_fsSelection_byte2(font), get_fsSelection_byte1(font))
.replace("0b", "")
)
rows.append(row)

def as_csv(rows):
writer = csv.writer(sys.stdout)
writer.writerows([headers])
writer.writerows(rows)
sys.exit(0)
def as_csv(rows):
writer = csv.writer(sys.stdout)
writer.writerows([headers])
writer.writerows(rows)
sys.exit(0)

if print_csv:
as_csv(rows)
else:
print(tabulate.tabulate(rows, headers, tablefmt="pipe"))
if print_csv:
as_csv(rows)
else:
print(tabulate.tabulate(rows, headers, tablefmt="pipe"))

def main():
args = parser.parse_args()
if args.autofix:
fixed_fonts = []
for font in args.font:
filename = os.path.basename(font)

if not is_filename_canonical(filename):
print(f"Font filename '{filename}' is not canonical!\n\n"
f"Filename must be structured as familyname-style.ttf and "
f"the style must be any of the following {STYLE_NAMES}")
exit(-1)

fixer = FontFixer(font)
fixer.fixes = [fix_fs_selection]
fixer.fix()
if fixer.saveit:
fixed_fonts.append(font)

if len(fixed_fonts) > 0:
printInfo([f + '.fix' for f in fixed_fonts], print_csv=args.csv)

sys.exit(0)

printInfo(args.font, print_csv=args.csv)
def main():
args = parser.parse_args()
fonts = [TTFont(f) for f in args.fonts]
for font in fonts:
os2 = font["OS/2"]
old_fs = font["OS/2"].fsSelection
if args.usetypometrics:
os2.fsSelection |= 1 << 7
if args.autofix:
fix_fs_selection(font)
new_fs = os2.fsSelection
if new_fs != old_fs:
out_fp = font.reader.file.name + ".fix"
print(f"Saving {out_fp}")
font.save(out_fp)
printInfo(fonts, print_csv=args.csv)


if __name__ == '__main__':
if __name__ == "__main__":
main()

0 comments on commit daba0b0

Please sign in to comment.