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

View File

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

View File

@ -29,7 +29,7 @@ def generate_html_output(filename: Union[str, Path], bom_list: List[List[str]],
'^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>', '^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>',
'<!-- XML and DOCTYPE declarations from SVG file removed -->', '<!-- XML and DOCTYPE declarations from SVG file removed -->',
svgdata, 1) svgdata, 1)
html = html.replace('<!-- diagram -->', svgdata) html = html.replace('<!-- %diagram% -->', svgdata)
# generate BOM table # generate BOM table
bom = flatten2d(bom_list) 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' bom_html_reversed = '<table>\n' + ''.join(list(reversed(bom_contents))) + bom_header_html + '</table>\n'
# insert BOM table # insert BOM table
html = html.replace('<!-- bom -->', bom_html) html = html.replace('<!-- %bom% -->', bom_html)
html = html.replace('<!-- bom_reversed -->', bom_html_reversed) html = html.replace('<!-- %bom_reversed% -->', bom_html_reversed)
# fill out title block # insert other metadata
if 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('<!-- %generator% -->', f'{APP_NAME} {__version__} - {APP_URL}')
html = html.replace('<!-- sheet_current -->', 'Sheet<br />1')
html = html.replace('<!-- sheet_total -->', 'of 1')
# fill out authors
for i, (k, v) in enumerate(metadata.get('authors', {}).items(), 1): for i, (k, v) in enumerate(metadata.get('authors', {}).items(), 1):
title = k title = k
name = v['name'] name = v['name']
date = v['date'].strftime('%Y-%m-%d') date = v['date'].strftime('%Y-%m-%d')
html = html.replace(f'<!-- process_{i}_title -->', title) html = html.replace(f'<!-- %process_{i}_title% -->', title)
html = html.replace(f'<!-- process_{i}_name -->', name) html = html.replace(f'<!-- %process_{i}_name% -->', name)
html = html.replace(f'<!-- process_{i}_date -->', date) html = html.replace(f'<!-- %process_{i}_date% -->', date)
# fill out revisions
for i, (k, v) in enumerate(metadata.get('revisions', {}).items(), 1): for i, (k, v) in enumerate(metadata.get('revisions', {}).items(), 1):
# TODO: for more than 8 revisions, keep only the 8 most recent ones # TODO: for more than 8 revisions, keep only the 8 most recent ones
number = k number = k
changelog = v['changelog'] changelog = v['changelog']
name = v['name'] name = v['name']
date = v['date'].strftime('%Y-%m-%d') date = v['date'].strftime('%Y-%m-%d')
html = html.replace(f'<!-- rev_{i}_number -->', '{:02d}'.format(number)) html = html.replace(f'<!-- %rev_{i}_number% -->', '{:02d}'.format(number))
html = html.replace(f'<!-- rev_{i}_changelog -->', changelog) html = html.replace(f'<!-- %rev_{i}_changelog% -->', changelog)
html = html.replace(f'<!-- rev_{i}_name -->', name) html = html.replace(f'<!-- %rev_{i}_name% -->', name)
html = html.replace(f'<!-- rev_{i}_date -->', date) 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 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: with open(f'{filename}.html','w') as file:
file.write(html) file.write(html)