[][src]Crate line_span

This crate features utilities for finding the start, end, and range of lines from a byte index. Further also being able to find the next and previous line, from an arbitrary byte index.

Current Line:

Next Line:

Previous Line:

LineSpan and LineSpanIter

The crate includes the LineSpanIter iterator. It is functionally equivalent to str::lines, with the addition that it includes the ability to get the start and end byte indices of each line.

An LineSpanIter can be created by calling line_spans, implemented in the LineSpans trait. The crate implements the LineSpans trait for str and String.

Note, LineSpan implements Deref to &str, so in general, swapping lines to line_spans would not cause many issues.

use line_span::LineSpans;

let text = "foo\nbar\r\nbaz";

for span in text.line_spans() {
    println!("{:>2?}: {:?}", span.range(), span.as_str());
}

This will output the following:

 0.. 3: "foo"
 4.. 7: "bar"
 9..12: "baz"

Current Line, Previous Line, and Next Line

use line_span::{find_line_range, find_next_line_range, find_prev_line_range};

let text = "foo\nbar\r\nbaz";
//                ^
let i = 5; // 'a' in "bar"

let curr_range = find_line_range(text, i);
let next_range = find_next_line_range(text, i).unwrap();
let prev_range = find_prev_line_range(text, i).unwrap();

assert_eq!(curr_range, 4..7);
assert_eq!(&text[curr_range], "bar");

assert_eq!(prev_range, 0..3);
assert_eq!(&text[prev_range], "foo");

assert_eq!(next_range, 9..12);
assert_eq!(&text[next_range], "baz");

Structs

LineSpan

LineSpan represents a single line, excluding \n and \r\n.

LineSpanIter

An iterator over LineSpans.

Traits

LineSpans

Trait which implements line_spans to get a LineSpanIter.

Functions

find_line_end

Find the end (byte index) of the line, which index is within.

find_line_range

Find the start and end (byte index) of the line, which index is within.

find_line_start

Find the start (byte index) of the line, which index is within.

find_next_line_end

Find the end (byte index) of the next line, the line after the one which index is within.

find_next_line_range

Find the start and end (byte index) of the next line, the line after the one which index is within.

find_next_line_start

Find the start (byte index) of the next line, the line after the one which index is within.

find_prev_line_end

Find the end (byte index) of the previous line, the line before the one which index is within.

find_prev_line_range

Find the start and end (byte index) of the previous line, the line before the one which index is within.

find_prev_line_start

Find the start (byte index) of the previous line, the line before the one which index is within.