Рассмотрим следующий пример.Он использует freetype
(через python wrapper ) для загрузки шрифта и затем подсчитывает glyphs
.
import freetype as FT
f = FT.Face('/usr/share/fonts/truetype/Hack-Regular.ttf')
f.num_glyphs
# 1573
len([*f.get_chars()])
# 1549
. Как видите, число, полученное в результате подсчета, не совпадаетчисло, сообщаемое библиотекой при прямом запросе.
Почему?
Примечание: Знание оболочки Python не обязательно для решения этого вопроса.Используемые здесь функции python являются тонкими обертками вокруг функций из C-API.Соответствующие биты:
get_chars
использует FT_Get_First_Char
и FT_Get_Next_Char
для циклического перебора всех (?) Символов при условии
charcode, agindex = self.get_first_char()
yield charcode, agindex
while agindex != 0:
charcode, agindex = self.get_next_char(charcode, 0)
yield charcode, agindex
num_glyphs
просто вызывает его тезка
num_glyphs = property(lambda self: self._FT_Face.contents.num_glyphs,
...