blob: eb46fad33f4ca25c100533ca83d1d0943b924711 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
(import (chicken base)
(chicken io)
(chicken file posix)
(chicken file)
(chicken string)
(chicken pathname)
(chicken format)
(chicken process-context)
(chicken irregex)
(chicken process)
(matchable))
; utils
(define-syntax @
(syntax-rules ()
((_ fn-body expr ...)
(lambda (x) (fn-body expr ... x)))))
(define (last lst)
(if (null? (cdr lst))
(car lst)
(last (cdr lst))))
(define (pipe x . fns)
(match fns
[() x]
[(fn . rest) (apply pipe (fn x) rest)]))
(define (flow . fns)
(lambda (x) (apply pipe x fns)))
; application
(define src-dir (or (get-environment-variable "SRC_DIR")
"pages"))
(define out-dir (or (get-environment-variable "OUT_DIR")
"out"))
(define template-path (or (get-environment-variable "PANDOC_TEMPLATE")
"template.html"))
(define (process-path path)
(match path
[(? is-md?) (process-md path)]
[(? directory?) (process-dir (format "~A" path))]
[other (printf "TODO other file ~A~%" path)]))
(define (is-md? path)
(define parts (string-split path "."))
(string=? "md" (last parts)))
(define (process-md md-path)
(define out-html-file (pipe md-path
(lambda (p) (irregex-replace (format "^~A" src-dir) p out-dir))
(lambda (p) (irregex-replace "\.md$" p ".html"))))
(define-values (html-dir html-filename html-ext) (decompose-pathname out-html-file))
(create-directory html-dir #t)
(pandoc-md-to-html md-path out-html-file))
(define (pandoc-md-to-html md-path html-path)
(define args (list md-path
"-o" html-path
"--standalone"
"--template" template-path
"--highlight-style" "pygments"))
(printf "pandoc ~A" args)
(process "pandoc" args))
(define (process-dir dir-path)
(define out-dir-path (irregex-replace (format "^~A" src-dir) out-dir))
(create-directory out-dir-path #t)
(define paths (glob (format "~A/*" dir-path)))
(define paths (map (lambda (p) (irregex-replace "^\./" p "")) paths))
(for-each process-path paths))
(define (clean-dir dir)
(define (delete path)
(if (directory? path)
(delete-directory path #t)
(delete-file path)))
(for-each (@ delete) (glob (format "~A/*" dir))))
; run
(clean-dir out-dir)
(process-dir src-dir)
|