#unicode #general #category #properties #no-std

no-std unicode-general-category

快速查找字符的Unicode通用类别属性

6个版本 (重大更新)

0.6.0 2022年9月19日
0.5.1 2022年1月25日
0.4.0 2021年3月26日
0.3.0 2020年11月18日
0.1.0 2019年12月13日

#192文本处理

Download history 10218/week @ 2024-03-14 11367/week @ 2024-03-21 9006/week @ 2024-03-28 8165/week @ 2024-04-04 7528/week @ 2024-04-11 7730/week @ 2024-04-18 6493/week @ 2024-04-25 6803/week @ 2024-05-02 6712/week @ 2024-05-09 7594/week @ 2024-05-16 6967/week @ 2024-05-23 7127/week @ 2024-05-30 5949/week @ 2024-06-06 7204/week @ 2024-06-13 6674/week @ 2024-06-20 6187/week @ 2024-06-27

27,250 每月下载量
129crate中(9个直接使用)

Apache-2.0

220KB
4K SLoC

unicode-general-category


使用Unicode 15.0数据在Rust中对char的Unicode通用类别属性进行快速查找。此crate与no-std兼容。

用法

use unicode_general_category::{get_general_category, GeneralCategory};

fn main() {
    assert_eq!(get_general_category('A'), GeneralCategory::UppercaseLetter);
}

性能与实现说明

ucd-generate用于生成tables.rs。构建脚本(build.rs)将其编译成两层查找表。查找时间为常数,因为它只是对两个数组进行索引。

两层方法将码点映射到块,然后映射到块内的位置。这允许第二层块进行去重,节省空间。代码通过块大小进行参数化,块大小必须是2的幂。构建脚本中的值对于数据集是最佳的。

这种方法以一些空间为代价换取更快的查找。表占用大约45KiB。基准测试表明,这种方法比典型的二分查找方法快5-10倍。

可能还有进一步的优化可以消除第一级数组中的某些重复值的序列。

无运行时依赖