# -*- coding: utf-8 -*- """ HTML Writer: This code is adapted from https://github.com/SchrodingersGat/KiBoM by Oliver Henry Walters. Generates a HTML file. """ from .columnlist import ColumnList BG_GEN = "#E6FFEE" BG_KICAD = "#FFE6B3" BG_USER = "#E6F9FF" BG_EMPTY = "#FF8080" def bg_color(col): """ Return a background color for a given column title """ col = col.lower() # Auto-generated columns if col in ColumnList.COLUMNS_GEN_L: return BG_GEN # KiCad protected columns elif col in ColumnList.COLUMNS_PROTECTED_L: return BG_KICAD # Additional user columns return BG_USER def link(text): for t in ["http", "https", "ftp", "www"]: if text.startswith(t): return '{t}'.format(t=text) return text def html_table(html, groups, headings, head_names, cfg, link_datasheet, link_digikey, dnf=False): # Table start html.write('
| \n") for i, h in enumerate(head_names): # Cell background color bg = bg_color(headings[i]) html.write('\t | {h} | \n'.format(h=h, bg=' bgcolor="{}"'.format(bg) if bg else '')) html.write("
|---|---|
| {n} | \n'.format(n=row_count)) for n, r in enumerate(row): # A link to Digi-Key? if link_digikey and headings[n] in link_digikey: r = '' + r + '' # Link this column to the datasheet? if link_datasheet and headings[n] == link_datasheet: r = '' + r + '' # Empty cell? if len(r) == 0 or r.strip() == "~": bg = BG_EMPTY else: bg = bg_color(headings[n]) html.write('\t{val} | \n'.format(bg=' bgcolor={}'.format(bg) if bg else '', val=link(r))) html.write("
| Source File | {} |
| BoM Date | {date} |
| Schematic Revision | {} |
| Schematic Date | {} |
| PCB Variant | {} |
| KiCad Version | {version} |
| Component Groups | {} |
| Component Count (per PCB) | {} |
| Fitted Components (per PCB) | {} |
| Number of PCBs | {} |
| Total Component Count (for {n} PCBs) | {t} |
KiCad Fields (default)
\n'.format(bg=BG_KICAD)) html.write('Generated Fields
\n'.format(bg=BG_GEN)) html.write('User Fields
\n'.format(bg=BG_USER)) html.write('Empty Fields
\n'.format(bg=BG_EMPTY)) # Fitted groups row_count = html_table(html, groups, headings, head_names, cfg, link_datasheet, link_digikey) html.write("