Die Version 0.9.0 der C++ Bibliothek (C++20 Standard) ist erschienen. libunicode. Das Projekt wird von einem Team von Entwicklern des Terminalemulators Contour und der BenutzeroberflÀche Endo (in aktiver Entwicklung) und wird unter der Apache 2.0 Lizenz verbreitet.
- UnterstĂŒtzung fĂŒr Standards Unicode 17.0:
- API zur Abfrage von Unicode-Eigenschaften;
- SIMD-Optimierung bestimmter Funktionen (unter Verwendung von std::simd oder std::experimental::simd, falls verfĂŒgbar);
- optimierte Konvertierung zwischen UTF-8 â UTF-16/UTF-32;
- Ăquivalent zur Funktion wcwidth (int unicode::width(char32_t));
- Textsegmentierung nach Graphemen, Symbolen, Emojis und Schriften;
- GroĂ-/Kleinschreibung umwandeln und Strings vergleichen;
- hoch-niveau API zur Textsegmentierung, geeignet fĂŒr die Implementierung Textschichtung.
- Umfangreiche Tests fĂŒr die meisten Funktionen der Bibliothek (Zeichenbreite und Segmentierung).
Das Paket enthÀlt auch das Konsolenwerkzeug unicode-query zur detaillierten Abfrage von Strings.
Ănderungen:
- API fĂŒr grapheme_cluster_width hinzugefĂŒgt;
- Verbesserungen im Umgang mit Unicode-Versionen (âAgeâ);
- vollstĂ€ndige UnterstĂŒtzung UAX #15 Unicode Normalisierungsformen mit UnterstĂŒtzung fĂŒr Streaming-Verarbeitung:
normalizer norm(Normalization_Form::NFC); // FĂŒttere dekomponiertes e + kombinierendes Akut, dann einen neuen Starter, um die Ausgabe zu triggern auto result = norm.feed(Uâeâ); CHECK(result.empty()); // noch im Buffer result = norm.feed(Uâu0301âČ); CHECK(result.empty()); // noch im Buffer (kombinierendes Zeichen) result = norm.feed(Uâxâ); // Starter löst Ausgabe des vorherigen Segments aus REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + Akut komprimiert zu e-Akut result = norm.flush(); CHECK(result == U"x"); // finales Segment
- Die Funktion script_extensions gibt jetzt std::optional<std::span>& zurĂŒck;
- Regel GB9c zur Segmentierung von Graphemen fĂŒr Zeichenkombinationen in Sprachen der Indischen Gruppe implementiert;
- In grapheme_segmenter wurden die Regeln fĂŒr GB11 und GB4/GB5 korrigiert; veraltete API entfernt;
- SIMD-optimierte Konvertierung von UTF-8 nach UTF-16/UTF-32 implementiert;
- Die Breite von Hangul-V/T-Verbindungszeichen betrÀgt jetzt null;
- Wortgrenzen-Segmentierung implementiert;
- Fehlerbehebungen im C API;
- Refactoring des Build-Systems und des Hilfsgenerators fĂŒr C++;
- Umfassende Tests fĂŒr die Umwandlung von UTF-16/UTF-32 hinzugefĂŒgt;
- Statische Build-Utility unicode-query in CI hinzugefĂŒgt.
Quelle: linux.org.ru
