diff options
-rw-r--r-- | Makefile.scm | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/Makefile.scm b/Makefile.scm new file mode 100644 index 0000000..6076a89 --- /dev/null +++ b/Makefile.scm @@ -0,0 +1,148 @@ +(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 output-dir "output") +;(define target "GET_FROM_INPUT") +;(define sources (sort (directory-files (make-path target lang)) string<?)) +;(define metadata (make-path target lang "Metadata.yaml")) +;(define output (make-path output-dir target)) + +(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)) string<?))) + +(define (directory-meta lang dir) + (make-path dir lang "Metadata.yaml")) + +(define (process->string-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"))) + +;TODO +(define (pandoc-web-simple lang out folder) + "Receives a list of files and an optional metadata file: + (pandoc-web '(file1 file2 ...) metafile)" + (define pandoc-call + (case-lambda + (() `("pandoc" + "--to=html" + "-o" ,out + "--standalone" + "--no-highlight" + "--data-dir=." + ,(string-append "--resource-path=templates/web:" folder) + "--base-header-level=2" ;"--shift-heading-level-by=-1" is the new way + "--template=web-simple.html" + ;"--lua-filter=section-numbers.lua" + "--lua-filter=anchored-h.lua" + "--lua-filter=appendixes.lua")) + ((files) + (append (pandoc-call) files)) + ((files metafile) + (append (pandoc-call files) `("--metadata-file" ,metafile))))) + (process->string-or-fail + (pandoc-call + (directory-sources lang folder) + (directory-meta lang folder)) + "Error in web-page creation")) + + +; TODO +(define (pandoc-web lang out folder) + "Receives a list of files and an optional metadata file: + (pandoc-web '(file1 file2 ...) metafile)" + (define pandoc-call + (case-lambda + (() `("pandoc" + "--to=html" + "-o" ,out + "--standalone" + "--self-contained" + "--toc" + "--toc-depth=2" + "--base-header-level=2" ;"--shift-heading-level-by=-1" is the new way + "--data-dir=." + ,(string-append "--resource-path=./templates/web/:./templates:" folder) + "--template=web.html" + ;"--lua-filter=section-numbers.lua" + "--lua-filter=anchored-h.lua" + "--lua-filter=appendixes.lua")) + ((files) + (append (pandoc-call) files)) + ((files metafile) + (append (pandoc-call files) `("--metadata-file" ,metafile))))) + (process->string-or-fail + (pandoc-call + (directory-sources lang folder) + (directory-meta lang folder)) + "Error in web-page creation")) + +(define (pandoc-book lang out folder) + "Receives a list of files and an optional metadata file: + (pandoc-web '(file1 file2 ...) metafile)" + (define pandoc-call + (case-lambda + (() `("pandoc" + "-o" ,out + "--standalone" + "--pdf-engine=xelatex" + "--data-dir=." + ,(string-append "--resource-path=" folder) + "--template=book.latex" + "--lua-filter=appendixes.lua")) + ((files) + (append (pandoc-call) files)) + ((files metafile) + (append (pandoc-call files) `("--metadata-file" ,metafile))))) + + (process->string-or-fail + (pandoc-call + (directory-sources lang folder) + (directory-meta lang folder)) + "Error in book creation")) + +;; RUN THIS LIKE: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define args (cdr (command-line))) +(display (pandoc-web "es" "hola.html" (car args))) +;(display (pandoc-book "es" "hola.pdf" (car args))) + +;(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")))) |