#unicode-characters #unicode #table #generate-table #character #generate #fst

app yeslogic-ucd-generate

一个用于生成Unicode字符数据库压缩表示的程序,支持高效搜索并支持额外的表格

6个版本 (3个重大更改)

0.6.0 2022年9月16日
0.5.0 2021年6月4日
0.4.2 2020年11月17日
0.3.0 2020年1月9日

#1218文本处理

每月27次 下载

MIT/Apache

675KB
7.5K SLoC

yeslogic-ucd-generate

一个用于在Rust源代码中生成Unicode表的命令行工具。表通常可以以以下三种格式之一生成:字符范围的有序序列、一个有限状态转换器或一个压缩字典树。还提供了对名称规范化的完全支持。此工具还支持使用regex-automata crate将正则表达式序列化为DFAs。


此版本的ucd-generate在BurntSushi版本的基础上增加了以下内容

  • joining-group 子命令。 #32
  • canonical-combining-class 子命令。 #45

安装

由于这个工具主要是作为开发者在编写Rust程序时使用的开发工具,主要安装方法是来自crates.io

$ cargo install yeslogic-ucd-generate
yeslogic-ucd-generate --help

示例

以下示例展示了生成三个属性的表并将它们表示为正常的Rust字符字面量范围的输出

要运行此示例,您需要下载Unicode字符数据库(UCD)

$ mkdir /tmp/ucd-14.0.0
$ cd /tmp/ucd-14.0.0
$ curl -LO https://www.unicode.org/Public/zipped/14.0.0/UCD.zip
$ unzip UCD.zip

请注意,在版本13.0.0之前,emoji/emoji-data.txt 文件是与UCD捆绑包分开分发的。对于这些版本,您可能需要从https://unicode.org/Public/emoji 下载此文件,以便生成某些表格。

现在告诉 ucd-generate 您想要什么,并将其指向上面创建的目录

$ ucd-generate property-bool /tmp/ucd-14.0.0 --include Hyphen,Dash,Quotation_Mark --chars

然后是输出,这是有效的Rust源代码

// DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
//
//   ucd-generate property-bool /tmp/ucd-14.0.0 --include Hyphen,Dash,Quotation_Mark --chars
//
// Unicode version: 14.0.0.
//
// ucd-generate 0.2.10 is available on crates.io.

pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
  ("Dash", DASH), ("Hyphen", HYPHEN), ("Quotation_Mark", QUOTATION_MARK),
];

pub const DASH: &'static [(char, char)] = &[
  ('-', '-'), ('֊', '֊'), ('־', '־'), ('', ''), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
  ('', ''), ('\u{2e5d}', '\u{2e5d}'), ('', ''), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
  ('', ''), ('𐺭', '𐺭'),
];

pub const HYPHEN: &'static [(char, char)] = &[
  ('-', '-'), ('\u{ad}', '\u{ad}'), ('֊', '֊'), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
  ('', ''), ('', ''),
];

pub const QUOTATION_MARK: &'static [(char, char)] = &[
  ('"', '"'), ('\'', '\''), ('«', '«'), ('»', '»'), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
  ('', ''), ('', ''), ('', ''), ('', ''),
];

贡献

ucd-generate 工具没有特定的设计目标,除了收集Unicode表生成任务。如果您需要 ucd-generate 做某事,并且添加它是相对直接的,那么提交一个PR将非常好。否则,请提交一个问题,我们可以讨论。

未来工作

这个工具绝对不是全面的。事实上,它甚至远未达到全面,可能永远都无法做到。主要意图是收集几乎任何类型的Unicode生成任务。理论上,这将理想地取代今天在各个Unicode仓库中负责这一任务的Python程序的大杂烩。

很可能,并且可能是所希望的,这个工具最终会被像UNIC这样的更完整的项目所取代。《ucd-generate》工具的诞生源于为Rust的regex仓库添加更原则性的Unicode支持的愿望,并且为了满足我的特定需求,在独立开发中更容易实现。

最后,这个工具生成的结构可能不是最优的。特别是,我强烈怀疑trie集生成器可以大幅改进。

子仓库

本仓库包含三个子仓库

  • ucd-parse - 一个用于将UCD文件解析成结构化数据的仓库。
  • ucd-trie - 处理由《ucd-generate》输出的trie集表格格式的辅助类型。这个仓库具有no_std模式。
  • ucd-util - 一个专门小巧的仓库,用于Unicode辅助函数。这包括符号或字符名称规范化、表意文字名称生成以及用于搜索属性名称和值表的辅助函数。

许可证

本项目采用以下任一许可证:

依赖

~7.5MB
~100K SLoC