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

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

4 голосов
/ 22 декабря 2011

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

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

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

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

Есть что-нибудь еще, что я здесь скучаю?

Ответы [ 3 ]

7 голосов
/ 06 сентября 2013

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

0 голосов
/ 27 сентября 2013

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

0 голосов
/ 28 февраля 2012

Вы должны взглянуть на 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-типа это больше не требуется. D-Type Text Layout Extension заботится обо всех специфических для шрифта задачах и взаимодействии с ICU LayoutEngine. Разработчики программного обеспечения теперь могут использовать одно простое расширение для отображения всех поддерживаемых сложных сценариев без необходимости написания собственных интерфейсов доступа к шрифту. Расширение текстового макета D-типа - это расширение механизма шрифтов D-типа, которое позволяет легко отображать сложные сценарии, скрывая от разработчика всю сложность, связанную с этим процессом, и необходимость непосредственного взаимодействия с ICU LayoutEngine.

...