aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2015-01-04 13:07:18 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2015-01-04 13:07:18 -0800
commitd948cb2b921ef0384015bbd432d8b7a7015fee11 (patch)
treef6dfc40e69738eaa2cddbd70e446dac68beceab7
parent22b6d7d5dfa00510dd8df481ef4bed3945cc911c (diff)
spec2md.py -> makespec.py.
Moved HTML generation out of Makefile.
-rw-r--r--Makefile9
-rw-r--r--makespec.py (renamed from spec2md.py)43
2 files changed, 38 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 0791f1a..fc47464 100644
--- a/Makefile
+++ b/Makefile
@@ -178,7 +178,7 @@ dingus: js/commonmark.js
### Spec ###
spec.md: $(SPEC)
- python3 spec2md.py $< > $@
+ python3 makespec.py $< markdown > $@
spec: spec.html
@anchors=`perl -ne '@matches = / id="([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \
@@ -188,11 +188,8 @@ spec: spec.html
echo "Link to missing anchor #$$link"; \
done
-spec.html: spec.md template.html
- pandoc --no-highlight --number-sections --template template.html -s --toc -S $< | \
- perl -pe 's/a href="@([^"]*)"/a id="\1" href="#\1" class="definition"/g' | \
- perl -pe 's/␣/<span class="space"> <\/span>/g' \
- > $@
+spec.html: spec.txt template.html
+ python3 makespec.py $< html > $@
spec.pdf: spec.md template.tex specfilter.hs
pandoc -s $< --template template.tex \
diff --git a/spec2md.py b/makespec.py
index fde79bb..4d157a5 100644
--- a/spec2md.py
+++ b/makespec.py
@@ -1,6 +1,26 @@
#!/usr/bin/env python3
import re
import sys
+from subprocess import *
+
+if len(sys.argv) == 3:
+ specfile = sys.argv[1]
+ specformat = sys.argv[2]
+ if not (specformat in ["html", "markdown"]):
+ sys.stderr.write("Format must be html or markdown\n")
+ exit(1)
+else:
+ sys.stderr.write("Usage: makespec.py SPECFILE [html|markdown]\n")
+ exit(1)
+
+def pipe_through_prog(prog, text):
+ p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE)
+ [result, err] = p1.communicate(input=text.encode('utf-8'))
+ return [p1.returncode, result.decode('utf-8'), err]
+
+def replaceAnchor(match):
+ refs.append("[{0}]: #{1}".format(match.group(1), match.group(2)))
+ return '<a id="{1}" href="#{1}" class="definition">{0}</a>'.format(match.group(1), match.group(2))
stage = 0
example = 0
@@ -8,11 +28,6 @@ section = ""
mdlines = []
refs = []
-if len(sys.argv) > 1:
- specfile = sys.argv[1]
-else:
- specfile = 'spec.txt'
-
with open(specfile, 'r', encoding='utf-8') as spec:
for ln in spec:
if re.match(r'^\.$', ln):
@@ -39,12 +54,24 @@ with open(specfile, 'r', encoding='utf-8') as spec:
if match:
section = match.group(1)
else:
- for match in re.finditer(r'\[([^]]*)\]\(@([^)]*)\)', ln):
- refs.append("[{0}]: #{1}".format(match.group(1), match.group(2)))
+ ln = re.sub(r'\[([^]]*)\]\(@([^)]*)\)', replaceAnchor, ln)
else:
ln = re.sub(r' ', '␣', ln)
mdlines.append(ln)
mdtext = ''.join(mdlines) + '\n\n' + '\n'.join(refs) + '\n'
-sys.stdout.write(mdtext)
+if specformat == "markdown":
+ sys.stdout.write(mdtext)
+elif specformat == "html":
+ prog = "pandoc -s --toc -S --no-highlight --number-sections --template template.html"
+ [retcode, result, err] = pipe_through_prog(prog, mdtext)
+ if retcode == 0:
+ result = re.sub(r'␣', '<span class="space"> </span>', result)
+ sys.stdout.write(result)
+ else:
+ sys.stderr.write("Error converting markdown version of spec:\n")
+ sys.stderr.write(err)
+ exit(1)
+
+exit(0)