De release van bibliotheek 0.9.0 voor de programmeertaal C++ (standaard C++20) heeft plaatsgevonden. libunicode. Het project wordt ontwikkeld door een team van ontwikkelaars van de terminalemulator. Contour en shell Endo (in actieve ontwikkeling), en wordt verspreid onder de Apache 2.0-licentie.
Functionaliteiten van de bibliotheek:
- ondersteuning voor standaarden Unicode 17.0:
- API voor het verkrijgen van Unicode-eigenschappen;
- SIMD-optimalisatie van bepaalde functies (met gebruik van std::simd of std::experimental::simd waar beschikbaar);
- geoptimaliseerde conversie van UTF-8 UTF-16/UTF-32;
- equivalent van de functie wcwidth (int unicode::width(char32_t));
- segmentatie van tekst op basis van grafemen, symbolen, emoji's en schriften;
- lettertype omzetting en string vergelijking;
- hoog-niveau API voor tekstsegmentatie, geschikt voor implementatie tekstshaping.
- volledige testdekking van de meeste functionaliteiten van de bibliotheek (symboolbreedte en segmentatie).
De levering omvat ook de console-tool unicode-query voor het verkrijgen van gedetailleerde informatie over strings.
Wijzigingen:
- API voor grapheme_cluster_width toegevoegd;
- verbeteringen in de ondersteuning van Unicode-versies ('Age');
- volledige ondersteuning UAX #15 Unicode Normalization Forms met ondersteuning voor streaming:
normalizer norm(Normalization_Form::NFC); // Voed de gedecomposeerde e + combinatie acute, dan een nieuwe starter om emissie te triggeren auto result = norm.feed(Uāeā); CHECK(result.empty()); // nog steeds bufferen result = norm.feed(Uāu0301ā²); CHECK(result.empty()); // nog steeds bufferen (combinatie mark) result = norm.feed(Uāxā); // starter triggert emissie van het vorige segment REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + acute samengevoegd tot e-acute result = norm.flush(); CHECK(result == U"x"); // laatste segment
- de functie script_extensions retourneert nu std::optional<std::span>;
- regel GB9c voor grafemen-groepsegmentatie is geĆÆmplementeerd voor combinatie van symbolen in Indic-taalgroep;
- in grapheme_segmenter zijn de regels voor GB11 en GB4/GB5 gecorrigeerd; verouderde API is verwijderd;
- SIMD-geoptimaliseerde conversie van UTF-8 naar UTF-16/UTF-32 is gerealiseerd;
- de breedte van verbindingssymbolen Hangul V/T is nu gelijk aan nul;
- woordgrenssegmentatie is gerealiseerd;
- correcties in de C API;
- refactoring van het buildsysteem en de hulpmiddelgenerator voor C++;
- complexe tests voor conversie van UTF-16/UTF-32 zijn toegevoegd;
- in CI is een statische build van de tool unicode-query toegevoegd.
Bron: linux.org.ru
