Домой Софт Релиз библиотеки libunicode 0.9.0 с поддержкой C++20 и Unicode 17.0

Релиз библиотеки libunicode 0.9.0 с поддержкой C++20 и Unicode 17.0

Обновление популярного инструмента для работы с текстом получило поддержку актуальных стандартов Юникод и значительные оптимизации производительности.

Релиз библиотеки libunicode 0.9.0 с поддержкой C++20 и Unicode 17.0
Релиз библиотеки libunicode 0.9.0 с поддержкой C++20 и Unicode 17.0 — иллюстрация к материалу. Источник: linux.org.ru

Вышла версия 0.9.0 библиотеки libunicode для языка программирования C++. Проект, написанный с использованием стандарта C++20, развивается командой авторов эмулятора терминала Contour и оболочки Endo и распространяется на условиях лицензии Apache 2.0.

Ключевые возможности библиотеки

Библиотека предлагает широкий набор инструментов для работы с кодировками, включая:

  • Полную поддержку стандарта Unicode 17.0.
  • API для работы со свойствами символов Юникод.
  • SIMD-оптимизацию функций (при наличии поддержки std::simd или std::experimental::simd).
  • Высокопроизводительное конвертирование данных между UTF-8, UTF-16 и UTF-32.
  • Аналог функции wcwidth для определения визуальной ширины символов (int unicode::width(char32_t)).
  • Инструменты сегментирования текста по графемам, отдельным символам, эмодзи и письменностям.
  • Средства для сравнения строк и преобразования регистра.
  • Высокоуровневый API для сегментирования, который можно использовать при реализации шейпинга текста.
  • Обширное покрытие тестами, особенно в части сегментирования и определения ширины символов.

В состав пакета также входит консольный инструмент unicode-query, предназначенный для получения детальной информации о текстовых строках.

Что нового в версии 0.9.0

Обновление принесло ряд функциональных улучшений и исправлений:

  • Внедрен API grapheme_cluster_width.
  • Оптимизирована работа с версиями Юникод («Age»).
  • Реализована полноценная поддержка UAX #15 (Unicode Normalization Forms) с возможностью потоковой обработки данных.
  • Функция script_extensions теперь возвращает std::optional.
  • Добавлена поддержка правила GB9c для корректного разбиения групп графем в языках группы Indic.
  • В grapheme_segmenter внесены исправления для правил GB11, GB4 и GB5, а устаревший API был удален.
  • Реализовано конвертирование UTF-8 в UTF-16/UTF-32 с применением SIMD-инструкций.
  • Ширина соединяющих символов Hangul V/T теперь приведена к значению «ноль».
  • Добавлена функциональность сегментирования текста по границам слов.
  • Проведены исправления в C API.
  • Осуществлен рефакторинг системы сборки и генератора таблиц на C++.
  • Добавлены комплексные тесты для конвертации UTF-16/UTF-32.
  • В CI-конвейер добавлена возможность статической сборки утилиты unicode-query.
Источник: https://www.linux.org.ru