Почему num_glyphs не соответствует количеству глифов, перечисленных FT_Get_First_Char / FT_Get_Next_Char - PullRequest
0 голосов
/ 22 июня 2019

Рассмотрим следующий пример.Он использует 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,
...
...