Plaster

text
;;; Recipe html post creator with jsonld ;; Json string (defparameter *json* (make-array 0 :adjustable t :fill-pointer t :element-type 'character )) ;; Definition of json function (we should be using a library) (defun json ( n v &optional ( tab 3 )) (format *json* ",~%~vt\"~a\":\"~a\"" tab n v) ) ;; Creation of body, head and meta fill-pointer strings (defparameter *body* (make-array 0 :adjustable t :fill-pointer t :element-type 'character )) (defparameter *html* (make-array 0 :adjustable t :fill-pointer t :element-type 'character )) (defparameter *meta* (make-array 0 :adjustable t :fill-pointer t :element-type 'character )) ;; Initialize html and json (format *html* "<!DOCUMENT html>~%") (format *html* "<html>~%") (format *html* "~3t<head>~%") (format *json* "{~%") (format *json* "~3t\"@context\": \"https://schema.org/\"") (json "@type" "Recipe") ;; Start asking info (format t "~%~%~%I'll ask for several info, and wait an answer for every question~%") (format t "To skip the question, press enter. Note the question won't be made again~%~%") (format *query-io* "Name of the recipe~3t") (force-output *query-io*) (let ((name (read-line))) (format *meta* "~6t<title>~a</title>~%" name) (format *body* "~6t<h1>~a</h1>~%" name) (json "name" name) ) ;; Render info (format *json* "~%}~%") (format *html* "~a" *meta*) (format *html* "~%~3t</head>~%") (format *html* "~3t<body>~%") (format *html* "~a" *body*) (format *html* "<script type=\"application/ld+json\">~%") (format *html* "~a" *json*) (format *html* "<script>~%") (format *html* "~3t</body>~%") (format *html* "</html>~%") (format t "~a" *html*)