about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog35
-rw-r--r--doc/skr/api.skr31
-rw-r--r--doc/user/src/start3.skb4
-rw-r--r--doc/user/src/start4.skb8
-rw-r--r--doc/user/src/start5.skb2
-rw-r--r--src/guile/skribilo/biblio.scm12
-rw-r--r--src/guile/skribilo/runtime.scm10
-rw-r--r--src/guile/skribilo/source.scm81
-rw-r--r--src/guile/skribilo/utils/compat.scm46
9 files changed, 153 insertions, 76 deletions
diff --git a/ChangeLog b/ChangeLog
index 6ca3201..25a5820 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,41 @@
 # arch-tag: automatic-ChangeLog--lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2
 #
 
+2006-01-16 22:31:32 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-25
+
+    Summary:
+      More SRFI-3[45] enhancements; first stab at the user documentation.
+    Revision:
+      skribilo--devel--1.2--patch-25
+
+    * src/guile/skribilo/biblio.scm (skribe-open-bib-file): Raise a
+      `&file-search-error' when needed.
+    
+    * src/guile/skribilo/runtime.scm (convert-image): Likewise.
+    
+    * src/guile/skribilo/source.scm (source-read-lines): Likewise.
+      (source-read-definition): Likewise.
+    
+    * src/guile/skribilo/utils/compat.scm (skribe-load): Only look up
+      `%skribe-known-files' when `load-document' failed.
+      (find-file/path): Use `search-path'.
+      (find-runtime-type): Implemented.
+    
+    * doc/skr/api.skr: Use `(ice-9 match)'.  Use `match' instead of
+      `match-case'.
+      (api-search-definition): Search in `%load-path' and `(skribe-path)'.
+      (define-markup?): First stab at getting the `match' syntax right.
+    
+    * doc/user/src/start[3-5].skb: Small fixes.
+
+    modified files:
+     ChangeLog doc/skr/api.skr doc/user/src/start3.skb
+     doc/user/src/start4.skb doc/user/src/start5.skb
+     src/guile/skribilo/biblio.scm src/guile/skribilo/runtime.scm
+     src/guile/skribilo/source.scm
+     src/guile/skribilo/utils/compat.scm
+
+
 2006-01-15 21:22:18 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-24
 
     Summary:
diff --git a/doc/skr/api.skr b/doc/skr/api.skr
index 504dd5a..70016b9 100644
--- a/doc/skr/api.skr
+++ b/doc/skr/api.skr
@@ -9,6 +9,8 @@
 ;*    The Skribe style for documenting Lisp APIs.                      */
 ;*=====================================================================*/
 
+(use-modules (ice-9 match))
+
 ;*---------------------------------------------------------------------*/
 ;*    Html configuration                                               */
 ;*---------------------------------------------------------------------*/
@@ -59,11 +61,13 @@
 ;*    Find a definition inside a source file.                          */
 ;*---------------------------------------------------------------------*/
 (define (api-search-definition id file pred)
-   (let ((f (find-file/path file *skribe-source-path*)))
+   (let* ((path (append %load-path (skribe-path)))
+	  (f (find-file/path file path)))
       (if (not (string? f))
 	  (skribe-error 'api-search-definition
-			(format #t "can't find source file `~a' in path" file)
-			*skribe-source-path*)
+			(format #f "can't find source file `~a' in path"
+				file)
+			path)
 	  (with-input-from-file f
 	     (lambda ()
 		(let loop ((exp (read)))
@@ -104,9 +108,10 @@
 ;*    define-markup? ...                                               */
 ;*---------------------------------------------------------------------*/
 (define (define-markup? id o)
-   (match-case o
-      (((or define-markup define define-inline)
-	((? (lambda (x) (eq? x id))) . (? (lambda (x) (or (pair? x) (null? x))))) . ?-)
+   (match o
+      ((or 'define-markup 'define 'define-inline
+	   (? (lambda (x) (eq? x id)))
+	   (? (lambda (x) (or (pair? x) (null? x)))))
        o)
       ((define-simple-markup (? (lambda (x) (eq? x id))))
        o)
@@ -119,7 +124,7 @@
 ;*    make-engine? ...                                                 */
 ;*---------------------------------------------------------------------*/
 (define (make-engine? id o)
-   (match-case o
+   (match o
       (((or make-engine copy-engine) (quote (? (lambda (x) (eq? x id)))) . ?-)
        o)
       ((quasiquote . ?-)
@@ -135,7 +140,7 @@
 ;*    make-engine-custom ...                                           */
 ;*---------------------------------------------------------------------*/
 (define (make-engine-custom def)
-   (match-case (memq :custom def)
+   (match (memq :custom def)
       ((:custom (quote ?custom) . ?-)
        custom)
       ((:custom ?custom . ?-)
@@ -150,7 +155,7 @@
 ;*    options).                                                        */
 ;*---------------------------------------------------------------------*/
 (define (define-markup-formals def)
-   (match-case def
+   (match def
       ((?- (?- . ?args) . ?-)
        (if (symbol? args)
 	   (list args)
@@ -180,7 +185,7 @@
 ;*    Returns the options parameters of a define-markup.               */
 ;*---------------------------------------------------------------------*/
 (define (define-markup-options def)
-   (match-case def
+   (match def
       ((?- (?- . ?args) . ?-)
        (if (not (list? args))
 	   '()
@@ -203,7 +208,7 @@
 ;*    Returns the rest parameter of a define-markup.                   */
 ;*---------------------------------------------------------------------*/
 (define (define-markup-rest def)
-   (match-case def
+   (match def
       ((?- (?- . ?args) . ?-)
        (if (not (pair? args))
 	   args
@@ -270,7 +275,7 @@
        (table :cellpadding 0 :cellspacing 0 
 	  (tr (td :align 'left exp))))
       (else 
-       (match-case exp
+       (match exp
 	  ((quote (and ?sym (? symbol?)))
 	   (string-append "'" (symbol->string sym)))
 	  (else
@@ -319,7 +324,7 @@
 			   (idx *markup-index*)
 			   (idx-note "definition")
 		           (idx-suffix #f)
-			   (source "src/common/api.scm")
+			   (source "skribilo/skribe/api.scm")
 			   (def #f)
 			   (see-also '())
 			   (others '())
diff --git a/doc/user/src/start3.skb b/doc/user/src/start3.skb
index 0705966..65fa738 100644
--- a/doc/user/src/start3.skb
+++ b/doc/user/src/start3.skb
@@ -1,9 +1,9 @@
 (document :title [Hello World!] 
 
-(section :title [A first Section] [
+(chapter :title [A first Section] [
  This is a ,(bold [very]) ,(it [simple]) ,(color :fg [red] [text]).])
 
-(section :title [A second Section] [
+(chapter :title [A second Section] [
  That section contains an ,(bold itemize) construction:
  ,(itemize (item [first item])
            (item [second item])
diff --git a/doc/user/src/start4.skb b/doc/user/src/start4.skb
index 3311925..31fba0c 100644
--- a/doc/user/src/start4.skb
+++ b/doc/user/src/start4.skb
@@ -1,13 +1,13 @@
-(document :title [Various links] [
+(document :title [Various links]
 
-(section :title "A Section" [
+  (chapter :title "A Section" [
 The first link points to an external web page. Here we point to a
 ,(ref :url [http://slashdot.org/] [Slashdot])
 web page. The second one points to the second
 ,(ref :section [A second Section] [Section])
 of that document.])
 
-(section :title [A second Section] [
+  (chapter :title [A second Section] [
 The last links points to the first
 ,(ref :scribe [user.scr] :figure [A simple web page] [Figure])
-of the Scribe User Manual.])])
+of the Scribe User Manual.]))
diff --git a/doc/user/src/start5.skb b/doc/user/src/start5.skb
index 9e6b877..6977608 100644
--- a/doc/user/src/start5.skb
+++ b/doc/user/src/start5.skb
@@ -6,4 +6,4 @@
 	       (itemize 
 		(map (lambda (x)
 			(item (it (markup-option x :title))))
-		     sects)))))
\ No newline at end of file
+		     sects)))))
diff --git a/src/guile/skribilo/biblio.scm b/src/guile/skribilo/biblio.scm
index 2ea35bc..082fb99 100644
--- a/src/guile/skribilo/biblio.scm
+++ b/src/guile/skribilo/biblio.scm
@@ -25,6 +25,11 @@
   :use-module (skribilo utils syntax) ;; `when', `unless'
   :use-module (skribilo module)
   :use-module (skribilo skribe bib) ;; `make-bib-entry'
+
+  :autoload   (srfi srfi-34) (raise)
+  :use-module (srfi srfi-35)
+  :autoload   (skribilo condition) (&file-search-error)
+
   :autoload   (skribilo reader)      (%default-reader)
   :autoload   (skribilo parameters)  (*bib-path*)
   :autoload   (ice-9 format)         (format)
@@ -155,8 +160,5 @@
 			      (string-append "| "
 					     (format #f command path))
 			      path)))
-       (begin
-	 (skribe-warning 1
-			 'bibliography
-			 "Can't find bibliography -- " file)
-	 #f))))
+       (raise (condition (&file-search-error (file-name file)
+					     (path (*bib-path*))))))))
diff --git a/src/guile/skribilo/runtime.scm b/src/guile/skribilo/runtime.scm
index b129652..e302ee9 100644
--- a/src/guile/skribilo/runtime.scm
+++ b/src/guile/skribilo/runtime.scm
@@ -33,7 +33,10 @@
 	   make-string-replace)
   :use-module (skribilo parameters)
   :use-module (skribilo lib)
-  :use-module (srfi srfi-13))
+  :use-module (srfi srfi-13)
+  :use-module (srfi srfi-35)
+  :autoload   (skribilo condition) (&file-search-error)
+  :autoload   (srfi srfi-34) (raise))
 
 
 (define (suffix path)
@@ -128,9 +131,8 @@
 (define (convert-image file formats)
   (let ((path (search-path (*image-path*) file)))
     (if (not path)
-	(skribe-error 'convert-image
-		      (format #f "can't find `~a' image file in path: " file)
-		      (*image-path*))
+	(raise (condition (&file-search-error (file-name file)
+					      (path (*image-path*)))))
 	(let ((suf (suffix file)))
 	  (if (member suf formats)
 	      (let* ((dir (if (string? (*destination-file*))
diff --git a/src/guile/skribilo/source.scm b/src/guile/skribilo/source.scm
index 3eb7d65..a632f18 100644
--- a/src/guile/skribilo/source.scm
+++ b/src/guile/skribilo/source.scm
@@ -23,6 +23,11 @@
 (define-module (skribilo source)
   :export (<language> language? language-extractor language-fontifier
 	   source-read-lines source-read-definition source-fontify)
+
+  :use-module (srfi srfi-35)
+  :autoload   (srfi srfi-34) (raise)
+  :autoload   (skribilo condition) (&file-search-error &file-open-error)
+
   :use-module (skribilo utils syntax)
   :use-module (skribilo parameters)
   :use-module (skribilo lib)
@@ -53,40 +58,39 @@
 ;*    source-read-lines ...                                            */
 ;*---------------------------------------------------------------------*/
 (define (source-read-lines file start stop tab)
-   (let ((p (search-path (*source-path*) file)))
-     (if (or (not (string? p)) (not (file-exists? p)))
-	  (skribe-error 'source
-			(format "Can't find `~a' source file in path" file)
-			(*source-path*))
-	  (with-input-from-file p
-	     (lambda ()
-		(if (> (*verbose*) 0)
-		    (format (current-error-port) "  [source file: ~S]\n" p))
-		(let ((startl (if (string? start) (string-length start) -1))
-		      (stopl  (if (string? stop)  (string-length stop)  -1)))
-		   (let loop ((l      1)
-			      (armedp (not (or (integer? start) (string? start))))
-			      (s      (read-line))
-			      (r      '()))
-		      (cond
-			 ((or (eof-object? s)
-			      (and (integer? stop) (> l stop))
-			      (and (string? stop) (substring=? stop s stopl)))
-			  (apply string-append (reverse! r)))
-			 (armedp
-			  (loop (+ l 1)
-				#t
-				(read-line)
-				(cons* "\n" (untabify s tab) r)))
-			 ((and (integer? start) (>= l start))
-			  (loop (+ l 1)
-				#t
-				(read-line)
-				(cons* "\n" (untabify s tab) r)))
-			 ((and (string? start) (substring=? start s startl))
-			  (loop (+ l 1) #t (read-line) r))
-			 (else
-			  (loop (+ l 1) #f (read-line) r))))))))))
+  (let ((p (search-path (*source-path*) file)))
+    (if (or (not (string? p)) (not (file-exists? p)))
+	(raise (condition (&file-search-error (file-name file)
+					      (path (*source-path*)))))
+	(with-input-from-file p
+	  (lambda ()
+	    (if (> (*verbose*) 0)
+		(format (current-error-port) "  [source file: ~S]\n" p))
+	    (let ((startl (if (string? start) (string-length start) -1))
+		  (stopl  (if (string? stop)  (string-length stop)  -1)))
+	      (let loop ((l      1)
+			 (armedp (not (or (integer? start) (string? start))))
+			 (s      (read-line))
+			 (r      '()))
+		(cond
+		 ((or (eof-object? s)
+		      (and (integer? stop) (> l stop))
+		      (and (string? stop) (substring=? stop s stopl)))
+		  (apply string-append (reverse! r)))
+		 (armedp
+		  (loop (+ l 1)
+			#t
+			(read-line)
+			(cons* "\n" (untabify s tab) r)))
+		 ((and (integer? start) (>= l start))
+		  (loop (+ l 1)
+			#t
+			(read-line)
+			(cons* "\n" (untabify s tab) r)))
+		 ((and (string? start) (substring=? start s startl))
+		  (loop (+ l 1) #t (read-line) r))
+		 (else
+		  (loop (+ l 1) #f (read-line) r))))))))))
 
 ;*---------------------------------------------------------------------*/
 ;*    untabify ...                                                     */
@@ -136,16 +140,17 @@
 	  (skribe-error 'source
 			"The specified language has not defined extractor"
 			(slot-ref lang 'name)))
+
 	 ((or (not p) (not (file-exists? p)))
-	  (skribe-error 'source
-			(format "Can't find `~a' program file in path" file)
-			(*source-path*)))
+	  (raise (condition (&file-search-error (file-name file)
+						(path (*source-path*))))))
+
 	 (else
 	  (let ((ip (open-input-file p)))
 	     (if (> (*verbose*) 0)
 		 (format (current-error-port) "  [source file: ~S]\n" p))
 	     (if (not (input-port? ip))
-		 (skribe-error 'source "Can't open file for input" p)
+		 (raise (condition (&file-open-error (file-name p))))
 		 (unwind-protect
 		    (let ((s ((language-extractor lang) ip definition tab)))
 		       (if (not (string? s))
diff --git a/src/guile/skribilo/utils/compat.scm b/src/guile/skribilo/utils/compat.scm
index b6e6420..45abd10 100644
--- a/src/guile/skribilo/utils/compat.scm
+++ b/src/guile/skribilo/utils/compat.scm
@@ -24,7 +24,11 @@
   :use-module (skribilo parameters)
   :use-module (skribilo evaluator)
   :use-module (srfi srfi-1)
+  :use-module (srfi srfi-34)
+  :use-module (srfi srfi-35)
   :use-module (ice-9 optargs)
+  :autoload   (skribilo ast) (ast?)
+  :autoload   (skribilo condition) (file-search-error? &file-search-error)
   :replace (gensym))
 
 ;;; Author:  Ludovic Courtès
@@ -111,11 +115,26 @@
   '(("web-book.skr" . (skribilo packages web-book))))
 
 (define*-public (skribe-load file :rest args)
-  (let ((mod (assoc-ref %skribe-known-files file)))
-    (if mod
-	(set-module-uses! (current-module)
-			  (cons mod (module-uses (current-module))))
-	(apply load-document file args))))
+  (call/cc
+   (lambda (return)
+     (guard (c ((file-search-error? c)
+		;; 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))))
+		      (raise c)))))
+
+	    ;; Try a regular `load-document'.
+	    (apply load-document file args)))))
+
 
 (define-public skribe-include      include-document)
 (define-public skribe-load-options *load-options*)
@@ -175,9 +194,9 @@
 (define-public system->string		system)  ;; FIXME
 (define-public any?			any)
 (define-public every?			every)
-(define-public find-file/path		(lambda (. args)
-				  (format #t "find-file/path: ~a~%" args)
-				  #f))
+(define-public (find-file/path file path)
+  (search-path path file))
+
 (define-public process-input-port	#f) ;process-input)
 (define-public process-output-port	#f) ;process-output)
 (define-public process-error-port	#f) ;process-error)
@@ -191,7 +210,16 @@
 (define-public hashtable->list	(lambda (h)
                           (map cdr (hash-map->list cons h))))
 
-(define-public find-runtime-type	(lambda (obj) obj))
+(define-public (find-runtime-type obj)
+  (cond ((string? obj)  "string")
+	((ast? obj)     "ast")
+	((list? obj)    "list")
+	((pair? obj)    "pair")
+	((number? obj)  "number")
+	((char? obj)    "character")
+	((keyword? obj) "keyword")
+	(else           (with-output-to-string
+			  (lambda () (write obj))))))