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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#
# willora.mk
# Charlotte Koch <dressupgeekout@gmail.com>
#
WILLORABASE?= ${.CURDIR}
NAME?= mybook
PDF_OUT?= ${NAME}.pdf
PDF_ADOC_TOTAL= ${PDF_OUT}.adoc
EPUB_OUT?= ${NAME}.epub
EPUB_ADOC_TOTAL=${EPUB_OUT}.adoc
BUNDLE?= bundle
THEME?= poppy
THEMEDIR?= ${WILLORABASE}/themes
FONTDIR?= ${WILLORABASE}/fonts
MEDIA?= prepress
PUBLISHER?= WilloraPDF
COLOPHON_OUT?= colophon.pdf
DEDICATION_OUT?= dedication.pdf
ACKNOWLEDGMENTS_OUT?= acknowledgments.pdf
CUSTOM_PDF_CONVERTER= ${WILLORABASE}/lib/willora_pdf_converter.rb
########## ########## ##########
.PHONY: all
all: ${PDF_OUT} ${EPUB_OUT}
.PHONY: pdf
pdf: ${PDF_OUT}
.PHONY: epub
epub: ${EPUB_OUT}
########## ########## ##########
# XXX: Figure out why I can't do this:
# 'asciidoctor-pdf -a optimize'
# > GPL Ghostscript 9.50: Can't find initialization file gs_init.ps.
# https://docs.asciidoctor.org/pdf-converter/latest/optimize-pdf/
CLEANFILES+= ${PDF_OUT}
${PDF_OUT}: ${THEMEDIR}/${THEME}-theme.yml ${CUSTOM_PDF_CONVERTER} ${PDF_ADOC_TOTAL} Gemfile.lock ${COLOPHON_OUT} ${DEDICATION_OUT} ${ACKNOWLEDGMENTS_OUT}
${BUNDLE} exec asciidoctor-pdf \
-v \
-r ${CUSTOM_PDF_CONVERTER} \
-d book \
-o ${.TARGET} \
-a pdf-fontsdir=${FONTDIR} \
-a pdf-theme=${THEME} \
-a pdf-themesdir=${THEMEDIR} \
-a media=${MEDIA} \
-a text-align=justify \
${PDF_ADOC_TOTAL}
CLEANFILES+= ${PDF_ADOC_TOTAL}
${PDF_ADOC_TOTAL}: ${CHAPTERS}
rm -f ${.TARGET}
.for chapter in ${CHAPTERS}
dos2unix < ${chapter} | sed -E \
-e 's,[[:space:]]--[[:space:]],\&\#8212;,g' \
-e 's,\ï,\&\#239;,g' \
-e 's,\é,\&\#233;,g' >> ${.TARGET}
printf '\n\n' >> ${.TARGET}
.endfor
CLEANFILES+= ${COLOPHON_OUT}
${COLOPHON_OUT}: ${THEMEDIR}/${THEME}-colophon-theme.yml ${COLOPHON_FILE} ${CUSTOM_PDF_CONVERTER} Gemfile.lock
${BUNDLE} exec asciidoctor-pdf \
-v \
-r ${CUSTOM_PDF_CONVERTER} \
-d book \
-o ${.TARGET} \
-a pdf-fontsdir=${FONTDIR} \
-a pdf-theme=${THEME}-colophon \
-a pdf-themesdir=${THEMEDIR} \
-a media=print \
-a text-align=justify \
${COLOPHON_FILE}
CLEANFILES+= ${DEDICATION_OUT}
${DEDICATION_OUT}: ${THEMEDIR}/${THEME}-dedication-theme.yml ${DEDICATION_FILE} ${CUSTOM_PDF_CONVERTER} Gemfile.lock
${BUNDLE} exec asciidoctor-pdf \
-v \
-r ${CUSTOM_PDF_CONVERTER} \
-d book \
-o ${.TARGET} \
-a pdf-fontsdir=${FONTDIR} \
-a pdf-theme=${THEME}-dedication \
-a pdf-themesdir=${THEMEDIR} \
-a media=print \
${DEDICATION_FILE}
CLEANFILES+= ${ACKNOWLEDGMENTS_OUT}
${ACKNOWLEDGMENTS_OUT}: ${THEMEDIR}/${THEME}-acknowledgments-theme.yml ${ACKNOWLEDGMENTS_FILE} ${CUSTOM_PDF_CONVERTER} Gemfile.lock
${BUNDLE} exec asciidoctor-pdf \
-v \
-r ${CUSTOM_PDF_CONVERTER} \
-d book \
-o ${.TARGET} \
-a pdf-fontsdir=${FONTDIR} \
-a pdf-theme=${THEME}-acknowledgments \
-a pdf-themesdir=${THEMEDIR} \
-a media=print \
${ACKNOWLEDGMENTS_FILE}
########## ########## ##########
# XXX: '-a ebook-validate' doesn't work because:
# > RUBYOPT=-d epubcheck
# Exception `LoadError' at /usr/pkg/lib/ruby/3.0.0/rubygems.rb:1339 - cannot
# load such file -- rubygems/defaults/ruby
# Exception `LoadError' at
# <internal:/usr/pkg/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85 -
# cannot load such file -- rubygems/defaults/operating_system
# Exception `LoadError' at
# <internal:/usr/pkg/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:162 -
# cannot load such file -- rubygems/defaults/operating_system
# Failed to execute epubcheck
CLEANFILES+= ${EPUB_OUT}
${EPUB_OUT}: Gemfile.lock ${EPUB_ADOC_TOTAL}
${BUNDLE} exec asciidoctor-epub3 \
-v \
-d book \
-o ${.TARGET} \
-a producer="${PUBLISHER}" \
-a front-cover-image=${EPUB_COVER_FILE} \
-a ebook-format=epub3 \
-a media=${MEDIA} \
-a text-align=justify \
${EPUB_ADOC_TOTAL}
# XXX Needs to be different from the PDF one
CLEANFILES+= ${EPUB_ADOC_TOTAL}
${EPUB_ADOC_TOTAL}: ${CHAPTERS}
rm -f ${.TARGET}
.for chapter in ${CHAPTERS}
dos2unix < ${chapter} | sed -E \
-e 's,[[:space:]]--[[:space:]],\&\#8212;,g' \
-e 's,\ï,\&\#239;,g' \
-e 's,\é,\&\#233;,g' >> ${.TARGET}
printf '\n\n' >> ${.TARGET}
.endfor
########## ########## ##########
Gemfile.lock:
${BUNDLE} install
########## ########## ##########
.PHONY: clean
clean:
rm -f ${CLEANFILES}
|