summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEkaitz Zarraga <ekaitz@elenq.tech>2020-05-27 17:13:09 +0200
committerEkaitz Zarraga <ekaitz@elenq.tech>2020-05-27 17:13:09 +0200
commit65f0e6d33d6813572e1ccba95b66aa08d100cd5f (patch)
tree052fd5d096cf1e7c7b17dcab657b79b593de5e3e
parentf10767e662a56ee10222d97137adc3c7ef99af1a (diff)
First steps on a chibi-scheme Makefile
-rw-r--r--Makefile.scm148
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"))))