From b1a82ae22d819eaa81a5e1d0ece58e6b4717dda5 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 31 Jan 2022 11:16:31 +0100 Subject: [PATCH] Remove `markup_while` --- src/parse/mod.rs | 84 ++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/parse/mod.rs b/src/parse/mod.rs index b8ef30661..1131fec80 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -28,30 +28,6 @@ pub fn parse(src: &str) -> Rc { } } -/// Parse an atomic primary. Returns `Some` if all of the input was consumed. -pub fn parse_atomic( - prefix: &str, - src: &str, - _: bool, - _: usize, -) -> Option<(Vec, bool)> { - let mut p = Parser::with_prefix(prefix, src, TokenMode::Code); - primary(&mut p, true).ok()?; - p.consume_unterminated() -} - -/// Parse an atomic primary. Returns `Some` if all of the input was consumed. -pub fn parse_atomic_markup( - prefix: &str, - src: &str, - _: bool, - _: usize, -) -> Option<(Vec, bool)> { - let mut p = Parser::with_prefix(prefix, src, TokenMode::Markup); - markup_expr(&mut p); - p.consume_unterminated() -} - /// Parse some markup. Returns `Some` if all of the input was consumed. pub fn parse_markup( prefix: &str, @@ -83,6 +59,30 @@ pub fn parse_markup_elements( p.consume() } +/// Parse an atomic primary. Returns `Some` if all of the input was consumed. +pub fn parse_atomic( + prefix: &str, + src: &str, + _: bool, + _: usize, +) -> Option<(Vec, bool)> { + let mut p = Parser::with_prefix(prefix, src, TokenMode::Code); + primary(&mut p, true).ok()?; + p.consume_unterminated() +} + +/// Parse an atomic primary. Returns `Some` if all of the input was consumed. +pub fn parse_atomic_markup( + prefix: &str, + src: &str, + _: bool, + _: usize, +) -> Option<(Vec, bool)> { + let mut p = Parser::with_prefix(prefix, src, TokenMode::Markup); + markup_expr(&mut p); + p.consume_unterminated() +} + /// Parse a template literal. Returns `Some` if all of the input was consumed. pub fn parse_template( prefix: &str, @@ -128,11 +128,18 @@ pub fn parse_comment( } /// Parse markup. -fn markup(p: &mut Parser, at_start: bool) { - markup_while(p, at_start, 0, &mut |_| true) +/// +/// If `at_start` is true, things like headings that may only appear at the +/// beginning of a line or template are initially allowed. +fn markup(p: &mut Parser, mut at_start: bool) { + p.perform(NodeKind::Markup(0), |p| { + while !p.eof() { + markup_node(p, &mut at_start); + } + }); } -/// Parse markup that stays right of the given column. +/// Parse markup that stays right of the given `column`. fn markup_indented(p: &mut Parser, column: usize) { p.eat_while(|t| match t { NodeKind::Space(n) => *n == 0, @@ -140,22 +147,15 @@ fn markup_indented(p: &mut Parser, column: usize) { _ => false, }); - markup_while(p, false, column, &mut |p| match p.peek() { - Some(NodeKind::Space(n)) if *n >= 1 => p.column(p.current_end()) >= column, - _ => true, - }) -} - -/// Parse a syntax tree while the peeked NodeKind satisifies a condition. -/// -/// If `at_start` is true, things like headings that may only appear at the -/// beginning of a line or template are allowed. -fn markup_while(p: &mut Parser, mut at_start: bool, column: usize, f: &mut F) -where - F: FnMut(&mut Parser) -> bool, -{ + let mut at_start = false; p.perform(NodeKind::Markup(column), |p| { - while !p.eof() && f(p) { + while !p.eof() { + if let Some(NodeKind::Space(1 ..)) = p.peek() { + if p.column(p.current_end()) < column { + break; + } + } + markup_node(p, &mut at_start); } });