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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# shorter Unicode Variation Sequences example from #195, with comparison to hb-shape.
# The test file used and known to work is v2.004 of https://github.com/adobe-fonts/source-han-sans/blob/release/OTF/Japanese/SourceHanSans-Regular.otf
import importlib
uvs = importlib.import_module("unicode-variation-sequences")
read_freetype_cmap = uvs.read_freetype_cmap
if __name__ == "__main__":
import os, io
directory = os.path.dirname(__file__)
font_path = os.path.join(directory, 'SourceHanSans-Regular.otf')
memory_file = io.BytesIO()
with open(font_path, 'rb') as fontfile:
memory_file.write(fontfile.read())
memory_file.seek(0)
from freetype import *
library = FT_Library()
error = FT_Init_FreeType(byref(library))
if error: raise FT_Exception(error)
freetype_face = FT_Face()
data = memory_file.getvalue()
error = FT_New_Memory_Face(library, data, len(data), 0, byref(freetype_face))
if error: raise FT_Exception(error)
all_freetype_characters = read_freetype_cmap(freetype_face)
# {'邉' : ['邉󠄁', '邉󠄂', '邉󠄃', '邉󠄄', '邉󠄅', '邉󠄆', '邉󠄇', '邉󠄈', '邉󠄉', '邉󠄊', '邉󠄋', '邉󠄌', '邉󠄍', '邉󠄎', '邉󠄀']}
print(all_freetype_characters['邉'], all_freetype_characters['邉󠄁'], all_freetype_characters['邉󠄂'], all_freetype_characters['邉󠄃'],
all_freetype_characters['邉󠄄'], all_freetype_characters['邉󠄅'], all_freetype_characters['邉󠄆'], all_freetype_characters['邉󠄇'],
all_freetype_characters['邉󠄈'], all_freetype_characters['邉󠄉'], all_freetype_characters['邉󠄊'], all_freetype_characters['邉󠄋'],
all_freetype_characters['邉󠄌'], all_freetype_characters['邉󠄍'], all_freetype_characters['邉󠄎'], all_freetype_characters['邉󠄀'],
sep='|')
print('The above should be identical to the output of this hb-shape command:')
print(' hb-shape --no-glyph-names --no-positions --no-clusters --no-advances SourceHanSans-Regular.otf "邉邉󠄁邉󠄂邉󠄃邉󠄄邉󠄅邉󠄆邉󠄇邉󠄈邉󠄉邉󠄊邉󠄋邉󠄌邉󠄍邉󠄎邉󠄀"')
|