32 lines
853 B
Common Lisp
32 lines
853 B
Common Lisp
;;;; 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 "<dl>" *output*)
|
|
(loop for r on plist by #'cddr do
|
|
(write-string "<dt>" *output*)
|
|
(write-string (string-downcase (car r)) *output*)
|
|
(write-string "</dt>" *output*)
|
|
(dd (cadr r)))
|
|
(write-line "</dl>" *output*))
|
|
|
|
(defun dd (v)
|
|
(if (atom v)
|
|
(setf v (list v)))
|
|
(dolist (el v)
|
|
(write-string "<dd>" *output*)
|
|
(write-string (string el) *output*)
|
|
(write-string "</dd>" *output*)))
|