diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py
index c2ce5de..29d0e0b 100644
--- a/src/wireviz/Harness.py
+++ b/src/wireviz/Harness.py
@@ -288,6 +288,46 @@ class Harness:
data.seek(0)
return data.read()
+ @property
+ def html(self):
+ self.create_graph()
+
+ bom_list = self.bom_list()
+ string = ''
+
+ string += '\n'
+ string += f'
'
+
+ string += 'Diagram
'
+
+ svg = self.svg.decode('utf-8')
+ svg = re.sub(
+ '^<[?]xml [^?>]*[?]>[^<]*]*>',
+ '',
+ svg)
+ for svgdata in svg:
+ string += svgdata
+
+ string += 'Bill of Materials
'
+ listy = flatten2d(bom_list)
+ string += ''
+ string += ''
+ for item in listy[0]:
+ string += f'| {item} | '
+ string += '
'
+ for row in listy[1:]:
+ string += ''
+ for i, item in enumerate(row):
+ item_str = item.replace('\u00b2', '²')
+ align = 'align="right"' if listy[0][i] == 'Qty' else ''
+ string += f'| {item_str} | '
+ string += '
'
+ string += '
'
+
+ string += ''
+
+ return bytes(string, encoding='utf-8')
+
def output(self, filename: (str, Path), view: bool = False, cleanup: bool = True, fmt: tuple = ('pdf', )) -> None:
# graphical output
graph = self.create_graph()
diff --git a/src/wireviz/bom_helper.py b/src/wireviz/bom_helper.py
index 218b413..2bcc27c 100644
--- a/src/wireviz/bom_helper.py
+++ b/src/wireviz/bom_helper.py
@@ -26,6 +26,7 @@ _tsv_formats = { EXCEL_TSV, WIREVIZ_TSV }
_csv_ext = '.bom.csv'
_tsv_ext = '.bom.tsv'
+
def generate_bom_outputs(base_filename, bomdata, formats=None):
if formats is None:
formats = [EXCEL_CSV, WIREVIZ_TSV]
diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py
index 04814f2..e6aed08 100755
--- a/src/wireviz/wireviz.py
+++ b/src/wireviz/wireviz.py
@@ -181,6 +181,8 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st
returns.append(harness.png)
if rt == 'svg':
returns.append(harness.svg)
+ if rt == 'html':
+ returns.append(harness.html)
if rt == 'harness':
returns.append(harness)