cookbook-dsl/html.scm

72 lines
2.1 KiB
Scheme
Raw Normal View History

2017-04-05 13:02:47 +00:00
(define html-wrap
(lambda (body)
(string-append "<html><head><meta charset=\"UTF-8\"></head><body>"
body
"<body></html>"
)))
(define html-wrap-list
(lambda (list-html)
(string-append "<ul>"
list-html
"</ul>"
)))
(define cookbook-as-html
(lambda (cookbook)
(cookbook-as-html-rec cookbook "")))
(define cookbook-as-html-rec
(lambda (cookbook html)
(if (null? cookbook)
html
(let ((recipe (car cookbook)))
(cookbook-as-html-rec (cdr cookbook)
(string-append html
(recipe-as-html recipe)
"<br>")))
)))
(define recipe-as-html
(lambda (recipe)
(string-append "<h2>"
(title recipe)
"</h2>"
"<i>Ingredients</i><br>"
(ingredients-as-html (ingredients recipe))
"<br><i>Steps</i><br>"
(steps-as-html (steps recipe))
"<br>")))
(define pretty-ingredient
(lambda (ingredient)
(let* ((name (ingredient-name ingredient))
(amount (number->string (ingredient-amount ingredient)))
(unit (ingredient-unit ingredient)))
(string-append amount
" "
unit
" "
name))))
(define ingredients-as-html
(lambda (ingredients)
(list-as-html (map (lambda (x) (pretty-ingredient x)) ingredients))))
(define steps-as-html
(lambda (steps)
(list-as-html steps)))
(define list-as-html
(lambda (list)
(html-wrap-list (list-as-html-rec list ""))))
(define list-as-html-rec
(lambda (list html)
(if (null? list)
html
(list-as-html-rec (cdr list) (string-append html
"<li>"
(car list)
"</li>\n")))))