summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--src/guile/skribilo.scm6
-rw-r--r--src/guile/skribilo/package/base.scm18
-rw-r--r--src/guile/skribilo/parameters.scm3
-rw-r--r--src/guile/skribilo/sui.scm57
5 files changed, 54 insertions, 32 deletions
diff --git a/NEWS b/NEWS
index e941741..96feef9 100644
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,8 @@ Namely, `slide-outline-title' and
 ** New option `:rulecolor' for `table'
 
 
+** New `--sui-path' command-line option, new `*sui-path*' parameter
+
 * New in Skribilo 0.9.0 (user-visible changes compared to Skribe 1.2d)
 
 ** New engine: `lout' (see http://lout.sf.net/).
diff --git a/src/guile/skribilo.scm b/src/guile/skribilo.scm
index 44e57e4..d69ae32 100644
--- a/src/guile/skribilo.scm
+++ b/src/guile/skribilo.scm
@@ -74,6 +74,7 @@ specified reader syntax, and produce its output using the specified engine.
   -B, --bib-path=DIR     Prepend DIR to the bibliography include path.
   -S, --source-path=DIR  Prepend DIR to the source include path.
   -P, --image-path=DIR   Prepend DIR to the image include path.
+  -U, --sui-path=DIR     Prepend DIR to the Skribe URL Index (SUI) search path.
 
   -b, --base=BASE        Strip BASE from all hyperlinks (`html' engine).
   -e, --eval=EXPR        Prepend EXPR to the list of expressions to be
@@ -182,6 +183,8 @@ Report bugs to <~a>.~%"
                 (make-path-processor :source-path))
         (option '(#\P "image-path") #t #f
                 (make-path-processor :image-path))
+        (option '(#\U "sui-path") #t #f
+                (make-path-processor :sui-path))
 
         (option '(#\b "base") #t #f
                 (lambda (opt name arg result)
@@ -238,6 +241,7 @@ Report bugs to <~a>.~%"
     (:bib-path    ".")
     (:source-path ".")
     (:image-path  ".")
+    (:sui-path    ".")
     (:watched-symbols)))
 
 (define (parse-args args)
@@ -278,6 +282,7 @@ options."
 	 (bib-path          (assoc-ref options :bib-path))
 	 (source-path       (assoc-ref options :source-path))
 	 (image-path        (assoc-ref options :image-path))
+         (sui-path          (assoc-ref options :sui-path))
          (compat            (assoc-ref options :compat))
 	 (preloads          (assoc-ref options :preloads))
 	 ;;(variants          '()) ;; FIXME: Implement
@@ -301,6 +306,7 @@ options."
 		   (*bib-path*          bib-path)
 		   (*source-path*       source-path)
 		   (*image-path*        image-path)
+                   (*sui-path*          sui-path)
 		   (*debug*             debugging-level)
                    (*debug-use-colors?* color?)
                    (*watched-symbols*   watched-symbols)
diff --git a/src/guile/skribilo/package/base.scm b/src/guile/skribilo/package/base.scm
index 8462e81..fc6abca 100644
--- a/src/guile/skribilo/package/base.scm
+++ b/src/guile/skribilo/package/base.scm
@@ -30,7 +30,7 @@
   :autoload   (srfi srfi-1)        (every any filter)
   :autoload   (skribilo evaluator) (include-document)
   :autoload   (skribilo engine)    (engine?)
-  :autoload   (skribilo parameters)(*document-path*)
+  :autoload   (skribilo parameters)(*document-path* *sui-path*)
 
   ;; optional ``sub-packages''
   :autoload   (skribilo biblio)    (*bib-table* resolve-bib
@@ -1087,15 +1087,13 @@
 		   (options `((kind ,kind) ,@(the-options opts :ident :class)))
 		   (body text))))))
    (define (skribe-ref skribe)
-      (let ((path (search-path (*document-path*) skribe)))
-	 (if (not path)
-	     (unref #f skribe 'sui-file)
-	     (let* ((sui (load-sui path))
-		    (os (the-options opts :skribe :class :text))
-		    (u (sui-ref->url (dirname path) sui ident os)))
-		(if (not u)
-		    (unref #f os 'sui-ref)
-		    (ref :url u :text text :ident ident :class class))))))
+     (let* ((sui (load-sui skribe))
+            (os  (the-options opts :skribe :class :text))
+            (u   (sui-ref->url (search-path (*sui-path*) skribe)
+                               sui ident os)))
+       (if (not u)
+           (unref #f os 'sui-ref)
+           (ref :url u :text text :ident ident :class class))))
    (define (handle-ref text)
       (new markup
 	 (markup 'ref)
diff --git a/src/guile/skribilo/parameters.scm b/src/guile/skribilo/parameters.scm
index 5893851..23c2c1a 100644
--- a/src/guile/skribilo/parameters.scm
+++ b/src/guile/skribilo/parameters.scm
@@ -1,6 +1,6 @@
 ;;; parameters.scm  --  Skribilo settings as parameter objects.
 ;;;
-;;; Copyright 2005  Ludovic Courtès <ludovic.courtes@laas.fr>
+;;; Copyright 2005, 2008  Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;;
 ;;; This program is free software; you can redistribute it and/or modify
@@ -67,6 +67,7 @@
 (define-path-parameter *bib-path*)
 (define-path-parameter *source-path*)
 (define-path-parameter *image-path*)
+(define-path-parameter *sui-path*)
 
 
 ;;;
diff --git a/src/guile/skribilo/sui.scm b/src/guile/skribilo/sui.scm
index 8dc1a9e..304ae8c 100644
--- a/src/guile/skribilo/sui.scm
+++ b/src/guile/skribilo/sui.scm
@@ -1,7 +1,7 @@
-;;; sui.scm
+;;; sui.scm -- Skribe URL Indices
 ;;;
+;;; Copyright 2005, 2006, 2007, 2008  Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright 2003, 2004  Manuel Serrano
-;;; Copyright 2005, 2006, 2007  Ludovic Courtès  <ludovic.courtes@laas.fr>
 ;;;
 ;;;
 ;;; This program is free software; you can redistribute it and/or modify
@@ -22,17 +22,21 @@
 (define-module (skribilo sui)
   :use-module (skribilo lib)
   :use-module (skribilo ast)
-  :autoload   (skribilo parameters) (*verbose* *destination-file*)
+  :autoload   (skribilo parameters) (*verbose* *destination-file*
+                                     *sui-path*)
   :autoload   (skribilo reader)     (make-reader)
   :autoload   (skribilo engine)     (find-engine)
   :autoload   (skribilo evaluator)  (evaluate-document)
   :autoload   (skribilo engine html)(html-file)
+  :autoload   (skribilo condition)  (&file-search-error)
   :use-module (skribilo utils strings)
   :use-module (skribilo utils syntax)
   :use-module (skribilo utils files)
 
   :use-module (ice-9 match)
   :use-module (srfi srfi-1)
+  :use-module (srfi srfi-34)
+  :use-module (srfi srfi-35)
 
   :export (load-sui sui-ref->url sui-title sui-file sui-key
            sui-find-ref sui-search-ref sui-filter
@@ -40,7 +44,8 @@
 
 (fluid-set! current-reader %skribilo-module-reader)
 
-;;; Author:  Manuel Serrano
+
+;;; Author: Manuel Serrano, Ludovic Courtès
 ;;; Commentary:
 ;;;
 ;;; Library dealing with Skribe URL Indexes (SUI).
@@ -55,6 +60,7 @@
 ;*---------------------------------------------------------------------*/
 ;*    *sui-table* ...                                                  */
 ;*---------------------------------------------------------------------*/
+;; FIXME: Remove global state.
 (define *sui-table* (make-hash-table))
 
 ;*---------------------------------------------------------------------*/
@@ -63,29 +69,33 @@
 ;*    Returns a SUI sexp if already loaded. Load it otherwise.         */
 ;*    Raise an error if the file cannot be open.                       */
 ;*---------------------------------------------------------------------*/
-(define (load-sui path)
-   (let ((sexp (hash-ref *sui-table* path)))
-      (or sexp
-	  (begin
-	     (when (> (*verbose*) 0)
+(define (load-sui file)
+  (let* ((path (search-path (*sui-path*) file))
+         (sexp (and path (hash-ref *sui-table* path))))
+    (if (not path)
+        (raise (condition (&file-search-error (file-name file)
+                                              (path (*sui-path*)))))
+        (or sexp
+            (begin
+              (when (> (*verbose*) 0)
 		(format (current-error-port) "  [loading sui: ~a]\n" path))
-	     (let ((p (open-input-file path))
-                   (read (make-reader 'skribe)))
+              (let ((p (open-input-file path))
+                    (read (make-reader 'skribe)))
 		(if (not (input-port? p))
 		    (skribe-error 'load-sui
 				  "Can't find `Skribe Url Index' file"
 				  path)
 		    (unwind-protect
-		       (let ((sexp (read p)))
-			  (match sexp
-			     (('sui (? string?) . _)
-			      (hash-set! *sui-table* path sexp))
-			     (else
-			      (skribe-error 'load-sui
-					    "Illegal `Skribe Url Index' file"
-					    path)))
-			  sexp)
-		       (close-input-port p))))))))
+                     (let ((sexp (read p)))
+                       (match sexp
+                              (('sui (? string?) . _)
+                               (hash-set! *sui-table* path sexp))
+                              (else
+                               (skribe-error 'load-sui
+                                             "Illegal `Skribe Url Index' file"
+                                             path)))
+                       sexp)
+                     (close-input-port p)))))))))
 
 ;*---------------------------------------------------------------------*/
 ;*    sui-ref->url ...                                                 */
@@ -266,3 +276,8 @@
 		(display ")"))
 	     (container-search-down (lambda (n) (is-markup? n kind)) n))
    (display ")\n"))
+
+
+;;; Local Variables:
+;;; coding: latin-1
+;;; End: