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)

Download history 7846/week @ 2024-05-02 7843/week @ 2024-05-09 7223/week @ 2024-05-16 8169/week @ 2024-05-23 7280/week @ 2024-05-30 257841/week @ 2024-06-06 561959/week @ 2024-06-13 232083/week @ 2024-06-20 150074/week @ 2024-06-27 74145/week @ 2024-07-04 71189/week @ 2024-07-11 70420/week @ 2024-07-18 68827/week @ 2024-07-25 71393/week @ 2024-08-01 66559/week @ 2024-08-08 52271/week @ 2024-08-15

270,660 每月下载量
用于 131 个软件包 (11 直接)

Unicode-3.0

1.5MB
24K SLoC

icu_normalizer crates.io

将文本标准化为 Unicode 正规化形式。

此模块作为其自己的软件包(icu_normalizer)以及 icu 软件包的一部分发布。有关 ICU4X 项目的更多详细信息,请参阅后者。

实现说明

标准化器在内部通过 Unicode 标量值的惰性迭代器(Rust char)操作,遍历保证有效的 UTF-8、可能无效的 UTF-8 和可能无效的 UTF-16 是一个不会泄露到标准化器内部的过程。格式不正确的字节序列被处理为 U+FFFD。

标准化器数据布局完全不基于 ICU4C 设计。相反,标准化数据布局是一个从零开始设计,针对将 NFD 分解与比较器融合的概念进行优化。也就是说,分解标准化器是比较器激发的数据布局的副产品。

值得注意的是,分解数据结构针对起始分解到自身进行了优化,这是最常见的情况,以及针对起始分解到基本多语言平面上的起始和非起始。值得注意的是,在这种情况下,比较器利用了这种分解的第二字符是非起始的知识。因此,两个起始之间的分解通过通用回退路径处理,该路径通过偏移量和长度从数组中查找分解,而不是直接将 BMP 起始对直接烘焙到 trie 值中。

分解到非起始是硬编码的。目前,在 Unicode 中,这些似乎属于三个类别中的特殊案例

  1. 已弃用的组合符号。
  2. 特定的藏文元音符号。
  3. NFKD 仅:半角假名发声符号。

希望Unicode永远不会向非起始字符添加更多的分解(除了字符分解成自身之外),但如果是这样,就需要代码更新而不是仅仅的数据更新。

合成正常化程序基于分解正常化程序,通过按照规范执行规范合成后处理。然而,作为优化,合成正常化程序尝试通过已正常化的文本,这些文本由不会向后组合的起始字符组成,并且在跟随一个分解以起始字符开头的字符时映射到自身。

与ICU4C相比,合成正常化程序只有最简单的透明处理(在最佳情况下,每个字符只有一个反转列表查找)和完全分解然后规范合成的行为,而ICU4C在这两个极端之间有其他路径。ICU4X排序器根本不使用FCD概念,以避免检查FCD条件是否成立的工作。

更多信息

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

依赖项

~1.1–1.8MB
~35K SLoC