Насколько я могу судить, WPF не предоставляет никакой информации о доступных таблицах GSUB (которые сообщают вам эту информацию). Все скрыто глубоко в частных классах PresentationCore.
Один из способов заключается в использовании расширенных текстовых сервисов WPF для создания TextFormatter , а затем извлечения GlyphRun
s, созданных фрагментом текста с включенными вариантами, и одного с вариантами выключить, а затем сравнить используемые индексы глифов.
Другим способом было бы физически проверить данные шрифта через GlyphTypeFace.GetFontStream()
. Формат шрифта TrueType не очень сложен, поэтому вы, вероятно, найдете в сети некоторую информацию о том, как анализировать двоичные данные шрифта для поиска информации в таблицах GSUB.
Заметьте, что просто спрашивать, поддерживается ли вариант, также немного двусмысленно. Шрифт может сказать , что он поддерживает вариант, но ничто не требует, чтобы он фактически обеспечивал какие-либо значимые замены. Большинство шрифтов Adobe предоставляют только несколько букв алфавита в нижнем регистре для таких вещей, как верхний и нижний индексы (даже не весь латинский алфавит, обратите внимание). Это довольно бесполезно, ИМХО, поскольку вы не можете попросить WPF подделать подписки или надстрочные индексы, как это делают Word и другие текстовые процессоры.
Тем не менее, было бы неплохо, если бы вы просто спросили TypeFace.GetSupportedOpenTypeFeatures()
.