CoreText: Получить глиф лигатуры

Я использую CoreText CTFontGetGlyphsForCharacters для получения глифов, соответствующих символам Юникода, то есть UniChar. Теперь я хочу получить символы лигатуры, например fi. Есть ли способ получить лигатурные глифы из CoreText (например, с помощью серии unichars, которые должны быть объединены)?

Спасибо, мока


person moka    schedule 06.11.2014    source источник


Ответы (1)


После нескольких полезных советов из списка рассылки Core Text, вот решение:

Вы не можете получить лигатуры напрямую из CTFont, так как для этого не существует API.

Вместо этого вы делаете следующее:

  1. Используйте CTLineCreateWithAttributedString(), чтобы создать текстовую строку из последовательности символов, лигатуру которой вы хотите получить.
  2. Обязательно установите kCTLigatureAttributeName на 1 или 2 в атрибутивной строке, чтобы получить лигатуры.
  3. Если все сделано правильно, с лигатурой, которая существует в шрифте, вы должны получить CTLine, содержащую один CTRun, содержащий один CGGlyph, который будет лигатурным глифом, который вы ищете!

Если вы не хотите идти по этому пути, единственным другим способом является разбор таблиц шрифтов Open-/True Type самостоятельно, что я не рекомендую.

Надеюсь, это поможет!

person moka    schedule 16.11.2014