From 81ce025e40275ae0ef668a257851c70c9f780f5f Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Wed, 20 Dec 2017 21:58:52 +0100 Subject: [PATCH] htmlgen: Allow specifying settings and output directory. Signed-off-by: Tim 'mithro' Ansell --- htmlgen/htmlgen.py | 78 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 18 deletions(-) mode change 100644 => 100755 htmlgen/htmlgen.py diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py old mode 100644 new mode 100755 index 862303f3..f0882480 --- a/htmlgen/htmlgen.py +++ b/htmlgen/htmlgen.py @@ -2,6 +2,51 @@ import os, sys, json, re +import argparse + +parser = argparse.ArgumentParser( + description="Generate a pretty HTML version of the documentation.") +parser.add_argument( + '--output', default=os.path.join(os.path.curdir, 'html'), + help='Put the generated files in this directory (default current dir).') +parser.add_argument( + '--settings', default=None, + help='Read the settings from file (default to environment).') + +args = parser.parse_args() + +if args.settings: + settings_filename = args.settings + + settings = { + 'XRAY_DATABASE_DIR': os.path.abspath( + os.path.join(os.path.dirname(settings_filename), '..')), + } + with open(settings_filename) as f: + for line in f: + line = line.strip() + if not line.startswith("export "): + continue + key, value = line[7:].split('=', 1) + settings[key] = value[1:-1] + + def get_setting(name): + return settings[name] +else: + def get_setting(name): + return os.getenv(name) + +db_dir = os.path.join(get_setting("XRAY_DATABASE_DIR"), get_setting("XRAY_DATABASE")) +def db_open(fn): + return open(os.path.join(db_dir, fn)) + +def out_open(fn): + out_dir = os.path.join(args.output, get_setting("XRAY_DATABASE")) + os.makedirs(out_dir, exist_ok=True) + fp = os.path.join(out_dir, fn) + print("Writing %s" % fp) + return open(fp, "w") + clb_bitgroups_db = [ # copy&paste from zero_db in dbfixup.py "00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24", @@ -93,8 +138,9 @@ routebits = dict() routezbits = dict() maskbits = dict() + print("Loading tilegrid.") -with open("../database/%s/tilegrid.json" % os.getenv("XRAY_DATABASE"), "r") as f: +with db_open("tilegrid.json") as f: grid = json.load(f) for segname, segdata in grid["segments"].items(): @@ -132,7 +178,7 @@ for segname, segdata in grid["segments"].items(): if segtype not in ["hclk_l", "hclk_r"]: print("Loading %s segbits." % segtype) - with open("../database/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE"), segtype)) as f: + with db_open("segbits_%s.db" % segtype) as f: for line in f: if re.search(r"(\.[ABCD]MUX\.)|(\.PRECYINIT\.)", line): add_pip_bits(line) @@ -140,7 +186,7 @@ for segname, segdata in grid["segments"].items(): add_single_bit(line) print("Loading %s segbits." % re.sub("clbl[lm]", "int", segtype)) - with open("../database/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE"), re.sub("clbl[lm]", "int", segtype))) as f: + with db_open("segbits_%s.db" % re.sub("clbl[lm]", "int", segtype)) as f: for line in f: if segtype in ["hclk_l", "hclk_r"] and ".ENABLE_BUFFER." in line: add_single_bit(line) @@ -148,7 +194,7 @@ for segname, segdata in grid["segments"].items(): add_pip_bits(line) print("Loading %s maskbits." % segtype) - with open("../database/%s/mask_%s.db" % (os.getenv("XRAY_DATABASE"), segtype)) as f: + with db_open("mask_%s.db" % segtype) as f: for line in f: _, bit = line.split() maskbits[segtype].add(bit) @@ -160,13 +206,11 @@ for segname, segdata in grid["segments"].items(): grid_range = None grid_map = dict() -print("Writing %s/index.html." % os.getenv("XRAY_DATABASE")) -os.makedirs(os.getenv("XRAY_DATABASE"), exist_ok=True) -with open("%s/index.html" % os.getenv("XRAY_DATABASE"), "w") as f: - print("X-Ray %s Database" % os.getenv("XRAY_DATABASE").upper(), file=f) - print("

X-Ray %s Database

" % os.getenv("XRAY_DATABASE").upper(), file=f) +with out_open("index.html") as f: + print("X-Ray %s Database" % get_setting("XRAY_DATABASE").upper(), file=f) + print("

X-Ray %s Database

" % get_setting("XRAY_DATABASE").upper(), file=f) - print("

Part: %s
ROI: %s
ROI Frames: %s

" % (os.getenv("XRAY_PART"), os.getenv("XRAY_ROI"), os.getenv("XRAY_ROI_FRAMES")), file=f) + print("

Part: %s
ROI: %s
ROI Frames: %s

" % (get_setting("XRAY_PART"), get_setting("XRAY_ROI"), get_setting("XRAY_ROI_FRAMES")), file=f) for tilename, tiledata in grid["tiles"].items(): grid_x = tiledata["grid_x"] @@ -197,7 +241,7 @@ with open("%s/index.html" % os.getenv("XRAY_DATABASE"), "w") as f: if tiledata["type"] in ["HCLK_L", "HCLK_R"]: bgcolor="#aaffaa" title = [tilename] - + if "segment" in tiledata: segdata = grid["segments"][tiledata["segment"]] title.append(tiledata["segment"]) @@ -229,13 +273,12 @@ with open("%s/index.html" % os.getenv("XRAY_DATABASE"), "w") as f: # Create Segment Pages for segtype in sorted(segbits.keys()): - print("Writing %s/seg_%s.html." % (os.getenv("XRAY_DATABASE"), segtype)) - with open("%s/seg_%s.html" % (os.getenv("XRAY_DATABASE"), segtype), "w") as f: - print("X-Ray %s Database: %s" % (os.getenv("XRAY_DATABASE").upper(), segtype.upper()), file=f) + with out_open("seg_%s.html" % segtype) as f: + print("X-Ray %s Database: %s" % (get_setting("XRAY_DATABASE").upper(), segtype.upper()), file=f) if segtype in ["hclk_l", "hclk_r"]: - print("

X-Ray %s Database: %s Segment

" % (os.getenv("XRAY_DATABASE").upper(), segtype.upper()), file=f) + print("

X-Ray %s Database: %s Segment

" % (get_setting("XRAY_DATABASE").upper(), segtype.upper()), file=f) else: - print("

X-Ray %s Database: %s Segment (%s Tile + %s Tile)

" % (os.getenv("XRAY_DATABASE").upper(), segtype.upper(), + print("

X-Ray %s Database: %s Segment (%s Tile + %s Tile)

" % (get_setting("XRAY_DATABASE").upper(), segtype.upper(), segtype.upper(), re.sub("clbl[lm]", "int", segtype).upper()), file=f) print(""" @@ -583,7 +626,7 @@ function oml() { print("", file=f) print("", file=f) trstyle = "" - with open("../database/%s/ppips_%s.db" % (os.getenv("XRAY_DATABASE"), tile_type.lower())) as fi: + with db_open("ppips_%s.db" % tile_type.lower()) as fi: for line in fi: pip_name, pip_type = line.split() trstyle = " bgcolor=\"#dddddd\"" if trstyle == "" else "" @@ -592,4 +635,3 @@ function oml() { print("", file=f) print("", file=f) -
PIPType