| #!/usr/bin/env python3 | 
 | import ast, sys | 
 |  | 
 | data = "" | 
 | with open(sys.argv[1], 'r') as f: | 
 |     data = f.read() | 
 |      | 
 | ip_dat = ast.literal_eval("{\n" + data + "}") | 
 |  | 
 | def is_cbit(ident): | 
 |     if "_ENABLE" in ident or "DELAYED" in ident: | 
 |         return True | 
 |     else: | 
 |         return False | 
 |  | 
 | def is_bus(ident): | 
 |     return ident.startswith("SB") | 
 |  | 
 | ips = sorted(ip_dat) | 
 | print ("<table class=\"cstab\">\n<tr><th>Signal</th>", end='') | 
 | for ip in ips: | 
 |     t, loc = ip | 
 |     x, y, z = loc | 
 |     print("<th>%s<br/>(%d, %d, %d)</th>" % (t, x, y, z), end='') | 
 | print ("</tr>") | 
 |  | 
 | # TODO: could group busses? | 
 | for print_t in ["SB", "G", "CBIT"]: | 
 |     for n in sorted(ip_dat[ips[0]]): | 
 |         if is_bus(n) != (print_t == "SB"): | 
 |             continue | 
 |         if is_cbit(n) != (print_t == "CBIT"): | 
 |             continue | 
 |         print("<tr>", end='') | 
 |         em_o = "" | 
 |         em_c = "" | 
 |         if is_cbit(n): | 
 |             em_o = "<em>" | 
 |             em_c = "</em>" | 
 |         print("<td>%s%s%s</td>" % (em_o, n, em_c), end='') | 
 |         for ip in ips: | 
 |             entry = ip_dat[ip][n] | 
 |             x, y, name = entry | 
 |             print("<td>%s(%d, %d, %s)%s</td>" % (em_o, x, y, name, em_c), end='') | 
 |         print("</tr>") | 
 | print ("</table>") |