Как визуализировать комбинированные символы Юникода во freetype?

Кажется, я не могу найти какую-либо информацию об этом в документации, функция, которая используется все время - FT_Get_Char_Index(ftFace, i); и она принимает только 1 кодовую точку Юникода. Но как насчет комбинированных символов, которые занимают более одного кода?

Я понимаю, что некоторые из этих символов могут быть просто нормализованы в Юникоде, чтобы быть представленными как другая (одна) кодовая точка, но есть некоторые символы, которые не могут, верно? Как мы с этим справимся?

Я делаю универсальное программное обеспечение для редактирования текста, и хотел бы, чтобы оно поддерживало все Unicode. Но, может быть, эта проблема с символами с несколькими кодами настолько мала, что не стоит проблем? Разве такие символы не распространены в некоторых основных азиатских языках?

Если это не может быть правильно сделано с помощью freetype, как это сделать?

1 ответ

Решение

Если я правильно понимаю, вы не сможете делать то, что хотите, без дополнительной библиотеки макетов. Библиотека макетов использует дополнительную информацию в шрифтах OpenType для позиционирования комбинированных меток (среди прочего). Например, предположим, у вас есть последовательность U+0041, U+0301 (латинская заглавная буква A, знак сочетания острых символов). В общем, вы не можете просто соединить эти два вместе с их расположением по умолчанию в области визуализации, потому что метка Acute будет сталкиваться с формой буквы "A".

Библиотека макетов проанализирует таблицы макетов OpenType шрифта для этой последовательности и вернет информацию о позиционировании, которую можно использовать для правильного позиционирования каждого элемента последовательности. Так, например, вы даете ему последовательность, она может сказать: "оставьте" А "там, где он есть; сдвиньте острые 50 единиц вправо и 90 единиц вверх" (это значительно сложнее, чем это, но, надеюсь, дает вам идею).

Другие вопросы по тегам