about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/guile/skribilo/engine/html.scm33
-rw-r--r--src/guile/skribilo/parameters.scm3
-rw-r--r--src/guile/skribilo/prog.scm4
-rw-r--r--src/guile/skribilo/resolve.scm11
-rw-r--r--src/guile/skribilo/utils/compat.scm61
5 files changed, 64 insertions, 48 deletions
diff --git a/src/guile/skribilo/engine/html.scm b/src/guile/skribilo/engine/html.scm
index a376713..1f3466f 100644
--- a/src/guile/skribilo/engine/html.scm
+++ b/src/guile/skribilo/engine/html.scm
@@ -17,6 +17,7 @@
 ;*=====================================================================*/
 
 (define-skribe-module (skribilo engine html)
+  :autoload   (skribilo parameters) (*destination-file*)
   :use-module ((srfi srfi-19) :renamer (symbol-prefix-proc 's19:)))
 
 
@@ -60,17 +61,17 @@
 			(engine-custom e 'subsection-file))
 		   (and (is-markup? node 'subsubsection)
 			(engine-custom e 'subsubsection-file)))
-	       (let* ((b (or (and (string? *skribe-dest*)
-				  (prefix *skribe-dest*))
+	       (let* ((b (or (and (string? (*destination-file*))
+				  (prefix (*destination-file*)))
 			     ""))
-		      (s (or (and (string? *skribe-dest*)
-				  (suffix *skribe-dest*))
+		      (s (or (and (string? (*destination-file*))
+				  (suffix (*destination-file*)))
 			     "html"))
 		      (nm (get-file-name b s)))
 		  (markup-option-add! node filename nm)
 		  nm))
 	      ((document? node)
-	       *skribe-dest*)
+	       (*destination-file*))
 	      (else
 	       (let ((p (ast-parent node)))
 		  (if (container? p)
@@ -986,8 +987,8 @@
       (sui-blocks 'subsection n e)
       (sui-blocks 'subsubsection n e)
       (display "  )\n"))
-   (if (string? *skribe-dest*)
-       (let ((f (format #f "~a.sui" (prefix *skribe-dest*))))
+   (if (string? (*destination-file*))
+       (let ((f (format #f "~a.sui" (prefix (*destination-file*)))))
 	  (with-output-to-file f sui))
        (sui)))
 
@@ -1132,22 +1133,17 @@
 		    (printf "<td colspan=\"~a\" width=\"100%\">"
 			    (- 4 level))
 		    (printf "<a href=\"~a#~a\">"
-			    (if (and *skribe-dest*
-				     (string=? f *skribe-dest*))
+			    (if (and (*destination-file*)
+				     (string=? f (*destination-file*)))
 				""
-				(strip-ref-base (or f *skribe-dest* "")))
+				(strip-ref-base (or f (*destination-file*) "")))
 			    (string-canonicalize id))
 		    (output (markup-option c :title) e)
 		    (display "</a></td>")
 		    (display "</tr>\n")
 		    ;; the children
 		    (for-each (lambda (n) (toc-entry n (+ 1 level))) ch)))
-	      (define (symbol->keyword s)
-		 (cond-expand
-		    (stklos
-		     (make-keyword s))
-		    (bigloo
-		     (string->keyword (string-append ":" (symbol->string s))))))
+
 	      (let* ((c (markup-option n :chapter))
 		     (s (markup-option n :section))
 		     (ss (markup-option n :subsection))
@@ -1925,9 +1921,10 @@
 				(markup-class n)
 				"inbound")))
 		 (printf "<a href=\"~a#~a\" class=\"~a\""
-			 (if (and *skribe-dest* (string=? f *skribe-dest*))
+			 (if (and (*destination-file*)
+				  (string=? f (*destination-file*)))
 			     ""
-			     (strip-ref-base (or f *skribe-dest* "")))
+			     (strip-ref-base (or f (*destination-file*) "")))
 			 (string-canonicalize id)
 			 class)
 		 (display ">")))
diff --git a/src/guile/skribilo/parameters.scm b/src/guile/skribilo/parameters.scm
index b464667..04517e7 100644
--- a/src/guile/skribilo/parameters.scm
+++ b/src/guile/skribilo/parameters.scm
@@ -76,8 +76,7 @@
 (define-public *destination-file* (make-parameter "output.html"))
 (define-public *source-file*      (make-parameter "default-input-file.skb"))
 
-;; FIXME: I don't understand exactly what this is.  See, for instance, the
-;; HTML and Context engines.
+;; Base prefix to remove from hyperlinks.
 (define-public *ref-base*         (make-parameter ""))
 
 ;;; TODO: Skribe used to have other parameters as global variables.  See
diff --git a/src/guile/skribilo/prog.scm b/src/guile/skribilo/prog.scm
index 7c83270..020a275 100644
--- a/src/guile/skribilo/prog.scm
+++ b/src/guile/skribilo/prog.scm
@@ -89,7 +89,7 @@
        (values #f line))
       ((string? line)
        (extract-string-mark line mark regexp))
-      ((pair? line)
+      ((list? line)
        (let loop ((ls line)
 		  (res '()))
 	  (if (null? ls)
@@ -135,7 +135,7 @@
 		 (loop r1
 		       (+ r2 1)
 		       res))))))
-      ((pair? line)
+      ((list? line)
        (let loop ((ls line)
 		  (res '()))
 	  (if (null? ls)
diff --git a/src/guile/skribilo/resolve.scm b/src/guile/skribilo/resolve.scm
index c100b62..cbb939d 100644
--- a/src/guile/skribilo/resolve.scm
+++ b/src/guile/skribilo/resolve.scm
@@ -72,13 +72,16 @@
 (define-method (do-resolve! (ast <pair>) engine env)
   (let Loop ((n* ast))
     (cond
-      ((pair? n*)
+      ((null? n*)
+       ast)
+      ((list? n*)
        (set-car! n* (do-resolve! (car n*) engine env))
        (Loop (cdr n*)))
-      ((not (null? n*))
-       (error 'do-resolve "illegal argument" n*))
+      ((pair? n*)
+       (set-car! n* (do-resolve! (car n*) engine env))
+       (set-cdr! n* (do-resolve! (cdr n*) engine env)))
       (else
-       ast))))
+       (error 'do-resolve "illegal argument" n*)))))
 
 
 (define-method (do-resolve! (node <node>) engine env)
diff --git a/src/guile/skribilo/utils/compat.scm b/src/guile/skribilo/utils/compat.scm
index c187975..c6e95bf 100644
--- a/src/guile/skribilo/utils/compat.scm
+++ b/src/guile/skribilo/utils/compat.scm
@@ -24,6 +24,7 @@
   :use-module (skribilo parameters)
   :use-module (skribilo evaluator)
   :use-module (srfi srfi-1)
+  :autoload   (srfi srfi-13) (string-rindex)
   :use-module (srfi srfi-34)
   :use-module (srfi srfi-35)
   :use-module (ice-9 optargs)
@@ -63,6 +64,9 @@
 ;;; Global variables that have been replaced by parameter objects
 ;;; in `(skribilo parameters)'.
 ;;;
+;;; FIXME: There's not much we can do about these variables (as opposed to
+;;; the _accessors_ below).  Perhaps we should just not define them?
+;;;
 
 ;;; Switches
 (define-public *skribe-verbose*	0)
@@ -86,7 +90,7 @@
 (define-public *skribe-dest*		#f)
 
 ;;; Engine
-(define-public *skribe-engine*	'html)	;; Use HTML by default
+(define-public *skribe-engine*  	'html)	;; Use HTML by default
 
 ;;; Misc
 (define-public *skribe-chapter-split*	'())
@@ -112,7 +116,16 @@
 
 (define %skribe-known-files
   ;; Like of Skribe package files and their equivalent Skribilo module.
-  '(("web-book.skr" . (skribilo packages web-book))))
+  '(("web-book.skr"     . (skribilo package web-book))
+    ("web-article.skr"  . (skribilo package web-article))
+    ("slide.skr"        . (skribilo package slide))
+    ("sigplan.skr"      . (skribilo package sigplan))
+    ("scribe.skr"       . (skribilo package scribe))
+    ("lncs.skr"         . (skribilo package lncs))
+    ("letter.skr"       . (skribilo package letter))
+    ("jfp.skr"          . (skribilo package jfp))
+    ("french.skr"       . (skribilo package french))
+    ("acmproc.skr"      . (skribilo package acmproc))))
 
 (define*-public (skribe-load file :rest args)
   (call/cc
@@ -121,15 +134,20 @@
 		;; Regular file loading failed.  Try built-ins.
 		(let ((mod-name (assoc-ref %skribe-known-files file)))
 		  (if mod-name
-		      (let ((mod (false-if-exception
-				  (resolve-module mod-name))))
-			(if (not mod)
-			    (raise c)
-			    (begin
-			      (set-module-uses!
-			       (current-module)
-			       (cons mod (module-uses (current-module))))
-			      (return #t))))
+		      (begin
+			(if (> (*verbose*) 1)
+			    (format (current-error-port)
+				    "  skribe-load: `~a' -> `~a'~%"
+				    file mod-name))
+			(let ((mod (false-if-exception
+				    (resolve-module mod-name))))
+			  (if (not mod)
+			      (raise c)
+			      (begin
+				(set-module-uses!
+				 (current-module)
+				 (cons mod (module-uses (current-module))))
+				(return #t)))))
 		      (raise c)))))
 
 	    ;; Try a regular `load-document'.
@@ -175,19 +193,18 @@
 
 (define-public (file-prefix fn)
   (if fn
-      (let ((match (regexp-match "(.*)\\.([^/]*$)" fn)))
-	(if match
-	    (cadr match)
-	    fn))
+      (let ((dot (string-rindex fn #\.)))
+	(if dot (substring fn 0 dot) fn))
       "./SKRIBILO-OUTPUT"))
 
-(define-public (file-suffix s)
-  ;; Not completely correct, but sufficient here
-  (let* ((basename (regexp-replace "^(.*)/(.*)$" s "\\2"))
-	 (split    (string-split basename ".")))
-    (if (> (length split) 1)
-	(car (reverse! split))
-	"")))
+(define-public (file-suffix fn)
+  (if fn
+      (let ((dot (string-rindex fn #\.)))
+	(if dot
+	    (substring fn (+ dot 1) (string-length fn))
+	    ""))
+      #f))
+
 
 (define-public prefix			file-prefix)
 (define-public suffix			file-suffix)