29个版本

0.3.15 2024年1月17日
0.3.14 2023年12月6日
0.3.13 2023年3月20日
0.3.8 2022年4月26日
0.2.0 2015年7月23日

#14 in 文本处理

Download history 1866932/week @ 2024-04-08 1863420/week @ 2024-04-15 1916203/week @ 2024-04-22 1724523/week @ 2024-04-29 1746534/week @ 2024-05-06 1847849/week @ 2024-05-13 1806426/week @ 2024-05-20 1829933/week @ 2024-05-27 1964888/week @ 2024-06-03 1725239/week @ 2024-06-10 1726094/week @ 2024-06-17 1799666/week @ 2024-06-24 1758218/week @ 2024-07-01 2005935/week @ 2024-07-08 1943668/week @ 2024-07-15 1908040/week @ 2024-07-22

7,725,372 每月下载量
用于 27,732 个crates(26个直接使用)

MIT/Apache

240KB
4K SLoC

unicode-bidi

本crate实现了用于显示混合从右到左和从左到右文本的Unicode双向算法。它使用安全的Rust编写,与当前稳定版本兼容。

文档

CI AppVeyor


lib.rs:

本crate实现了用于显示混合从右到左和从左到右文本的Unicode双向算法。它使用安全的Rust编写,与当前稳定版本兼容。

示例

use unicode_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",
  "ג",
  "ב",
  "א",
]);

特性

  • std:默认启用,但可以禁用以使unicode_bidi#![no_std] + alloc兼容。
  • hardcoded-data:默认启用。包括硬编码的Unicode双向数据以及更便捷的API。
  • serde:为相关类型添加了 serde::Serializeserde::Deserialize 实现。

依赖关系

~0–570KB