Return log messages when running subsetting via fonttools

This commit is contained in:
Kovid Goyal 2023-04-23 20:34:23 +05:30
parent 525851464a
commit ee553442b7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -1,29 +1,46 @@
#!/usr/bin/env python #!/usr/bin/env python
# License: GPLv3 Copyright: 2023, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2023, Kovid Goyal <kovid at kovidgoyal.net>
import sys, os import os
from fontTools.subset import Subsetter, load_font, save_font import sys
from logging.handlers import QueueHandler
from queue import Empty, SimpleQueue
from fontTools.subset import Subsetter, load_font, log, save_font
def subset(input_file_object_or_path, output_file_object_or_path, container_type, chars_or_text=''): def subset(input_file_object_or_path, output_file_object_or_path, container_type, chars_or_text=''):
s = Subsetter() log_messages = SimpleQueue()
s.options.recommended_glyphs = True log_handler = QueueHandler(log_messages)
container_type = container_type.lower() log.addHandler(log_handler)
if 'woff' in container_type: try:
s.options.flavor = 'woff2' s = Subsetter()
font = load_font(input_file_object_or_path, s.options, dontLoadGlyphNames=False) s.options.recommended_glyphs = True
unicodes = {ord(x) for x in chars_or_text} container_type = container_type.lower()
unicodes.add(ord(' ')) if 'woff' in container_type:
s.populate(unicodes=unicodes) s.options.flavor = 'woff2'
s.subset(font) font = load_font(input_file_object_or_path, s.options, dontLoadGlyphNames=False)
save_font(font, output_file_object_or_path, s.options) 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)
finally:
log.removeHandler(log_handler)
msgs = []
while True:
try:
msgs.append(log_messages.get_nowait().getMessage())
except Empty:
break
return msgs
if __name__ == '__main__': if __name__ == '__main__':
import tempfile import tempfile
src = sys.argv[-1] src = sys.argv[-1]
with open(os.path.join(tempfile.gettempdir(), os.path.basename(src)), 'wb') as output: 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') print('\n'.join(subset(src, output, os.path.splitext(sys.argv[-1])[1][1:], 'abcdefghijk')))
a, b = os.path.getsize(src), os.path.getsize(output.name) a, b = os.path.getsize(src), os.path.getsize(output.name)
print(f'Input: {a} Output: {b}') print(f'Input: {a} Output: {b}')
print('Written to:', output.name) print('Written to:', output.name)