È stata rilasciata la versione 0.9.0 della libreria per il linguaggio C++ (standard C++20) libunicode. Il progetto è sviluppato da un team di sviluppatori di emulatori 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 proprietà Unicode;
- ottimizzazione SIMD di alcune funzioni (utilizzando std::simd o std::experimental::simd, se disponibili);
- conversione ottimizzata di UTF-8 UTF-16/UTF-32;
- equivalente della funzione wcwidth (int unicode::width(char32_t));
- segmentazione del testo per grafemi, simboli, emoji e scritture;
- trasformazione di case e confronto di stringhe;
- API di alto livello per la segmentazione del testo, adatta per l'implementazione del shaping del testo.
- copertura testuale della maggior parte delle funzionalità della libreria (larghezza dei caratteri e segmentazione).
In dotazione anche un'utilità da console unicode-query per ottenere informazioni dettagliate sulle stringhe.
Novità:
- aggiunto API grapheme_cluster_width;
- miglioramenti nel trattamento delle versioni Unicode ("Age");
- supporto completo UAX #15 Unicode Normalization Forms con supporto per l'elaborazione in streaming:
normalizer norm(Normalization_Form::NFC); // Invia decomposed e + combining acute, poi un nuovo starter per attivare l'emissione auto result = norm.feed(U’e’); CHECK(result.empty()); // ancora in buffering result = norm.feed(U’u0301′); CHECK(result.empty()); // ancora in buffering (combining mark) result = norm.feed(U’x’); // lo starter attiva l'emissione del segmento precedente REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + acute composto in e-acute result = norm.flush(); CHECK(result == U"x"); // segmento finale
- la funzione script_extensions ora restituisce std::optional<std::span<Script const>>;
- implementata la regola GB9c per la divisione delle gruppi di grafemi per combinazioni di caratteri nelle lingue del gruppo Indic;
- in grapheme_segmenter corrette le regole per GB11 e GB4/GB5; rimosso l'API obsoleta;
- 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 ai confini delle parole;
- correzioni nell'API C;
- refactoring del sistema di build e dei generatori di tabelle C++;
- aggiunti test complessi per la conversione da UTF-16/UTF-32;
- nel CI è stata aggiunta la build statica dello strumento unicode-query.
Fonte: linux.org.ru
