(defpackage #:hsx/group (:use #:cl) (:import-from #:alexandria #:make-keyword #:symbolicate) (:export #:defgroup #:self-closing-tag-p #:non-escaping-tag-p)) (in-package #:hsx/group) (defun make-keyword-hash-table (symbols) (let ((ht (make-hash-table))) (mapcar (lambda (sym) (setf (gethash (make-keyword sym) ht) t)) symbols) ht)) (defmacro defgroup (name &body symbols) (let ((p-name (symbolicate '* name '*))) `(progn (defparameter ,p-name (make-keyword-hash-table ',symbols)) (defun ,(symbolicate name '-p) (keyword) (gethash keyword ,p-name))))) (defgroup self-closing-tag area base br col embed hr img input link meta param source track wbr) (defgroup non-escaping-tag script style)