# 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)
VERSIFYer = 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=$(VERSIFYer)
HTMopts+= --smart --mathml --section-divs
BKTXTbl = "hapax.txt|first-lines.txt|common-titles.txt"
BKTXTs = $(patsubst %.html,%.back,$(HTMLs))
BKTXThd = trunk/backlink.head
BKHTMLs = $(patsubst %.back,%_backlinks.htm,$(BKTXTs))
RIVERbl:= first-lines.river common-titles.river hapax.river
RIVERer = trunk/river.lua
RIVERs := $(filter-out $(RIVERbl),$(patsubst %.txt,%.river,$(TEXTs)))
HAPAXs := $(RIVERs)
HAPAXer = trunk/hapax.lua
HAPAXhd:= trunk/hapax.head
HAPAXtmp= hapax.tmp
HAPAX = hapax.txt
LOZENGE = trunk/lozenge.js
.PHONY: all
all : river hapax $(VERSIFYer) html lozenge backlinks
.PHONY: hapax
hapax : $(HAPAX)
.PHONY: html
html : $(HTMLs)
.PHONY: river
river : $(RIVERs)
.PHONY: lozenge
lozenge : $(LOZENGE)
.PHONY: backlinks
backlinks : $(BKHTMLs)
%.html : %.txt template.html $(VERSIFYer)
pandoc $< -f markdown -t html5 $(HTMopts) -o $@
%_backlinks.htm : %.back
pandoc $< -f markdown -t html5 $(HTMopts) -o $@
%.back : %.txt $(BKTXThd)
@echo -n "Back-linking $<"
@cat $(BKTXThd) > $@
-@grep -ql "$(patsubst %.txt,%.html,$<)" *.txt |\
grep -vE $(BKTXTbl) >> $@ || \
echo "_Nothing links here!_" >> $@;
@echo -n "."
@title=`grep '^title:' $< | cut -d' ' -f2-`; \
sed -i "s/_TITLE_/$$title/" $@;
@echo -n "."
@for file in `cat $@ | grep '.txt'`; do \
title=`grep '^title:' $$file | cut -d' ' -f2-`; \
replace=`basename $$file .txt`; \
sed -i "s/^\($$replace\).txt$$/- [$$title](\1.html)/" $@;\
echo -n "."; \
done
@echo "Done."
%.river : %.txt
@echo River-ing $@
@sed -e '/^---$$/,/^...$$/d'\
-e "s/[^][A-Za-z0-9\/\"':.-]/ /g" $< |\
pandoc - -f markdown -t $(RIVERer) -o $@
$(VERSIFYer) : 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
-rm -f $(RIVERs)
-rm -f $(HTMLs)
-rm -f $(BKTXTs) $(BKHTMLs)
.PHONY: again
again: clean all