icu_codepointtrie_builder
is a utility crate of the [ICU4X
] project.
This crate exposes functionality to build a [CodePointTrie
] from values provided at runtime.
Because it is normally expected for CodePointTrie data to be pre-compiled, this crate is not
optimized for speed; it should be used during a build phase.
Under the hood, this crate uses the CodePointTrie builder code from ICU4C, [UMutableCPTrie
].
For more context, see https://github.com/unicode-org/icu4x/issues/1837.
This crate has two primary modes it can be used in: "wasm"
and "icu4c"
, exposed as
Cargo features. If both are enabled, the code will internally use the wasm codepath.
The "wasm"
mode uses a Wasm module packaged into this Rust crate that contains
pre-compiled ICU4C CodePointTrie builder code. It evaluates the Wasm module using
the Wasmer runtime, which "just works", but it requires a large number of
Rust/Cargo dependencies.
The "icu4c"
mode reduces the number of Rust dependencies, but it requires having a local copy
of ICU4C available. To configure "icu4c"
mode in Cargo, set the following environment variables:
ICU4C_LIB_PATH
to a directory full of ICU4C static or shared libraries.ICU4C_LINK_STATICALLY
to any value to use the static libraries.ICU4C_RENAME_VERSION
to the integer ICU4C version if ICU4C has renaming
enabled. By default, we attempt to link non-renamed symbols.If using dynamic linking, at runtime, you may need to set [DY]LD_LIBRARY_PATH
to the ICU4C_LIB_PATH
.
If not using Cargo, make sure to pass ICU4C_LIB_PATH
to the linker via -L
, link against
icuuc
, icui18n
and icudata
via -l
flags, and set --cfg icu4c_enable_renaming
if you need
renamed ICU4C symbols.
```rust use icu::collections::codepointtrie::CodePointTrie; use icu::collections::codepointtrie::TrieType; use icucodepointtriebuilder::CodePointTrieBuilder; use icucodepointtriebuilder::CodePointTrieBuilderData;
let defaultvalue = 1; let errorvalue = 2; let valuesbycode_point = &[3, 4, 5, 6];
let cpt: CodePointTrie
asserteq!(cpt.get32(0), 3); asserteq!(cpt.get32(1), 4); asserteq!(cpt.get32(2), 5); asserteq!(cpt.get32(3), 6); asserteq!(cpt.get32(4), 1); // default value asserteq!(cpt.get32(u32::MAX), 2); // error value ```
For more information on development, authorship, contributing etc. please visit ICU4X home page
.