OpenType GPOS LookupType 8 - пропуск знаков - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь понять рендеринг "بڑ" (урду - Unicode 1576, 1681) со шрифтом Jameel_Noori_Nastaleeq.ttf .

Строка преобразуется в глифы [607, 460, 471, 1651] по таблице GSUB. Я могу определить правильную привязку второго глифа под первым. Но я не могу найти подходящую подтаблицу GSUB, которая поместила бы третий глиф поверх первого. Здесь левый правильный, а правый - то, что моя программа делает в данный момент.

enter image description here

Кроме того, я не совсем понимаю LookupType 8 GSUB. Некоторые LookupTable могут иметь LookupFlags, включая бит 8 - ignoreMarks. Должен ли я учитывать эти флаги при сопоставлении последовательностей Backtrack, Input и Lookahead, то есть пропускать метки? Что именно представляет собой механизм сопоставления и применения LookupType 8?

1 Ответ

1 голос
/ 28 марта 2019

Позиционирование обеих меток (маленькая метка и точка 'beh') выполняется посредством поиска в функции позиционирования меток ('mark') в таблице GPOS , которая применяется после применяются правила GSUB. Не существует GSUB-единственного способа получить правильное окончательное позиционирование. GPOS должен быть обработан (после GSUB).

Что касается флага ignoreMarks: флаг не относится к GSUB LookupType8. Любой поиск (GSUB или GPOS) может установить этот флаг. Он говорит механизму компоновки игнорировать метки в рассматриваемой последовательности для соответствия контексту. Это позволяет определять контексты подстановки только с «корневыми» глифами последовательности, поэтому, если правило контекста равно A B C, поиск с установленным флагом ignoreMarks будет соответствовать A (mark) B C, A B (mark) C, A B C и т. Д.

В этот шрифт он вступает в игру, потому что сначала два входных символа декомпозируются (в GSUB) на последовательность глифов base + mark, затем перекомпоновываются (также в GSUB), затем метки располагаются (в GPOS). ).

(в качестве отступления: почему вы сами делаете разметку текста, а не используете существующий механизм разметки, такой как HarfBuzz или механизмы, встроенные в другие операционные системы?)

...