#| #!/usr/bin/env sh exec chibi-scheme -A utils/ $0 $@ |# (import (chibi) (chibi json) (only (chibi filesystem) directory-files create-directory*) (chibi process) (only (chibi pathname) path-strip-directory path-extension make-path) ;(chibi app) (only (chibi string) string-prefix? string-trim-right string-join) (prefix (chibi io) io:) (utils cover cover) (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: Called: " strcall "\n" err) (current-error-port))) out) (error (string-append "\n" errmsg "\nIn call: " strcall "\n" err))))) (define (read-meta file) (string->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 lang)) (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 "web-simple.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 lang)) (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 "web.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 simple web-page creation"))) (define (pandoc-book lang output input) (let ((outpath (make-path output lang)) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "-o" ,(make-path outpath "book.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-book-simple lang output input) (let ((outpath (make-path output lang)) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "-o" ,(make-path outpath "book-simple.pdf") "--standalone" "--pdf-engine=xelatex" "--data-dir=." ,(string-append "--resource-path=" input) "--template=book-simple.latex" "--lua-filter=appendixes.lua") files `("--metadata-file" ,metafile)) "Error in simple book creation"))) (define (pandoc-epub lang output input) (let ((outpath (make-path output lang)) (files (directory-sources lang input)) (metafile (directory-meta lang input))) (create-directory* outpath) (process->string-or-fail (append `("pandoc" "-o" ,(make-path outpath "book.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 ebook creation"))) (define (make-cover lang out input) (let* ((outpath (make-path output lang)) (files (directory-sources lang input)) (metafile (directory-meta lang input)) (metadata (read-meta metafile)) (svg-file (make-path outpath "cover.svg"))) (create-directory* outpath) (call-with-output-file svg-file (lambda (out) (metadata->svg metadata out))) (process->string-or-fail (append `("inkscape" "--export-filename" ,(make-path outpath "cover.pdf") "--export-type=pdf" ,svg-file)) "Error in cover 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-book-simple "es" output input) (pandoc-epub "es" output input) (make-cover "es" output input) ;(display (cdr (assoc 'title (read-meta "src/Programming_in_Python/es/Metadata.yaml"))))