8 个版本 (破坏性更新)
0.9.0 | 2019年3月3日 |
---|---|
0.8.0 | 2019年1月2日 |
0.7.0 | 2018年2月7日 |
0.6.0 | 2017年9月22日 |
0.1.0 | 2017年6月20日 |
#1485 in 文本处理
每月 4,770 次下载
在 74 个 crate 中使用 (直接使用3个)
135KB
2.5K SLoC
UNIC — Unicode 双向算法
此 UNIC 组件实现了来自 Unicode® 标准附件 #9 - Unicode 双向算法 的算法,即 UBA,用于显示混合从右到左和从左到右的文本。它使用安全 Rust 编写,与当前稳定版本兼容。
备注
此组件的初始代码基于 unicode-bidi
。
lib.rs
:
UNIC — Unicode 双向算法
unic
的组件:Rust 的 Unicode 和国际化 crate。
此 UNIC 组件实现了来自 Unicode 标准附件 #9 - Unicode 双向算法 的算法,即 UBA,用于显示混合从右到左和从左到右的文本。它使用安全 Rust 编写,与当前稳定版本兼容。
示例
use unic_bidi::BidiInfo;
// This example text is defined using `concat!` because some browsers
// and text editors have trouble displaying bidi strings.
let text = concat![
"א",
"ב",
"ג",
"a",
"b",
"c",
];
// Resolve embedding levels within the text. Pass `None` to detect the
// paragraph level automatically.
let bidi_info = BidiInfo::new(&text, None);
// This paragraph has embedding level 1 because its first strong character is RTL.
assert_eq!(bidi_info.paragraphs.len(), 1);
let para = &bidi_info.paragraphs[0];
assert_eq!(para.level.number(), 1);
assert_eq!(para.level.is_rtl(), true);
// Re-ordering is done after wrapping each paragraph into a sequence of
// lines. For this example, I'll just use a single line that spans the
// entire paragraph.
let line = para.range.clone();
let display = bidi_info.reorder_line(para, line);
assert_eq!(display, concat![
"a",
"b",
"c",
"ג",
"ב",
"א",
]);
依赖项
~210KB