È stata rilasciata la versione 0.9.0 della libreria per il linguaggio C++ (standard C++20) libunicode. Il progetto è sviluppato dal team di sviluppatori dell'emulatore di terminale Contour e shell Endo (in fase di sviluppo attivo) e distribuito con licenza Apache 2.0.
- supporto agli standard Unicode 17.0:
- API per ottenere le proprietà Unicode;
- ottimizzazione SIMD di alcune funzioni (utilizzando std::simd o std::experimental::simd se disponibili);
- conversione ottimizzata UTF-8 UTF-16/UTF-32;
- equivalente della funzione wcwidth (int unicode::width(char32_t));
- segmentazione del testo in grafe, caratteri, emoji e script;
- conversione della lettera maiuscola e confronto delle stringhe;
- API di alto livello per la segmentazione del testo, adatta a implementazioni shaping del testo.
- copertura dei test per la maggior parte delle funzionalità della libreria (larghezza del carattere e segmentazione).
Include anche l'utility da console unicode-query per ottenere informazioni dettagliate sulle stringhe.
Modifiche:
- aggiunto API grapheme_cluster_width;
- miglioramenti nella gestione delle versioni Unicode (‘Age’);
- supporto completo UAX #15 Unicode Normalization Forms con supporto per l'elaborazione a flusso:
normalizer norm(Normalization_Form::NFC); // Feed decomposed e + combining acute, then a new starter to trigger emission auto result = norm.feed(U’e’); CHECK(result.empty()); // still buffering result = norm.feed(U’u0301′); CHECK(result.empty()); // still buffering (combining mark) result = norm.feed(U’x’); // starter triggers emission of previous segment REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + acute composed to e-acute result = norm.flush(); CHECK(result == U"x"); // final segment
- la funzione script_extensions ora restituisce std::optional<std::span>;
- implementata la regola GB9c per la segmentazione del gruppo di grafe per combinazioni di caratteri nelle lingue del gruppo Indic;
- in grapheme_segmenter corretti i regole per GB11 e GB4/GB5; rimosso l'API obsoleto;
- implementata la conversione SIMD-ottimizzata da UTF-8 a UTF-16/UTF-32;
- la larghezza dei caratteri di collegamento Hangul V/T ora è zero;
- implementata la segmentazione per i confini delle parole;
- correzioni nell'API C;
- rifattorizzazione del sistema di build e del generatore di tabelle ausiliario C++;
- aggiunti test complessi per la conversione da UTF-16/UTF-32;
- nel CI aggiunta la build statica dell'utility unicode-query.
Fonte: linux.org.ru
