From 525851464a1f5152a029c1c9aa69f3aabbf692de Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 23 Apr 2023 20:03:52 +0530 Subject: [PATCH] Wrapper code to use fonttools for subsetting --- src/calibre/utils/fonts/subset.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/calibre/utils/fonts/subset.py diff --git a/src/calibre/utils/fonts/subset.py b/src/calibre/utils/fonts/subset.py new file mode 100644 index 0000000000..3aac7aae79 --- /dev/null +++ b/src/calibre/utils/fonts/subset.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# License: GPLv3 Copyright: 2023, Kovid Goyal + +import sys, os +from fontTools.subset import Subsetter, load_font, save_font + + +def subset(input_file_object_or_path, output_file_object_or_path, container_type, chars_or_text=''): + s = Subsetter() + s.options.recommended_glyphs = True + container_type = container_type.lower() + if 'woff' in container_type: + s.options.flavor = 'woff2' + font = load_font(input_file_object_or_path, s.options, dontLoadGlyphNames=False) + unicodes = {ord(x) for x in chars_or_text} + unicodes.add(ord(' ')) + s.populate(unicodes=unicodes) + s.subset(font) + save_font(font, output_file_object_or_path, s.options) + + +if __name__ == '__main__': + import tempfile + src = sys.argv[-1] + with open(os.path.join(tempfile.gettempdir(), os.path.basename(src)), 'wb') as output: + subset(src, output, os.path.splitext(sys.argv[-1])[1][1:], 'abcdefghijk') + a, b = os.path.getsize(src), os.path.getsize(output.name) + print(f'Input: {a} Output: {b}') + print('Written to:', output.name)