summaryrefslogtreecommitdiff
path: root/macros/generic/markdown/Makefile
blob: fb68360821f651be73e8edf1fbc24dd61fe8e9af (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
.PHONY: all base clean implode dist test docker-image force

SHELL=/bin/bash

AUXFILES=markdown.bbl markdown.cb markdown.cb2 markdown.glo markdown.bbl \
  markdown.run.xml markdown.markdown.in markdown.markdown.lua \
  markdown.markdown.out markdown-interfaces.md markdown-miscellanea.md \
  markdown-options.md markdown-tokens.md $(TECHNICAL_DOCUMENTATION_RESOURCES) \
  $(VERSION_FILE)
AUXDIRS=_minted-markdown _markdown_markdown markdown pkgcheck
TDSARCHIVE=markdown.tds.zip
CTANARCHIVE=markdown.ctan.zip
DISTARCHIVE=markdown.zip
ARCHIVES=$(TDSARCHIVE) $(CTANARCHIVE) $(DISTARCHIVE)
EXAMPLES_RESOURCES=examples/example.md examples/scientists.csv
EXAMPLES_SOURCES=examples/context-mkii.tex examples/context-mkiv.tex examples/latex.tex
EXAMPLES=examples/context-mkii.pdf examples/context-mkiv.pdf \
  examples/latex-pdftex.pdf examples/latex-luatex.pdf examples/latex-xetex.pdf \
  examples/latex-tex4ht.html examples/latex-tex4ht.css
TESTS=tests/test.sh tests/support/*.tex tests/templates/*/*.tex.m4 \
  tests/templates/*/COMMANDS.m4 tests/testfiles/*/*.test
MAKES=Makefile $(addsuffix /Makefile, $(SUBDIRECTORIES)) latexmkrc
ROOT_README=README.md markdown.png
READMES=$(ROOT_README) LICENSE examples/README.md tests/README.md \
  tests/support/README.md tests/templates/README.md tests/testfiles/README.md \
  tests/templates/*/README.md tests/testfiles/*/README.md
VERSION_FILE=VERSION
CHANGES_FILE=CHANGES.md
DTXARCHIVE=markdown.dtx
INSTALLER=markdown.ins docstrip.cfg
TECHNICAL_DOCUMENTATION_RESOURCES=markdown.bib markdown-figure-block-diagram.tex \
  markdownthemewitiko_markdown_techdoc.sty
TECHNICAL_DOCUMENTATION=markdown.pdf
MARKDOWN_USER_MANUAL=markdown.md markdown.css
HTML_USER_MANUAL=markdown.html markdown.css
USER_MANUAL=$(MARKDOWN_USER_MANUAL) $(HTML_USER_MANUAL)
DOCUMENTATION=$(TECHNICAL_DOCUMENTATION) $(HTML_USER_MANUAL) $(ROOT_README) $(VERSION_FILE) \
  $(CHANGES_FILE)
LIBRARIES=libraries/markdown-tinyyaml.lua
INSTALLABLES=markdown.lua markdown-cli.lua markdown.tex markdown.sty t-markdown.tex \
  markdownthemewitiko_dot.sty markdownthemewitiko_graphicx_http.sty \
  markdownthemewitiko_tilde.sty
EXTRACTABLES=$(INSTALLABLES) $(MARKDOWN_USER_MANUAL) $(TECHNICAL_DOCUMENTATION_RESOURCES)
MAKEABLES=$(TECHNICAL_DOCUMENTATION) $(USER_MANUAL) $(INSTALLABLES) $(EXAMPLES)
RESOURCES=$(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(EXAMPLES) \
  $(MAKES) $(READMES) $(INSTALLER) $(DTXARCHIVE) $(TESTS)
EVERYTHING=$(RESOURCES) $(INSTALLABLES) $(LIBRARIES)
GITHUB_PAGES=gh-pages

VERSION=$(shell git describe --tags --always --long --exclude latest)
LASTMODIFIED=$(shell git log -1 --date=format:%Y-%m-%d --format=%ad)

# This is the default pseudo-target. It typesets the manual,
# the examples, and extracts the package files.
all: $(MAKEABLES)
	$(MAKE) clean

# This pseudo-target extracts the source files out of the DTX archive and
# produces external Lua libraries.
base: $(INSTALLABLES) $(LIBRARIES)
	$(MAKE) clean

# This pseudo-target builds a witiko/markdown Docker image.
docker-image:
	DOCKER_BUILDKIT=1 docker build --pull --build-arg TEXLIVE_TAG=$(TEXLIVE_TAG) \
	                               -t witiko/markdown:$(TEXLIVE_TAG) \
	                               -t witiko/markdown:$(VERSION)-$(TEXLIVE_TAG) .

# This targets produces a directory with files for the GitHub Pages service.
$(GITHUB_PAGES): $(HTML_USER_MANUAL)
	mkdir -p $@
	cp markdown.html $@/index.html
	cp markdown.css $@

# This target extracts the source files out of the DTX archive.
$(EXTRACTABLES): $(INSTALLER) $(DTXARCHIVE)
	xetex $<
	sed -i \
	    -e 's#(((VERSION)))#$(VERSION)#g' \
	    -e 's#(((LASTMODIFIED)))#$(LASTMODIFIED)#g' \
	    $(INSTALLABLES)

# This target produces the version file.
$(VERSION_FILE): force
	printf '%s (%s)\n' $(VERSION) $(LASTMODIFIED) > $@

# This target produces external Lua libraries.
$(LIBRARIES): force
	$(MAKE) -C libraries $(notdir $@)

# This target typesets the manual.
$(TECHNICAL_DOCUMENTATION): $(DTXARCHIVE) $(TECHNICAL_DOCUMENTATION_RESOURCES)
	latexmk -silent $< || (cat $(basename $@).log 1>&2; exit 1)
	test `tail $(basename $<).log | sed -rn 's/.*\(([0-9]*) pages.*/\1/p'` -gt 150

# These targets typeset the examples.
$(EXAMPLES): $(EXAMPLE_SOURCES) examples/example.tex
	$(MAKE) -C examples $(notdir $@)

examples/example.tex: force
	$(MAKE) -C examples $(notdir $@)

# This target converts the markdown user manual to an HTML page.
%.html: %.md %.css
	awk '{ \
	    filename = gensub(/^\/(.*\.md)$$/, "\\1", "g"); \
	    if(filename != $$0) \
	        system("cat " filename); \
	    else \
	        print($$0); \
	}' <$< | \
	sed -e 's#\\markdownVersion{}#$(VERSION)#g' \
	    -e 's#\\markdownLastModified{}#$(LASTMODIFIED)#g' \
	    -e 's#\\TeX{}#<span class="tex">T<sub>e</sub>X</span>#g' \
	    -e 's#\\LaTeX{}#<span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>#g' \
	    -e 's#\\Hologo{ConTeXt}#Con<span class="tex">T<sub>e</sub>X</span>t#g' \
	    -e 's#\\Opt{\([^}]*\)}#**`\1`**#g' \
	    -e 's#\\pkg{\([^}]*\)}#**`\1`**#g' \
	    -e 's#\\,# #g' \
	    -e 's#\\meta{\([^}]*\)}#\&LeftAngleBracket;*\1*\&RightAngleBracket;#g' \
	    -e 's#\\acro{\([^}]*\)}#<abbr>\1</abbr>#g' \
	    -e 's#😉#<i class="em em-wink"></i>#g' \
	    -e 's#\\envm{\([^}]*\)}#`\1`#g' \
	    -e 's#\\envmdef{\([^}]*\)}#`\1`#g' \
	    -e 's#\\envmref{\([^}]*\)}#`\1`#g' \
	    -e 's#\\m{\([^}]*\)}#`\\\1`#g' \
	    -e 's#\\mdef{\([^}]*\)}#`\\\1`#g' \
	    -e 's#\\mref{\([^}]*\)}#`\\\1`#g' \
	| \
	pandoc -f markdown -t html -N -s --toc --toc-depth=3 --css=$(word 2, $^) >$@

# This pseudo-target runs all the tests in the `tests/` directory.
test:
	$(MAKE) -C tests

# This pseudo-target produces the distribution archives.
dist: implode
	$(MAKE) $(ARCHIVES)
	git clone https://gitlab.com/Lotz/pkgcheck.git
	unzip $(CTANARCHIVE) -d markdown
	for RETRY in $$(seq 1 10); \
	do \
	    if (( RETRY > 1 )); \
	    then \
	        sleep $$((RETRY * 15)); \
	    fi; \
	    if pkgcheck/bin/pkgcheck -d markdown/markdown -T $(TDSARCHIVE) --urlcheck; \
	    then \
	        EXIT_CODE=0; \
	        break; \
	    else \
	        EXIT_CODE=$$?; \
	    fi; \
	done; \
	exit $$EXIT_CODE
	$(MAKE) clean

# This target produces the TeX directory structure archive.
$(TDSARCHIVE): $(DTXARCHIVE) $(INSTALLER) $(INSTALLABLES) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES)
	@# Installing the macro package.
	mkdir -p tex/generic/markdown tex/luatex/markdown tex/latex/markdown \
	  tex/context/third/markdown scripts/markdown
	cp markdown.lua $(LIBRARIES) tex/luatex/markdown/
	cp markdown-cli.lua scripts/markdown/
	cp markdown.sty markdownthemewitiko_dot.sty markdownthemewitiko_graphicx_http.sty \
	  markdownthemewitiko_tilde.sty tex/latex/markdown/
	cp markdown.tex tex/generic/markdown/
	cp t-markdown.tex tex/context/third/markdown/
	@# Installing the documentation.
	mkdir -p doc/generic/markdown doc/latex/markdown/examples \
	  doc/context/third/markdown/examples
	cp $(DOCUMENTATION) doc/generic/markdown/
	cp examples/context-mkii.tex examples/context-mkiv.tex $(EXAMPLES_RESOURCES) \
	  doc/context/third/markdown/examples/
	cp examples/latex.tex $(EXAMPLES_RESOURCES) doc/latex/markdown/examples/
	@# Installing the sources.
	mkdir -p source/generic/markdown
	cp $(DTXARCHIVE) $(INSTALLER) source/generic/markdown
	zip -r -v -nw $@ doc scripts source tex
	rm -rf doc scripts source tex

# This target produces the distribution archive.
$(DISTARCHIVE): $(EVERYTHING) $(TDSARCHIVE)
	-ln -s . markdown
	zip -MM -r -v -nw $@ $(addprefix markdown/,$(EVERYTHING)) $(TDSARCHIVE)
	rm -f markdown

# This target produces the CTAN archive.
$(CTANARCHIVE): $(DTXARCHIVE) $(INSTALLER) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES) $(TDSARCHIVE)
	-ln -s . markdown
	zip -MM -r -v -nw $@ $(addprefix markdown/,$(DTXARCHIVE) $(INSTALLER) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES)) $(TDSARCHIVE)
	rm -f markdown

# This pseudo-target removes any existing auxiliary files and directories.
clean:
	latexmk -c $(DTXARCHIVE)
	rm -f $(AUXFILES)
	rm -rf ${AUXDIRS}
	$(MAKE) -C examples clean

# This pseudo-target removes any makeable files.
implode: clean
	rm -f $(MAKEABLES) $(ARCHIVES)
	$(MAKE) -C examples implode
	$(MAKE) -C libraries implode