diff options
| author | Martin Haug <mhaug@live.de> | 2021-11-07 19:43:01 +0100 |
|---|---|---|
| committer | Martin Haug <mhaug@live.de> | 2021-11-07 19:43:01 +0100 |
| commit | 0663758fbb42651a08bfcd46c27b5cdeab90fb75 (patch) | |
| tree | d2c80591ba4bd233bc01181884f51fafc98b836e /src/parse | |
| parent | eba7fc34effbec3bcc6d5c40d831b1e15af77c4d (diff) | |
Tests
- length updates
- dealing with keywords and comments
Diffstat (limited to 'src/parse')
| -rw-r--r-- | src/parse/mod.rs | 19 | ||||
| -rw-r--r-- | src/parse/parser.rs | 9 |
2 files changed, 11 insertions, 17 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 5d845a55..02777350 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -17,7 +17,7 @@ use crate::syntax::{ErrorPos, Green, GreenNode, NodeKind}; /// Parse a source file. pub fn parse(src: &str) -> Rc<GreenNode> { - let mut p = Parser::new(src); + let mut p = Parser::new(src, TokenMode::Markup); markup(&mut p); match p.finish().into_iter().next() { Some(Green::Node(node)) => node, @@ -26,23 +26,23 @@ pub fn parse(src: &str) -> Rc<GreenNode> { } /// Parse an atomic primary. Returns `Some` if all of the input was consumed. -pub fn parse_atomic(source: &str, _: bool) -> Option<Vec<Green>> { - let mut p = Parser::new(source); +pub fn parse_atomic(src: &str, _: bool) -> Option<Vec<Green>> { + let mut p = Parser::new(src, TokenMode::Code); primary(&mut p, true).ok()?; p.eject() } /// Parse some markup. Returns `Some` if all of the input was consumed. -pub fn parse_markup(source: &str, _: bool) -> Option<Vec<Green>> { - let mut p = Parser::new(source); +pub fn parse_markup(src: &str, _: bool) -> Option<Vec<Green>> { + let mut p = Parser::new(src, TokenMode::Markup); markup(&mut p); p.eject() } /// Parse some markup without the topmost node. Returns `Some` if all of the /// input was consumed. -pub fn parse_markup_elements(source: &str, mut at_start: bool) -> Option<Vec<Green>> { - let mut p = Parser::new(source); +pub fn parse_markup_elements(src: &str, mut at_start: bool) -> Option<Vec<Green>> { + let mut p = Parser::new(src, TokenMode::Markup); while !p.eof() { markup_node(&mut p, &mut at_start); } @@ -50,9 +50,8 @@ pub fn parse_markup_elements(source: &str, mut at_start: bool) -> Option<Vec<Gre } /// Parse some code. Returns `Some` if all of the input was consumed. -pub fn parse_code(source: &str, _: bool) -> Option<Vec<Green>> { - let mut p = Parser::new(source); - p.set_mode(TokenMode::Code); +pub fn parse_code(src: &str, _: bool) -> Option<Vec<Green>> { + let mut p = Parser::new(src, TokenMode::Code); expr_list(&mut p); p.eject() } diff --git a/src/parse/parser.rs b/src/parse/parser.rs index f391c473..451e18f1 100644 --- a/src/parse/parser.rs +++ b/src/parse/parser.rs @@ -27,8 +27,8 @@ pub struct Parser<'s> { impl<'s> Parser<'s> { /// Create a new parser for the source string. - pub fn new(src: &'s str) -> Self { - let mut tokens = Tokens::new(src, TokenMode::Markup); + pub fn new(src: &'s str, mode: TokenMode) -> Self { + let mut tokens = Tokens::new(src, mode); let current = tokens.next(); Self { tokens, @@ -202,11 +202,6 @@ impl<'s> Parser<'s> { self.tokens.scanner().column(index) } - /// Set the tokenizer's mode. - pub fn set_mode(&mut self, mode: TokenMode) { - self.tokens.set_mode(mode); - } - /// Continue parsing in a group. /// /// When the end delimiter of the group is reached, all subsequent calls to |
