diff options
author | Ludovic Courtes | 2005-07-01 23:55:56 +0000 |
---|---|---|
committer | Ludovic Courtes | 2005-07-01 23:55:56 +0000 |
commit | efea4dc93f2565555e47de0bfd027614a9c8674d (patch) | |
tree | 393a916bf215a675ea75af989f1c66adfe9848c9 /src/guile/skribilo/engine.scm | |
parent | a85155f7c411761cfbd75431f265675ae0f394e3 (diff) | |
download | skribilo-efea4dc93f2565555e47de0bfd027614a9c8674d.tar.gz skribilo-efea4dc93f2565555e47de0bfd027614a9c8674d.tar.lz skribilo-efea4dc93f2565555e47de0bfd027614a9c8674d.zip |
Lots of changes, again.
Lots of changes, notably the following:
* skr/*.skr: Moved engines to `src/guile/skribilo/engine'.
* src/guile/skribilo/engine.scm (lookup-engine): Rewritten. Don't use
the auto-load alist.
* src/guile/skribilo/evaluator.scm: New name of the `eval' module.
`eval' couldn't be used as the module base-name because of Guile's
recursive module name space.
git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-2
Diffstat (limited to 'src/guile/skribilo/engine.scm')
-rw-r--r-- | src/guile/skribilo/engine.scm | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/src/guile/skribilo/engine.scm b/src/guile/skribilo/engine.scm index 9584f5e..1b39ec6 100644 --- a/src/guile/skribilo/engine.scm +++ b/src/guile/skribilo/engine.scm @@ -27,9 +27,10 @@ (define-module (skribilo engine) :use-module (skribilo debug) -; :use-module (skribilo eval) +; :use-module (skribilo evaluator) :use-module (skribilo writer) :use-module (skribilo types) + :use-module (skribilo lib) :use-module (oop goops) :use-module (ice-9 optargs) @@ -58,11 +59,14 @@ (define (default-engine-set! e) - (if (not (engine? e)) - (skribe-error 'default-engine-set! "bad engine ~S" e)) - (set! *default-engine* e) - (set! *default-engines* (cons e *default-engines*)) - e) + (with-debug 5 'default-engine-set! + (debug-item "engine=" e) + + (if (not (engine? e)) + (skribe-error 'default-engine-set! "bad engine ~S" e)) + (set! *default-engine* e) + (set! *default-engines* (cons e *default-engines*)) + e)) (define (push-default-engine e) @@ -141,32 +145,22 @@ ;;; ;;; FIND-ENGINE ;;; -(define (%find-loaded-engine id version) - (let loop ((es *engines*)) - (cond - ((null? es) #f) - ((eq? (slot-ref (car es) 'ident) id) - (cond - ((eq? version 'unspecified) (car es)) - ((eq? version (slot-ref (car es) 'version)) (car es)) - (else (Loop (cdr es))))) - (else (loop (cdr es)))))) - -(define* (find-engine id #:key (version 'unspecified)) - (with-debug 5 'find-engine +(define* (lookup-engine id #:key (version 'unspecified)) + "Look for an engine named @var{name} (a symbol) in the @code{(skribilo +engine)} module hierarchy. If no such engine was found, an error is raised, +otherwise the requested engine is returned." + (with-debug 5 'lookup-engine (debug-item "id=" id " version=" version) - (or (%find-loaded-engine id version) - (let ((c (assq id *skribe-auto-load-alist*))) - (debug-item "c=" c) - (if (and c (string? (cdr c))) - (begin - (skribe-load (cdr c) :engine 'base) - (%find-loaded-engine id version)) - #f))))) + (let* ((engine (symbol-append id '-engine)) + (m (resolve-module `(skribilo engine ,id)))) + (if (module-bound? m engine) + (module-ref m engine) + (error "no such engine" id))))) -(define lookup-engine find-engine) +(define (find-engine . args) + (false-if-exception (apply lookup-engine args))) ;;; |