diff options
Diffstat (limited to 'crates/rebel-parse/src/grammar')
-rw-r--r-- | crates/rebel-parse/src/grammar/recipe.rs | 6 | ||||
-rw-r--r-- | crates/rebel-parse/src/grammar/tokenize.rs | 21 |
2 files changed, 18 insertions, 9 deletions
diff --git a/crates/rebel-parse/src/grammar/recipe.rs b/crates/rebel-parse/src/grammar/recipe.rs index 6bd96bb..49b1689 100644 --- a/crates/rebel-parse/src/grammar/recipe.rs +++ b/crates/rebel-parse/src/grammar/recipe.rs @@ -97,9 +97,9 @@ peg::parser! { / [Token::Number(content)] { ? ast::Literal::number(content) } - / [Token::String(String { content, .. })] { - let ast_pieces = vec![ast::StringPiece::Chars(content)]; - ast::Literal::String(ast_pieces) + / [Token::String(String { pieces, .. })] { ? + let ast_pieces = pieces.iter().map(|piece| piece.try_into()).collect::<Result<_, _>>()?; + Ok(ast::Literal::String(ast_pieces)) } / p('(') p(')') { ast::Literal::Unit } / p('(') elements:(expr() ** p(',')) p(',')? p(')') { diff --git a/crates/rebel-parse/src/grammar/tokenize.rs b/crates/rebel-parse/src/grammar/tokenize.rs index 5f21461..a64c5e1 100644 --- a/crates/rebel-parse/src/grammar/tokenize.rs +++ b/crates/rebel-parse/src/grammar/tokenize.rs @@ -33,14 +33,23 @@ peg::parser! { = $(['0'..='9'] ['0'..='9' | 'a'..='z' | 'A'..='Z' | '_']*) rule string() -> String<'input> - = "\"" content:$(string_char()*) "\"" { - String { content, kind: StringKind::String } + = "\"" chars:$(string_char()*) "\"" { + String { + pieces: vec![StringPiece::Chars(chars)], + kind: StringKind::String, + } } - / "r\"" content:$([^'"']*) "\"" { - String { content, kind: StringKind::RawString } + / "r\"" chars:$([^'"']*) "\"" { + String { + pieces: vec![StringPiece::Chars(chars)], + kind: StringKind::RawString, + } } - / "```" newline() content:$((!"```" [_])+) "```" { - String { content, kind: StringKind::ScriptString } + / "```" newline() chars:$((!"```" [_])+) "```" { + String { + pieces: vec![StringPiece::Chars(chars)], + kind: StringKind::ScriptString, + } } rule string_char() |