summaryrefslogtreecommitdiff
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-01-13 16:09:08 +0100
committerLaurenz <laurmaedje@gmail.com>2021-01-13 16:09:08 +0100
commit274e008e2c775d9c8c888767a6baeaff9e99de9d (patch)
treed648d0ae1182bf579968c31d1c9627edcced206e /src/parse/mod.rs
parent1d01b93f679bccf8f228616bcf0f0ebcdee64d98 (diff)
Move heading tests to integration 🚚
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs23
1 files changed, 9 insertions, 14 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 4483ed76..5fdaa4ce 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -34,11 +34,9 @@ fn tree(p: &mut Parser) -> Tree {
let mut at_start = true;
let mut tree = vec![];
while !p.eof() {
- if let Some(node) = p.span_if(|p| node(p, at_start)) {
- match node.v {
- Node::Parbreak => at_start = true,
- Node::Space => {}
- _ => at_start = false,
+ if let Some(node) = p.span_if(|p| node(p, &mut at_start)) {
+ if !matches!(node.v, Node::Parbreak | Node::Space) {
+ at_start = false;
}
tree.push(node);
}
@@ -47,7 +45,7 @@ fn tree(p: &mut Parser) -> Tree {
}
/// Parse a syntax node.
-fn node(p: &mut Parser, at_start: bool) -> Option<Node> {
+fn node(p: &mut Parser, at_start: &mut bool) -> Option<Node> {
let node = match p.peek()? {
// Bracket call.
Token::LeftBracket => {
@@ -64,7 +62,7 @@ fn node(p: &mut Parser, at_start: bool) -> Option<Node> {
Token::Underscore => Node::Emph,
Token::Tilde => Node::Text("\u{00A0}".into()),
Token::Hash => {
- if at_start {
+ if *at_start {
return Some(Node::Heading(heading(p)));
} else {
Node::Text(p.get(p.peek_span()).into())
@@ -72,11 +70,8 @@ fn node(p: &mut Parser, at_start: bool) -> Option<Node> {
}
Token::Backslash => Node::Linebreak,
Token::Space(newlines) => {
- if newlines < 2 {
- Node::Space
- } else {
- Node::Parbreak
- }
+ *at_start |= newlines > 0;
+ if newlines < 2 { Node::Space } else { Node::Parbreak }
}
Token::Text(text) => Node::Text(text.into()),
Token::Raw(t) => Node::Raw(raw(p, t)),
@@ -122,8 +117,8 @@ fn heading(p: &mut Parser) -> NodeHeading {
// Parse the heading contents.
let mut contents = vec![];
- while p.check(|t| !matches!(t, Token::Space(n) if n >= 1)) {
- if let Some(node) = p.span_if(|p| node(p, false)) {
+ while p.check(|t| !matches!(t, Token::Space(n) if n > 0)) {
+ if let Some(node) = p.span_if(|p| node(p, &mut false)) {
contents.push(node);
}
}