summaryrefslogtreecommitdiffstats
path: root/crates/rebel-parse/src/grammar
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rebel-parse/src/grammar')
-rw-r--r--crates/rebel-parse/src/grammar/recipe.rs6
-rw-r--r--crates/rebel-parse/src/grammar/tokenize.rs21
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()