skribilo-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [skribilo-users] Compiling a skribilo document within Guile


From: Ludovic Courtès
Subject: Re: [skribilo-users] Compiling a skribilo document within Guile
Date: Sun, 15 Jan 2017 23:57:59 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Roger Mason <address@hidden> skribis:

> (use-modules (skribilo engine)       ;; provides `find-engine'
>             (skribilo evaluator)    ;; provides `evaluate-document'
>             (skribilo package base) ;; provides `chapter', etc.
>             (skribilo utils syntax) ;; `set-correct-file-encoding!'
>             (srfi srfi-1)
>             (ice-9 rdelim))           ;read-line
>
> (let* (;; infile, outfile, engine
>       (infile (list-ref (command-line) 1))
>       (outfile (list-ref (command-line) 2))
>       (eng (string->symbol (list-ref (command-line) 3)))
>       (e (find-engine eng))
>
>       ;; The (document ...) bit wast pasted in from the file
>       ;; It compiles fine using this text
>       ;; There must be something odd about the (document ...) returned by 
> with-input-from-file...
>       (result (with-input-from-file infile
>        (lambda ()
>          (set-correct-file-encoding!)
>          (let loop ((line   (read-line))
>                     (result '()))
>            (if (eof-object? line)
>                (string-join (reverse result)
>                             (string #\newline))
>                (loop (read-line)
>                      (cons line result)))))))
>       (d result))
>
>   ;; "Evaluate" the document to a file.
>   (with-output-to-file (string-append outfile "." (symbol->string eng))
>     (lambda ()
>       (evaluate-document d e))))

I think the problem is that ‘d’ here is a string, namely:

  "(document #:title …)"

whereas ‘evaluate-document’ expects an <ast> object.

Instead, you should be doing something like:

  (let* ((code (call-with-input-file infile read))
         (ast  (primitive-eval code)))
    (with-output-to-file …
      (lambda ()
        (evaluate-document ast e))))

See ‘evaluate-ast-from-port’ in (skribilo evaluator) for an example.

HTH!

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]