2 个版本
0.1.1 | 2023年6月24日 |
---|---|
0.1.0 | 2023年6月24日 |
#37 in #tbd
14KB
219 行
包 lineindex
简单的行索引字符串。
示例
待定
变更
版本:0.1.1
- 为
IndexedString
添加了AsRef<str>
的实现。 - 为
IndexedString
添加了as_str()
方法。 - 为
IndexedString
添加了as_bytes()
方法。
版本:0.1.0
初始版本。
lib.rs
:
一个简单的行索引字符串。
与将字符串破坏性地分割成行不同,此结构将允许创建一个字节数据/字符范围向量,每个范围描述原始字符串中的某一行。
示例
给定以下简单字符串,
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
-----------------------------------------------------------
a a  b b b  c c c c  d d
我们得到以下行索引范围集。
| 行 | < Byte | < Char | > Byte | > Char | 字符串 | |======|========|========|========|========|=========| | 0 | 0 | 0 | 2 | 2 | "aa" | | 1 | 3 | 3 | 6 | 6 | "bbb" | | 2 | 7 | 7 | 11 | 11 | "cccc" | | 3 | 12 | 12 | 13 | 13 | "dd" |
这个范围集可用于确定字符所在的行,以及返回行的索引或整行文本。
use lineindex::IndexedString;
let indexed = IndexedString::from("aa\nbbb\ncccc\ndd");
assert_eq!(indexed.lines(), 4);
assert_eq!(indexed.line_for_byte(4), Some(1));
assert_eq!(indexed.line_for_character(5), Some(1));
assert_eq!(indexed.byte_range_for_line(1), Some(3..=6));
assert_eq!(indexed.character_range_for_line(2), Some(7..=11));
assert_eq!(indexed.line_str(0), Some("aa\n"));