aboutsummaryrefslogtreecommitdiff
path: root/src/guile/skribilo/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/guile/skribilo/utils')
-rw-r--r--src/guile/skribilo/utils/Makefile.am4
-rw-r--r--src/guile/skribilo/utils/syntax.scm68
2 files changed, 72 insertions, 0 deletions
diff --git a/src/guile/skribilo/utils/Makefile.am b/src/guile/skribilo/utils/Makefile.am
new file mode 100644
index 0000000..e87696a
--- /dev/null
+++ b/src/guile/skribilo/utils/Makefile.am
@@ -0,0 +1,4 @@
+guilemoduledir = $(GUILE_SITE)/skribilo
+dist_guilemodule_DATA = syntax.scm
+
+## arch-tag: 3a18b64b-1da2-417b-8338-2c534bca277f
diff --git a/src/guile/skribilo/utils/syntax.scm b/src/guile/skribilo/utils/syntax.scm
new file mode 100644
index 0000000..24e8efa
--- /dev/null
+++ b/src/guile/skribilo/utils/syntax.scm
@@ -0,0 +1,68 @@
+;;; syntax.scm -- Syntactic candy for Skribilo modules.
+;;;
+;;; Copyright 2005 Ludovic Courtès <ludovic.courtes@laas.fr>
+;;;
+;;;
+;;; This program is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 2 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; This program 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
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program; if not, write to the Free Software
+;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+;;; USA.
+
+(define-module (skribilo utils syntax)
+ #:use-module (skribilo reader)
+ #:use-module (system reader library)
+ #:use-module (system reader confinement)
+ #:export (%skribe-reader %skribilo-module-reader)
+ #:export-syntax (unwind-protect unless when))
+
+;;; Author: Ludovic Courtès
+;;;
+;;; Commentary:
+;;;
+;;; A reader for the Skribe syntax, i.e. roughly R5RS Scheme plus DSSSL-style
+;;; keywords and sk-exps (expressions introduced using a square bracket).
+;;;
+;;; Code:
+
+(define %skribilo-module-reader
+ ;; The syntax used to read Skribilo modules.
+ (make-alternate-guile-reader '(colon-keywords
+ no-scsh-block-comments
+ srfi30-block-comments
+ srfi62-sexp-comments)
+ (lambda (chr port read)
+ (error "unexpected character in Skribilo module"
+ chr))
+ 'reader/record-positions))
+
+(define %skribe-reader
+ ;; The Skribe syntax reader.
+ (make-reader 'skribe))
+
+
+(define-macro (unwind-protect expr1 expr2)
+ ;; This is no completely correct.
+ `(dynamic-wind
+ (lambda () #f)
+ (lambda () ,expr1)
+ (lambda () ,expr2)))
+
+(define-macro (unless condition . exprs)
+ `(if (not ,condition) (begin ,@exprs)))
+
+(define-macro (when condition . exprs)
+ `(if ,condition (begin ,@exprs)))
+
+;;; arch-tag: 9a0e0638-64f0-480a-ab19-49e8bfcbcd9b
+
+;;; syntax.scm ends here