Implement text since line break.
This commit is contained in:
parent
bc29f1dfc0
commit
edff1e089d
30
src/main.rs
30
src/main.rs
@ -31,6 +31,12 @@ impl<'s> WrappedInput<'s> {
|
||||
preceding_line_break: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the text since the line break preceding the start of this WrappedInput.
|
||||
pub fn text_since_line_break(&self) -> &'s str {
|
||||
let start = self.preceding_line_break.unwrap_or(0);
|
||||
&self.full_source[start..self.start]
|
||||
}
|
||||
}
|
||||
|
||||
impl<'s> InputTake for WrappedInput<'s> {
|
||||
@ -87,12 +93,17 @@ where
|
||||
panic!("Attempted to extend past the end of the WrappedInput.")
|
||||
}
|
||||
|
||||
let skipped_text = &self.full_source[self.start..new_start];
|
||||
let last_line_feed = skipped_text
|
||||
.rfind('\n')
|
||||
.map(|idx| idx + self.preceding_line_break.unwrap_or(0) + 1);
|
||||
|
||||
// TODO: calculate updated values for WrappedInput
|
||||
WrappedInput {
|
||||
full_source: self.full_source,
|
||||
start: new_start,
|
||||
end: new_end,
|
||||
preceding_line_break: None,
|
||||
preceding_line_break: last_line_feed,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -158,4 +169,21 @@ mod tests {
|
||||
let first_cut = input.slice(6..17);
|
||||
first_cut.slice(4..14);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn line_break() {
|
||||
let input = WrappedInput::new("lorem\nfoo\nbar\nbaz\nipsum");
|
||||
assert_eq!(input.slice(5..).preceding_line_break, None);
|
||||
assert_eq!(input.slice(6..).preceding_line_break, Some(6));
|
||||
assert_eq!(input.slice(6..).slice(10..).preceding_line_break, Some(14));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn text_since_line_break() {
|
||||
let input = WrappedInput::new("lorem\nfoo\nbar\nbaz\nipsum");
|
||||
assert_eq!(input.text_since_line_break(), "");
|
||||
assert_eq!(input.slice(5..).text_since_line_break(), "lorem");
|
||||
assert_eq!(input.slice(6..).text_since_line_break(), "");
|
||||
assert_eq!(input.slice(6..).slice(10..).text_since_line_break(), "ba");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user