summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cook/parse-internals.sld4
-rw-r--r--cook/parse.scm10
-rw-r--r--cook/parse.sld4
3 files changed, 18 insertions, 0 deletions
diff --git a/cook/parse-internals.sld b/cook/parse-internals.sld
index 1aba787..39761fb 100644
--- a/cook/parse-internals.sld
+++ b/cook/parse-internals.sld
@@ -2,6 +2,7 @@
(import (scheme base)
(srfi 1)
(srfi 9)
+ (srfi 26)
(srfi 69)
(chibi)
(chibi char-set ascii)
@@ -39,6 +40,9 @@
recipe?
recipe-metadata
recipe-body
+ recipe-ingredients
+ recipe-cookware
+ recipe-timers
<step>
step?
step-elements
diff --git a/cook/parse.scm b/cook/parse.scm
index 54ea23c..7092905 100644
--- a/cook/parse.scm
+++ b/cook/parse.scm
@@ -72,6 +72,16 @@ https://github.com/cooklang/spec/blob/main/EBNF.md
(metadata recipe-metadata)
(body recipe-body))
+(define (recipe-find pred recipe)
+ (concatenate
+ (map (lambda (x) (filter pred x))
+ (map step-elements
+ (filter step? (recipe-body recipe))))))
+
+(define recipe-ingredients (cut recipe-find ingredient? <>))
+(define recipe-cookware (cut recipe-find cookware? <>))
+(define recipe-timers (cut recipe-find timer? <>))
+
(define (metadata-line-list->hash-table meta-lines)
(let ((metadata (make-hash-table)))
(for-each (lambda (line)
diff --git a/cook/parse.sld b/cook/parse.sld
index b92e586..fdef4a0 100644
--- a/cook/parse.sld
+++ b/cook/parse.sld
@@ -2,6 +2,7 @@
(import (scheme base)
(srfi 1)
(srfi 9)
+ (srfi 26)
(srfi 69)
(chibi)
(chibi char-set ascii)
@@ -42,5 +43,8 @@
recipe?
recipe-metadata
recipe-body
+ recipe-ingredients
+ recipe-cookware
+ recipe-timers
parse-cook)
(include "parse.scm"))