74 lines
2.2 KiB
Scheme
74 lines
2.2 KiB
Scheme
(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>"
|
|
(recipe-name recipe)
|
|
"</h2>"
|
|
"Servings: "
|
|
(number->string (recipe-servings recipe))
|
|
"<br><i>Ingredients</i><br>"
|
|
(ingredients-as-html (recipe-ingredients recipe))
|
|
"<br><i>Steps</i><br>"
|
|
(steps-as-html (recipe-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")))))
|