;;;; render.lisp -- render protocol and tools (in-package :dnd) (defgeneric render (view object &key) (:documentation "Render OBJECT as VIEW. VIEW could be anything, but it is intended to be a keyword for usin in EQL method specializers.")) (defmacro defrender (view (spec &rest kwargs) &body body) "A helper macro for defining specializations of render." (let ((viewvar (gensym))) `(defmethod render ((,viewvar ,(if (eq t view) t `(eql ,view))) ,spec &key ,@kwargs) ,@body))) (defmacro with-page ((&key title) &body body) "A helper macro fordefining some standard page boilerplate." `(with-html-string (:doctype) (:html (:head (:title ,title)) (:body ,@body))))