134 lines
4.1 KiB
Makefile
134 lines
4.1 KiB
Makefile
PANDOC = pandoc
|
|
XELATEX = xelatex -interaction=nonstopmode -halt-on-error -file-line-error
|
|
BASE = conf/pandoc.yaml
|
|
METADATA = conf/metadata.yaml
|
|
|
|
# Extract metadata fields
|
|
META_NAME := $(shell sed -n 's/^name:[[:space:]]*//p' $(METADATA))
|
|
|
|
|
|
# ============================================================
|
|
# Independent build paths
|
|
# ============================================================
|
|
LATEX_BUILD = build/latex
|
|
PDF_BUILD = build/pdf
|
|
HTML_BUILD = build/html
|
|
EPUB_BUILD = build/epub
|
|
MD_BUILD = build/md
|
|
|
|
|
|
all: html pdf markdown
|
|
|
|
|
|
# ---------------------------------------------
|
|
# LATEX PHASE (Pandoc → LaTeX)
|
|
# ---------------------------------------------
|
|
latex:
|
|
rm -rf $(LATEX_BUILD)
|
|
mkdir -p $(LATEX_BUILD)/lib/img
|
|
mkdir -p $(LATEX_BUILD)/lib/diag
|
|
|
|
# Assets
|
|
cp -r lib/img/* $(LATEX_BUILD)/lib/img/
|
|
@if [ -d lib/diag ]; then cp -r lib/diag/* $(LATEX_BUILD)/lib/diag/ 2>/dev/null || true; fi
|
|
|
|
# Metadata replacement
|
|
@scripts/replace-metadata.sh $(METADATA) templates/header.tex conf/header.tex
|
|
@scripts/replace-metadata.sh $(METADATA) templates/latex.yaml conf/latex.yaml
|
|
@scripts/replace-metadata.sh $(METADATA) templates/frontmatter.tex conf/frontmatter.tex
|
|
|
|
# Pandoc → LaTeX
|
|
$(PANDOC) \
|
|
--output=$(LATEX_BUILD)/$(META_NAME).tex \
|
|
--metadata=output-file:$(META_NAME) \
|
|
--defaults=$(BASE) --defaults=conf/latex.yaml -t latex
|
|
|
|
# XeLaTeX first pass
|
|
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
|
|
|
|
# ---------------------------------------------
|
|
# INDEX PHASE
|
|
# ---------------------------------------------
|
|
index: latex
|
|
cd $(LATEX_BUILD) && \
|
|
(test -f $(META_NAME).idx && makeindex $(META_NAME) || true)
|
|
|
|
# ---------------------------------------------
|
|
# PDF PHASE (final XeLaTeX runs)
|
|
# ---------------------------------------------
|
|
pdf: index
|
|
mkdir -p $(PDF_BUILD)
|
|
|
|
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
|
|
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
|
|
|
|
cp $(LATEX_BUILD)/$(META_NAME).pdf $(PDF_BUILD)/$(META_NAME).pdf
|
|
@echo "PDF written to: $(PDF_BUILD)/$(META_NAME).pdf"
|
|
|
|
open $(PDF_BUILD)/$(META_NAME).pdf
|
|
|
|
# ============================================================
|
|
# HTML
|
|
# ============================================================
|
|
html:
|
|
rm -rf $(HTML_BUILD)
|
|
mkdir -p $(HTML_BUILD)/lib/img $(HTML_BUILD)/lib/diag $(HTML_BUILD)/lib/mathjax $(HTML_BUILD)/conf
|
|
|
|
cp -r lib/img $(HTML_BUILD)/lib/
|
|
cp -r lib/diag $(HTML_BUILD)/lib/
|
|
cp -r lib/mathjax $(HTML_BUILD)/lib/
|
|
cp conf/style.css $(HTML_BUILD)/conf/
|
|
|
|
# HTML metadata
|
|
scripts/replace-metadata.sh $(METADATA) templates/html.yaml conf/html.yaml
|
|
scripts/replace-metadata.sh $(METADATA) templates/frontmatter.html conf/frontmatter.html
|
|
|
|
# Build HTML
|
|
$(PANDOC) --defaults=$(BASE) --defaults=conf/html.yaml \
|
|
-o $(HTML_BUILD)/$(META_NAME).html
|
|
|
|
@echo "Produced $(HTML_BUILD)/$(META_NAME).html"
|
|
|
|
open $(HTML_BUILD)/$(META_NAME).html
|
|
|
|
# ============================================================
|
|
# EPUB
|
|
# ============================================================
|
|
epub:
|
|
rm -rf $(EPUB_BUILD)
|
|
mkdir -p $(EPUB_BUILD)/media
|
|
|
|
scripts/replace-metadata.sh $(METADATA) templates/epub.yaml conf/epub.yaml
|
|
scripts/replace-metadata.sh $(METADATA) templates/frontmatter.html conf/frontmatter.html
|
|
|
|
$(PANDOC) --defaults=$(BASE) --defaults=conf/epub.yaml \
|
|
-o $(EPUB_BUILD)/$(META_NAME).epub
|
|
|
|
@echo "Produced $(EPUB_BUILD)/$(META_NAME).epub"
|
|
|
|
|
|
# ============================================================
|
|
# MARKDOWN
|
|
# ============================================================
|
|
markdown:
|
|
rm -rf $(MD_BUILD)
|
|
mkdir -p $(MD_BUILD)
|
|
cp -r lib/img $(MD_BUILD)/lib/
|
|
cp -r lib/diag $(MD_BUILD)/lib/
|
|
cp -r lib/mathjax $(MD_BUILD)/lib/
|
|
|
|
scripts/replace-metadata.sh $(METADATA) templates/markdown.yaml conf/markdown.yaml
|
|
scripts/replace-metadata.sh $(METADATA) templates/frontmatter-md.html conf/frontmatter-md.html
|
|
|
|
$(PANDOC) --defaults=$(BASE) --defaults=conf/markdown.yaml \
|
|
-o $(MD_BUILD)/$(META_NAME).md
|
|
|
|
@echo "Produced $(MD_BUILD)/$(META_NAME).md"
|
|
|
|
|
|
# ============================================================
|
|
# CLEAN
|
|
# ============================================================
|
|
clean:
|
|
rm -rf build
|