summaryrefslogtreecommitdiff
path: root/cook
diff options
context:
space:
mode:
Diffstat (limited to 'cook')
-rw-r--r--cook/parse.scm23
1 files changed, 17 insertions, 6 deletions
diff --git a/cook/parse.scm b/cook/parse.scm
index 57c5178..2071fdd 100644
--- a/cook/parse.scm
+++ b/cook/parse.scm
@@ -106,6 +106,9 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
(define metadata-chars (char-set-difference text-chars (char-set #\:)))
(define-grammar cook
+ (one-nl (,(parse-map
+ (parse-sre `(: eol (+ ,newline-chars) bol))
+ (lambda _ '(#\space)))))
(nl ((: ,newline-chars)))
(whitespace ((=> x (+ ,whitespace-chars))
(list->string x)))
@@ -162,11 +165,19 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
(step-line ((: (? ,whitespace)
(=> s (+ ,text-item))
- (=> n (? ,nl)))
- (append (concatenate s) (if n '(#\space) '()))))
-
- (step ((: (=> s ,step-line) (=> ns (* ,step-line)))
- (make-step (merge-step-strings (concatenate (append (list s) ns))))))
+ (? ,nl))
+ (append! (concatenate! s))))
+
+ (step ((=> s (: ,step-line
+ ,(parse-map
+ (parse-repeat
+ (parse-map ;; Add space where newline was
+ step-line (lambda x
+ (append '(#\space)
+ (concatenate x)))))
+ (lambda x (concatenate!
+ (concatenate! x))))))
+ (make-step (merge-step-strings (concatenate! s)))))
(metadata ((: bol ">>" (* ,whitespace)
(=> k ,meta-key)
@@ -181,7 +192,7 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
(parse-seq
(parse-repeat nl)
(parse-optional parse-end))))))
- (concatenate els))))
+ (concatenate! els))))
(define (parse-cook str)
(let ((lis (parse-fully recipe str)))