| Crates.io | line-column |
| lib.rs | line-column |
| version | 0.2.0 |
| created_at | 2024-11-05 11:59:36.642008+00 |
| updated_at | 2025-09-04 15:52:47.580693+00 |
| description | Simple calculate lines and columns of str index |
| homepage | |
| repository | https://github.com/A4-Tacks/line-column-rs |
| max_upload_size | |
| id | 1436441 |
| size | 19,436 |
Simple calculate lines and columns of str index
Use LF (0x0A) to split newline, also compatible with CRLF (0x0D 0x0A)
Newline char line number is current line
For index and char_index:
column exceeds the newline char, return the index of the newline charcolumn by zero, return previous char indexByte index to line number:
use line_column::line_column;
assert_eq!(line_column("", 0), (1, 1));
assert_eq!(line_column("a", 0), (1, 1));
assert_eq!(line_column("a", 1), (1, 2));
assert_eq!(line_column("ab", 1), (1, 2));
assert_eq!(line_column("a\n", 1), (1, 2));
assert_eq!(line_column("a\n", 2), (2, 1));
assert_eq!(line_column("a\nb", 2), (2, 1));
assert_eq!(line_column("a\r\nb", 2), (1, 3));
assert_eq!(line_column("a\r\nb", 3), (2, 1));
Character index to line number:
use line_column::char_line_column;
assert_eq!(char_line_column("", 0), (1, 1));
assert_eq!(char_line_column("a", 0), (1, 1));
assert_eq!(char_line_column("a", 1), (1, 2));
assert_eq!(char_line_column("ab", 1), (1, 2));
assert_eq!(char_line_column("😀\n", 1), (1, 2));
assert_eq!(char_line_column("😀\n", 2), (2, 1));
assert_eq!(char_line_column("😀\n❓", 2), (2, 1));
assert_eq!(char_line_column("😀\n❓", 2), (2, 1));
Line number to byte index:
use line_column::index;
assert_eq!(index("", 1, 1), 0);
assert_eq!(index("a", 1, 1), 0);
assert_eq!(index("a", 1, 2), 1);
assert_eq!(index("a\n", 1, 2), 1);
assert_eq!(index("a\n", 2, 1), 2);
assert_eq!(index("a\nx", 2, 2), 3);
assert_eq!(index("你好\n世界", 1, 2), 3); // byte index
assert_eq!(index("你好\n世界", 1, 3), 6);
assert_eq!(index("你好\n世界", 2, 1), 7);
Line number to character index:
use line_column::char_index;
assert_eq!(char_index("", 1, 1), 0);
assert_eq!(char_index("a", 1, 1), 0);
assert_eq!(char_index("你好\n世界", 1, 2), 1);
assert_eq!(char_index("你好\n世界", 1, 3), 2);
assert_eq!(char_index("你好\n世界", 2, 1), 3);
The end of string is considered a character:
use line_column::*;
assert_eq!(index("", 1, 1), 0);
assert_eq!(index("a", 1, 2), 1);
assert_eq!(char_index("", 1, 1), 0);
assert_eq!(char_index("a", 1, 2), 1);
assert_eq!(line_column("", 0), (1, 1));
assert_eq!(line_column("a", 1), (1, 2));
assert_eq!(char_line_column("", 0), (1, 1));
assert_eq!(char_line_column("a", 1), (1, 2));