Throw in gendoc.py if a spec section doesn't end with \n\n There needs to be TWO new lines at the end of each spec section else the title of the next section merges into the last paragraph of the earlier section. This happens without rst2html producing a warning, and results in the section heading of a file disappearing(!)
100 lines
3 KiB
Python
Executable file
100 lines
3 KiB
Python
Executable file
#! /usr/bin/env python
|
|
|
|
from docutils.core import publish_file
|
|
import fileinput
|
|
import glob
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
stylesheets = {
|
|
"stylesheet_path": ["basic.css", "nature.css"]
|
|
}
|
|
|
|
def glob_spec_to(out_file_name):
|
|
with open(out_file_name, "wb") as outfile:
|
|
for f in sorted(glob.glob("../specification/*.rst")):
|
|
with open(f, "rb") as infile:
|
|
section = infile.read()
|
|
# we need TWO new lines else the next file's title gets merged
|
|
# the last paragraph *WITHOUT RST PRODUCING A WARNING*
|
|
if not section[-2:] == '\n\n':
|
|
raise Exception(
|
|
"The file " + f + " does not end with 2 new lines."
|
|
)
|
|
outfile.write(section)
|
|
|
|
|
|
def rst2html(i, o):
|
|
with open(i, "r") as in_file:
|
|
with open(o, "w") as out_file:
|
|
publish_file(
|
|
source=in_file,
|
|
destination=out_file,
|
|
reader_name="standalone",
|
|
parser_name="restructuredtext",
|
|
writer_name="html",
|
|
settings_overrides=stylesheets
|
|
)
|
|
|
|
def run_through_template(input):
|
|
tmpfile = './tmp/output'
|
|
try:
|
|
with open(tmpfile, 'w') as out:
|
|
subprocess.check_output(
|
|
[
|
|
'python', 'build.py',
|
|
"-i", "matrix_templates",
|
|
"-o", "../scripts/tmp",
|
|
"../scripts/"+input
|
|
],
|
|
stderr=out,
|
|
cwd="../templating",
|
|
)
|
|
except subprocess.CalledProcessError as e:
|
|
with open(tmpfile, 'r') as f:
|
|
print f.read()
|
|
raise
|
|
|
|
def prepare_env():
|
|
try:
|
|
os.makedirs("./gen")
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.makedirs("./tmp")
|
|
except OSError:
|
|
pass
|
|
|
|
def cleanup_env():
|
|
shutil.rmtree("./tmp")
|
|
|
|
def main():
|
|
prepare_env()
|
|
glob_spec_to("tmp/full_spec.rst")
|
|
run_through_template("tmp/full_spec.rst")
|
|
shutil.copy("../supporting-docs/howtos/client-server.rst", "tmp/howto.rst")
|
|
run_through_template("tmp/howto.rst")
|
|
rst2html("tmp/full_spec.rst", "gen/specification.html")
|
|
rst2html("tmp/howto.rst", "gen/howtos.html")
|
|
if "--nodelete" not in sys.argv:
|
|
cleanup_env()
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) > 1 and sys.argv[1:] != ["--nodelete"]:
|
|
# we accept almost no args, so they don't know what they're doing!
|
|
print "gendoc.py - Generate the Matrix specification as HTML."
|
|
print "Usage:"
|
|
print " python gendoc.py [--nodelete]"
|
|
print ""
|
|
print "The specification can then be found in the gen/ folder."
|
|
print ("If --nodelete was specified, intermediate files will be "
|
|
"present in the tmp/ folder.")
|
|
print ""
|
|
print "Requirements:"
|
|
print " - This script requires Jinja2 and rst2html (docutils)."
|
|
sys.exit(0)
|
|
main()
|