(import (chibi) (chibi json) (chibi filesystem) (chibi process) (chibi pathname) (chibi app) (chibi string) (chibi io) (srfi 1) (srfi 16) (srfi 95)) (define debug #t) (define (directory-files-not-hidden dir) (filter (lambda (x) (and (not (string-prefix? "." x)) (string=? "md" (path-extension x)))) (directory-files dir))) (define (directory-sources lang dir) (map (lambda (x) (make-path dir lang x)) (sort (directory-files-not-hidden (make-path dir lang)) stringstring-or-fail call errmsg) (let* ((res (process->output+error+status call)) (out (first res)) (err (second res)) (strcall (string-join call " ")) (status (third res))) (if (= status 0) (begin (if debug (display (string-append "\nDEBUG: In call: " strcall "\n" err) (current-error-port))) out) (error (string-append "\n" errmsg "\nIn call: " strcall "\n" err))))) (define (read-meta file) (parse-json (process->string-or-fail `("./utils/yaml2json.py" ,file) "Error parsing Metadata file"))) (define (pandoc-web-simple lang output input) (let ((outpath (make-path output "WebSimple")) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "--to=html" "-o" ,(make-path outpath (string-append lang ".html")) "--standalone" "--no-highlight" "--data-dir=." ,(string-append "--resource-path=" input) "--base-header-level=2" ;"--shift-heading-level-by=-1" is the new way "--template=web-simple.html" "--lua-filter=toc.lua" "--lua-filter=anchored-h.lua" "--lua-filter=appendixes.lua") files `("--metadata-file" ,metafile)) "Error in web-page creation"))) (define (pandoc-web lang output input) (let ((outpath (make-path output "Web")) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "--to=html" "-o" ,(make-path outpath (string-append lang ".html")) "--standalone" "--self-contained" "--base-header-level=2" ;"--shift-heading-level-by=-1" is the new way "--data-dir=." ,(string-append "--resource-path=./templates/web/:" "./templates:" input) "--template=web.html" "--lua-filter=toc.lua" "--lua-filter=anchored-h.lua" "--lua-filter=appendixes.lua") files `("--metadata-file" ,metafile)) "Error in web-page creation"))) (define (pandoc-book lang output input) (let ((outpath (make-path output "Book")) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "-o" ,(make-path outpath (string-append lang ".pdf")) "--standalone" "--pdf-engine=xelatex" "--data-dir=." ,(string-append "--resource-path=" input) "--template=book.latex" "--lua-filter=appendixes.lua") files `("--metadata-file" ,metafile)) "Error in book creation"))) (define (pandoc-epub lang output input) (let ((outpath (make-path output "Epub")) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "-o" ,(make-path outpath (string-append lang ".epub")) "--standalone" "--data-dir=." ,(string-append "--resource-path=" input) "--css=./templates/ebook/epub.css" "--template=book.epub" "--lua-filter=appendixes.lua") files `("--metadata-file" ,metafile)) "Error in book creation"))) ;; RUN THIS LIKE: ;; chibi-scheme Makefile.scm src/BOOK_FOLDER ;; ;; It will dump the compiled book to .out/BOOK_FOLDER/FORMAT/LANG.EXT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define args (cdr (command-line))) (define input (car args)) (define bookname (path-strip-directory (string-trim-right input #\/))) (define output (make-path "out" bookname)) (pandoc-web "es" output input) (pandoc-web-simple "es" output input) (pandoc-book "es" output input) (pandoc-epub "es" output input) ;(display (process->string-or-fail '("./utils/yaml2json.py" "src/Programming_in_Python/es/Metadata.yaml") "")) ;(display (cdr (assoc 'title (read-meta "src/Programming_in_Python/es/Metadata.yaml"))))