C++函式庫版本0.9.0(C++20標準)已發佈。 libunicode該專案由一個終端模擬器開發團隊開發。 輪廓 和貝殼 遠藤 (正在積極開發中)並根據 Apache 2.0 許可證獲得許可。
庫功能:
- 支援標準 Unicode 17.0:
- 取得Unicode屬性的API;
- 對某些函數進行 SIMD 最佳化(如果可用,使用 std::simd 或 std::experimental::simd);
- 最佳化轉換 UTF-8 <-> UTF-16/UTF-32;
- 等效函數 wcwidth(int unicode::width(char32_t));
- 依字形、符號、表情符號和腳本進行文字分割;
- 大小寫轉換和字串比較;
- 適用於實作的高階文字分割 API 文字格式.
- 測試涵蓋了大部分庫功能(符號寬度和分段)。
該軟體包還包含一個名為 unicode-query 的控制台實用程序,用於獲取有關字串的詳細資訊。
變化:
- 新增了 grapheme_cluster_width API;
- 改進了與 Unicode 版本(「年齡」)的交互作用;
- 全力支持 UAX #15 Unicode 規範化形式 支援流處理:
normalizer norm(Normalization_Form::NFC); // 饋送分解後的 e + 組合銳音符,然後是一個新的起始符以觸發自動發送 result = norm.feed(U'e'); CHECK(result.empty()); // 仍在緩衝 result = norm.feed(U'u.0301);仍在緩衝(組合標記) result = norm.feed(U'x'); // 起始符號觸發前一個段的發送 REQUIRE_FALSE(result.empty()); CHECK(result == U"u00E9"); // e + 銳音符組合成 e-銳音符 result = norm.ush(
- script_extensions 函數現在傳回 std::optional >;
- 已實施印度字組合字形分組的 GB9c 規則;
- 在 grapheme_segmenter 中,GB11 和 GB4/GB5 的規則已修正;已棄用的 API 已被移除;
- 已實現 UTF-8 到 UTF-16/UTF-32 的 SIMD 優化轉換;
- 連接韓文 V/T 符號的寬度現在為零;
- 已實現按詞邊界進行分割;
- C API 修復;
- 重構建置系統和輔助 C++ 表產生器;
- 增加了 UTF-16/UTF-32 轉換的全面測試;
- unicode-query 工具的靜態建置版本已新增至 CI 。
來源: linux.org.ru
