inline: trim verbatim whitespace
This commit is contained in:
parent
6e28b0e162
commit
b3896908a3
2 changed files with 46 additions and 0 deletions
|
@ -159,6 +159,9 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
|
||||||
let mut span_inner = Span::empty_at(self.span.end());
|
let mut span_inner = Span::empty_at(self.span.end());
|
||||||
let mut span_outer = None;
|
let mut span_outer = None;
|
||||||
|
|
||||||
|
let mut non_whitespace_first = None;
|
||||||
|
let mut non_whitespace_last = None;
|
||||||
|
|
||||||
while let Some(t) = self.eat() {
|
while let Some(t) = self.eat() {
|
||||||
if matches!(t.kind, lex::Kind::Seq(lex::Sequence::Backtick)) && t.len == opener_len
|
if matches!(t.kind, lex::Kind::Seq(lex::Sequence::Backtick)) && t.len == opener_len
|
||||||
{
|
{
|
||||||
|
@ -193,10 +196,23 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if !matches!(t.kind, lex::Kind::Whitespace) {
|
||||||
|
if non_whitespace_first.is_none() {
|
||||||
|
non_whitespace_first = Some((t.kind, span_inner.end()));
|
||||||
|
}
|
||||||
|
non_whitespace_last = Some((t.kind, span_inner.end() + t.len));
|
||||||
|
}
|
||||||
span_inner = span_inner.extend(t.len);
|
span_inner = span_inner.extend(t.len);
|
||||||
self.reset_span();
|
self.reset_span();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some((lex::Kind::Seq(lex::Sequence::Backtick), pos)) = non_whitespace_first {
|
||||||
|
span_inner = span_inner.with_start(pos);
|
||||||
|
}
|
||||||
|
if let Some((lex::Kind::Seq(lex::Sequence::Backtick), pos)) = non_whitespace_last {
|
||||||
|
span_inner = span_inner.with_end(pos);
|
||||||
|
}
|
||||||
|
|
||||||
self.events.push_back(Event {
|
self.events.push_back(Event {
|
||||||
kind: EventKind::Str,
|
kind: EventKind::Str,
|
||||||
span: span_inner,
|
span: span_inner,
|
||||||
|
@ -572,6 +588,32 @@ mod test {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn verbatim_whitespace() {
|
||||||
|
test_parse!(
|
||||||
|
"` `",
|
||||||
|
(Enter(Verbatim), "`"),
|
||||||
|
(Str, " "),
|
||||||
|
(Exit(Verbatim), "`"),
|
||||||
|
);
|
||||||
|
test_parse!(
|
||||||
|
"` abc `",
|
||||||
|
(Enter(Verbatim), "`"),
|
||||||
|
(Str, " abc "),
|
||||||
|
(Exit(Verbatim), "`"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn verbatim_trim() {
|
||||||
|
test_parse!(
|
||||||
|
"` ``abc`` `",
|
||||||
|
(Enter(Verbatim), "`"),
|
||||||
|
(Str, "``abc``"),
|
||||||
|
(Exit(Verbatim), "`"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn math() {
|
fn math() {
|
||||||
test_parse!(
|
test_parse!(
|
||||||
|
|
|
@ -26,6 +26,10 @@ impl Span {
|
||||||
Self::new(start, self.end())
|
Self::new(start, self.end())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_end(self, end: usize) -> Self {
|
||||||
|
Self::new(self.start(), end)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_len(self, len: usize) -> Self {
|
pub fn with_len(self, len: usize) -> Self {
|
||||||
Self::by_len(self.start(), len)
|
Self::by_len(self.start(), len)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue