From e31c5559b8e58965a6d50fc767a8401d0bafc7d1 Mon Sep 17 00:00:00 2001
From: Ekaitz Zarraga <ekaitz@elenq.tech>
Date: Sun, 11 Aug 2024 22:03:00 +0200
Subject: Make parse work with many empty lines

---
 cook/parse.scm | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/cook/parse.scm b/cook/parse.scm
index 05b3a2a..098b866 100644
--- a/cook/parse.scm
+++ b/cook/parse.scm
@@ -89,7 +89,6 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
 
 (define-grammar cook
     (nl             ((: ,newline-chars)))
-    (empty-line     ((: bol (* ,whitespace-chars) ,nl)))
     (whitespace     ((=> x (+ ,whitespace-chars))
                      (list->string x)))
 
@@ -147,6 +146,8 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
                      (concatenate s)))
 
     (step           ((: (=> s ,step-line) (=> ns (* ,step-line)))
+                     ;; TODO It's not converting the end of the step-line to a
+                     ;; space
                      (make-step (concatenate (append (list s) ns)))))
 
     (metadata       ((: bol ">>" (* ,whitespace)
@@ -155,12 +156,14 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
                         (=> v ,any-text-item) (* ,whitespace) eol)
                      (make-metadata-line k v)))
 
-    (recipe         ((* (or (: (=> m (+ ,metadata)) ,nl)
-                            (=> c (+ ,comment))
-                            (: (=> s (+ ,step)) (or eos (* ,empty-line)))))
-                     (list 'recipe
-                           (metadata-line-list->hash-table (or m '()))
-                           s))))
+    (element        ((or ,metadata ,comment ,step)))
+
+    (recipe         ((=> els
+                         (* (: ,element ,(parse-ignore
+                                           (parse-seq
+                                             (parse-repeat nl)
+                                             (parse-optional parse-end))))))
+                     (concatenate els))))
 
 (define (parse-cook str)
   (parse-fully recipe str))
-- 
cgit v1.2.3