Generalize metadata filling, change placeholder syntax

This commit is contained in:
Daniel Rojas 2021-03-27 15:05:48 +01:00
parent 14565ec8f5
commit b3e47e148a
3 changed files with 87 additions and 80 deletions

View File

@ -1,9 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="generator" content="<!-- generator -->">
<title><!-- title --></title>
<meta name="generator" content="<!-- %generator% -->">
<title><!-- %title% --></title>
<style>
body {
font-family: Arial;
@ -183,90 +184,90 @@
<div id="frame" class="sheetsize_default">
<div id="diagram">
<!-- diagram -->
<!-- %diagram% -->
<div id="description">
<!-- description -->
<!-- %description% -->
</div>
<div id="notes">
<!-- notes -->
<!-- %notes% -->
</div>
</div>
<div id="bom">
<!-- bom_reversed -->
<!-- %bom_reversed% -->
</div>
<div id="titleblock">
<table>
<tr>
<td class="revno"><!-- rev_8_number --></td>
<td class="changelog"><!-- rev_8_changelog --></td>
<td class="date"><!-- rev_8_date --></td>
<td class="name"><!-- rev_8_name --></td>
<td class="revno"><!-- %rev_8_number% --></td>
<td class="changelog"><!-- %rev_8_changelog% --></td>
<td class="date"><!-- %rev_8_date% --></td>
<td class="name"><!-- %rev_8_name% --></td>
<td class="process"></td>
<td class="date">Date</td>
<td class="name">Name</td>
<td class="title" colspan="3" rowspan="5"><!-- title --></td>
<td class="title" colspan="3" rowspan="5"><!-- %title% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_7_number --></td>
<td><!-- rev_7_changelog --></td>
<td><!-- rev_7_date --></td>
<td><!-- rev_7_name --></td>
<td><!-- process_1_title --></td>
<td><!-- process_1_date --></td>
<td><!-- process_1_name --></td>
<td class="revno"><!-- %rev_7_number% --></td>
<td><!-- %rev_7_changelog% --></td>
<td><!-- %rev_7_date% --></td>
<td><!-- %rev_7_name% --></td>
<td><!-- %process_1_title% --></td>
<td><!-- %process_1_date% --></td>
<td><!-- %process_1_name% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_6_number --></td>
<td><!-- rev_6_changelog --></td>
<td><!-- rev_6_date --></td>
<td><!-- rev_6_name --></td>
<td><!-- process_2_title --></td>
<td><!-- process_2_date --></td>
<td><!-- process_2_name --></td>
<td class="revno"><!-- %rev_6_number% --></td>
<td><!-- %rev_6_changelog% --></td>
<td><!-- %rev_6_date% --></td>
<td><!-- %rev_6_name% --></td>
<td><!-- %process_2_title% --></td>
<td><!-- %process_2_date% --></td>
<td><!-- %process_2_name% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_5_number --></td>
<td><!-- rev_5_changelog --></td>
<td><!-- rev_5_date --></td>
<td><!-- rev_5_name --></td>
<td><!-- process_3_title --></td>
<td><!-- process_3_date --></td>
<td><!-- process_3_name --></td>
<td class="revno"><!-- %rev_5_number% --></td>
<td><!-- %rev_5_changelog% --></td>
<td><!-- %rev_5_date% --></td>
<td><!-- %rev_5_name% --></td>
<td><!-- %process_3_title% --></td>
<td><!-- %process_3_date% --></td>
<td><!-- %process_3_name% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_4_number --></td>
<td><!-- rev_4_changelog --></td>
<td><!-- rev_4_date --></td>
<td><!-- rev_4_name --></td>
<td class="revno"><!-- %rev_4_number% --></td>
<td><!-- %rev_4_changelog% --></td>
<td><!-- %rev_4_date% --></td>
<td><!-- %rev_4_name% --></td>
<td colspan="2"></td>
<td></td>
</tr>
<tr>
<td class="revno"><!-- rev_3_number --></td>
<td><!-- rev_3_changelog --></td>
<td><!-- rev_3_date --></td>
<td><!-- rev_3_name --></td>
<td class="company" colspan="3" rowspan="3"><!-- company --></td>
<td class="partno" colspan="2" rowspan="3"><!-- pn --></td>
<td class="sheetno" rowspan="2"><!-- sheet_current --></td>
<td class="revno"><!-- %rev_3_number% --></td>
<td><!-- %rev_3_changelog% --></td>
<td><!-- %rev_3_date% --></td>
<td><!-- %rev_3_name% --></td>
<td class="company" colspan="3" rowspan="3"><!-- %company% --></td>
<td class="partno" colspan="2" rowspan="3"><!-- %pn% --></td>
<td class="sheetno" rowspan="2"><!-- %sheet_current% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_2_number --></td>
<td><!-- rev_2_changelog --></td>
<td><!-- rev_2_date --></td>
<td><!-- rev_2_name --></td>
<td class="revno"><!-- %rev_2_number% --></td>
<td><!-- %rev_2_changelog% --></td>
<td><!-- %rev_2_date% --></td>
<td><!-- %rev_2_name% --></td>
</tr>
<tr>
<td class="revno"><!-- rev_1_number --></td>
<td><!-- rev_1_changelog --></td>
<td><!-- rev_1_date --></td>
<td><!-- rev_1_name --></td>
<td class="sheetno"><!-- sheet_total --></td>
<td class="revno"><!-- %rev_1_number% --></td>
<td><!-- %rev_1_changelog% --></td>
<td><!-- %rev_1_date% --></td>
<td><!-- %rev_1_name% --></td>
<td class="sheetno"><!-- %sheet_total% --></td>
</tr>
<tr>
<td>Rev</td>

View File

@ -1,8 +1,8 @@
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="UTF-8">
<meta name="generator" content="<!-- generator -->">
<title>WireViz Demo 01</title>
<meta name="generator" content="<!-- %generator% -->">
<title><!-- %title% --></title>
<style>
#bom table, th, td {
@ -21,25 +21,25 @@
</style>
</head><body style="font-family:arial;background-color:#FFFFFF">
<h1>WireViz Demo 01</h1>
<h1><!-- %title% --></h1>
<h2>Diagram</h2>
<div id="description">
<!-- description -->
<!-- %description% -->
</div>
<div id="diagram">
<!-- diagram -->
<!-- %diagram% -->
</div>
<div id="notes">
<!-- notes -->
<!-- %notes% -->
</div>
<h2>Bill of Materials</h2>
<div id="bom">
<!-- bom -->
<!-- %bom% -->
</div>
</body></html>

View File

@ -29,7 +29,7 @@ def generate_html_output(filename: Union[str, Path], bom_list: List[List[str]],
'^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>',
'<!-- XML and DOCTYPE declarations from SVG file removed -->',
svgdata, 1)
html = html.replace('<!-- diagram -->', svgdata)
html = html.replace('<!-- %diagram% -->', svgdata)
# generate BOM table
bom = flatten2d(bom_list)
@ -55,42 +55,48 @@ def generate_html_output(filename: Union[str, Path], bom_list: List[List[str]],
bom_html_reversed = '<table>\n' + ''.join(list(reversed(bom_contents))) + bom_header_html + '</table>\n'
# insert BOM table
html = html.replace('<!-- bom -->', bom_html)
html = html.replace('<!-- bom_reversed -->', bom_html_reversed)
html = html.replace('<!-- %bom% -->', bom_html)
html = html.replace('<!-- %bom_reversed% -->', bom_html_reversed)
# fill out title block
# insert other metadata
if metadata:
html = html.replace('<!-- title -->', metadata.get('title', ''))
html = html.replace('<!-- pn -->', metadata.get('pn', ''))
html = html.replace('<!-- company -->', metadata.get('company', ''))
html = html.replace('<!-- description -->', html_line_breaks(metadata.get('description', '')))
html = html.replace('<!-- notes -->', html_line_breaks(metadata.get('notes', '')))
html = html.replace('<!-- generator -->', f'{APP_NAME} {__version__} - {APP_URL}')
# TODO: handle multi-page documents
html = html.replace('<!-- sheet_current -->', 'Sheet<br />1')
html = html.replace('<!-- sheet_total -->', 'of 1')
html = html.replace('<!-- %generator% -->', f'{APP_NAME} {__version__} - {APP_URL}')
# fill out authors
for i, (k, v) in enumerate(metadata.get('authors', {}).items(), 1):
title = k
name = v['name']
date = v['date'].strftime('%Y-%m-%d')
html = html.replace(f'<!-- process_{i}_title -->', title)
html = html.replace(f'<!-- process_{i}_name -->', name)
html = html.replace(f'<!-- process_{i}_date -->', date)
html = html.replace(f'<!-- %process_{i}_title% -->', title)
html = html.replace(f'<!-- %process_{i}_name% -->', name)
html = html.replace(f'<!-- %process_{i}_date% -->', date)
# fill out revisions
for i, (k, v) in enumerate(metadata.get('revisions', {}).items(), 1):
# TODO: for more than 8 revisions, keep only the 8 most recent ones
number = k
changelog = v['changelog']
name = v['name']
date = v['date'].strftime('%Y-%m-%d')
html = html.replace(f'<!-- rev_{i}_number -->', '{:02d}'.format(number))
html = html.replace(f'<!-- rev_{i}_changelog -->', changelog)
html = html.replace(f'<!-- rev_{i}_name -->', name)
html = html.replace(f'<!-- rev_{i}_date -->', date)
html = html.replace(f'<!-- %rev_{i}_number% -->', '{:02d}'.format(number))
html = html.replace(f'<!-- %rev_{i}_changelog% -->', changelog)
html = html.replace(f'<!-- %rev_{i}_name% -->', name)
html = html.replace(f'<!-- %rev_{i}_date% -->', date)
html = html.replace(f'"sheetsize_default"', '"{}"'.format(metadata.get('template',{}).get('sheetsize', ''))) # include quotes so no replacement happens within <style> definition
# TODO: handle multi-page documents
html = html.replace('<!-- %sheet_current% -->', 'Sheet<br />1')
html = html.replace('<!-- %sheet_total% -->', 'of 1')
# fill out other generic metadata
for k, v in metadata.items():
if isinstance(v, (str, int, float)):
html = html.replace(f'<!-- %{k}% -->', v)
# TODO: Support smart handling of lists and dicts?
with open(f'{filename}.html','w') as file:
file.write(html)