#unicode-characters #unicode #character

ucd

扩展了char类型,提供对UCD(Unicode字符数据库)大多数字段的访问,自9.0.0版本起。它旨在紧凑、快速,使用最少的依赖(仅rust的核心crate)。不包括所有属性,尤其是字符名称。

2个版本

使用旧的Rust 2015

0.1.1 2016年7月28日
0.1.0 2016年7月25日

#1069 in 文本处理

Download history 2369/week @ 2024-03-03 2219/week @ 2024-03-10 2861/week @ 2024-03-17 3316/week @ 2024-03-24 2021/week @ 2024-03-31 2380/week @ 2024-04-07 2139/week @ 2024-04-14 2353/week @ 2024-04-21 2346/week @ 2024-04-28 2233/week @ 2024-05-05 2240/week @ 2024-05-12 2529/week @ 2024-05-19 2492/week @ 2024-05-26 2082/week @ 2024-06-02 1502/week @ 2024-06-09 1425/week @ 2024-06-16

7,757 每月下载量
5 个crate中(3个直接) 使用

MIT 许可证

2MB
33K SLoC

libucd

Build Status

此库通过添加char类型的Codepoint特质来扩展内置的char类型,该特质实现了UCD(Unicode字符数据库)的100个属性。它旨在快速和紧凑,并且具有最少的依赖(它不需要Rust标准库,因此只需要rust的core crate)。

extern crate ucd;
use ucd::Codepoint;

fn main() {
    let salawat: char = '';
    let decomp: String = salawat.decomposition_map().collect();
    println!("{} -> {}", salawat, decomp);
    // ﷺ -> صلى الله عليه وسلم
}

尽管该库相当全面,但它并不完整。它缺少的属性包括

  • 字符 名称 和别名
  • Unihan属性
  • 唐古特源数据
  • 命名序列
  • 标准化变体
  • CJK部首
  • 表情符号源数据

数据以每个属性每个值的代码点范围数组的形式压缩,排除了最常见值。查找通过二分搜索实现,应提供O(1)访问。一个非常不科学的测试表明,每次查找在大约100ns内。

免责声明

请注意,这些数据是从UCD的平面XML版本派生出来的。虽然这是Unicode发布的,但它不是数据库的官方版本。因此,不能保证此库与官方数据库完全一致。然而,单元测试确实表明与XML数据库至少是一致的。

参考

注意,在大多数情况下,枚举值只是将属性值的完整名称转换为驼峰式。也许我最终会创建一个更有用的rustdoc版本。

在下表中,第一列是属性名称,第二列是方法名称。这些方法通过在char上的ucd::Codepoint特质上实现。

一般 方法 返回类型 注意
年龄 age Option<(u8,u8)> 如果字符未分配,则返回None,否则返回主版本和次要版本的元组
block Option<UnicodeBlock>
General_Category category UnicodeCategory 如果未分配,则返回Unassigned
ISO_Comment(已弃用,稳定化) iso_comment &str 所有字符都是空的,即返回 ""
函数和外观 方法 返回类型 注意
字母 Codepoint::is_alphabeticis_alpha bool Rust 的 char 已经定义了一个方法 is_alphabetic,它覆盖了此实现并提供了略微不同的结果(可能使用了一个过时的 UCD 版本)。请使用命名空间,或使用 is_alpha 别名。
ASCII_Hex_Digit is_hex_digit_ascii bool
破折号 is_dash bool
Default_Ignorable_Code_Point is_default_ignorable bool
已弃用 is_deprecated bool
重音符号 is_diacritic bool
扩展符 is_extender bool
十六进制数字 is_hex_digit bool
连字符 (已弃用,已稳定) is_hyphen bool
逻辑顺序异常 is_logical_order_exception bool
数学 is_math bool
非字符代码点 is_noncharacter bool
其他字母 is_alphabetic_other bool
其他默认可忽略代码点 is_default_ignorable_other bool
其他数学 is_math_other bool
前缀连接符 is_prepended_concatentation_mark bool
引号标记 is_quotation_mark bool
句子终止符 is_sentence_terminal bool
软点 is_soft_dotted bool
终止标点符号 is_terminal_punctuation bool
变体选择符 is_variation_selector bool
空白字符 Codepoint::is_whitespaceis_white bool 同样,char 使用其自身的实现来覆盖它,所以请使用命名空间或别名。
数字 方法 返回类型 注意
数字类型 numeric_type Option<NumericType>
数字值 numeric_value Option<数字> Number 类型是一个枚举,包括 Integer(i64)Rational(i32,u32),以覆盖从 10^12 到 1/160 的值。
标识符和语法 方法 返回类型 注意
ID_Continue is_id_continue bool
ID_Start is_id_start bool
Other_ID_Continue is_id_continue_other bool
Other_ID_Start is_id_start_other bool
Pattern_Syntax is_pattern_syntax bool
Pattern_White_Space is_pattern_whitespace bool
XID_Continue is_id_continue_nfkc bool
XID_Start is_id_start_nfkc bool
脚本 方法 返回类型 注意
East_Asian_Width east_asian_width EastAsianWidth
Hangul_Syllable_Type hangul_syllable_type Option<HangulSyllableType>
表意文字 is_ideograph bool
IDS_Binary_Operator is_ideograph_description_sequence_binary_operator bool
IDS_Trinary_Operator is_ideograph_description_sequence_trinary_operator bool
Indic_Positional_Category indic_positional_category Option<IndicPositionalCategory>
Indic_Syllabic_Category indic_syllabic_category Option<IndicSyllabicCategory>
Jamo_Short_Name jamo_short_name Option<&str>
Join_Control join_control bool
Joining_Group joining_group JoiningGroup
Joining_Type joining_type JoiningType
部首 is_ideograph_description_sequence_radical bool
脚本 script Option<脚本>
Script_Extensions script_extensions Option<&[脚本]>
Unified_Ideograph is_ideograph_unified bool
双向性 方法 返回类型 注意
Bidi_Class bidi_class BidiClass
Bidi_Control bidi_is_control bool
Bidi_Mirrored bidi_is_mirrored bool
Bidi_Mirroring_Glyph bidi_mirror Option<char>
Bidi_Paired_Bracket bidi_paired_braclet char
Bidi_Paired_Bracket_Type bidi_paired_bracket_type Option<BidiPairedBracketType>
大小写 方法 返回类型 注意
Case_Folding casefold CharIter CharIter 是一系列 char 的迭代器,使用它的原因是库没有使用 std,因此不能动态分配内存。
Case_Ignorable is_case_ignorable bool
Cased is_cased bool
Changes_When_Casefolded changes_when_casefolded bool
Changes_When_Casemapped changes_when_casemapped bool
Changes_When_Lowercased changes_when_lowercased bool
Changes_When_NFKC_Casefolded changes_when_casefolded_nfkc bool
Changes_When_Titlecased changes_when_titlecased bool
Changes_When_Uppercased changes_when_uppercased bool
FC_NFKC_Closure (已弃用) casefold_nfkc_closure CharIter
Lowercase is_lowercase bool 同样,char 使用其自身的实现来覆盖它,所以请使用命名空间或别名。
Lowercase_Mapping lowercase CharIter
NFKC_Casefold casefold_nfkc CharIter
Other_Lowercase is_lowercase_other bool
Other_Uppercase is_uppercase_other bool
Simple_Case_Folding casefold_simple char
Simple_Lowercase_Mapping lowercase_simple char
Simple_Titlecase_Mapping titlecase_simple char
Simple_Uppercase_Mapping uppercase_simple char
Titlecase_Mapping titlecase CharIter
Uppercase is_uppercase bool 同样,char 使用其自身的实现来覆盖它,所以请使用命名空间或别名。
Uppercase_Mapping uppercase CharIter
Normalisation 方法 返回类型 注意
Canonical_Combining_Class canonical_combining_class u8
Composition_Exclusion excluded_from_composition bool
Decomposition_Mapping decomposition_map CharIter
Decomposition_Type decomposition_type Option<DecompositionType>
Expands_On_NFC (已弃用) expands_on_nfc bool
Expands_On_NFD (已弃用) expands_on_nfd bool
Expands_On_NFKC (已弃用) expands_on_nfkc bool
Expands_On_NFKD (已弃用) expands_on_nfkd bool
Full_Composition_Exclusion excluded_from_composition_fully bool
NFC_Quick_Check quick_check_nfc Trilean 返回 Trilean::TrueTrilean::MaybeTrilean::False 之一
NFD_Quick_Check quick_check_nfd bool
NFKC_Quick_Check quick_check_nfkc Trilean
NFKD_Quick_Check quick_check_nfkd bool
Segmentation 方法 返回类型 注意
Grapheme_Base is_grapheme_base bool
Grapheme_Cluster_Break grapheme_cluster_break GraphemeClusterBreak
Grapheme_Extend is_grapheme_extend bool
Grapheme_Link (已弃用) is_grapheme_link bool
Line_Break linebreak_class Option<LinebreakClass>
Other_Grapheme_Extend is_grapheme_extend_other bool
Sentence_Break sentence_break SentenceBreak
Word_Break word_break WordBreak

无运行时依赖