Позиционирование обеих меток (маленькая метка и точка '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 или механизмы, встроенные в другие операционные системы?)