6 个版本

0.3.8 2024年5月28日
0.3.7 2023年11月17日
0.3.6 2023年10月3日
0.3.5 2023年4月14日
0.3.3 2022年8月6日

#26 in #icu4x

Download history 269/week @ 2024-04-25 360/week @ 2024-05-02 377/week @ 2024-05-09 335/week @ 2024-05-16 543/week @ 2024-05-23 186/week @ 2024-05-30 127/week @ 2024-06-06 187/week @ 2024-06-13 179/week @ 2024-06-20 165/week @ 2024-06-27 290/week @ 2024-07-04 240/week @ 2024-07-11 173/week @ 2024-07-18 191/week @ 2024-07-25 224/week @ 2024-08-01 263/week @ 2024-08-08

874 每月下载量
用于 icu_datagen

Unicode-3.0

1MB
13K SLoC

icu_codepointtrie_builder crates.io

icu_codepointtrie_builderICU4X 项目的实用工具包。

此包公开了在运行时从提供的数据构建 CodePointTrie 的功能。由于通常期望 CodePointTrie 数据是预编译的,因此此包未针对速度进行优化;应在构建阶段使用。

底层,此包使用 ICU4C 的 CodePointTrie 构建器代码,UMutableCPTrie。有关更多上下文,请参阅 https://github.com/unicode-org/icu4x/issues/1837

与 ICU4X 的大部分内容不同,由于原生依赖,此包不保证无 panic。

构建配置

此包有两种主要使用模式:作为 Cargo 功能公开的 "wasm""icu4c"。如果两者都启用,代码将内部使用 wasm 代码路径。

"wasm"”模式使用一个打包在Rust包中的Wasm模块,该模块包含预编译的ICU4C CodePointTrie构建代码。它使用Wasmer运行时评估Wasm模块,这“只需工作”,但需要大量的Rust/Cargo依赖项。

"icu4c"”模式减少了Rust依赖项的数量,但需要本地有ICU4C的副本。要在Cargo中配置“"icu4c"”模式,设置以下环境变量

  • ICU4C_LIB_PATH设置为包含ICU4C静态或共享库的目录。
  • ICU4C_LINK_STATICALLY设置为任何值以使用静态库。
  • 如果ICU4C启用了重命名,将ICU4C_RENAME_VERSION设置为ICU4C的整数版本。默认情况下,我们尝试链接未重命名的符号。

如果使用动态链接,在运行时,您可能需要将[DY]LD_LIBRARY_PATH设置为ICU4C_LIB_PATH

如果不使用Cargo,请确保通过-LICU4C_LIB_PATH传递给链接器,通过-l标志链接到icuucicui18nicudata,如果您需要重命名的ICU4C符号,请设置--cfg icu4c_enable_renaming

示例

use icu::collections::codepointtrie::CodePointTrie;
use icu::collections::codepointtrie::TrieType;
use icu_codepointtrie_builder::CodePointTrieBuilder;
use icu_codepointtrie_builder::CodePointTrieBuilderData;

let default_value = 1;
let error_value = 2;
let values_by_code_point = &[3, 4, 5, 6];

let cpt: CodePointTrie<u8> = CodePointTrieBuilder {
    data: CodePointTrieBuilderData::ValuesByCodePoint(values_by_code_point),
    default_value,
    error_value,
    trie_type: TrieType::Small,
}
.build();

assert_eq!(cpt.get32(0), 3);
assert_eq!(cpt.get32(1), 4);
assert_eq!(cpt.get32(2), 5);
assert_eq!(cpt.get32(3), 6);
assert_eq!(cpt.get32(4), 1); // default value
assert_eq!(cpt.get32(u32::MAX), 2); // error value

更多信息

有关开发、作者、贡献等信息,请访问ICU4X 主页

依赖关系

~0.7–2.1MB
~45K SLoC