aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtes2006-01-16 22:31:32 +0000
committerLudovic Courtes2006-01-16 22:31:32 +0000
commit2d8fa88ef04b3a6141a2b03a9671a7dd0fcc1f60 (patch)
tree56d287670d9ce43285e8e961f9f443dd74751317
parentc72a09b779b110b2e189ab2b1872eb89f568605c (diff)
downloadskribilo-2d8fa88ef04b3a6141a2b03a9671a7dd0fcc1f60.tar.gz
skribilo-2d8fa88ef04b3a6141a2b03a9671a7dd0fcc1f60.tar.lz
skribilo-2d8fa88ef04b3a6141a2b03a9671a7dd0fcc1f60.zip
More SRFI-3[45] enhancements; first stab at the user documentation.
* 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. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-25
-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))))))