summaryrefslogtreecommitdiff
path: root/macros.lisp
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2007-06-30 23:01:34 +0200
committerMatthias Benkard <code@mail.matthias.benkard.de>2007-06-30 23:01:34 +0200
commit41ab19abcfda6dfa43005686952bfe33fa06ef54 (patch)
tree19f5528c7255c106e55be82b1008af2fa82b6c6d /macros.lisp
parent7dbfa52a559fc72e375c4f8007283ba25a13a57a (diff)
Move all macro definitions into a separate file.
darcs-hash:aa001fe6707d0ddb94ceb1a4e82515894218fdf2
Diffstat (limited to 'macros.lisp')
-rw-r--r--macros.lisp59
1 files changed, 59 insertions, 0 deletions
diff --git a/macros.lisp b/macros.lisp
new file mode 100644
index 0000000..c8f2866
--- /dev/null
+++ b/macros.lisp
@@ -0,0 +1,59 @@
+;;;; -*- coding: utf-8; mode: lisp -*-
+;;;; Copyright 2007, Matthias Andreas Benkard.
+
+;;;------------------------------------------------------------------------
+;;; This file is part of The Mulkblog Project.
+;;;
+;;; The Mulkblog Project is free software. You can redistribute it and/or
+;;; modify it under the terms of the Affero General Public License as
+;;; published by Affero, Inc.; either version 1 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; The Mulkblog Project is distributed in the hope that it will be
+;;; useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+;;; of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; Affero General Public License for more details.
+;;;
+;;; You should have received a copy of the Affero General Public
+;;; License in the COPYING file that comes with The Mulkblog Project; if
+;;; not, write to Affero, Inc., 510 Third Street, Suite 225, San
+;;; Francisco, CA 94107 USA.
+;;;------------------------------------------------------------------------
+
+(in-package #:mulk.journal)
+
+
+(yaclml:deftag <xhtml (&attribute dir lang xmlns (prologue t) &body body)
+ (when prologue
+ (emit-princ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"))
+ (emit-open-tag "html" `(("dir" . ,dir) ("lang" . ,lang) ("xmlns" . ,xmlns)))
+ (emit-body body)
+ (emit-close-tag "html"))
+
+
+(defmacro with-result-cache ((cache-id &key (younger-than nil younger-than-p))
+ &body body)
+ `(call-with-result-cache ,cache-id
+ #'(lambda () ,@body)
+ ,@(and younger-than-p `(:younger-than ,younger-than))))
+
+
+(defmacro with-initialised-journal (&body body)
+ `(call-with-initialised-journal #'(lambda () ,@body)))
+
+
+(defmacro regex-case (string &body clauses)
+ (once-only (string)
+ `(cond ,@(loop for (keys . forms) in clauses
+ collect
+ `(,(if (and (symbolp keys)
+ (or (eq t keys)
+ (equal "OTHERWISE" (symbol-name keys))))
+ 't
+ `(or ,@(loop for key in (if (listp keys)
+ keys
+ (list keys))
+ collect
+ `(ppcre:scan-to-strings ,key ,string))))
+ ,@forms)))))
+