Състояние на издаването на библиотеката 0.9.0 за C++ (стандарт C++20) libunicode. Проектът се разработва от екип от разработчици на емулатор на терминал 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 за извличане на подробна информация за стрингове.
Промени:
- добавен API за ширина на графемни кластер;
- подобрения в работата с версии на Юникод (‘Age’);
- пълна поддръжка UAX #15 Формули на нормализация на Unicode с поддръжка за стрийминг:
normalizer norm(Normalization_Form::NFC); // Вход за разложен e + комбиниращ акут, след което нов стартер за задействане на емисия auto result = norm.feed(U’e’); CHECK(result.empty()); // все още буферира result = norm.feed(U’u0301′); CHECK(result.empty()); // все още буферира (комбиниращ знак) result = norm.feed(U’x’); // стартер активира емисията на предишния сегмент REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + акут комбинирано в e-акут result = norm.flush(); CHECK(result == U"x"); // краен сегмент
- функция script_extensions сега връща std::optional<std::span>;
- реализирано правило GB9c за разпадане на графеми за комбинации от символи в езици от групата на Индийските езици;
- в grapheme_segmenter поправени правилата за GB11 и GB4/GB5; остарял API е премахнат;
- реализирано SIMD-оптимизирано преобразуване от UTF-8 в UTF-16/UTF-32;
- ширината на комбиниращите символи Hangul V/T сега е равна на нула;
- реализирано сегментиране по границите на думи;
- поправки в C API;
- рефакторинг на системата за сборка и помощния генератор на таблици C++;
- добавени комплексни тестове за преобразуване от UTF-16/UTF-32;
- в CI добавена статична сборка на утилитата unicode-query.
Източник: linux.org.ru
