diff options
Diffstat (limited to 'cook')
-rw-r--r-- | cook/parse.scm | 23 |
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))) |