diff options
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | makespec.py | 22 |
2 files changed, 22 insertions, 8 deletions
@@ -180,14 +180,6 @@ dingus: js/commonmark.js spec.md: $(SPEC) python3 makespec.py markdown > $@ -spec: spec.html - @anchors=`perl -ne '@matches = / id="([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \ - links=`perl -ne '@matches = / href="#([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \ - for link in $$links; do \ - [[ $$anchors =~ $$link ]] || \ - echo "Link to missing anchor #$$link"; \ - done - spec.html: spec.txt template.html ${PROG} python3 makespec.py html > $@ diff --git a/makespec.py b/makespec.py index 2361636..762d62d 100644 --- a/makespec.py +++ b/makespec.py @@ -129,6 +129,28 @@ elif specformat == "html": if retcode == 0: result = re.sub(r'␣', '<span class="space"> </span>', result) sys.stdout.write(template.substitute(metadata, body=result)) + + # check for errors: + idents = [] + for ident in re.findall(r'id="([^"]*)"', result): + if ident in idents: + sys.stderr.write("WARNING: duplicate identifier '" + ident + + "'\n") + else: + idents.append(ident) + for href in re.findall(r'href="#([^"]*)"', result): + if not (href in idents): + sys.stderr.write("WARNING: internal link with no anchor '" + + href + "'\n") + reftexts = [] + for ref in refs: + ref = re.sub('].*',']',ref).upper() + if ref in reftexts: + sys.stderr.write("WARNING: duplicate reference link '" + + ref + "'\n") + else: + reftexts.append(ref) + else: sys.stderr.write("Error converting markdown version of spec:\n") sys.stderr.write(err) |