BIBLIOGRAPHY := bibliography.bib TEMPLATE_FILES := $(wildcard templates/*) TEMPLATE := templates/default.latex WORDCOUNT_FILTER := filters/wordcount.lua DISSERTATION_FRONTMATTER := frontmatter.yml DISSERTATION_MARKDOWN := dissertation.md CHAPTER_MARKDOWN_FILES := $(wildcard chapter*.md) CHAPTER_MARKDOWN_FILE_PATTERN := chapter%.md CHAPTER_INDICES := $(CHAPTER_MARKDOWN_FILES:chapter%.md=%) CHAPTER_WORDCOUNT_FILE_PATTERN := .chapter%.wc CHAPTER_WORDCOUNT_FILES := $(CHAPTER_INDICES:%=$(CHAPTER_WORDCOUNT_FILE_PATTERN)) LOG_MARKDOWN := log.md SCRAPBOOK_MARKDOWN := scrapbook.md DISSERTATION_LATEX := dissertation.latex DISSERTATION_LATEX_NO_REFERENCES := dissertation-no-references.latex DISSERTATION_WORDCOUNT_FILE := .dissertation.wc DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE := .dissertation-no-references.wc DISSERTATION_PDF := dissertation.pdf DISSERTATION_PDF_NO_REFERENCES := dissertation-no-references.pdf COVER_SHEET_TEMPLATE_ODT := cover-sheet.odt COVER_SHEET_COMPLETE_ODT := cover-sheet-complete.odt COVER_SHEET_COMPLETE_PDF := cover-sheet-complete.pdf DISSERTATION_SUBMISSION := dissertation-submission.pdf LOG_PDF := log.pdf SCRAPBOOK_PDF := scrapbook.pdf chapter_markdown_file = chapter$(chapter_index).md chapter_wordcount_file = .chapter$(chapter_index).wc chapter_wordcount = $(shell cat $(chapter_wordcount_file)) chapter_wordcounts = $(foreach chapter_index,$(CHAPTER_INDICES),$(chapter_wordcount)) chapter_wordcounts_sum = $$(( $(addsuffix " +",$(chapter_wordcounts)) 0 )) dissertation_wordcount = $(shell cat $(DISSERTATION_WORDCOUNT_FILE)) dissertation_no_references_wordcount = $(shell cat $(DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE)) prettify_wordcount = $(shell printf "%'i" $(1)) footnotes_wordcount = $$(( $(dissertation_no_references_wordcount) - $(chapter_wordcounts_sum) )) references_wordcount = $$(( $(dissertation_wordcount) - $(dissertation_no_references_wordcount) )) chapter_title = $(shell head -n 1 $(chapter_markdown_file) | cut -c4-) all: log scrapbook dissertation wordcount submission watch: ifdef TARGET while true; do \ $(MAKE) $(TARGET); \ inotifywait -qre close_write .; \ done else while true; do \ $(MAKE) all; \ inotifywait -qre close_write .; \ done endif log: $(LOG_PDF) $(LOG_PDF): $(LOG_MARKDOWN) $(BIBLIOGRAPHY) $(TEMPLATE_FILES) pandoc \ --standalone \ --from markdown \ --to pdf \ --pdf-engine pdflatex \ --citeproc \ --template $(TEMPLATE) \ --output $(LOG_PDF) \ $(LOG_MARKDOWN) scrapbook: $(SCRAPBOOK_PDF) $(SCRAPBOOK_PDF): $(SCRAPBOOK_MARKDOWN) $(BIBLIOGRAPHY) $(TEMPLATE_FILES) pandoc \ --standalone \ --from markdown \ --to pdf \ --pdf-engine pdflatex \ --citeproc \ --template $(TEMPLATE) \ --output $(SCRAPBOOK_PDF) \ $(SCRAPBOOK_MARKDOWN) dissertation: $(DISSERTATION_PDF) $(DISSERTATION_PDF): $(DISSERTATION_MARKDOWN) $(BIBLIOGRAPHY) $(TEMPLATE_FILES) pandoc \ --standalone \ --from markdown \ --to pdf \ --pdf-engine pdflatex \ --citeproc \ --template $(TEMPLATE) \ --output $(DISSERTATION_PDF) \ $(DISSERTATION_MARKDOWN) $(DISSERTATION_LATEX): $(DISSERTATION_MARKDOWN) $(BIBLIOGRAPHY) $(TEMPLATE_FILES) pandoc \ --standalone \ --from markdown \ --to latex \ --citeproc \ --template $(TEMPLATE) \ --output $(DISSERTATION_LATEX) \ $(DISSERTATION_MARKDOWN) .SILENT: $(DISSERTATION_MARKDOWN) $(DISSERTATION_MARKDOWN): $(DISSERTATION_FRONTMATTER) $(CHAPTER_MARKDOWN_FILES) echo "---" > $(DISSERTATION_MARKDOWN) cat $(DISSERTATION_FRONTMATTER) >> $(DISSERTATION_MARKDOWN) echo "---" >> $(DISSERTATION_MARKDOWN); \ $(foreach chapter,$(CHAPTER_MARKDOWN_FILES), \ echo "" >> $(DISSERTATION_MARKDOWN); \ cat $(chapter) >> $(DISSERTATION_MARKDOWN); \ ) echo "" >> $(DISSERTATION_MARKDOWN) echo "## References" >> $(DISSERTATION_MARKDOWN) echo "" >> $(DISSERTATION_MARKDOWN) echo "Bible references are from the Authorised Version." >> $(DISSERTATION_MARKDOWN) echo "" >> $(DISSERTATION_MARKDOWN) .SILENT: wordcount .PHONY: wordcount wordcount: $(CHAPTER_WORDCOUNT_FILES) $(DISSERTATION_WORDCOUNT_FILE) $(DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE) $(foreach chapter_index,$(CHAPTER_INDICES), \ echo "$(chapter_title): $(call prettify_wordcount,$(chapter_wordcount))"; \ ) echo "Footnotes: $(call prettify_wordcount,$(footnotes_wordcount))" echo "--------------------------------" echo "Total: $(call prettify_wordcount,$(dissertation_no_references_wordcount))" echo "--------------------------------" echo "(References: $(call prettify_wordcount,$(references_wordcount)))" $(CHAPTER_WORDCOUNT_FILE_PATTERN): $(CHAPTER_MARKDOWN_FILE_PATTERN) $(WORDCOUNT_FILTER) pandoc --lua-filter $(WORDCOUNT_FILTER) $< > $@ $(DISSERTATION_WORDCOUNT_FILE): $(DISSERTATION_PDF) pdfgrep -o '\w+' $(DISSERTATION_PDF) | wc -w \ > $(DISSERTATION_WORDCOUNT_FILE) $(DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE): $(DISSERTATION_PDF_NO_REFERENCES) pdfgrep -o '\w+' $(DISSERTATION_PDF_NO_REFERENCES) | wc -w \ > $(DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE) $(DISSERTATION_PDF_NO_REFERENCES): $(DISSERTATION_LATEX_NO_REFERENCES) pandoc \ --standalone \ --from latex \ --to pdf \ --pdf-engine pdflatex \ --output $(DISSERTATION_PDF_NO_REFERENCES) \ $(DISSERTATION_LATEX_NO_REFERENCES) bib_start_line_index = $(shell grep -nm 1 "^\\\\begin{CSLReferences}" $(DISSERTATION_LATEX) | sed "s/^\([0-9]*\):.*$$/\1/") bib_end_line_index = $(shell grep -nm 1 "^\\\\end{CSLReferences}" $(DISSERTATION_LATEX) | sed "s/^\([0-9]*\):.*$$/\1/") $(DISSERTATION_LATEX_NO_REFERENCES): $(DISSERTATION_LATEX) head -n $$(( $(bib_start_line_index) - 1 )) $(DISSERTATION_LATEX) > $(DISSERTATION_LATEX_NO_REFERENCES) tail -n +$$(( $(bib_end_line_index) + 1 )) $(DISSERTATION_LATEX) >> $(DISSERTATION_LATEX_NO_REFERENCES) .phony: submission submission: $(DISSERTATION_SUBMISSION) $(DISSERTATION_SUBMISSION): $(COVER_SHEET_COMPLETE_PDF) $(DISSERTATION_PDF) pdftk $(COVER_SHEET_COMPLETE_PDF) $(DISSERTATION_PDF) cat output $(DISSERTATION_SUBMISSION) $(COVER_SHEET_COMPLETE_PDF): $(COVER_SHEET_COMPLETE_ODT) libreoffice --convert-to pdf $(COVER_SHEET_COMPLETE_ODT) $(COVER_SHEET_COMPLETE_ODT): $(COVER_SHEET_TEMPLATE_ODT) $(DISSERTATION_NO_REFERENCES_WORDCOUNT_FILE) odfdo-replace \ "{{ word_count }}" \ "$(call prettify_wordcount,$(dissertation_no_references_wordcount))" \ -i $(COVER_SHEET_TEMPLATE_ODT) \ -o $(COVER_SHEET_COMPLETE_ODT) clean: rm -f $(LOG_PDF) $(SCRAPBOOK_PDF) $(DISSERTATION_MARKDOWN) $(DISSERTATION_LATEX) $(DISSERTATION_LATEX_NO_REFERENCES) $(DISSERTATION_PDF) $(DISSERTATION_PDF_NO_REFERENCES) $(CHAPTER_WORDCOUNT_FILES) $(DISSERTATION_WORDCOUNT_FILE) $(COVER_SHEET_COMPLETE_ODT) $(COVER_SHEET_COMPLETE_PDF)