#string #tbd #line-indexed

lineindex

简单的行索引字符串

2 个版本

0.1.1 2023年6月24日
0.1.0 2023年6月24日

#37 in #tbd

MIT 许可证

14KB
219

包 lineindex

简单的行索引字符串。

示例

待定

变更

版本:0.1.1

  1. IndexedString 添加了 AsRef<str> 的实现。
  2. IndexedString 添加了 as_str() 方法。
  3. 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"));

无运行时依赖