summary refs log tree commit diff stats
path: root/makefile
blob: 26b067fc7ced9442529768dba2b578ac650f9795 (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
# Produce HTML & RIVER outputs with pandoc
# Case Duckworth | autocento.me
# inspired by Lincoln Mullen | lincolnmullen.com

# Define directories, file lists, and options
TEXTs  := $(wildcard *.txt)

VERSIFY = trunk/versify.exe

HTMLbl := index.html template.html index-txt.html
HTMLs  := $(filter-out $(HTMLbl),$(patsubst %.txt,%.html,$(TEXTs)))
HTMopts = --template=template.html
HTMopts+= --filter=$(VERSIFY)
HTMopts+= --smart --mathml --section-divs

HAPAXbl:= first-lines.river common-titles.river hapax.river
RIVERer = trunk/river.lua
RIVERs := $(filter-out $(HAPAXbl),$(patsubst %.txt,%.river,$(TEXTs)))

HAPAXs := $(filter-out $(HAPAXbl),$(RIVERs))
HAPAXer = trunk/hapax.lua
HAPAXhd:= trunk/hapax.head
HAPAXtmp= hapax.tmp
HAPAX   = hapax.txt

LOZENGE = trunk/lozenge.js

.PHONY: all
all     : hapax html river lozenge

.PHONY: hapax
hapax   : $(HAPAX)
.PHONY: html
html    : $(HTMLs)
.PHONY: river
river   : $(RIVERs)
.PHONY: lozenge
lozenge : $(LOZENGE)

# Generic rule for HTML targets and Markdown sources
%.html : %.txt template.html $(VERSIFY)
	pandoc $< -f markdown -t html5 $(HTMopts) -o $@

# Generic rule for RIVER targets and Markdown sources
%.river : %.txt
	@echo River-ing $@
	@sed -e '/^---$$/,/^...$$/d'\
	     -e "s/[^][A-Za-z0-9\/\"':.-]/ /g" $< |\
	 pandoc - -f markdown -t $(RIVERer) -o $@

$(VERSIFY) : trunk/versify.hs
	ghc --make trunk/versify.hs

$(LOZENGE) : $(HTMLs)
	@echo "Updating lozenge.js..."
	@list=`echo $(HTMLs) |\
	 sed -e 's/\(\S\+.html\) \?/"\1",/g'\
	     -e 's/^\(.*\),$$/var files=[\1]/'` &&\
	 sed -i "s/var files=.*/$$list/" $(LOZENGE)

$(HAPAX) : $(RIVERs) $(HAPAXhd)
	-rm -f $(HAPAXbl)
	@echo "Compiling $(HAPAX)..."
	pandoc -f markdown -t $(HAPAXer) -o $(HAPAX) *.river
	@echo -n "Linking $(HAPAX)..."
	@cat $(HAPAXhd) > $(HAPAXtmp) &&\
	 for word in `sort hapax.txt`; do\
	    file=`grep -liwq "^$$word$$" *.river | grep -v '$(HAPAX)'`;\
	    echo "[$$word](`basename $$file river`html)">>$(HAPAXtmp);\
	    echo -n '.';\
	 done && mv $(HAPAXtmp) $(HAPAX)
	@echo "Done."

# TODO: Add indices compilers (first-lines, common-titles)

.PHONY: clean
clean:
	-rm -f hapax.txt hapax.tmp *.river
	-rm -f $(HTMLs)

.PHONY: again
again: clean all