2个版本
使用旧的Rust 2015
0.1.1 | 2016年7月28日 |
---|---|
0.1.0 | 2016年7月25日 |
#1069 in 文本处理
7,757 每月下载量
在 5 个crate中(3个直接) 使用
2MB
33K SLoC
libucd
此库通过添加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_alphabetic 或 is_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_whitespace 或 is_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::True 、Trilean::Maybe 或 Trilean::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 |