;;;; 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) ;;;; basic / common stuff (defvar *output* nil) (defmacro render (&body body) `(let ((*output* (make-string-output-stream))) ,@body (get-output-stream-string *output*))) (defmacro write-nested (start end &body body) `(progn (write-string ,start *output*) ,@body (write-line ,end *output*))) (defun write-simple (start end val) (write-string start *output*) (write-string val *output*) (write-string end *output*)) ;;;; tag-specific renderers (defun dl (plist) (write-nested "