From a0b080ec87104e8b2c030f1fde7f56dadb7f33dc Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Tue, 6 Feb 2007 22:53:16 +0000 Subject: evaluator: Made safer with respect to module excursions. Patches applied: * lcourtes@laas.fr--2005-libre/skribilo--engine-classes--1.2 (patch 11) * skribilo--engine-classes--1.2 (patch 7) - evaluator: Made safer with respect to module excursions. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-55 --- src/guile/skribilo/evaluator.scm | 75 +++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 36 deletions(-) (limited to 'src/guile') diff --git a/src/guile/skribilo/evaluator.scm b/src/guile/skribilo/evaluator.scm index 8502d51..a397f29 100644 --- a/src/guile/skribilo/evaluator.scm +++ b/src/guile/skribilo/evaluator.scm @@ -58,18 +58,17 @@ ;;; %EVALUATE ;;; (define (%evaluate expr) - ;; Evaluate EXPR, an arbitrary S-expression that may contain calls to the - ;; markup functions defined in a markup package such as - ;; `(skribilo package base)', e.g., `(bold "hello")'. - (let ((result (eval expr (*skribilo-user-module*)))) - + ;; Evaluate EXPR in the current module. EXPR is an arbitrary S-expression + ;; that may contain calls to the markup functions defined in a markup + ;; package such as `(skribilo package base)', e.g., `(bold "hello")'. + (let ((result (eval expr (current-module)))) (if (ast? result) - (let ((file (source-property expr 'filename)) - (line (source-property expr 'line)) - (column (source-property expr 'column))) - (slot-set! result 'loc - (make - :file file :line line :pos column)))) + (let ((file (source-property expr 'filename)) + (line (source-property expr 'line)) + (column (source-property expr 'column))) + (slot-set! result 'loc + (make + :file file :line line :pos column)))) result)) @@ -103,12 +102,19 @@ (debug-item "e=" e) (if (not (engine? e)) (skribe-error 'evaluate-document-from-port "cannot find engine" engine) - (let loop ((exp (reader port))) - (with-debug 10 'evaluate-document-from-port - (debug-item "exp=" exp)) - (unless (eof-object? exp) - (evaluate-document (%evaluate exp) e :env env) - (loop (reader port)))))))) + (save-module-excursion + (lambda () + (with-debug 10 'evaluate-document-from-port + (debug-item "exp=" exp)) + (set-current-module (*skribilo-user-module*)) + + (let loop ((exp (reader port))) + (if (eof-object? exp) + (evaluate-document (%evaluate exp) e :env env) + (begin + (evaluate-document (%evaluate exp) e :env env) + (loop (reader port))))))))))) + ;;; @@ -123,7 +129,7 @@ (define* (load-document file :key (engine #f) (path #f) :allow-other-keys :rest opt) - (with-debug 4 'skribe-load + (with-debug 4 'load-document (debug-item " engine=" engine) (debug-item " path=" path) (debug-item " opt=" opt) @@ -138,15 +144,7 @@ (argument path))))) (else path)) %load-path)) - (filep (or (search-path path file) - (search-path (append path %load-path) file) - (search-path (append path %load-path) - (let ((dot (string-rindex file #\.))) - (if dot - (string-append - (string-take file dot) - ".scm") - file)))))) + (filep (search-path path file))) (unless (and (string? filep) (file-exists? filep)) (raise (condition (&file-search-error @@ -177,7 +175,8 @@ ;;; INCLUDE-DOCUMENT ;;; (define* (include-document file :key (path (*document-path*)) - (reader (*document-reader*))) + (reader (*document-reader*)) + (module (current-module))) (unless (every string? path) (raise (condition (&invalid-argument-error (proc-name 'include-document) (argument path))))) @@ -193,11 +192,15 @@ (with-input-from-file full-path (lambda () - (let Loop ((exp (reader (current-input-port))) - (res '())) - (if (eof-object? exp) - (if (and (pair? res) (null? (cdr res))) - (car res) - (reverse! res)) - (Loop (reader (current-input-port)) - (cons (%evaluate exp) res)))))))) + (save-module-excursion + (lambda () + (set-current-module module) + + (let Loop ((exp (reader (current-input-port))) + (res '())) + (if (eof-object? exp) + (if (and (pair? res) (null? (cdr res))) + (car res) + (reverse! res)) + (Loop (reader (current-input-port)) + (cons (%evaluate exp) res)))))))))) -- cgit v1.2.3 From e9c75da91462305b1449d0d95af6f67ae51e941b Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Tue, 6 Feb 2007 22:54:27 +0000 Subject: `slide' package: use the native APIs. Patches applied: * lcourtes@laas.fr--2005-libre/skribilo--engine-classes--1.2 (patch 5) - `slide' package: use the native APIs. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-56 --- ChangeLog | 21 +++++++++++++++++++++ src/guile/skribilo/package/slide.scm | 26 +++++++++++++++++++++----- 2 files changed, 42 insertions(+), 5 deletions(-) (limited to 'src/guile') diff --git a/ChangeLog b/ChangeLog index a0c288b..4f0624c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,27 @@ # arch-tag: automatic-ChangeLog--skribilo@sv.gnu.org--2006/skribilo--devo--1.2 # +2007-02-06 22:54:27 GMT Ludovic Courtes patch-56 + + Summary: + `slide' package: use the native APIs. + Revision: + skribilo--devo--1.2--patch-56 + + Patches applied: + + * lcourtes@laas.fr--2005-libre/skribilo--engine-classes--1.2 (patch 5) + + - `slide' package: use the native APIs. + + modified files: + ChangeLog src/guile/skribilo/package/slide.scm + + new patches: + lcourtes@laas.fr--2005-libre/skribilo--engine-classes--1.2--patch-5 + lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-96 + + 2007-02-06 22:53:16 GMT Ludovic Courtes patch-55 Summary: diff --git a/src/guile/skribilo/package/slide.scm b/src/guile/skribilo/package/slide.scm index 898f105..cbcae0b 100644 --- a/src/guile/skribilo/package/slide.scm +++ b/src/guile/skribilo/package/slide.scm @@ -20,13 +20,29 @@ ;;; USA. -(define-skribe-module (skribilo package slide)) +(define-module (skribilo package slide) + :use-module (skribilo reader) + :use-module (skribilo utils syntax) + :use-module (skribilo lib) + :use-module (skribilo ast) + :use-module (skribilo engine) + :use-module (skribilo evaluator) ;; `*load-options*' + :use-module (skribilo package base) + :autoload (skribilo utils keywords) (the-options the-body) + + :use-module (srfi srfi-1) + :use-module (ice-9 optargs)) + +(fluid-set! current-reader (make-reader 'skribe)) + + + ;*---------------------------------------------------------------------*/ ;* slide-options */ ;*---------------------------------------------------------------------*/ -(define-public &slide-load-options (skribe-load-options)) +(define-public &slide-load-options (*load-options*)) ;*---------------------------------------------------------------------*/ @@ -49,7 +65,7 @@ (let ((s (new container (markup 'slide) (ident (if (not ident) - (symbol->string (gensym 'slide)) + (symbol->string (gensym "slide")) ident)) (class class) (required-options '(:title :number :toc)) @@ -232,7 +248,7 @@ (new container (markup 'slide-topic) (required-options '(:title :outline?)) - (ident (or ident (symbol->string (gensym 'slide-topic)))) + (ident (or ident (symbol->string (gensym "slide-topic")))) (class class) (options `((:outline? ,outline?) ,@(the-options opt :outline? :class))) @@ -247,7 +263,7 @@ (new container (markup 'slide-subtopic) (required-options '(:title :outline?)) - (ident (or ident (symbol->string (gensym 'slide-subtopic)))) + (ident (or ident (symbol->string (gensym "slide-subtopic")))) (class class) (options `((:outline? ,outline?) ,@(the-options opt :outline? :class))) -- cgit v1.2.3 From 897b708f2d2c8ab23ae9166d17ebe7d3e6853200 Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Wed, 7 Feb 2007 23:07:16 +0000 Subject: evaluator: Slight module-related cleanups. * src/guile/skribilo/evaluator.scm (%evaluate): Take an additional MODULE argument. Updated callers. (evaluate-document-from-port): Likewise. (load-document): Take additional MODULE and READER arguments. (include-document): Have MODULE default to `(*skribilo-user-module*)' instead of `(current-module)'. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-57 --- ChangeLog | 21 +++++++++++++++++++++ src/guile/skribilo/evaluator.scm | 28 +++++++++++++++++++--------- 2 files changed, 40 insertions(+), 9 deletions(-) (limited to 'src/guile') diff --git a/ChangeLog b/ChangeLog index 4f0624c..a79c4df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,27 @@ # arch-tag: automatic-ChangeLog--skribilo@sv.gnu.org--2006/skribilo--devo--1.2 # +2007-02-07 23:07:16 GMT Ludovic Courtes patch-57 + + Summary: + evaluator: Slight module-related cleanups. + Revision: + skribilo--devo--1.2--patch-57 + + * src/guile/skribilo/evaluator.scm (%evaluate): Take an additional MODULE + argument. Updated callers. + (evaluate-document-from-port): Likewise. + (load-document): Take additional MODULE and READER arguments. + (include-document): Have MODULE default to `(*skribilo-user-module*)' + instead of `(current-module)'. + + modified files: + ChangeLog src/guile/skribilo/evaluator.scm + + new patches: + lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-97 + + 2007-02-06 22:54:27 GMT Ludovic Courtes patch-56 Summary: diff --git a/src/guile/skribilo/evaluator.scm b/src/guile/skribilo/evaluator.scm index a397f29..5067b59 100644 --- a/src/guile/skribilo/evaluator.scm +++ b/src/guile/skribilo/evaluator.scm @@ -57,11 +57,11 @@ ;;; ;;; %EVALUATE ;;; -(define (%evaluate expr) +(define (%evaluate expr module) ;; Evaluate EXPR in the current module. EXPR is an arbitrary S-expression ;; that may contain calls to the markup functions defined in a markup ;; package such as `(skribilo package base)', e.g., `(bold "hello")'. - (let ((result (eval expr (current-module)))) + (let ((result (eval expr module))) (if (ast? result) (let ((file (source-property expr 'filename)) (line (source-property expr 'line)) @@ -93,7 +93,8 @@ ;;; (define* (evaluate-document-from-port port engine :key (env '()) - (reader (*document-reader*))) + (reader (*document-reader*)) + (module (*skribilo-user-module*))) (with-debug 2 'evaluate-document-from-port (debug-item "engine=" engine) (debug-item "reader=" reader) @@ -110,9 +111,11 @@ (let loop ((exp (reader port))) (if (eof-object? exp) - (evaluate-document (%evaluate exp) e :env env) + (evaluate-document (%evaluate exp module) + e :env env) (begin - (evaluate-document (%evaluate exp) e :env env) + (evaluate-document (%evaluate exp module) + e :env env) (loop (reader port))))))))))) @@ -127,7 +130,12 @@ ;; List of the names of files already loaded. (define *loaded-files* (make-parameter '())) -(define* (load-document file :key (engine #f) (path #f) :allow-other-keys + +(define* (load-document file + :key engine path + (module (*skribilo-user-module*)) + (reader (*document-reader*)) + :allow-other-keys :rest opt) (with-debug 4 'load-document (debug-item " engine=" engine) @@ -167,7 +175,9 @@ ;; Load it (with-input-from-file filep (lambda () - (evaluate-document-from-port (current-input-port) ei))) + (evaluate-document-from-port (current-input-port) ei + :module module + :reader reader))) (*loaded-files* (cons filep (*loaded-files*)))))))) @@ -176,7 +186,7 @@ ;;; (define* (include-document file :key (path (*document-path*)) (reader (*document-reader*)) - (module (current-module))) + (module (*skribilo-user-module*))) (unless (every string? path) (raise (condition (&invalid-argument-error (proc-name 'include-document) (argument path))))) @@ -203,4 +213,4 @@ (car res) (reverse! res)) (Loop (reader (current-input-port)) - (cons (%evaluate exp) res)))))))))) + (cons (%evaluate exp module) res)))))))))) -- cgit v1.2.3 From f1a997ba4f7374d508eddf7dccfae359daabb25e Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Wed, 7 Feb 2007 23:07:44 +0000 Subject: skribe-load: Better modulogy. * src/guile/skribilo/utils/compat.scm (skribe-load): Use `resolve-interface' instead of `resolve-module'; use `module-use-interfaces!' instead of `set-module-uses!'. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-58 --- ChangeLog | 18 ++++++++++++++++++ src/guile/skribilo/utils/compat.scm | 7 +++---- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'src/guile') diff --git a/ChangeLog b/ChangeLog index a79c4df..4ad04c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,24 @@ # arch-tag: automatic-ChangeLog--skribilo@sv.gnu.org--2006/skribilo--devo--1.2 # +2007-02-07 23:07:44 GMT Ludovic Courtes patch-58 + + Summary: + skribe-load: Better modulogy. + Revision: + skribilo--devo--1.2--patch-58 + + * src/guile/skribilo/utils/compat.scm (skribe-load): Use + `resolve-interface' instead of `resolve-module'; use + `module-use-interfaces!' instead of `set-module-uses!'. + + modified files: + ChangeLog src/guile/skribilo/utils/compat.scm + + new patches: + lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-98 + + 2007-02-07 23:07:16 GMT Ludovic Courtes patch-57 Summary: diff --git a/src/guile/skribilo/utils/compat.scm b/src/guile/skribilo/utils/compat.scm index 4905cef..9f85658 100644 --- a/src/guile/skribilo/utils/compat.scm +++ b/src/guile/skribilo/utils/compat.scm @@ -153,13 +153,12 @@ " skribe-load: `~a' -> `~a'~%" file mod-name)) (let ((mod (false-if-exception - (resolve-module mod-name)))) + (resolve-interface mod-name)))) (if (not mod) (raise c) (begin - (set-module-uses! - (current-module) - (cons mod (module-uses (current-module)))) + (module-use-interfaces! (current-module) + (list mod)) #t)))) (raise c))))) -- cgit v1.2.3 From 66b863c26c55eb460dcc7da2d674bf00ec9e69cb Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Mon, 19 Feb 2007 23:31:50 +0000 Subject: `base' engine: Use the native Skribilo APIs. * src/guile/skribilo/engine/base.scm: No longer use `define-skribe-module'. Use the native Skribilo APIs instead. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-59 --- ChangeLog | 17 +++++++++++++++ src/guile/skribilo/engine/base.scm | 44 ++++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 19 deletions(-) (limited to 'src/guile') diff --git a/ChangeLog b/ChangeLog index 4ad04c6..d31ffd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,23 @@ # arch-tag: automatic-ChangeLog--skribilo@sv.gnu.org--2006/skribilo--devo--1.2 # +2007-02-19 23:31:50 GMT Ludovic Courtes patch-59 + + Summary: + `base' engine: Use the native Skribilo APIs. + Revision: + skribilo--devo--1.2--patch-59 + + * src/guile/skribilo/engine/base.scm: No longer use + `define-skribe-module'. Use the native Skribilo APIs instead. + + modified files: + ChangeLog src/guile/skribilo/engine/base.scm + + new patches: + lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-99 + + 2007-02-07 23:07:44 GMT Ludovic Courtes patch-58 Summary: diff --git a/src/guile/skribilo/engine/base.scm b/src/guile/skribilo/engine/base.scm index 711c179..f339a40 100644 --- a/src/guile/skribilo/engine/base.scm +++ b/src/guile/skribilo/engine/base.scm @@ -19,11 +19,23 @@ ;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, ;;; USA. -(define-skribe-module (skribilo engine base) - :autoload (skribilo biblio template) (make-bib-entry-template/default - output-bib-entry-template) - :use-module (srfi srfi-13)) +(define-module (skribilo engine base) + :use-module (skribilo ast) + :use-module (skribilo engine) + :use-module (skribilo writer) + :autoload (skribilo output) (output) + :use-module (skribilo evaluator) + :autoload (skribilo package base) (color) + :autoload (skribilo utils keywords) (list-split) + :autoload (skribilo biblio template) (make-bib-entry-template/default + output-bib-entry-template) + ;; syntactic sugar + :use-module (skribilo reader) + :use-module (skribilo utils syntax)) +(fluid-set! current-reader (make-reader 'skribe)) + + ;*---------------------------------------------------------------------*/ ;* base-engine ... */ ;*---------------------------------------------------------------------*/ @@ -170,7 +182,7 @@ (format #f "?~a " k)))) (msg (list f (markup-body n))) (n (list "[" (color :fg "red" (bold msg)) "]"))) - (skribe-eval n e)))) + (evaluate-document n e)))) ;*---------------------------------------------------------------------*/ ;* &the-bibliography ... */ @@ -234,7 +246,7 @@ (markup-writer '&bib-entry-url :action (lambda (n e) (let ((url (markup-body n))) - (skribe-eval + (evaluate-document (ref :text (it url) :url url) e)))) ;*---------------------------------------------------------------------*/ @@ -258,7 +270,7 @@ ;*---------------------------------------------------------------------*/ (markup-writer '&bib-entry-title :action (lambda (n e) - (skribe-eval (markup-body n)) e)) + (evaluate-document (markup-body n) e))) ;*---------------------------------------------------------------------*/ ;* &bib-entry-booktitle ... */ @@ -266,21 +278,21 @@ (markup-writer '&bib-entry-booktitle :action (lambda (n e) (let ((title (markup-body n))) - (skribe-eval (it title) e)))) + (evaluate-document (it title) e)))) ;*---------------------------------------------------------------------*/ ;* &bib-entry-journal ... */ ;*---------------------------------------------------------------------*/ (markup-writer '&bib-entry-journal :action (lambda (n e) - (skribe-eval (it (markup-body n)) e))) + (evaluate-document (it (markup-body n)) e))) ;*---------------------------------------------------------------------*/ ;* &bib-entry-publisher ... */ ;*---------------------------------------------------------------------*/ (markup-writer '&bib-entry-publisher :action (lambda (n e) - (skribe-eval (markup-body n) e))) + (evaluate-document (markup-body n) e))) ;*---------------------------------------------------------------------*/ ;* &the-index ... @label the-index@ */ @@ -400,7 +412,7 @@ ;;:&skribe-eval-location loc :class "index-table" (make-sub-tables ie nc pref)))))) - (output (skribe-eval t e) e)))) + (output (evaluate-document t e) e)))) ;*---------------------------------------------------------------------*/ ;* &the-index-header ... */ @@ -418,7 +430,7 @@ :before (lambda (n e) (let ((num (markup-option n :number))) (if (number? num) - (skribe-eval + (evaluate-document (it (string-append (string-pad (number->string num) 3) ": ")) e)))) @@ -432,11 +444,5 @@ :action (lambda (n e) (let ((o (markup-option n :offset)) (n (markup-ident (handle-body (markup-body n))))) - (skribe-eval (it (if (integer? o) (+ o n) n)) e)))) - - + (evaluate-document (it (if (integer? o) (+ o n) n)) e)))) -;;;; A VIRER (mais handle-body n'est pas défini) -(markup-writer 'line-ref - :options '(:offset) - :action #f) -- cgit v1.2.3