aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--spec2md.pl36
-rw-r--r--spec2md.py41
3 files changed, 42 insertions, 37 deletions
diff --git a/Makefile b/Makefile
index e00107a..0791f1a 100644
--- a/Makefile
+++ b/Makefile
@@ -178,7 +178,7 @@ dingus: js/commonmark.js
### Spec ###
spec.md: $(SPEC)
- perl spec2md.pl < $< > $@
+ python3 spec2md.py $< > $@
spec: spec.html
@anchors=`perl -ne '@matches = / id="([^"]*)"/g; foreach $$match (@matches) { print "$$match\n"; }' $<`; \
diff --git a/spec2md.pl b/spec2md.pl
deleted file mode 100644
index 313f86f..0000000
--- a/spec2md.pl
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-
-my $stage = 0;
-my $example = 0;
-my @match;
-my $section = "";
-
-while (<STDIN>) {
- if (/^\.$/) {
- if ($stage == 0) {
- $example++;
- print "\n<div class=\"example\" id=\"example-$example\" data-section=\"$section\">\n";
- print "<div class=\"examplenum\"><a href=\"#example-$example\">Example $example</a>&nbsp;&nbsp;<a class=\"dingus\" title=\"open in interactive dingus\">(interact)</a></div>\n\n";
- print "````````````````````````````````````````````````````````` markdown\n";
- } elsif ($stage == 1) {
- print "`````````````````````````````````````````````````````````\n\n";
- print "````````````````````````````````````````````````````````` html\n";
- } elsif ($stage == 2) {
- print "`````````````````````````````````````````````````````````\n\n";
- print "</div>\n\n";
- } else {
- die "Encountered unknown stage $stage";
- }
- $stage = ($stage + 1) % 3;
- } else {
- if ($stage == 0 && (@match = ($_ =~ /^#{1,6} *(.*)/))) {
- $section = $match[0];
- }
- if ($stage != 0) {
- $_ =~ s/ /␣/g;
- }
- print $_;
- }
-}
diff --git a/spec2md.py b/spec2md.py
new file mode 100644
index 0000000..bbed997
--- /dev/null
+++ b/spec2md.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+import re
+import sys
+
+stage = 0
+example = 0
+section = ""
+
+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):
+ if stage == 0:
+ example += 1
+ sys.stdout.write("\n<div class=\"example\" id=\"example-{0}\" data-section=\"{1}\">\n".format(example, section))
+ sys.stdout.write("<div class=\"examplenum\"><a href=\"#example-{0}\">Example {0}</a>&nbsp;&nbsp;<a class=\"dingus\" title=\"open in interactive dingus\">(interact)</a></div>\n\n".format(example))
+ sys.stdout.write("````````````````````````````````````````````````````````` markdown\n")
+ stage = 1
+ elif stage == 1:
+ sys.stdout.write("`````````````````````````````````````````````````````````\n\n")
+ sys.stdout.write("````````````````````````````````````````````````````````` html\n")
+ stage = 2
+ elif stage == 2:
+ sys.stdout.write("`````````````````````````````````````````````````````````\n\n")
+ sys.stdout.write("</div>\n")
+ stage = 0
+ else:
+ sys.stderr.out("Encountered unknown stage {0}\n".format(stage))
+ sys.exit(1)
+ else:
+ if stage == 0:
+ match = re.match(r'^#{1,6} *(.*)', ln)
+ if match:
+ section = match.group(1)
+ else:
+ ln = re.sub(r' ', '␣', ln)
+ sys.stdout.write(ln)