;;;; cl-scopes/web/dom - "Data Output Model" = simple and dedicated HTML generator (defpackage :scopes/web/dom (:use :common-lisp) (:local-nicknames (:alx :alexandria)) (:export #:render #:dl)) (in-package :scopes/web/dom) (defvar *output* nil) (defmacro render (&body body) `(let ((*output* (make-string-output-stream))) ,@body (get-output-stream-string *output*))) (defun dl (plist) (write-string "
" *output*) (loop for r on plist by #'cddr do (write-string "
" *output*) (write-string (string-downcase (car r)) *output*) (write-string "
" *output*) (dd (cadr r))) (write-line "
" *output*)) (defun dd (v) (if (atom v) (setf v (list v))) (dolist (el v) (write-string "
" *output*) (write-string (string el) *output*) (write-string "
" *output*)))