64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
# Script for extracting compilable fragments from markdown
|
|
# documentation. See prep.js for a description of the format
|
|
# recognized by this tool. Expects a directory fragements/ to exist
|
|
# under the current directory, and writes the fragments in there as
|
|
# individual .rs files.
|
|
|
|
import sys, re;
|
|
|
|
if len(sys.argv) < 3:
|
|
print("Please provide an input filename")
|
|
sys.exit(1)
|
|
|
|
filename = sys.argv[1]
|
|
dest = sys.argv[2]
|
|
f = open(filename)
|
|
lines = f.readlines()
|
|
f.close()
|
|
|
|
cur = 0
|
|
line = ""
|
|
chapter = ""
|
|
chapter_n = 0
|
|
|
|
while cur < len(lines):
|
|
line = lines[cur]
|
|
cur += 1
|
|
chap = re.match("# (.*)", line);
|
|
if chap:
|
|
chapter = re.sub(r"\W", "_", chap.group(1)).lower()
|
|
chapter_n = 1
|
|
elif re.match("~~~", line):
|
|
# Parse the tags that open a code block in the pandoc format:
|
|
# ~~~ {.tag1 .tag2}
|
|
tags = re.findall("\.([\w-]*)", line)
|
|
block = ""
|
|
ignore = "notrust" in tags or "ignore" in tags
|
|
# Some tags used by the language ref that indicate not rust
|
|
ignore |= "ebnf" in tags
|
|
ignore |= "abnf" in tags
|
|
ignore |= "keyword" in tags
|
|
ignore |= "field" in tags
|
|
ignore |= "precedence" in tags
|
|
xfail = "xfail-test" in tags
|
|
while cur < len(lines):
|
|
line = lines[cur]
|
|
cur += 1
|
|
if re.match("~~~", line):
|
|
break
|
|
else:
|
|
block += re.sub("^# ", "", line)
|
|
if not ignore:
|
|
if not re.search(r"\bfn main\b", block):
|
|
block = "fn main() {\n" + block + "\n}\n"
|
|
if not re.search(r"\buse std\b", block):
|
|
block = "use std;\n" + block;
|
|
if xfail:
|
|
block = "// xfail-test\n" + block
|
|
filename = (dest + "/" + str(chapter)
|
|
+ "_" + str(chapter_n) + ".rs")
|
|
chapter_n += 1
|
|
f = open(filename, 'w')
|
|
f.write(block)
|
|
f.close()
|