#unicode-characters #unicode #name #table #bidirectional #character #length

no-std unicode_names

将字符映射到其Unicode标准中给出的名称,并在时间空间上都尽可能高效。完整的双向表仅重约500 KB,但在两个方向上仍然提供O(1)*查找。(*更精确地,O(name的长度)。)

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)使用

MIT/Apache

1.5MB
19K SLoC

unicode_names

Build Status Coverage Status

在运行时和编译时,时间和内存高效地将字符映射到其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"

无运行时依赖