Компания Google анонсировала открытие под лицензией Apache кода библиотеки sfntly, предназначенной для разбора, редактирования и создания шрифтов на базе контейнера SFNT (OpenType, TrueType и т.п.). Библиотека доступна в двух вариантах: для языков C++ и Java. Код библиотеки отмечен как стабильный. В настоящее время Java-версия библиотеки используется для динамической фильтрации (выделения подмножеств, удаления лишних символов) шрифтов в проекте Google Web Fonts, а С++ вариант при печати PDF-документов в браузере Chrome.

Основное назначение библиотеки - создание высокопроизводительных приложений и сервисов, поддерживающих манипуляции со шрифтами. По словам Рафа Левьена (Raph Levien), инженера, занимающегося вопросами использования шрифтов в Web, sfntly действительно очень быстрая библиотека, способная выделять подмножество символов из больших шрифтов за миллисекунды, что быстрее работы по сжатию результата с использованием gzip.

Кроме высокой производительности библиотека предоставляет простой и понятный API, позволяющий выполнять как высокоуровневые действия над шрифтами, так и организовывать низкоуровневый доступ к данным внутри шрифта. Шрифтовые объекты, которыми манипулирует библиотека, поддерживают работу в многопоточных приложениях, в том числе при выполнении операций редактирования. Поддерживается разбор и редактирование большинства базовых sfnt-таблиц для форматов TrueType и OpenType, в том числе добавление новых таблиц. Даже если в библиотеке нет непосредственной высокоуровневой поддержки каких-то sfnt-таблиц, такие таблицы всё равно можно обрабатывать без риска повреждения структур файла. Например, можно манипулировать не только TrueType и OpenType, но и любыми другими форматами на базе контейнера SFNT, включая AAT/GX и Graphite.

Из планов по развитию библиотеки отмечено улучшение поддержки расширенных элементов спецификации OpenType, поддержка дополнительных форматов sfnt-контейнеров, возможность выполнения различных форм сериализации, улучшение уровня абстракции для манипулирования шрифтами.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32225