Die Version 0.9.0 der Bibliothek für die Programmiersprache C++ (Standard C++20) wurde veröffentlicht libunicode. Das Projekt wird von einem Team von Entwicklern des Terminalemulators Contour und der Shell Endo (in aktiver Entwicklung) und wird unter der Lizenz Apache 2.0 vertrieben.
- Unterstützung von Standards Unicode 17.0:
- API zur Abfrage von Unicode-Eigenschaften;
- SIMD-Optimierung einiger Funktionen (unter Verwendung von std::simd oder std::experimental::simd, sofern verfügbar);
- optimierte Konvertierung von UTF-8 <-> UTF-16/UTF-32;
- Äquivalent zur Funktion wcwidth (int unicode::width(char32_t));
- Textsegmentierung nach Graphemen, Zeichen, Emojis und Schriftsystemen;
- Fallumwandlung und String-Vergleich;
- hochmodulares API zur Textsegmentierung, geeignet für die Implementierung Text-Shaping.
- Testabdeckung für die meisten Funktionen der Bibliothek (Zeichenbreite und Segmentierung).
Das Paket enthält auch das Konsolendienstprogramm unicode-query zur Abfrage ausführlicher Informationen zu Strings.
Änderungen:
- API grapheme_cluster_width hinzugefügt;
- Verbesserungen bei der Arbeit mit Unicode-Versionen ("Alter");
- vollständige Unterstützung UAX #15 Unicode-Normalisierungsformen mit Unterstützung für Stream-Verarbeitung:
normalizer norm(Normalization_Form::NFC); // Füttere zerlegte e + kombinierende akute, dann einen neuen Starter zur Auslösung der Emission auto result = norm.feed(U'e'); CHECK(result.empty()); // immer noch im Puffer result = norm.feed(U'u0301'); CHECK(result.empty()); // immer noch im Puffer (kombinierendes Zeichen) result = norm.feed(U'x'); // Starter löst Emission des vorherigen Segments aus REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + akute zusammengefügt zu e-akute result = norm.flush(); CHECK(result == U"x"); // finales Segment
- Die Funktion script_extensions gibt jetzt std::optional<std::span<Script const>> zurück;
- Die Regel GB9c für die Segmentierung von Graphemgruppen für Zeichenkombinationen in Sprachen der Gruppe Indic wurde implementiert;
- In grapheme_segmenter wurden die Regeln für GB11 und GB4/GB5 korrigiert; veraltete APIs wurden entfernt;
- Eine SIMD-optimierte Konvertierung von UTF-8 nach UTF-16/UTF-32 wurde implementiert;
- Die Breite kombinierender Zeichen Hangul V/T ist jetzt null;
- Segmentierung nach Wortgrenzen wurde implementiert;
- Korrekturen im C API;
- Refactoring des Build-Systems und des Hilfsgenerators für C++;
- Komplexe Tests zur Umwandlung von UTF-16/UTF-32 wurden hinzugefügt;
- Im CI wurde ein statisches Build des Dienstprogramms unicode-query hinzugefügt.
Quelle: linux.org.ru
