diff --git a/.gitignore b/.gitignore index bc4e690a..733d280f 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,5 @@ target/ Session.vim .netrwhist *~ + +*.pdf diff --git a/Makefile b/Makefile index 912ea129..0a81523d 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ OUTDIR?=build RESOURCESDIR=$(OUTDIR)/resources TEMPDIR?=$(OUTDIR)/xepbuild XMLDEPS=xep.xsl xep.xsd xep.ent xep.dtd ref.xsl $(OUTDIR) -TEXMLDEPS=xep2texml.xsl $(TEMPDIR) $(XMLDEPS) $(RESOURCESDIR)/xmpp.pdf $(RESOURCESDIR)/xmpp-text.pdf +TEXMLDEPS=xep2texml.xsl $(OUTDIR)/xmpp.pdf $(OUTDIR)/xmpp-text.pdf XMPPIMAGESURL=https://xmpp.org/images XEPDIRS=. inbox @@ -19,6 +19,7 @@ help: @echo ' clean - recursively unlink the build tree' @echo ' preview - builds html whenever an XEP changes (requires inotify-tools)' @echo ' xep-xxxx - build xep-xxxx.html' + @echo ' xep-xxxx.pdf - build xep-xxxx.pdf (requires xelatex and texml)' @echo ' xep-xxxx.html - build xep-xxxx.html' @echo ' ' @echo 'Output directory: "$(OUTDIR)/"' @@ -29,12 +30,18 @@ all: html .PHONY: html html: $(patsubst %.xml, $(OUTDIR)/%.html, $(wildcard *.xml)) +.PHONY: pdf +pdf: $(patsubst %.xml, $(OUTDIR)/%.pdf, $(wildcard *.xml)) + .PHONY: xep-% xep-%: $(OUTDIR)/xep-%.html ; .PHONY: xep-%.html xep-%.html: $(OUTDIR)/xep-%.html ; +.PHONY: xep-%.pdf +xep-%.pdf: $(OUTDIR)/xep-%.pdf ; + .PHONY: dependencies dependencies: $(OUTDIR)/prettify.css $(OUTDIR)/prettify.js $(OUTDIR)/xmpp.css ; @@ -44,9 +51,27 @@ $(OUTDIR)/%.html: %.xml $(XMLDEPS) dependencies xmllint --nonet --noout --noent --loaddtd --valid "$<" || true # Check for non-data URIs ! xmllint --nonet --noout --noent --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< 2>/dev/null && true + # Actually build the HTML xsltproc --path $(CURDIR) xep.xsl "$<" > "$@" && echo "Finished building $@" +$(OUTDIR)/xmpp.pdf $(OUTDIR)/xmpp-text.pdf: + cp "resources/$(notdir $@)" "$@" + +$(OUTDIR)/%.pdf: %.xml $(TEXMLDEPS) $(XMLDEPS) dependencies + # TODO: After existing issues are worked out this and the ratcheting CI build + # should be removed and become an error, not just a warning. + xmllint --nonet --noout --noent --loaddtd --valid "$<" || true + # Check for non-data URIs + ! xmllint --nonet --noout --noent --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< 2>/dev/null && true + + xsltproc --path $(CURDIR) xep2texml.xsl "$<" > "$(@:.pdf=.tex.xml)" + texml -e utf8 "$(@:.pdf=.tex.xml)" "$(@:.pdf=.tex)" + sed -i -e 's|\([\s"]\)\([^"]http://[^ "]*\)|\1\\path{\2}|g' \ + -e 's|\\hyperref\[#\([^}]*\)\]|\\hyperref\[\1\]|g' \ + -e 's|\\pageref{#\([^}]*\)}|\\pageref{\1}|g' "$(@:.pdf=.tex)" + cd $(OUTDIR); xelatex -interaction=batchmode -no-shell-escape "$(notdir $(basename $@)).tex" && echo "Finished building $@" + $(OUTDIR)/%.js: %.js cp "$<" "$@"