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,
|
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> {
|
impl<'s> InputTake for WrappedInput<'s> {
|
||||||
@ -87,12 +93,17 @@ where
|
|||||||
panic!("Attempted to extend past the end of the WrappedInput.")
|
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
|
// TODO: calculate updated values for WrappedInput
|
||||||
WrappedInput {
|
WrappedInput {
|
||||||
full_source: self.full_source,
|
full_source: self.full_source,
|
||||||
start: new_start,
|
start: new_start,
|
||||||
end: new_end,
|
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);
|
let first_cut = input.slice(6..17);
|
||||||
first_cut.slice(4..14);
|
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