Wydano wersję 0.9.0 biblioteki dla języka C++ (standard C++20) libunicode. Projekt jest rozwijany przez zespół twórców emulatora terminala Contour i interfejsu Endo (w aktywnym rozwoju), dystrybuowane na licencji Apache 2.0.
- wsparcie dla standardów Unicode 17.0:
- API do uzyskiwania właściwości Unicode;
- SIMD optymalizacja niektórych funkcji (z użyciem std::simd lub std::experimental::simd, jeśli są dostępne);
- optymalizowana konwersja UTF-8 UTF-16/UTF-32;
- odpowiednik funkcji wcwidth (int unicode::width(char32_t));
- segmentacja tekstu według grafemów, symboli, emoji i skryptów;
- zmiana wielkości liter i porównywanie ciągów;
- wysokopoziomowe API segmentacji tekstu, odpowiednie do realizacji kształtowania tekstu.
- przetestowanie większości funkcji biblioteki (szerokość znaku i segmentacja).
W zestawie znajduje się także konsolowa narzędzie unicode-query do uzyskiwania szczegółowych informacji o ciągach.
Zmiany:
- dodano API grapheme_cluster_width;
- ulepszenia w pracy z wersjami Unicode ("Age");
- pełne wsparcie UAX #15 Formy normalizacji Unicode z obsługą przetwarzania strumieniowego:
normalizer norm(Normalization_Form::NFC); // Przekaż rozłożoną e + akcent łączący, następnie nowy start, aby wyzwolić emisję auto result = norm.feed(U’e’); CHECK(result.empty()); // nadal buforuje result = norm.feed(U’u0301′); CHECK(result.empty()); // nadal buforuje (znak łączący) result = norm.feed(U’x’); // start wyzwala emisję poprzedniego segmentu REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + akcent połączone w e-acute result = norm.flush(); CHECK(result == U"x"); // ostatni segment
- funkcja script_extensions teraz zwraca std::optional<std::span>;
- wdrożono regułę GB9c podziału grup graficznych dla kombinacji znaków w językach grupy Indic;
- w grapheme_segmenter poprawiono zasady dla GB11 i GB4/GB5; usunięto przestarzałe API;
- wdrożono optymalizowaną SIMD konwersję UTF-8 do UTF-16/UTF-32;
- szerokość znaków łączących Hangul V/T teraz wynosi zero;
- wdrożono segmentację po granicach słów;
- poprawki w C API;
- refaktoryzacja systemu kompilacji i pomocniczego generatora tabel C++;
- dodano kompleksowe testy konwersji UTF-16/UTF-32;
- w CI dodano statyczną kompilację narzędzia unicode-query.
Źródło: linux.org.ru
