12 个版本 (5 个稳定)
1.2.2 | 2024 年 3 月 10 日 |
---|---|
1.2.1 | 2023 年 12 月 14 日 |
1.2.0 | 2023 年 10 月 14 日 |
0.6.0 | 2022 年 10 月 13 日 |
0.2.2 | 2018 年 6 月 17 日 |
#51 在 文本处理
58,055 每月下载量
用于 73 个 Crates (17 个直接使用)
305KB
1K SLoC
unicode_names2
高效地在运行时和编译时将字符映射到其 Unicode 15.1 名称。
fn main() {
println!("☃ is called {}", unicode_names2::name('☃')); // SNOWMAN
println!("{} is happy", unicode_names2::character("white smiling face")); // ☺
// (NB. case insensitivity)
}
使用与 Python 的 unicodedata
模块类似的技巧进行压缩,但这里的大小约为 70KB(12%)更小。
lib.rs
:
在字符和它们的规范名称之间进行转换。
此 crate 提供了两个函数,用于从 char
映射到 Unicode 标准中给出的名称(15.1)。没有运行时要求,因此只能与 core
一起使用(这需要指定 no_std
cargo 功能)。表被高度压缩,但仍然很大(500KB),并提供双向高效的 O(1)
查找(更准确地说,O(名称长度)
)。
println!("☃ is called {:?}", unicode_names2::name('☃')); // SNOWMAN
println!("{:?} is happy", unicode_names2::character("white smiling face")); // ☺
// (NB. case insensitivity)
源代码.
宏
相关的 unicode_names2_macros
crate 提供了两个宏,用于编译时转换,提供类似于 Python 的 "\N{...}"
的命名字面量。
named_char!(name)
接受一个字符串name
并创建一个char
字面量。named!(string)
函数接受一个字符串,并将任何\\N{name}
序列替换为具有该名称的字符。注意。字符串转义序列不能自定义,因此需要额外的反斜杠(或原始字符串),除非您使用原始字符串。
#![feature(proc_macro_hygiene)]
#[macro_use]
extern crate unicode_names2_macros;
fn main() {
let x: char = named_char!("snowman");
assert_eq!(x, '☃');
let y: &str = named!("foo bar \\N{BLACK STAR} baz qux");
assert_eq!(y, "foo bar ★ baz qux");
let y: &str = named!(r"foo bar \N{BLACK STAR} baz qux");
assert_eq!(y, "foo bar ★ baz qux");
}
支持Cargo
此软件包位于crates.io,因此请将以下之一(或两者都)添加到您的 Cargo.toml
文件中。
[dependencies]
unicode_names2 = "0.2.1"
unicode_names2_macros = "0.2"