8 个版本 (破坏性)
0.7.0 | 2022 年 9 月 19 日 |
---|---|
0.6.0 | 2022 年 1 月 25 日 |
0.5.0 | 2021 年 2 月 3 日 |
0.4.0 | 2020 年 11 月 18 日 |
0.1.0 | 2019 年 12 月 13 日 |
#629 在 文本处理
1,704 每月下载次数
用于 10 个 crate (3 直接)
70KB
1.5K SLoC
unicode-joining-type
使用 Unicode 15.0 数据在 Rust 中快速查找 char
的 Unicode 连接类型和连接组属性。此 crate 兼容 no-std。
用法
use unicode_joining_type::{get_joining_type, JoiningType};
use unicode_joining_type::{get_joining_group, JoiningGroup};
fn main() {
assert_eq!(get_joining_type('A'), JoiningType::NonJoining);
assert_eq!(get_joining_group('ھ'), JoiningGroup::KnottedHeh);
}
性能 & 实现说明
ucd-generate 用于生成 joining_type_tables.rs
和 joining_group_tables.rs
。构建脚本 (build.rs
) 将这些编译成两个级别的查找表。查找时间是常数,因为它只是索引到两个数组。
两级方法将代码点映射到块,然后映射到块内的位置。这允许第二级块去重,节省空间。代码对块大小进行了参数化,块大小必须是 2 的幂。构建脚本中的值对于数据集是最佳的。
这种方法以一些空间为代价换取更快的查找。连接类型表占用约 26KiB,连接组表占用约 6.75KiB。基准测试表明,这种方法比典型的二分搜索方法快 5–10 倍。
还有进一步减小大小的空间。例如,通过消除第一级块数组的末尾重复的块映射。