summary refs log tree commit diff
path: root/src/guile/skribilo/utils/syntax.scm
diff options
context:
space:
mode:
authorLudovic Court`es2006-10-11 07:43:47 +0000
committerLudovic Court`es2006-10-11 07:43:47 +0000
commitd4360259d60722eaa175a483f792fce7b8c66d97 (patch)
tree622cc21b820e3dd4616890bc9ccba74de6637d8a /src/guile/skribilo/utils/syntax.scm
parentfc42fe56a57eace2dbdb31574c2e161f0eacf839 (diff)
downloadskribilo-d4360259d60722eaa175a483f792fce7b8c66d97.tar.gz
skribilo-d4360259d60722eaa175a483f792fce7b8c66d97.tar.lz
skribilo-d4360259d60722eaa175a483f792fce7b8c66d97.zip
slide: Propagate the `outline?' parameter in `slide-(sub)?topic'.
* src/guile/skribilo/package/slide.scm (slide-topic): Propagate the
  `outline?' parameter as an option.
  (slide-subtopic): Likewise.

git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-1
Diffstat (limited to 'src/guile/skribilo/utils/syntax.scm')
-rw-r--r--src/guile/skribilo/utils/syntax.scm81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/guile/skribilo/utils/syntax.scm b/src/guile/skribilo/utils/syntax.scm
new file mode 100644
index 0000000..44bff09
--- /dev/null
+++ b/src/guile/skribilo/utils/syntax.scm
@@ -0,0 +1,81 @@
+;;; syntax.scm  --  Syntactic candy for Skribilo modules.
+;;;
+;;; Copyright 2005, 2006  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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+;;; USA.
+
+(define-module (skribilo utils syntax)
+  :use-module (skribilo reader)
+  :use-module (system reader library)
+  :use-module (system reader compat) ;; make sure `current-reader' exists
+  :use-module (system reader confinement)
+  :export (%skribe-reader %skribilo-module-reader)
+  :export-syntax (unwind-protect unless when))
+
+;;; Author:  Ludovic Courtès
+;;;
+;;; Commentary:
+;;;
+;;; This module provides syntactic candy for Skribilo modules, i.e., a syntax
+;;; similar to Guile's default syntax with a few extensions, plus various
+;;; convenience macros.
+;;;
+;;; Code:
+
+(define %skribilo-module-reader
+  ;; The syntax used to read Skribilo modules.
+  (apply make-alternate-guile-reader
+         '(colon-keywords no-scsh-block-comments
+           srfi30-block-comments srfi62-sexp-comments)
+         (lambda (chr port read)
+	   (let ((file (port-filename port))
+		 (line (port-line port))
+		 (column (port-column port)))
+	     (error (string-append
+		     (if (string? file)
+			 (format #f "~a:~a:~a: " file line column)
+			 "")
+		     "unexpected character in Skribilo module")
+		    chr)))
+
+         ;; By default, don't record positions: this yields a nice read
+         ;; performance improvement.
+         (if (memq 'debug (debug-options))
+             (list '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