10 个稳定版本
1.5.0 | 2024 年 5 月 28 日 |
---|---|
1.4.1 | 2024 年 1 月 23 日 |
1.4.0 | 2023 年 11 月 16 日 |
1.2.0 | 2023 年 4 月 14 日 |
0.0.1 | 2021 年 4 月 29 日 |
#341 在 国际化 (i18n) 中
270,660 每月下载量
用于 131 个软件包 (11 直接)
1.5MB
24K SLoC
icu_normalizer
将文本标准化为 Unicode 正规化形式。
此模块作为其自己的软件包(icu_normalizer
)以及 icu
软件包的一部分发布。有关 ICU4X 项目的更多详细信息,请参阅后者。
实现说明
标准化器在内部通过 Unicode 标量值的惰性迭代器(Rust char
)操作,遍历保证有效的 UTF-8、可能无效的 UTF-8 和可能无效的 UTF-16 是一个不会泄露到标准化器内部的过程。格式不正确的字节序列被处理为 U+FFFD。
标准化器数据布局完全不基于 ICU4C 设计。相反,标准化数据布局是一个从零开始设计,针对将 NFD 分解与比较器融合的概念进行优化。也就是说,分解标准化器是比较器激发的数据布局的副产品。
值得注意的是,分解数据结构针对起始分解到自身进行了优化,这是最常见的情况,以及针对起始分解到基本多语言平面上的起始和非起始。值得注意的是,在这种情况下,比较器利用了这种分解的第二字符是非起始的知识。因此,两个起始之间的分解通过通用回退路径处理,该路径通过偏移量和长度从数组中查找分解,而不是直接将 BMP 起始对直接烘焙到 trie 值中。
分解到非起始是硬编码的。目前,在 Unicode 中,这些似乎属于三个类别中的特殊案例
- 已弃用的组合符号。
- 特定的藏文元音符号。
- NFKD 仅:半角假名发声符号。
希望Unicode永远不会向非起始字符添加更多的分解(除了字符分解成自身之外),但如果是这样,就需要代码更新而不是仅仅的数据更新。
合成正常化程序基于分解正常化程序,通过按照规范执行规范合成后处理。然而,作为优化,合成正常化程序尝试通过已正常化的文本,这些文本由不会向后组合的起始字符组成,并且在跟随一个分解以起始字符开头的字符时映射到自身。
与ICU4C相比,合成正常化程序只有最简单的透明处理(在最佳情况下,每个字符只有一个反转列表查找)和完全分解然后规范合成的行为,而ICU4C在这两个极端之间有其他路径。ICU4X排序器根本不使用FCD概念,以避免检查FCD条件是否成立的工作。
更多信息
有关开发、作者、贡献等信息,请访问ICU4X 主页
。
依赖项
~1.1–1.8MB
~35K SLoC