blob: d39612037c98afb3b569de3fbbdaad4e506008ad (
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
88
89
|
(import (chicken base)
(chicken io)
(chicken file posix)
(chicken file)
(chicken string)
(chicken pathname)
(chicken format)
(chicken process-context)
(chicken process)
matchable
utils
feed
)
; 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 feed-dir (or (get-environment-variable "FEED_DIR")
(make-pathname src-dir "archive")))
(assert (> (string-length src-dir) 0))
(assert (> (string-length out-dir) 0))
(assert (> (string-length template-path) 0))
(define (process-path path)
(match path
[(? is-md?) (process-md path)]
[(? directory?) (process-dir (format "~A" path))]
[other (process-other-file other)]))
(define (is-md? path)
(define parts (string-split path "."))
(string=? "md" (last parts)))
(define (process-md md-path)
(printf "[info] converting markdown file \"~A\"" md-path)
(define out-html-file (pipe md-path
(λ (p) (irregex-replace (format "^~A" src-dir) p out-dir))
(λ (p) (irregex-replace "\.md$" p ".html"))))
(printf " to \"~A\"~%" out-html-file)
(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"))
(process "pandoc" args))
(define (process-other-file path)
(printf "[info] copying other file \"~A\"" path)
(define out-path (replace (format "^~A" src-dir) out-dir path))
(printf " to \"~A\"~%" out-path)
(copy-file path out-path))
(define (process-dir dir-path)
(printf "[info] processing directory ~A~%" dir-path)
(define out-dir-path (replace (format "^~A" src-dir) out-dir dir-path))
(create-directory out-dir-path #t)
(define paths (pipe dir-path
(@ format "~A/*")
(@ glob)
(@ map (@ replace "^\./" ""))))
(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
(printf "[info] cleaning up output directory \"~A\"~%" out-dir)
(clean-dir out-dir)
(printf "[info] generating site with pages from \"~A\"~%" src-dir)
(process-dir src-dir)
(printf "[info] generating feed~%")
(generate-feed feed-dir)
(printf "[info] done.~%")
|