8次发布
使用旧Rust 2015
0.1.7 | 2015年5月4日 |
---|---|
0.1.6 | 2015年4月8日 |
0.1.5 | 2015年3月16日 |
0.1.4 | 2015年1月30日 |
0.1.0 | 2014年11月14日 |
1737 in 文本处理
31 每月下载
在 2 个crate中(通过 unicode_names_macros)使用
1.5MB
19K SLoC
unicode_names
在运行时和编译时,时间和内存高效地将字符映射到其Unicode 7.0名称。
extern crate unicode_names;
fn main() {
println!("☃ is called {}", unicode_names::name('☃')); // SNOWMAN
println!("{} is happy", unicode_names::character("white smiling face")); // ☺
// (NB. case insensitivity)
}
映射使用类似于Python的 unicodedata
模块的技术进行压缩,尽管这里的映射大约小70KB(12%)。
lib.rs
:
在字符与其标准名称之间进行转换。
此crate提供两个函数,用于将 char
映射到Unicode标准(7.0)中给出的名称。没有运行时要求,因此仅使用 core
可用(这需要指定 no_std
cargo功能)。表单高度压缩,但仍然很大(500KB),并且在两个方向上仍然提供高效的 O(1)
查找(更精确地,O(name的长度)
)。
extern crate unicode_names;
fn main() {
println!("☃ is called {:?}", unicode_names::name('☃')); // SNOWMAN
println!("{:?} is happy", unicode_names::character("white smiling face")); // ☺
// (NB. case insensitivity)
}
源代码.
宏
相关的 unicode_names_macros
crate提供两个宏,用于编译时转换,提供类似Python的 "\N{...}"
的命名字面量。
named_char!(name)
接受单个字符串name
并创建一个char
字面量。named!(string)
接收一个字符串,并将任何\\N{name}
序列替换为具有该名称的字符。注意:字符串转义序列不能自定义,因此需要额外的反斜杠(或原始字符串)。
#![feature(plugin)]
#![plugin(unicode_names_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");
}
支持Cargo
此包位于crates.io,因此请将以下任一(或两个)添加到您的 Cargo.toml
中。
[dependencies]
unicode_names = "0.1"
unicode_names_macros = "0.1"