Механизм компоновки ICU

Я пытаюсь использовать ICU для компоновки сложных скриптов. У него есть пример в руководстве пользователя механизма компоновки (http://userguide.icu-project.org/layoutengine). Вроде бы все просто, но когда я начал тестировать его в примере кода, то застрял на создании LEFontInstance.

В нем нет ничего для обслуживания определенных типов шрифтов (ttf/otf и т. д.). Они привели пример определения и использования шрифта ttf в PortableFontInstance в letest.cpp файле. Из всей этой информации я понял, что если мы хотим, например, выбрать конкретный шрифт по имени, мы должны написать новый класс, унаследованный от LEFontInstance, и реализовать выбор шрифта самостоятельно.

Меня это очень расстраивает, так как я считаю, что известные форматы шрифтов и использование таблиц системных шрифтов должны быть включены в такую ​​библиотеку, иначе мне, как пользователю, придется реализовывать все функции чтения и выбора шрифтов. Механизм компоновки может обрабатывать глифы после этого.

Стоит ли использовать ICU для компоновки сложных скриптов (поскольку SDK Windows и Apple обеспечивают достаточную поддержку шрифтов в таблице системных шрифтов)?
Какие усилия требуются, если я использую механизм компоновки ICU? (Я вижу, что мне придется самому обрабатывать все форматы шрифтов.)

Есть ли что-то еще, что мне здесь не хватает?


icu
person Saba    schedule 22.12.2011    source источник
comment
Также я знаю, что это очень полезный API для преобразования юникода и библиотеки регулярных выражений.   -  person Saba    schedule 22.12.2011
comment
Вы смотрели на образцы макета ICU? ICU/источник/образцы/макет   -  person Steven R. Loomis    schedule 04.01.2012


Ответы (3)


Я собираюсь добавить сюда обновленный ответ, который мы (ICU) теперь рекомендуем использовать HarfBuzz вместо механизма компоновки ICU. Существует мост, который позволяет вам использовать API-интерфейсы ICU против HB, но вы должны использовать HarfBuzz, а не ICU.

person Steven R. Loomis    schedule 05.09.2013

Вы должны изучить D-Type Font Engine и D-Type Text Extension, которые внутренне используют ICU LayoutEngine. См. http://d-type.com/page/text_layout.

Они говорят:

Однако сам ICU LayoutEngine не предоставляет интерфейса для доступа к необходимым таблицам макетов в файлах шрифтов. В зависимости от того, как осуществляется доступ к шрифтам, этот интерфейс должен быть написан клиентом (разработчиком). Другими словами, разработчик отвечает за открытие, закрытие и управление фактическими шрифтами (например, из файла или памяти), доступ и, при необходимости, кэширование их таблиц макетов и предоставление этих таблиц ICU LayoutEngine по запросу. В прошлом это был единственный способ для разработчиков программного обеспечения использовать ICU LayoutEngine в сочетании с D-Type Font Engine.

К счастью, с D-Type Text Layout Extension в этом больше нет необходимости. Расширение макета текста D-Type берет на себя все задачи, связанные со шрифтами, и взаимодействие с ICU LayoutEngine. Разработчики программного обеспечения теперь могут использовать одно простое расширение для отображения всех поддерживаемых сложных скриптов без необходимости писать собственные интерфейсы доступа к шрифтам. D-Type Text Layout Extension — это расширение D-Type Font Engine, позволяющее легко отображать сложные сценарии, скрывая от разработчика всю сложность, связанную с этим процессом, и необходимость прямого взаимодействия с ICU LayoutEngine.

person Ned    schedule 28.02.2012
comment
Есть ли бесплатная альтернатива D-Type с открытым исходным кодом? - person optikradio; 10.04.2013

Было бы неплохо сообщить, почему вы рекомендуете использовать HarfBuzz вместо ICU Layout Engine. HarfBuzz все еще очень новая библиотека (еще даже не вышла версия 1.0), для нее практически нет документации, а ее надежность, стабильность и безопасность еще неизвестны и недостаточно протестированы. Это тот случай, когда вы просто решили отказаться от ICU Layout Engine до того, как HarfBuzz достиг зрелости? Если да, то это звучит немного непрофессионально. Я знаю, что ICU Layout Engine изначально разрабатывался без учета требований безопасности и имеет множество незавершенных и неотшлифованных частей (не говоря уже о том, что в него не вносились какие-либо существенные новые функции в течение многих лет), но, безусловно, он более зрелый, чем HarfBuzz. Думаю, вы должны подкрепить свою рекомендацию серьезными техническими аргументами и/или тестовыми данными, объясняющими, почему люди должны перейти на HarfBuzz сейчас. Это еще более актуально, когда рекомендация исходит от отделения интенсивной терапии. Да, HarfBuzz совершенно определенно сделает ICU LayoutEngine устаревшим в будущем, но опять же, почему ваши существующие пользователи ICU Layout Engine должны переходить на новую библиотеку именно сейчас?

person Ned    schedule 27.09.2013
comment
Вы хотели опубликовать это как ответ на мой ответ? Я только сейчас наткнулся на это сообщение. Вероятно, это сообщение лучше адресовать непосредственно нам в проекте ICU. Вы подключены к D-Type (о чем я не знал, пока не увидел здесь сообщение)? Вы есть в списках рассылки ICU? Сообщение о HarfBuzz было отправлено несколько месяцев назад, и на него очень мало откликов. Кроме того, HarfBuzz может быть новым, но это переписанный (так же, как старый HarfBuzz был форком) существующего кода. HarfBuzz уже используется в поставляемом программном обеспечении (LibreOffice… Android… FireFox… Gnome…) и тщательно тестируется. - person Steven R. Loomis; 09.11.2013
comment
и мне здесь не хватает места… но, пожалуйста, если вы не можете связаться со мной иначе, сообщите об ошибке или опубликуйте что-нибудь в списке ICU. Есть и другие детали, в которых я в очередной шляпе предлагаю проект интеграции HarfBuzz в Java: mail.openjdk.java.net/pipermail/discuss/2013-July/003099.html - person Steven R. Loomis; 09.11.2013
comment
ссылка openjdk - это почти полное раскрытие информации. HarfBuzz (один унифицированный механизм компоновки с открытым исходным кодом) уже некоторое время является мечтой. Теперь это реальность. ICULE не устарел, по крайней мере пока. Моя формулировка на site.icu-project.org/download/51 просто настоятельно рекомендует . - person Steven R. Loomis; 09.11.2013
comment
Обновление: ICU Layout Engine больше не рекомендуется. userguide.icu-project.org/layoutengine - person Steven R. Loomis; 26.06.2014