From 18782444b123735f6b2f57581b0899135996cda9 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 13:00:43 +0200 Subject: [PATCH 001/111] Make prefix for autogenerated component names configurable `edotor.net` does not seem to like leading underscores, which makes GraphViz debugging difficult. --- src/wireviz/DataClasses.py | 16 ++++++++++++---- src/wireviz/Harness.py | 3 +-- src/wireviz/wireviz.py | 4 ++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 74a9dc42..cdefdddd 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -42,6 +42,8 @@ Side = Enum("Side", "LEFT RIGHT") +AUTOGENERATED_PREFIX = "AUTOGENERATED_" + class Metadata(dict): pass @@ -163,6 +165,10 @@ class Connector: ignore_in_bom: bool = False additional_components: List[AdditionalComponent] = field(default_factory=list) + @property + def is_autogenerated(self): + return self.name.startswith(AUTOGENERATED_PREFIX) + def __post_init__(self) -> None: if isinstance(self.image, dict): @@ -196,8 +202,7 @@ def __post_init__(self) -> None: raise Exception("Pins are not unique") if self.show_name is None: - # hide designators for simple and for auto-generated connectors by default - self.show_name = self.style != "simple" and self.name[0:2] != "__" + self.show_name = self.style != "simple" and not self.is_autogenerated if self.show_pincount is None: # hide pincount for simple (1 pin) connectors by default @@ -269,6 +274,10 @@ class Cable: ignore_in_bom: bool = False additional_components: List[AdditionalComponent] = field(default_factory=list) + @property + def is_autogenerated(self): + return self.name.startswith(AUTOGENERATED_PREFIX) + def __post_init__(self) -> None: if isinstance(self.image, dict): @@ -360,8 +369,7 @@ def __post_init__(self) -> None: raise Exception("lists of part data are only supported for bundles") if self.show_name is None: - # hide designators for auto-generated cables by default - self.show_name = self.name[0:2] != "__" + self.show_name = not self.is_autogenerated if self.show_wirenumbers is None: # by default, show wire numbers for cables, hide for bundles diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index da4f2bfd..d99786ff 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -17,8 +17,8 @@ MatePin, Metadata, Options, - Tweak, Side, + Tweak, ) from wireviz.svgembed import embed_svg_images_file from wireviz.wv_bom import ( @@ -650,7 +650,6 @@ def svg(self): graph = self.graph return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd()) - def output( self, filename: (str, Path), diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 163be954..05369ae9 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -10,7 +10,7 @@ if __name__ == "__main__": sys.path.insert(0, str(Path(__file__).parent.parent)) # add src/wireviz to PATH -from wireviz.DataClasses import Metadata, Options, Tweak +from wireviz.DataClasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak from wireviz.Harness import Harness from wireviz.wv_helper import ( expand, @@ -164,7 +164,7 @@ def resolve_designator(inp, separator): autogenerated_designators[template] = ( autogenerated_designators.get(template, 0) + 1 ) - designator = f"__{template}_{autogenerated_designators[template]}" + designator = f"{AUTOGENERATED_PREFIX}{template}_{autogenerated_designators[template]}" # check if redefining existing component to different template if designator in designators_and_templates: if designators_and_templates[designator] != template: From e034fb3519a0e1d4e4884c79d354485411712660 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 13:02:31 +0200 Subject: [PATCH 002/111] Rebuild all examples before refactoring no diff should ocurr as a result of the refactoring --- examples/demo01.html | 105 +++-- examples/demo01.svg | 2 +- examples/demo02.gv | 8 +- examples/demo02.html | 498 +++++++++++++++++------ examples/demo02.svg | 18 +- examples/ex01.html | 91 +++-- examples/ex01.svg | 2 +- examples/ex02.html | 119 ++++-- examples/ex02.svg | 2 +- examples/ex03.html | 119 ++++-- examples/ex03.svg | 2 +- examples/ex04.gv | 48 +-- examples/ex04.html | 257 ++++++------ examples/ex04.svg | 98 ++--- examples/ex05.html | 133 +++--- examples/ex05.svg | 2 +- examples/ex06.html | 133 +++--- examples/ex06.svg | 2 +- examples/ex07.html | 105 +++-- examples/ex07.svg | 2 +- examples/ex08.gv | 4 +- examples/ex08.html | 95 +++-- examples/ex08.svg | 6 +- examples/ex09.html | 105 +++-- examples/ex09.svg | 2 +- examples/ex10.html | 91 +++-- examples/ex10.svg | 2 +- examples/ex11.bom.tsv | 4 + examples/ex11.gv | 191 +++++++++ examples/ex11.html | 245 ++++++++++++ examples/ex11.png | Bin 0 -> 37497 bytes examples/ex11.svg | 172 ++++++++ examples/ex12.bom.tsv | 7 + examples/ex12.gv | 269 +++++++++++++ examples/ex12.html | 289 ++++++++++++++ examples/ex12.png | Bin 0 -> 29039 bytes examples/ex12.svg | 195 +++++++++ examples/ex13.bom.tsv | 4 + examples/ex13.gv | 433 ++++++++++++++++++++ examples/ex13.html | 449 +++++++++++++++++++++ examples/ex13.png | Bin 0 -> 122595 bytes examples/ex13.svg | 376 +++++++++++++++++ examples/ex14.bom.tsv | 8 + examples/ex14.gv | 717 +++++++++++++++++++++++++++++++++ examples/ex14.html | 777 ++++++++++++++++++++++++++++++++++++ examples/ex14.png | Bin 0 -> 207268 bytes examples/ex14.svg | 676 +++++++++++++++++++++++++++++++ examples/readme.md | 24 ++ tutorial/readme.md | 7 +- tutorial/tutorial01.html | 91 +++-- tutorial/tutorial01.svg | 2 +- tutorial/tutorial02.html | 91 +++-- tutorial/tutorial02.svg | 2 +- tutorial/tutorial03.html | 91 +++-- tutorial/tutorial03.svg | 2 +- tutorial/tutorial04.html | 105 +++-- tutorial/tutorial04.svg | 2 +- tutorial/tutorial05.gv | 82 ++-- tutorial/tutorial05.html | 229 ++++++----- tutorial/tutorial05.svg | 98 ++--- tutorial/tutorial06.gv | 80 ++-- tutorial/tutorial06.html | 283 +++++++------ tutorial/tutorial06.svg | 138 +++---- tutorial/tutorial07.html | 133 +++--- tutorial/tutorial07.svg | 2 +- tutorial/tutorial08.bom.tsv | 14 +- tutorial/tutorial08.gv | 6 +- tutorial/tutorial08.html | 319 ++++++++------- tutorial/tutorial08.png | Bin 201214 -> 199340 bytes tutorial/tutorial08.svg | 8 +- 70 files changed, 7223 insertions(+), 1449 deletions(-) create mode 100644 examples/ex11.bom.tsv create mode 100644 examples/ex11.gv create mode 100644 examples/ex11.html create mode 100644 examples/ex11.png create mode 100644 examples/ex11.svg create mode 100644 examples/ex12.bom.tsv create mode 100644 examples/ex12.gv create mode 100644 examples/ex12.html create mode 100644 examples/ex12.png create mode 100644 examples/ex12.svg create mode 100644 examples/ex13.bom.tsv create mode 100644 examples/ex13.gv create mode 100644 examples/ex13.html create mode 100644 examples/ex13.png create mode 100644 examples/ex13.svg create mode 100644 examples/ex14.bom.tsv create mode 100644 examples/ex14.gv create mode 100644 examples/ex14.html create mode 100644 examples/ex14.png create mode 100644 examples/ex14.svg diff --git a/examples/demo01.html b/examples/demo01.html index f192c77d..207bb10f 100644 --- a/examples/demo01.html +++ b/examples/demo01.html @@ -1,13 +1,36 @@ - - - demo01 - + + + demo01 + +

demo01

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 3 x 0.25 mm² shielded0.2mW1
2Connector, D-Sub, female, 9 pins1X1
3Connector, Molex KK 254, female, 3 pins1X2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 3 x 0.25 mm² shielded0.2mW1
2Connector, D-Sub, female, 9 pins1X1
3Connector, Molex KK 254, female, 3 pins1X2
+ + + diff --git a/examples/demo01.svg b/examples/demo01.svg index bd454446..68a3ea13 100644 --- a/examples/demo01.svg +++ b/examples/demo01.svg @@ -1,7 +1,7 @@ - > fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_1 [label=< + AUTOGENERATED_F_1 [label=<
@@ -180,7 +180,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_2 [label=< + AUTOGENERATED_F_2 [label=<
@@ -487,10 +487,10 @@ graph {
> fillcolor="#FFFFFF" shape=box style="filled,dashed"] edge [color="#000000:#000000:#000000"] - _ferrule_crimp_1:e -- W4:w1:w + AUTOGENERATED_F_1:e -- W4:w1:w W4:w1:e -- X4:p1l:w edge [color="#000000:#ff0000:#000000"] - _ferrule_crimp_2:e -- W4:w2:w + AUTOGENERATED_F_2:e -- W4:w2:w W4:w2:e -- X4:p2l:w W4 [label=< diff --git a/examples/demo02.html b/examples/demo02.html index cc726ae3..1002edda 100644 --- a/examples/demo02.html +++ b/examples/demo02.html @@ -1,13 +1,194 @@ - - - - demo02 - -

demo02

-

Diagram

- - + + + +Diagram SCK - + -_ferrule_crimp_1 +AUTOGENERATED_F_1 Crimp ferrule @@ -389,16 +570,16 @@

Diagram

  - + -_ferrule_crimp_1:e--W4:w +AUTOGENERATED_F_1:e--W4:w - + -_ferrule_crimp_2 +AUTOGENERATED_F_2 Crimp ferrule @@ -409,9 +590,9 @@

Diagram

- + -_ferrule_crimp_2:e--W4:w +AUTOGENERATED_F_2:e--W4:w @@ -516,98 +697,193 @@

Diagram

-

Bill of Materials

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
+ +
+ + + +
+
IdDescriptionQtyUnitDesignators
1Cable, 2 x 0.25 mm²0.3mW4
2Connector, Crimp ferrule, 0.25 mm², YE2
3Connector, Molex KK 254, female, 4 pins2X2, X3
4Connector, Molex KK 254, female, 5 pins1X4
5Connector, Molex KK 254, female, 8 pins1X1
6Wire, 0.14 mm², BK0.9mW1, W2, W3
7Wire, 0.14 mm², BU0.3mW3
8Wire, 0.14 mm², GN0.6mW1, W2
9Wire, 0.14 mm², OG0.3mW3
10Wire, 0.14 mm², RD0.6mW1, W2
11Wire, 0.14 mm², VT0.3mW3
12Wire, 0.14 mm², YE0.6mW1, W2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
12Wire, 0.14 mm², YE0.6mW1, W2
11Wire, 0.14 mm², VT0.3mW3
10Wire, 0.14 mm², RD0.6mW1, W2
9Wire, 0.14 mm², OG0.3mW3
8Wire, 0.14 mm², GN0.6mW1, W2
7Wire, 0.14 mm², BU0.3mW3
6Wire, 0.14 mm², BK0.9mW1, W2, W3
5Connector, Molex KK 254, female, 8 pins1X1
4Connector, Molex KK 254, female, 5 pins1X4
3Connector, Molex KK 254, female, 4 pins2X2, X3
2Connector, Crimp ferrule, 0.25 mm², YE2
1Cable, 2 x 0.25 mm²0.3mW4
IdDescriptionQtyUnitDesignators
- + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DateNameWireViz Demo 2
Created2020-05-20D. Rojas
Approved2020-05-20D. Rojas
WV-DEMO-02Sheet
1
AWireViz 0.2 release2020-10-17D. Rojasof 1
RevChangelogDateName
+
+ + + + + diff --git a/examples/demo02.svg b/examples/demo02.svg index 06320f89..a23c9f63 100644 --- a/examples/demo02.svg +++ b/examples/demo02.svg @@ -1,7 +1,7 @@ - SCK - + -_ferrule_crimp_1 +AUTOGENERATED_F_1 Crimp ferrule @@ -383,16 +383,16 @@   - + -_ferrule_crimp_1:e--W4:w +AUTOGENERATED_F_1:e--W4:w - + -_ferrule_crimp_2 +AUTOGENERATED_F_2 Crimp ferrule @@ -403,9 +403,9 @@ - + -_ferrule_crimp_2:e--W4:w +AUTOGENERATED_F_2:e--W4:w diff --git a/examples/ex01.html b/examples/ex01.html index 63558a53..c11a3a6f 100644 --- a/examples/ex01.html +++ b/examples/ex01.html @@ -1,13 +1,36 @@ - - - ex01 - + + + ex01 + +

ex01

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, Serial, 4 x 0.25 mm² shielded0.2mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, Serial, 4 x 0.25 mm² shielded0.2mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + diff --git a/examples/ex01.svg b/examples/ex01.svg index d72503b5..4667ae53 100644 --- a/examples/ex01.svg +++ b/examples/ex01.svg @@ -1,7 +1,7 @@ - - - - ex02 - + + + ex02 + +

ex02

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 2 x 0.25 mm²0.4mW1, W2
2Cable, 2 x 20 AWG0.2mW3
3Connector, Molex Micro-Fit, female, 2 pins3X2, X3, X4
4Connector, Molex Micro-Fit, male, 2 pins1X1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 2 x 0.25 mm²0.4mW1, W2
2Cable, 2 x 20 AWG0.2mW3
3Connector, Molex Micro-Fit, female, 2 pins3X2, X3, X4
4Connector, Molex Micro-Fit, male, 2 pins1X1
+ + + diff --git a/examples/ex02.svg b/examples/ex02.svg index fe8f153d..cb86958c 100644 --- a/examples/ex02.svg +++ b/examples/ex02.svg @@ -1,7 +1,7 @@ - - - - ex03 - + + + ex03 + +

ex03

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Molex Micro-Fit, female, 2 pins3X2, X3, X4
2Connector, Molex Micro-Fit, male, 2 pins1X1
3Wire, 0.25 mm², BK0.6mW1
4Wire, 0.25 mm², RD0.6mW1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Molex Micro-Fit, female, 2 pins3X2, X3, X4
2Connector, Molex Micro-Fit, male, 2 pins1X1
3Wire, 0.25 mm², BK0.6mW1
4Wire, 0.25 mm², RD0.6mW1
+ + + diff --git a/examples/ex03.svg b/examples/ex03.svg index 50fd1352..a13b9184 100644 --- a/examples/ex03.svg +++ b/examples/ex03.svg @@ -1,7 +1,7 @@ -
@@ -13,7 +13,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_2 [label=< + AUTOGENERATED_F_2 [label=<
@@ -22,7 +22,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_3 [label=< + AUTOGENERATED_F_3 [label=<
@@ -31,7 +31,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_4 [label=< + AUTOGENERATED_F_4 [label=<
@@ -40,7 +40,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_5 [label=< + AUTOGENERATED_F_5 [label=<
@@ -49,7 +49,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_6 [label=< + AUTOGENERATED_F_6 [label=<
@@ -58,7 +58,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_7 [label=< + AUTOGENERATED_F_7 [label=<
@@ -67,7 +67,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_8 [label=< + AUTOGENERATED_F_8 [label=<
@@ -76,7 +76,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_9 [label=< + AUTOGENERATED_F_9 [label=<
@@ -85,7 +85,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_10 [label=< + AUTOGENERATED_F_10 [label=<
@@ -94,7 +94,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_11 [label=< + AUTOGENERATED_F_11 [label=< ") - # # fmt: on - - - # connections + gv_html = gv_node_component(cable, self.options) + dot.node(cable.name, label=f"<\n{gv_html}\n>", shape="box") + # style=style, + # fillcolor=translate_color(bgcolor, "HEX"), + # generate edges for wires in cable for connection in cable.connections: - if isinstance(connection.via_port, int): - # check if it's an actual wire and not a shield - dot.attr( - "edge", - color=":".join( - ["#000000"] - + wv_colors.get_color_hex( - cable.colors[connection.via_port - 1], pad=pad - ) - + ["#000000"] - ), - ) - else: # it's a shield connection - # shield is shown with specified color and black borders, or as a thin black wire otherwise - if isinstance(cable.shield, str): - shield_color_hex = wv_colors.get_color_hex(cable.shield)[0] - shield_color_str = ":".join(["#000000", shield_color_hex, "#000000"]) - else: - shield_color_str = "#000000" - dot.attr( - "edge", - color=shield_color_str, - ) - if connection.from_pin is not None: # connect to left - from_connector = self.connectors[connection.from_name] - from_pin_index = from_connector.pins.index(connection.from_pin) - from_port_str = ( - f":p{from_pin_index+1}r" - if from_connector.style != "simple" - else "" - ) - code_left_1 = f"{connection.from_name}{from_port_str}:e" - code_left_2 = f"{cable.name}:w{connection.via_port}:w" - dot.edge(code_left_1, code_left_2) - if from_connector.show_name: - from_info = [ - str(connection.from_name), - str(connection.from_pin), - ] - if from_connector.pinlabels: - pinlabel = from_connector.pinlabels[from_pin_index] - if pinlabel != "": - from_info.append(pinlabel) - from_string = ":".join(from_info) - else: - from_string = "" - # html = [ - # row.replace(f"", from_string) - # for row in html - # ] - if connection.to_pin is not None: # connect to right - to_connector = self.connectors[connection.to_name] - to_pin_index = to_connector.pins.index(connection.to_pin) - to_port_str = ( - f":p{to_pin_index+1}l" if to_connector.style != "simple" else "" - ) - code_right_1 = f"{cable.name}:w{connection.via_port}:e" - code_right_2 = f"{connection.to_name}{to_port_str}:w" - dot.edge(code_right_1, code_right_2) - if to_connector.show_name: - to_info = [str(connection.to_name), str(connection.to_pin)] - if to_connector.pinlabels: - pinlabel = to_connector.pinlabels[to_pin_index] - if pinlabel != "": - to_info.append(pinlabel) - to_string = ":".join(to_info) - else: - to_string = "" - # html = [ - # row.replace(f"", to_string) - # for row in html - # ] + color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection) + dot.attr("edge", color=color) + if not (l1, l2) == (None, None): + dot.edge(l1, l2) + if not (r1, r2) == (None, None): + dot.edge(r1, r2) style, bgcolor = ( ("filled,dashed", self.options.bgcolor_bundle) if cable.category == "bundle" else ("filled", self.options.bgcolor_cable) ) - # html = "\n".join(html) - # dot.node( - # cable.name, - # label=f"<\n{html}\n>", - # shape="box", - # style=style, - # fillcolor=translate_color(bgcolor, "HEX"), - # ) apply_dot_tweaks(dot, self.tweak) @@ -349,6 +223,8 @@ def create_graph(self) -> Graph: from_port_str = f":p{from_pin_index+1}r" else: # MateComponent or style == 'simple' from_port_str = "" + + to_connector = self.connectors[mate.to_name] if ( isinstance(mate, MatePin) and self.connectors[mate.to_name].style != "simple" diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index ff8c77f4..a844882a 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -209,11 +209,16 @@ def gv_conductor_table(cable, harness_options) -> Table: rows.append(Tr(cells_above)) # the wire itself - color_list = ["#000000"] + get_color_hex(connection_color, pad=harness_options._pad) + ["#000000"] + color_list = ( + ["#000000"] + + get_color_hex(connection_color, pad=harness_options._pad) + + ["#000000"] + ) rows.append(Tr(gv_wire_cell(i, color_list))) # row below the wire # TODO: PN stuff for bundles + # wire_pn_stuff() see below if cable.shield: rows.append(Tr(Td(" "))) # spacer between wires and shield @@ -260,6 +265,118 @@ def gv_wire_cell(index, color_list) -> Td: return wire_outer_cell +def wire_pn_stuff(): + # # for bundles, individual wires can have part information + # if cable.category == "bundle": + # # create a list of wire parameters + # wireidentification = [] + # if isinstance(cable.pn, list): + # wireidentification.append( + # pn_info_string( + # HEADER_PN, None, remove_links(cable.pn[i - 1]) + # ) + # ) + # manufacturer_info = pn_info_string( + # HEADER_MPN, + # cable.manufacturer[i - 1] + # if isinstance(cable.manufacturer, list) + # else None, + # cable.mpn[i - 1] if isinstance(cable.mpn, list) else None, + # ) + # supplier_info = pn_info_string( + # HEADER_SPN, + # cable.supplier[i - 1] + # if isinstance(cable.supplier, list) + # else None, + # cable.spn[i - 1] if isinstance(cable.spn, list) else None, + # ) + # if manufacturer_info: + # wireidentification.append(html_line_breaks(manufacturer_info)) + # if supplier_info: + # wireidentification.append(html_line_breaks(supplier_info)) + # # print parameters into a table row under the wire + # if len(wireidentification) > 0: + # # fmt: off + # wirehtml.append(' ") + # # fmt: on + pass + + +def gv_edge_wire(harness, cable, connection) -> (str, str, str): + if isinstance(connection.via_port, int): + # check if it's an actual wire and not a shield + wire_color = get_color_hex( + cable.colors[connection.via_port - 1], pad=harness.options._pad + ) + color = ":".join(["#000000"] + wire_color + ["#000000"]) + else: # it's a shield connection + # shield is shown with specified color and black borders, or as a thin black wire otherwise + if isinstance(cable.shield, str): + shield_color_hex = get_color_hex(cable.shield)[0] + shield_color_str = ":".join(["#000000", shield_color_hex, "#000000"]) + else: + shield_color_str = "#000000" + color = shield_color_str + if connection.from_pin is not None: # connect to left + from_connector = harness.connectors[connection.from_name] + from_pin_index = from_connector.pins.index(connection.from_pin) + from_port_str = ( + f":p{from_pin_index+1}r" if from_connector.style != "simple" else "" + ) + code_left_1 = f"{connection.from_name}{from_port_str}:e" + code_left_2 = f"{cable.name}:w{connection.via_port}:w" + # dot.edge(code_left_1, code_left_2) + if from_connector.show_name: + from_info = [ + str(connection.from_name), + str(connection.from_pin), + ] + if from_connector.pinlabels: + pinlabel = from_connector.pinlabels[from_pin_index] + if pinlabel != "": + from_info.append(pinlabel) + from_string = ":".join(from_info) + + else: + from_string = "" + # html = [ + # row.replace(f"", from_string) + # for row in html + # ] + else: + code_left_1, code_left_2 = None, None + + if connection.to_pin is not None: # connect to right + to_connector = harness.connectors[connection.to_name] + to_pin_index = to_connector.pins.index(connection.to_pin) + to_port_str = f":p{to_pin_index+1}l" if to_connector.style != "simple" else "" + code_right_1 = f"{cable.name}:w{connection.via_port}:e" + code_right_2 = f"{connection.to_name}{to_port_str}:w" + # dot.edge(code_right_1, code_right_2) + if to_connector.show_name: + to_info = [str(connection.to_name), str(connection.to_pin)] + if to_connector.pinlabels: + pinlabel = to_connector.pinlabels[to_pin_index] + if pinlabel != "": + to_info.append(pinlabel) + to_string = ":".join(to_info) + else: + to_string = "" + # html = [ + # row.replace(f"", to_string) + # for row in html + # ] + else: + code_right_1, code_right_2 = None, None + + return color, code_left_1, code_left_2, code_right_1, code_right_2 + + def colored_cell(contents, bgcolor) -> Td: return Td(contents, bgcolor=translate_color(bgcolor, "HEX")) From d9513865e21146bf89a950f2e9b695c18fa4acce Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 19:16:59 +0200 Subject: [PATCH 022/111] Make connecting things more object-oriented --- src/wireviz/DataClasses.py | 139 ++++++++++++++++++++++++++------- src/wireviz/Harness.py | 13 +++- src/wireviz/wv_gv_html.py | 152 ++++++++++++++++--------------------- 3 files changed, 187 insertions(+), 117 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index d7c8cb44..2c7758c7 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -2,6 +2,7 @@ from dataclasses import InitVar, dataclass, field from enum import Enum, auto +from itertools import zip_longest from pathlib import Path from typing import Dict, List, Optional, Tuple, Union @@ -146,6 +147,42 @@ class Component: pass +@dataclass +class PinClass: + index: int + id: str + label: str + color: str + parent: str # designator of parent connector + + +@dataclass +class WireClass: + index: int + id: str + label: str + color: str + parent: str # designator of parent cable/bundle + # gauge: Gauge + # pn: str + # manufacturer: str + # mpn: str + # supplier: str + # spn: str + + +@dataclass +class ShieldClass(WireClass): + pass # TODO, for wires with multiple shields more shield details, ... + + +@dataclass +class Connection: + from_: PinClass = None + via: Union[WireClass, ShieldClass] = None + to: PinClass = None + + @dataclass class Connector(Component): name: Designator @@ -173,6 +210,7 @@ class Connector(Component): loops: List[List[Pin]] = field(default_factory=list) ignore_in_bom: bool = False additional_components: List[AdditionalComponent] = field(default_factory=list) + pin_objects: List[PinClass] = field(default_factory=list) @property def is_autogenerated(self): @@ -213,6 +251,23 @@ def __post_init__(self) -> None: if len(self.pins) != len(set(self.pins)): raise Exception("Pins are not unique") + # all checks have passed + pin_tuples = zip_longest( + self.pins, + self.pinlabels, + self.pincolors, + ) + for pin_index, (pin_id, pin_label, pin_color) in enumerate(pin_tuples): + self.pin_objects.append( + PinClass( + index=pin_index, + id=pin_id, + label=pin_label, + color=pin_color, + parent=self.name, + ) + ) + if self.show_name is None: self.show_name = self.style != "simple" and not self.is_autogenerated @@ -235,6 +290,19 @@ def __post_init__(self) -> None: if isinstance(item, dict): self.additional_components[i] = AdditionalComponent(**item) + def _check_if_unique_id(self, id): + results = [pin for pin in self.pin_objects if pin.id == id] + if len(results) == 0: + raise Exception(f"Pin ID {id} not found in {self.name}") + if len(results) > 1: + raise Exception(f"Pin ID {id} found more than once in {self.name}") + return True + + def get_pin_by_id(self, id): + if self._check_if_unique_id(id): + pin = [pin for pin in self.pin_objects if pin.id == id] + return pin[0] + def activate_pin(self, pin: Pin, side: Side) -> None: self.visible_pins[pin] = True if side == Side.LEFT: @@ -285,6 +353,8 @@ class Cable(Component): show_wirenumbers: Optional[bool] = None ignore_in_bom: bool = False additional_components: List[AdditionalComponent] = field(default_factory=list) + connections: List[Connection] = field(default_factory=list) + wire_objects: List[WireClass] = field(default_factory=list) @property def is_autogenerated(self): @@ -354,8 +424,6 @@ def __post_init__(self) -> None: elif self.length_unit is None: self.length_unit = "m" - self.connections = [] - if self.wirecount: # number of wires explicitly defined if self.colors: # use custom color palette (partly or looped if needed) pass @@ -396,6 +464,36 @@ def __post_init__(self) -> None: else: raise Exception("lists of part data are only supported for bundles") + # all checks have passed + wire_tuples = zip_longest( + # TODO: self.wire_ids + self.colors, + self.wirelabels, + ) + for wire_index, (wire_color, wire_label) in enumerate(wire_tuples): + self.wire_objects.append( + WireClass( + index=wire_index, # TODO: wire_id + id=wire_index + 1, # TODO: wire_id + label=wire_label, + color=wire_color, + parent=self.name, + ) + ) + + if self.shield: + index_offset = len(self.wire_objects) + # TODO: add support for multiple shields + self.wire_objects.append( + ShieldClass( + index=index_offset, + id="s", + label="Shield", + color=self.shield if isinstance(self.shield, str) else None, + parent=self.name, + ) + ) + if self.show_name is None: self.show_name = not self.is_autogenerated @@ -407,25 +505,19 @@ def __post_init__(self) -> None: if isinstance(item, dict): self.additional_components[i] = AdditionalComponent(**item) - # The *_pin arguments accept a tuple, but it seems not in use with the current code. + def get_wire_by_id(self, id): + wire = [wire for wire in self.wire_objects if wire.id == id] + if len(wire) == 0: + raise Exception(f"Wire ID {id} not found in {self.name}") + if len(wire) > 1: + raise Exception(f"Wire ID {id} found more than once in {self.name}") + return wire[0] + def connect( - self, - from_name: Optional[Designator], - from_pin: NoneOrMorePinIndices, - via_wire: OneOrMoreWires, - to_name: Optional[Designator], - to_pin: NoneOrMorePinIndices, + self, from_pin_obj: [PinClass], via_wire_id: str, to_pin_obj: [PinClass] ) -> None: - - from_pin = int2tuple(from_pin) - via_wire = int2tuple(via_wire) - to_pin = int2tuple(to_pin) - if len(from_pin) != len(to_pin): - raise Exception("from_pin must have the same number of elements as to_pin") - for i, _ in enumerate(from_pin): - self.connections.append( - Connection(from_name, from_pin[i], via_wire[i], to_name, to_pin[i]) - ) + via_wire_obj = self.get_wire_by_id(via_wire_id) + self.connections.append(Connection(from_pin_obj, via_wire_obj, to_pin_obj)) def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float: if not qty_multiplier: @@ -444,15 +536,6 @@ def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float ) -@dataclass -class Connection: - from_name: Optional[Designator] - from_pin: Optional[Pin] - via_port: Wire - to_name: Optional[Designator] - to_pin: Optional[Pin] - - @dataclass class MatePin: from_name: Designator diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 34b08022..7d7bdc9d 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -140,7 +140,18 @@ def connect( ) # list index starts at 0, wire IDs start at 1 # perform the actual connection - self.cables[via_name].connect(from_name, from_pin, via_wire, to_name, to_pin) + if from_name is not None: + from_con = self.connectors[from_name] + from_pin_obj = from_con.get_pin_by_id(from_pin) + else: + from_pin_obj = None + if to_name is not None: + to_con = self.connectors[to_name] + to_pin_obj = to_con.get_pin_by_id(to_pin) + else: + to_pin_obj = None + + self.cables[via_name].connect(from_pin_obj, via_wire, to_pin_obj) if from_name in self.connectors: self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) if to_name in self.connectors: diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index a844882a..0798bc7e 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -5,7 +5,16 @@ from typing import Any, List, Optional, Union from wireviz import APP_NAME, APP_URL, __version__ -from wireviz.DataClasses import Cable, Color, Component, Connector, Options +from wireviz.DataClasses import ( + Cable, + Color, + Component, + Connection, + Connector, + Options, + ShieldClass, + WireClass, +) from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -154,6 +163,7 @@ def gv_pin_table(component) -> Table: def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector) -> Tr: + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers cell_pin_left = Td(pin_name, port=f"p{pin_index+1}l") cell_pin_label = Td(pin_label, delete_if_empty=True) cell_pin_right = Td(pin_name, port=f"p{pin_index+1}r") @@ -187,61 +197,56 @@ def gv_conductor_table(cable, harness_options) -> Table: rows = [] rows.append(Tr(Td(" "))) # spacer row on top - for i, (connection_color, wirelabel) in enumerate( - zip_longest(cable.colors, cable.wirelabels), 1 - ): + inserted_break_inbetween = False + for wire in cable.wire_objects: + + # insert blank space between wires and shields + if isinstance(wire, ShieldClass) and not inserted_break_inbetween: + rows.append(Tr(Td(" "))) # spacer row between wires and shields + inserted_break_inbetween = True # row above the wire wireinfo = [] - if cable.show_wirenumbers: - wireinfo.append(str(i)) - colorstr = translate_color(connection_color, harness_options.color_mode) - if colorstr: - wireinfo.append(colorstr) - if cable.wirelabels: - wireinfo.append(wirelabel if wirelabel is not None else "") + if cable.show_wirenumbers and not isinstance(wire, ShieldClass): + wireinfo.append(str(wire.id)) + wireinfo.append(translate_color(wire.color, harness_options.color_mode)) + wireinfo.append(wire.label) + + ins, outs = [], [] + for conn in cable.connections: + if conn.via.id == wire.id: + if conn.from_ is not None: + from_label = f":{conn.from_.label}" if conn.from_.label else "" + ins.append(f"{conn.from_.parent}:{conn.from_.id}{from_label}") + if conn.to is not None: + to_label = f":{conn.to.label}" if conn.to.label else "" + outs.append(f"{conn.to.parent}:{conn.to.id}{to_label}") cells_above = [ - Td(f""), - Td(":".join(wireinfo)), - Td(f""), + Td(", ".join(ins)), + Td(":".join([wi for wi in wireinfo if wi is not None])), + Td(", ".join(outs)), ] rows.append(Tr(cells_above)) # the wire itself - color_list = ( - ["#000000"] - + get_color_hex(connection_color, pad=harness_options._pad) - + ["#000000"] - ) - rows.append(Tr(gv_wire_cell(i, color_list))) + rows.append(Tr(gv_wire_cell(wire, padding=harness_options._pad))) # row below the wire # TODO: PN stuff for bundles # wire_pn_stuff() see below - if cable.shield: - rows.append(Tr(Td(" "))) # spacer between wires and shield - # row above the shield - cells_above = [ - Td(""), - Td("Shield"), - Td(""), - ] - rows.append(Tr(cells_above)) - # thw shield itself - if isinstance(cable.shield, str): - color_list = ["#000000"] + get_color_hex(cable.shield) + ["#000000"] - else: - color_list = ["#000000"] - rows.append(Tr(gv_wire_cell("s", color_list))) - rows.append(Tr(Td(" "))) # spacer row on bottom tbl = Table(rows, border=0, cellspacing=0, cellborder=0) return tbl -def gv_wire_cell(index, color_list) -> Td: +def gv_wire_cell(wire: Union[WireClass, ShieldClass], padding) -> Td: + if wire.color: + color_list = ["#000000"] + get_color_hex(wire.color, pad=padding) + ["#000000"] + else: + color_list = ["#000000"] + wire_inner_rows = [] for j, bgcolor in enumerate(color_list[::-1]): wire_inner_cell_attribs = { @@ -257,9 +262,10 @@ def gv_wire_cell(index, color_list) -> Td: "colspan": 3, "border": 0, "cellspacing": 0, - "port": f"w{index}", + "port": f"w{wire.index+1}", "height": 2 * len(color_list), } + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs) return wire_outer_cell @@ -308,69 +314,39 @@ def wire_pn_stuff(): def gv_edge_wire(harness, cable, connection) -> (str, str, str): - if isinstance(connection.via_port, int): + if connection.via.color: # check if it's an actual wire and not a shield - wire_color = get_color_hex( - cable.colors[connection.via_port - 1], pad=harness.options._pad - ) + wire_color = get_color_hex(connection.via.color, pad=harness.options._pad) color = ":".join(["#000000"] + wire_color + ["#000000"]) else: # it's a shield connection # shield is shown with specified color and black borders, or as a thin black wire otherwise - if isinstance(cable.shield, str): - shield_color_hex = get_color_hex(cable.shield)[0] + if connection.via.color: + shield_color_hex = get_color_hex(connection.via.color)[0] shield_color_str = ":".join(["#000000", shield_color_hex, "#000000"]) else: shield_color_str = "#000000" color = shield_color_str - if connection.from_pin is not None: # connect to left - from_connector = harness.connectors[connection.from_name] - from_pin_index = from_connector.pins.index(connection.from_pin) + + if connection.from_ is not None: # connect to left from_port_str = ( - f":p{from_pin_index+1}r" if from_connector.style != "simple" else "" + f":p{connection.from_.index+1}r" + if harness.connectors[connection.from_.parent].style != "simple" + else "" ) - code_left_1 = f"{connection.from_name}{from_port_str}:e" - code_left_2 = f"{cable.name}:w{connection.via_port}:w" - # dot.edge(code_left_1, code_left_2) - if from_connector.show_name: - from_info = [ - str(connection.from_name), - str(connection.from_pin), - ] - if from_connector.pinlabels: - pinlabel = from_connector.pinlabels[from_pin_index] - if pinlabel != "": - from_info.append(pinlabel) - from_string = ":".join(from_info) - - else: - from_string = "" - # html = [ - # row.replace(f"", from_string) - # for row in html - # ] + code_left_1 = f"{connection.from_.parent}{from_port_str}:e" + code_left_2 = f"{connection.via.parent}:w{connection.via.index+1}:w" + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers else: code_left_1, code_left_2 = None, None - if connection.to_pin is not None: # connect to right - to_connector = harness.connectors[connection.to_name] - to_pin_index = to_connector.pins.index(connection.to_pin) - to_port_str = f":p{to_pin_index+1}l" if to_connector.style != "simple" else "" - code_right_1 = f"{cable.name}:w{connection.via_port}:e" - code_right_2 = f"{connection.to_name}{to_port_str}:w" - # dot.edge(code_right_1, code_right_2) - if to_connector.show_name: - to_info = [str(connection.to_name), str(connection.to_pin)] - if to_connector.pinlabels: - pinlabel = to_connector.pinlabels[to_pin_index] - if pinlabel != "": - to_info.append(pinlabel) - to_string = ":".join(to_info) - else: - to_string = "" - # html = [ - # row.replace(f"", to_string) - # for row in html - # ] + if connection.to is not None: # connect to right + to_port_str = ( + f":p{connection.to.index+1}l" + if harness.connectors[connection.from_.parent].style != "simple" + else "" + ) + code_right_1 = f"{connection.via.parent}:w{connection.via.index+1}:e" + code_right_2 = f"{connection.to.parent}{to_port_str}:w" else: code_right_1, code_right_2 = None, None From 9e6d327c158152b5a39c505f1c24cc093c53e5d5 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 19:40:36 +0200 Subject: [PATCH 023/111] Alphabetize HTML tags, improve bgcolor rendering --- src/wireviz/Harness.py | 16 ++++++--------- src/wireviz/wv_gv_html.py | 41 +++++++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 7d7bdc9d..06f6f9d8 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -39,6 +39,7 @@ gv_node_component, html_line_breaks, remove_links, + calculate_node_bgcolor, set_dot_basics, ) from wireviz.wv_helper import ( @@ -164,8 +165,9 @@ def create_graph(self) -> Graph: for connector in self.connectors.values(): # generate connector node gv_html = gv_node_component(connector, self.options) + bgcolor = calculate_node_bgcolor(connector, self.options) dot.node( - connector.name, label=f"<\n{gv_html}\n>", shape="box", style="filled" + connector.name, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", style="filled" ) # generate edges for connector loops if len(connector.loops) > 0: @@ -188,10 +190,9 @@ def create_graph(self) -> Graph: # generate cable node # TODO: PN info for bundles (per wire) gv_html = gv_node_component(cable, self.options) - dot.node(cable.name, label=f"<\n{gv_html}\n>", shape="box") - # style=style, - # fillcolor=translate_color(bgcolor, "HEX"), - # generate edges for wires in cable + bgcolor = calculate_node_bgcolor(cable, self.options) + style = "filled,dashed" if cable.category == "bundle" else "filled" + dot.node(cable.name, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", style=style) for connection in cable.connections: color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection) dot.attr("edge", color=color) @@ -200,11 +201,6 @@ def create_graph(self) -> Graph: if not (r1, r2) == (None, None): dot.edge(r1, r2) - style, bgcolor = ( - ("filled,dashed", self.options.bgcolor_bundle) - if cable.category == "bundle" - else ("filled", self.options.bgcolor_cable) - ) apply_dot_tweaks(dot, self.tweak) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 0798bc7e..10d40898 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -86,16 +86,22 @@ def gv_node_component( line_notes, ] + tbl = nested_table(lines) + + return tbl + + +def calculate_node_bgcolor(component, harness_options): + # assign component node bgcolor at the GraphViz node level + # instead of at the HTML table level for better rendering of node outline if component.bgcolor: - tbl_bgcolor = translate_color(component.bgcolor, "HEX") + return translate_color(component.bgcolor, "HEX") elif isinstance(component, Connector) and harness_options.bgcolor_connector: - tbl_bgcolor = translate_color(harness_options.bgcolor_connector, "HEX") + return translate_color(harness_options.bgcolor_connector, "HEX") + elif isinstance(component, Cable) and component.category == "bundle" and harness_options.bgcolor_bundle: + return translate_color(harness_options.bgcolor_bundle, "HEX") elif isinstance(component, Cable) and harness_options.bgcolor_cable: - tbl_bgcolor = translate_color(harness_options.bgcolor_cable, "HEX") - - tbl = nested_table(lines) - tbl.update_attribs(bgcolor=tbl_bgcolor) - return tbl + return translate_color(harness_options.bgcolor_cable, "HEX") def make_list_of_cells(inp) -> List[Td]: @@ -135,7 +141,7 @@ def nested_table(lines: List[Td]) -> Table: else: # nest cell content inside a table inner_table = Table( - Tr(cells), border=0, cellspacing=0, cellpadding=3, cellborder=1 + Tr(cells), border=0, cellborder=1, cellpadding=3, cellspacing=0 ) rows.append(Tr(Td(inner_table))) @@ -158,7 +164,7 @@ def gv_pin_table(component) -> Table: pin_rows.append( gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) ) - tbl = Table(pin_rows, border=0, cellspacing=0, cellpadding=3, cellborder=1) + tbl = Table(pin_rows, border=0, cellborder=1, cellpadding=3, cellspacing=0) return tbl @@ -237,7 +243,7 @@ def gv_conductor_table(cable, harness_options) -> Table: # wire_pn_stuff() see below rows.append(Tr(Td(" "))) # spacer row on bottom - tbl = Table(rows, border=0, cellspacing=0, cellborder=0) + tbl = Table(rows, border=0, cellborder=0, cellspacing=0) return tbl @@ -250,20 +256,21 @@ def gv_wire_cell(wire: Union[WireClass, ShieldClass], padding) -> Td: wire_inner_rows = [] for j, bgcolor in enumerate(color_list[::-1]): wire_inner_cell_attribs = { - "colspan": 3, + "bgcolor": bgcolor if bgcolor != "" else "BK", + "border": 0, "cellpadding": 0, + "colspan": 3, "height": 2, - "border": 0, - "bgcolor": bgcolor if bgcolor != "" else "BK", } wire_inner_rows.append(Tr(Td("", **wire_inner_cell_attribs))) - wire_inner_table = Table(wire_inner_rows, cellspacing=0, cellborder=0, border=0) + wire_inner_table = Table(wire_inner_rows, border=0, cellborder=0, cellspacing=0) wire_outer_cell_attribs = { - "colspan": 3, "border": 0, "cellspacing": 0, - "port": f"w{wire.index+1}", + "cellpadding": 0, + "colspan": 3, "height": 2 * len(color_list), + "port": f"w{wire.index+1}", } # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs) @@ -386,7 +393,7 @@ def image_and_caption_cells(component: Component) -> (Td, Td): # further nest the image in a table with width/height/fixedsize parameters, and place that table in a cell image_cell_inner.update_attribs(**html_size_attr_dict(component.image)) image_cell = Td( - Table(Tr(image_cell_inner), border=0, cellspacing=0, cellborder=0, id="!") + Table(Tr(image_cell_inner), border=0, cellborder=0, cellspacing=0, id="!") ) else: image_cell = image_cell_inner From fc820079fca2571eb314407366b23c6badcbded3 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 21:44:08 +0200 Subject: [PATCH 024/111] Make mates object-oriented --- src/wireviz/DataClasses.py | 34 ++++++++++++---- src/wireviz/Harness.py | 83 +++++++++++++++----------------------- src/wireviz/wv_gv_html.py | 75 +++++++++++++++++++++++++++++----- 3 files changed, 123 insertions(+), 69 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 2c7758c7..08e5bfbd 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -42,10 +42,18 @@ Side = Enum("Side", "LEFT RIGHT") +ArrowDirection = Enum("ArrowDirection", "NONE BACK FORWARD BOTH") +ArrowWeight = Enum("ArrowWeight", "SINGLE DOUBLE") AUTOGENERATED_PREFIX = "AUTOGENERATED_" +@dataclass +class Arrow: + direction: ArrowDirection + weight: ArrowWeight + + class Metadata(dict): pass @@ -154,6 +162,16 @@ class PinClass: label: str color: str parent: str # designator of parent connector + _anonymous: bool = False # true for pins on autogenerated connectors + _simple: bool = False # true for simple connector + + def __str__(self): + snippets = [ # use str() for each in case they are int or other non-str + str(self.parent) if not self._anonymous else "", + str(self.id) if not self._anonymous and not self._simple else "", + str(self.label) if self.label else "", + ] + return ":".join([snip for snip in snippets if snip != ""]) @dataclass @@ -265,6 +283,8 @@ def __post_init__(self) -> None: label=pin_label, color=pin_color, parent=self.name, + _anonymous=self.is_autogenerated, + _simple=self.style == "simple", ) ) @@ -538,15 +558,13 @@ def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float @dataclass class MatePin: - from_name: Designator - from_pin: Pin - to_name: Designator - to_pin: Pin - shape: str + from_: PinClass + to: PinClass + arrow: Arrow @dataclass class MateComponent: - from_name: Designator - to_name: Designator - shape: str + from_: str # Designator + to: str # Designator + arrow: Arrow diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 06f6f9d8..d084fed5 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -11,6 +11,9 @@ from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz.DataClasses import ( + Arrow, + ArrowDirection, + ArrowWeight, Cable, Connector, MateComponent, @@ -34,12 +37,14 @@ from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( apply_dot_tweaks, + calculate_node_bgcolor, gv_connector_loops, + gv_edge_mate, gv_edge_wire, gv_node_component, html_line_breaks, + parse_arrow_str, remove_links, - calculate_node_bgcolor, set_dot_basics, ) from wireviz.wv_helper import ( @@ -71,13 +76,20 @@ def add_connector(self, name: str, *args, **kwargs) -> None: def add_cable(self, name: str, *args, **kwargs) -> None: self.cables[name] = Cable(name, *args, **kwargs) - def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_type) -> None: - self.mates.append(MatePin(from_name, from_pin, to_name, to_pin, arrow_type)) + def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None: + from_con = self.connectors[from_name] + from_pin_obj = from_con.get_pin_by_id(from_pin) + to_con = self.connectors[to_name] + to_pin_obj = to_con.get_pin_by_id(to_pin) + arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) + + self.mates.append(MatePin(from_pin_obj, to_pin_obj, arrow)) self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) self.connectors[to_name].activate_pin(to_pin, Side.LEFT) - def add_mate_component(self, from_name, to_name, arrow_type) -> None: - self.mates.append(MateComponent(from_name, to_name, arrow_type)) + def add_mate_component(self, from_name, to_name, arrow_str) -> None: + arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) + self.mates.append(MateComponent(from_name, to_name, arrow)) def add_bom_item(self, item: dict) -> None: self.additional_bom_items.append(item) @@ -167,7 +179,11 @@ def create_graph(self) -> Graph: gv_html = gv_node_component(connector, self.options) bgcolor = calculate_node_bgcolor(connector, self.options) dot.node( - connector.name, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", style="filled" + connector.name, + label=f"<\n{gv_html}\n>", + bgcolor=bgcolor, + shape="box", + style="filled", ) # generate edges for connector loops if len(connector.loops) > 0: @@ -192,7 +208,15 @@ def create_graph(self) -> Graph: gv_html = gv_node_component(cable, self.options) bgcolor = calculate_node_bgcolor(cable, self.options) style = "filled,dashed" if cable.category == "bundle" else "filled" - dot.node(cable.name, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", style=style) + dot.node( + cable.name, + label=f"<\n{gv_html}\n>", + bgcolor=bgcolor, + shape="box", + style=style, + ) + + # generate wire edges between component nodes and cable nodes for connection in cable.connections: color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection) dot.attr("edge", color=color) @@ -201,53 +225,10 @@ def create_graph(self) -> Graph: if not (r1, r2) == (None, None): dot.edge(r1, r2) - apply_dot_tweaks(dot, self.tweak) for mate in self.mates: - if mate.shape[0] == "<" and mate.shape[-1] == ">": - dir = "both" - elif mate.shape[0] == "<": - dir = "back" - elif mate.shape[-1] == ">": - dir = "forward" - else: - dir = "none" - - if isinstance(mate, MatePin): - color = "#000000" - elif isinstance(mate, MateComponent): - color = "#000000:#000000" - else: - raise Exception(f"{mate} is an unknown mate") - - from_connector = self.connectors[mate.from_name] - if ( - isinstance(mate, MatePin) - and self.connectors[mate.from_name].style != "simple" - ): - from_pin_index = from_connector.pins.index(mate.from_pin) - from_port_str = f":p{from_pin_index+1}r" - else: # MateComponent or style == 'simple' - from_port_str = "" - - to_connector = self.connectors[mate.to_name] - if ( - isinstance(mate, MatePin) - and self.connectors[mate.to_name].style != "simple" - ): - to_pin_index = to_connector.pins.index(mate.to_pin) - to_port_str = ( - f":p{to_pin_index+1}l" - if isinstance(mate, MatePin) - and self.connectors[mate.to_name].style != "simple" - else "" - ) - else: # MateComponent or style == 'simple' - to_port_str = "" - code_from = f"{mate.from_name}{from_port_str}:e" - to_connector = self.connectors[mate.to_name] - code_to = f"{mate.to_name}{to_port_str}:w" + color, dir, code_from, code_to = gv_edge_mate(mate) dot.attr("edge", color=color, style="dashed", dir=dir) dot.edge(code_from, code_to) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 10d40898..4959d857 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -6,11 +6,16 @@ from wireviz import APP_NAME, APP_URL, __version__ from wireviz.DataClasses import ( + Arrow, + ArrowDirection, + ArrowWeight, Cable, Color, Component, Connection, Connector, + MateComponent, + MatePin, Options, ShieldClass, WireClass, @@ -41,9 +46,16 @@ def gv_node_component( line_pn = part_number_str_list(component) + is_simple_connector = ( + isinstance(component, Connector) and component.style == "simple" + ) + if isinstance(component, Connector): line_info = [ - html_line_breaks(component.type), + Td( + html_line_breaks(component.type), + port="p1l" if is_simple_connector else None, + ), html_line_breaks(component.subtype), f"{component.pincount}-pin" if component.show_pincount else None, translate_color(component.color, harness_options.color_mode), @@ -87,6 +99,7 @@ def gv_node_component( ] tbl = nested_table(lines) + tbl.update_attribs(port="p1r" if is_simple_connector else None) return tbl @@ -98,7 +111,11 @@ def calculate_node_bgcolor(component, harness_options): return translate_color(component.bgcolor, "HEX") elif isinstance(component, Connector) and harness_options.bgcolor_connector: return translate_color(harness_options.bgcolor_connector, "HEX") - elif isinstance(component, Cable) and component.category == "bundle" and harness_options.bgcolor_bundle: + elif ( + isinstance(component, Cable) + and component.category == "bundle" + and harness_options.bgcolor_bundle + ): return translate_color(harness_options.bgcolor_bundle, "HEX") elif isinstance(component, Cable) and harness_options.bgcolor_cable: return translate_color(harness_options.bgcolor_cable, "HEX") @@ -222,16 +239,14 @@ def gv_conductor_table(cable, harness_options) -> Table: for conn in cable.connections: if conn.via.id == wire.id: if conn.from_ is not None: - from_label = f":{conn.from_.label}" if conn.from_.label else "" - ins.append(f"{conn.from_.parent}:{conn.from_.id}{from_label}") + ins.append(str(conn.from_)) if conn.to is not None: - to_label = f":{conn.to.label}" if conn.to.label else "" - outs.append(f"{conn.to.parent}:{conn.to.id}{to_label}") + outs.append(str(conn.to)) cells_above = [ - Td(", ".join(ins)), - Td(":".join([wi for wi in wireinfo if wi is not None])), - Td(", ".join(outs)), + Td(", ".join(ins), align="left"), + Td(":".join([wi for wi in wireinfo if wi is not None and wi != ""])), + Td(", ".join(outs), align="right"), ] rows.append(Tr(cells_above)) @@ -349,7 +364,7 @@ def gv_edge_wire(harness, cable, connection) -> (str, str, str): if connection.to is not None: # connect to right to_port_str = ( f":p{connection.to.index+1}l" - if harness.connectors[connection.from_.parent].style != "simple" + if harness.connectors[connection.to.parent].style != "simple" else "" ) code_right_1 = f"{connection.via.parent}:w{connection.via.index+1}:e" @@ -360,6 +375,46 @@ def gv_edge_wire(harness, cable, connection) -> (str, str, str): return color, code_left_1, code_left_2, code_right_1, code_right_2 +def parse_arrow_str(inp: str) -> ArrowDirection: + if inp[0] == "<" and inp[-1] == ">": + return ArrowDirection.BOTH + elif inp[0] == "<": + return ArrowDirection.BACK + elif inp[-1] == ">": + return ArrowDirection.FORWARD + else: + return ArrowDirection.NONE + + +def gv_edge_mate(mate) -> (str, str, str, str): + if mate.arrow.weight == ArrowWeight.SINGLE: + color = "#000000" + elif mate.arrow.weight == ArrowWeight.DOUBLE: + color = "#000000:#000000" + + dir = mate.arrow.direction.name.lower() + + if isinstance(mate, MatePin): + from_pin_index = mate.from_.index + from_port_str = f":p{from_pin_index+1}r" + from_designator = mate.from_.parent + to_pin_index = mate.to.index + to_port_str = f":p{to_pin_index+1}l" + to_designator = mate.to.parent + elif isinstance(mate, MateComponent): + from_designator = mate.from_ + from_port_str = "" + to_designator = mate.to + to_port_str = "" + else: + raise Exception(f"Unknown type of mate:\n{mate}") + + code_from = f"{from_designator}{from_port_str}:e" + code_to = f"{to_designator}{to_port_str}:w" + + return color, dir, code_from, code_to + + def colored_cell(contents, bgcolor) -> Td: return Td(contents, bgcolor=translate_color(bgcolor, "HEX")) From 9b40858d56a7a866f5985465b8856812f983a733 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 21:44:14 +0200 Subject: [PATCH 025/111] Add `devtools.txt` --- devtools.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 devtools.txt diff --git a/devtools.txt b/devtools.txt new file mode 100644 index 00000000..5343d7a0 --- /dev/null +++ b/devtools.txt @@ -0,0 +1,11 @@ +# The following tools have proven useful during development +# Feel free to install while inside the WireViz virtualenv, using: +# pip install -r devtools.txt + +# Code formatting +black +isort + +# Development aids +pudb # visual python debugger +autoflake # to be tested From 21bfebb9b47a20a1490d8b8e8211a71c8ebac55a Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 21:46:43 +0200 Subject: [PATCH 026/111] Run `autoflake -i` --- src/wireviz/DataClasses.py | 5 ++--- src/wireviz/Harness.py | 3 --- src/wireviz/wv_gv_html.py | 2 +- src/wireviz/wv_helper.py | 2 +- src/wireviz/wv_table_util.py | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 08e5bfbd..38777066 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- -from dataclasses import InitVar, dataclass, field -from enum import Enum, auto +from dataclasses import dataclass, field +from enum import Enum from itertools import zip_longest -from pathlib import Path from typing import Dict, List, Optional, Tuple, Union from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index d084fed5..e5dc1dad 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -import re -from collections import Counter from dataclasses import dataclass from itertools import zip_longest from pathlib import Path -from typing import Any, List, Union from graphviz import Graph diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 4959d857..c001ff8e 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -2,7 +2,7 @@ import re from itertools import zip_longest -from typing import Any, List, Optional, Union +from typing import Any, List, Union from wireviz import APP_NAME, APP_URL, __version__ from wireviz.DataClasses import ( diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index 8c46299c..fdc1e7a3 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -2,7 +2,7 @@ import re from pathlib import Path -from typing import Dict, List, Optional +from typing import List, Optional awg_equiv_table = { "0.09": "28", diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index 6de208c0..1c4b750e 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -2,7 +2,7 @@ from collections.abc import Iterable from dataclasses import dataclass, field -from typing import Dict, List, Optional +from typing import Dict indent_count = 1 From ebd271d54c7eb79c168b92aeb88342df47fc9270 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 21:47:40 +0200 Subject: [PATCH 027/111] Run `autoflake -i --remove-all-unused-imports` --- src/wireviz/DataClasses.py | 2 +- src/wireviz/Harness.py | 15 --------------- src/wireviz/wv_gv_html.py | 5 +---- 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 38777066..06d5a8d3 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -6,7 +6,7 @@ from typing import Dict, List, Optional, Tuple, Union from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme -from wireviz.wv_helper import aspect_ratio, awg_equiv, int2tuple, mm2_equiv +from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv # Each type alias have their legal values described in comments - validation might be implemented in the future PlainText = str # Text not containing HTML tags nor newlines diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index e5dc1dad..46063d02 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -1,15 +1,12 @@ # -*- coding: utf-8 -*- from dataclasses import dataclass -from itertools import zip_longest from pathlib import Path from graphviz import Graph -from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz.DataClasses import ( Arrow, - ArrowDirection, ArrowWeight, Cable, Connector, @@ -22,16 +19,9 @@ ) from wireviz.svgembed import embed_svg_images_file from wireviz.wv_bom import ( - HEADER_MPN, - HEADER_PN, - HEADER_SPN, bom_list, - component_table_entry, generate_bom, - get_additional_component_table, - pn_info_string, ) -from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( apply_dot_tweaks, calculate_node_bgcolor, @@ -39,15 +29,10 @@ gv_edge_mate, gv_edge_wire, gv_node_component, - html_line_breaks, parse_arrow_str, - remove_links, set_dot_basics, ) from wireviz.wv_helper import ( - flatten2d, - is_arrow, - open_file_read, open_file_write, tuplelist2tsv, ) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index c001ff8e..69ef63d7 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -6,13 +6,10 @@ from wireviz import APP_NAME, APP_URL, __version__ from wireviz.DataClasses import ( - Arrow, ArrowDirection, ArrowWeight, Cable, - Color, Component, - Connection, Connector, MateComponent, MatePin, @@ -470,7 +467,7 @@ def image_and_caption_cells(component: Component) -> (Td, Td): def html_size_attr_dict(image): # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object - from wireviz.DataClasses import Image + pass attr_dict = {} if image: From 94f9d9619782db0a4c49803b5e718df56dfe2d26 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 21:49:31 +0200 Subject: [PATCH 028/111] Add sample use to `devtools.txt` --- devtools.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/devtools.txt b/devtools.txt index 5343d7a0..7d11556d 100644 --- a/devtools.txt +++ b/devtools.txt @@ -3,9 +3,9 @@ # pip install -r devtools.txt # Code formatting -black -isort +black # black src/wireviz/*.py +isort # isort src/wireviz/*py # Development aids -pudb # visual python debugger -autoflake # to be tested +pudb # import pudb; pudb.set_trace() +autoflake # autoflake -i --remove-all-unused-imports src/wireviz/*.py From 8200e891d051234e831fb0cdd13139f32f0170c7 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 22:48:30 +0200 Subject: [PATCH 029/111] Streamline assignment of ports to simple connectors --- src/wireviz/Harness.py | 10 ++-------- src/wireviz/wv_gv_html.py | 14 +++++++++----- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 46063d02..8c6572f4 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -18,10 +18,7 @@ Tweak, ) from wireviz.svgembed import embed_svg_images_file -from wireviz.wv_bom import ( - bom_list, - generate_bom, -) +from wireviz.wv_bom import bom_list, generate_bom from wireviz.wv_gv_html import ( apply_dot_tweaks, calculate_node_bgcolor, @@ -32,10 +29,7 @@ parse_arrow_str, set_dot_basics, ) -from wireviz.wv_helper import ( - open_file_write, - tuplelist2tsv, -) +from wireviz.wv_helper import open_file_write, tuplelist2tsv from wireviz.wv_html import generate_html_output diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 69ef63d7..e6ed54de 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -49,10 +49,7 @@ def gv_node_component( if isinstance(component, Connector): line_info = [ - Td( - html_line_breaks(component.type), - port="p1l" if is_simple_connector else None, - ), + html_line_breaks(component.type), html_line_breaks(component.subtype), f"{component.pincount}-pin" if component.show_pincount else None, translate_color(component.color, harness_options.color_mode), @@ -96,7 +93,14 @@ def gv_node_component( ] tbl = nested_table(lines) - tbl.update_attribs(port="p1r" if is_simple_connector else None) + if is_simple_connector: + # Simple connectors have no pin table, and therefore, no ports to attach wires to. + # Manually assign left and right ports here if required. + # Use table itself for right port, and the first cell for left port. + # Even if the table only has one cell, two separate ports can still be assigned. + tbl.update_attribs(port="p1r") + first_cell_in_tbl = tbl.contents[0].contents + first_cell_in_tbl.update_attribs(port="p1l") return tbl From 03518abdcd86b463e206afb7cda74c737f104c2f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 23:05:38 +0200 Subject: [PATCH 030/111] Add `cleanup.sh` (maybe move/delete later? or add commit hook?) --- cleanup.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 cleanup.sh diff --git a/cleanup.sh b/cleanup.sh new file mode 100755 index 00000000..9c774be4 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,5 @@ +#!/bin/zsh + +autoflake -i --remove-all-unused-imports src/wireviz/*.py +isort src/wireviz/*py +black src/wireviz/*.py From 1b31a6f044bd9742befabfc6cd681d34a3fb0544 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Wed, 20 Oct 2021 03:51:37 +0200 Subject: [PATCH 031/111] Implement color objects --- src/wireviz/wv_colors_new.py | 199 +++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 src/wireviz/wv_colors_new.py diff --git a/src/wireviz/wv_colors_new.py b/src/wireviz/wv_colors_new.py new file mode 100644 index 00000000..24fdee99 --- /dev/null +++ b/src/wireviz/wv_colors_new.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- + +from collections import namedtuple +from dataclasses import dataclass, field +from enum import Enum +from typing import List + +KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") +ColorOutputMode = Enum("ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER") + +known_colors = { + "BK": KnownColor("#000000", "sw", "black", "schwarz"), + "WH": KnownColor("#ffffff", "ws", "white", "weiß"), + "GY": KnownColor("#999999", "gr", "grey", "grau"), + "PK": KnownColor("#ff66cc", "rs", "pink", "rosa"), + "RD": KnownColor("#ff0000", "rt", "red", "rot"), + "OG": KnownColor("#ff8000", "or", "orange", "orange"), + "YE": KnownColor("#ffff00", "ge", "yellow", "gelb"), + "OL": KnownColor("#708000", "ol", "olive green", "olivgrün"), + "GN": KnownColor("#00ff00", "gn", "green", "grün"), + "TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"), + "LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"), + "BU": KnownColor("#0066ff", "bl", "blue", "blau"), + "VT": KnownColor("#8000ff", "vi", "violet", "violett"), + "BN": KnownColor("#895956", "br", "brown", "braun"), + "BG": KnownColor("#ceb673", "bg", "beige", "beige"), + "IV": KnownColor("#f5f0d0", "eb", "ivory", "elfenbein"), + "SL": KnownColor("#708090", "si", "slate", "schiefer"), + "CU": KnownColor("#d6775e", "ku", "copper", "Kupfer"), + "SN": KnownColor("#aaaaaa", "vz", "tin", "verzinkt"), + "SR": KnownColor("#84878c", "ag", "silver", "Silber"), + "GD": KnownColor("#ffcf80", "au", "gold", "Gold"), +} + +color_output_mode = ColorOutputMode.EN_UPPER +padding_amount = 1 + +def convert_case(inp): + if "_LOWER" in color_output_mode.name: + return inp.lower() + elif "_UPPER" in color_output_mode.name: + return inp.upper() + else: # currently not used + return inp + +@dataclass +class SingleColor(): + _code_en: str + _code_de: str + _html: str + + @property + def code_en(self): + return convert_case(self._code_en) + # repeat for _code_de, _html + + @property + def code_de(self): + return convert_case(self._code_de) + # repeat for _code_de, _html + + @property + def html(self): + return convert_case(self._html) + # repeat for _code_de, _html + + @property + def known(self): + return self.code_en.upper() in known_colors.keys() + + def __init__(self, inp): + if isinstance(inp, int): + hex_str = f"#{inp:06x}" + self._html = hex_str + self._code_en = hex_str # do not perform reverse lookup + self._code_de = hex_str + elif inp.upper() in known_colors.keys(): + inp_upper = inp.upper() + self._code_en = inp_upper + self._code_de = known_colors[inp_upper].code_de + self._html = known_colors[inp_upper].html + else: # assume valid HTML color + self._html = inp + self._code_en = inp + self._code_de = inp + + @property + def html_padded(self): + return ":".join([self.html] * padding_amount) + + def __str__(self): + if self.known and "EN_" in color_output_mode.name: + return self.code_en + elif self.known and "DE_" in color_output_mode.name: + return self.code_de + else: + return self.html + +@dataclass +class MultiColor(): + colors: List[SingleColor] = field(default_factory=list) + + def __init__(self, inp): + self.colors = [] + if isinstance(inp, List): # input is already a list + for item in inp: + if isinstance(item, SingleColor): + self.colors.append(item) + else: # string + self.colors.append(SingleColor(item)) + elif isinstance(inp, SingleColor): # single color + self.colors = [inp] + else: # split input into list + if ":" in str(inp): + self.colors = [SingleColor(item) for item in inp.split(":")] + else: + if isinstance(inp, int): + self.colors = [SingleColor(inp)] + elif len(inp) % 2 == 0: + items = [inp[i:i+2] for i in range(0, len(inp), 2)] + known = [item.upper() in known_colors.keys() for item in items] + if all(known): + self.colors = [SingleColor(item) for item in items] + else: # assume it's a HTML color name + self.colors = [SingleColor(inp)] + else: # assume it's a HTML color name + self.colors = [SingleColor(inp)] + + + def __len__(self): + return len(self.colors) + + def __str__(self): + if "EN_" in color_output_mode.name or "DE_" in color_output_mode.name: + joiner = "" if self.all_known else ":" + elif "HTML_" in color_output_mode.name: + joiner = ":" + else: + joiner = "???" + return joiner.join([str(color) for color in self.colors]) + + @property + def all_known(self): + return all([color.known for color in self.colors]) + + @property + def html(self): + return ":".join([color.html for color in self.colors]) + + @property + def html_padded(self): + if len(self) == 0: + out = [] + elif len(self) == 1: + out = [self.colors[0] for i in range(3)] + elif len(self) == 2: + out = [self.colors[0], self.colors[1], self.colors[0]] + elif len(self) == 3: + out = self.colors + else: + raise Exception(f"Padding not supported for len {len(selfq)}") + return ":".join([str(color) for color in out]) + +COLOR_CODES = { + # fmt: off + "DIN": [ + "WH", "BN", "GN", "YE", "GY", "PK", "BU", "RD", "BK", "VT", "GYPK", "RDBU", + "WHGN", "BNGN", "WHYE", "YEBN", "WHGY", "GYBN", "WHPK", "PKBN", "WHBU", "BNBU", + "WHRD", "BNRD", "WHBK", "BNBK", "GYGN", "YEGY", "PKGN", "YEPK", "GNBU", "YEBU", + "GNRD", "YERD", "GNBK", "YEBK", "GYBU", "PKBU", "GYRD", "PKRD", "GYBK", "PKBK", + "BUBK", "RDBK", "WHBNBK", "YEGNBK", "GYPKBK", "RDBUBK", "WHGNBK", "BNGNBK", + "WHYEBK", "YEBNBK", "WHGYBK", "GYBNBK", "WHPKBK", "PKBNBK", "WHBUBK", + "BNBUBK", "WHRDBK", "BNRDBK", + ], + # fmt: on + "IEC": ["BN", "RD", "OG", "YE", "GN", "BU", "VT", "GY", "WH", "BK"], + "BW": ["BK", "WH"], + # 25-pair color code - see also https://en.wikipedia.org/wiki/25-pair_color_code + # 5 major colors (WH,RD,BK,YE,VT) combined with 5 minor colors (BU,OG,GN,BN,SL). + # Each POTS pair tip (+) had major/minor color, and ring (-) had minor/major color. + # fmt: off + "TEL": [ # 25x2: Ring and then tip of each pair + "BUWH", "WHBU", "OGWH", "WHOG", "GNWH", "WHGN", "BNWH", "WHBN", "SLWH", "WHSL", + "BURD", "RDBU", "OGRD", "RDOG", "GNRD", "RDGN", "BNRD", "RDBN", "SLRD", "RDSL", + "BUBK", "BKBU", "OGBK", "BKOG", "GNBK", "BKGN", "BNBK", "BKBN", "SLBK", "BKSL", + "BUYE", "YEBU", "OGYE", "YEOG", "GNYE", "YEGN", "BNYE", "YEBN", "SLYE", "YESL", + "BUVT", "VTBU", "OGVT", "VTOG", "GNVT", "VTGN", "BNVT", "VTBN", "SLVT", "VTSL", + ], + "TELALT": [ # 25x2: Tip and then ring of each pair + "WHBU", "BU", "WHOG", "OG", "WHGN", "GN", "WHBN", "BN", "WHSL", "SL", + "RDBU", "BURD", "RDOG", "OGRD", "RDGN", "GNRD", "RDBN", "BNRD", "RDSL", "SLRD", + "BKBU", "BUBK", "BKOG", "OGBK", "BKGN", "GNBK", "BKBN", "BNBK", "BKSL", "SLBK", + "YEBU", "BUYE", "YEOG", "OGYE", "YEGN", "GNYE", "YEBN", "BNYE", "YESL", "SLYE", + "VTBU", "BUVT", "VTOG", "OGVT", "VTGN", "GNVT", "VTBN", "BNVT", "VTSL", "SLVT", + ], + # fmt: on + "T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"], + "T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"], +} From e95f4bd53b6c6060011ba2626509d79b332ce49a Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Wed, 20 Oct 2021 20:14:10 +0200 Subject: [PATCH 032/111] Use color objects in WireViz --- src/wireviz/DataClasses.py | 91 ++++++--- src/wireviz/Harness.py | 21 +- src/wireviz/wv_bom.py | 11 +- src/wireviz/wv_colors.py | 365 +++++++++++++++++++---------------- src/wireviz/wv_colors_new.py | 199 ------------------- src/wireviz/wv_gv_html.py | 86 ++++----- src/wireviz/wv_html.py | 2 +- 7 files changed, 313 insertions(+), 462 deletions(-) delete mode 100644 src/wireviz/wv_colors_new.py diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 06d5a8d3..d5a2bda4 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -5,7 +5,13 @@ from itertools import zip_longest from typing import Dict, List, Optional, Tuple, Union -from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme +from wireviz.wv_colors import ( + COLOR_CODES, + ColorOutputMode, + MultiColor, + SingleColor, + get_color_by_colorcode_index, +) from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv # Each type alias have their legal values described in comments - validation might be implemented in the future @@ -60,12 +66,12 @@ class Metadata(dict): @dataclass class Options: fontname: PlainText = "arial" - bgcolor: Color = "WH" - bgcolor_node: Optional[Color] = "WH" - bgcolor_connector: Optional[Color] = None - bgcolor_cable: Optional[Color] = None - bgcolor_bundle: Optional[Color] = None - color_mode: ColorMode = "SHORT" + bgcolor: SingleColor = "WH" # will be converted to SingleColor in __post_init__ + bgcolor_node: SingleColor = "WH" + bgcolor_connector: SingleColor = None + bgcolor_cable: SingleColor = None + bgcolor_bundle: SingleColor = None + color_mode: ColorOutputMode = ColorOutputMode.EN_UPPER mini_bom_mode: bool = True template_separator: str = "." _pad: int = 0 @@ -74,6 +80,13 @@ class Options: _image_paths: [List] = field(default_factory=list) def __post_init__(self): + + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_node = SingleColor(self.bgcolor_node) + self.bgcolor_connector = SingleColor(self.bgcolor_connector) + self.bgcolor_cable = SingleColor(self.bgcolor_cable) + self.bgcolor_bundle = SingleColor(self.bgcolor_bundle) + if not self.bgcolor_node: self.bgcolor_node = self.bgcolor if not self.bgcolor_connector: @@ -99,13 +112,15 @@ class Image: width: Optional[int] = None height: Optional[int] = None fixedsize: Optional[bool] = None - bgcolor: Optional[Color] = None + bgcolor: SingleColor = None # Contents of the text cell \n" - for item in bom[0]: - th_class = f"bom_col_{item.lower()}" - bom_header_html = f'{bom_header_html} \n' - bom_header_html = f"{bom_header_html} \n" - - # generate BOM contents - bom_contents = [] - for row in bom[1:]: - row_html = " \n" - for i, item in enumerate(row): - td_class = f"bom_col_{bom[0][i].lower()}" - row_html = f'{row_html} \n' - row_html = f"{row_html} \n" - bom_contents.append(row_html) - - bom_html = ( - '
@@ -103,7 +103,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _ferrule_crimp_12 [label=< + AUTOGENERATED_F_12 [label=< - -
@@ -113,23 +113,23 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] edge [color="#000000:#895956:#000000"] - _ferrule_crimp_1:e -- W1:w1:w - W1:w1:e -- _ferrule_crimp_7:w + AUTOGENERATED_F_1:e -- W1:w1:w + W1:w1:e -- AUTOGENERATED_F_7:w edge [color="#000000:#ff0000:#000000"] - _ferrule_crimp_2:e -- W1:w2:w - W1:w2:e -- _ferrule_crimp_8:w + AUTOGENERATED_F_2:e -- W1:w2:w + W1:w2:e -- AUTOGENERATED_F_8:w edge [color="#000000:#ff8000:#000000"] - _ferrule_crimp_3:e -- W1:w3:w - W1:w3:e -- _ferrule_crimp_9:w + AUTOGENERATED_F_3:e -- W1:w3:w + W1:w3:e -- AUTOGENERATED_F_9:w edge [color="#000000:#ffff00:#000000"] - _ferrule_crimp_4:e -- W1:w4:w - W1:w4:e -- _ferrule_crimp_10:w + AUTOGENERATED_F_4:e -- W1:w4:w + W1:w4:e -- AUTOGENERATED_F_10:w edge [color="#000000:#00ff00:#000000"] - _ferrule_crimp_5:e -- W1:w5:w - W1:w5:e -- _ferrule_crimp_11:w + AUTOGENERATED_F_5:e -- W1:w5:w + W1:w5:e -- AUTOGENERATED_F_11:w edge [color="#000000:#0066ff:#000000"] - _ferrule_crimp_6:e -- W1:w6:w - W1:w6:e -- _ferrule_crimp_12:w + AUTOGENERATED_F_6:e -- W1:w6:w + W1:w6:e -- AUTOGENERATED_F_12:w W1 [label=< +
diff --git a/examples/ex04.html b/examples/ex04.html index a1e3e39f..cd0d4a41 100644 --- a/examples/ex04.html +++ b/examples/ex04.html @@ -1,22 +1,45 @@ - - - ex04 - + + + ex04 + +

ex04

Diagram

- - + + +
+ + - + -_ferrule_crimp_1 +AUTOGENERATED_F_1 Crimp ferrule @@ -60,226 +83,238 @@

Diagram

  - + -_ferrule_crimp_1:e--W1:w +AUTOGENERATED_F_1:e--W1:w - + -_ferrule_crimp_2 +AUTOGENERATED_F_2 Crimp ferrule - + -_ferrule_crimp_2:e--W1:w +AUTOGENERATED_F_2:e--W1:w - + -_ferrule_crimp_3 +AUTOGENERATED_F_3 Crimp ferrule - + -_ferrule_crimp_3:e--W1:w +AUTOGENERATED_F_3:e--W1:w - + -_ferrule_crimp_4 +AUTOGENERATED_F_4 Crimp ferrule - + -_ferrule_crimp_4:e--W1:w +AUTOGENERATED_F_4:e--W1:w - + -_ferrule_crimp_5 +AUTOGENERATED_F_5 Crimp ferrule - + -_ferrule_crimp_5:e--W1:w +AUTOGENERATED_F_5:e--W1:w - + -_ferrule_crimp_6 +AUTOGENERATED_F_6 Crimp ferrule - + -_ferrule_crimp_6:e--W1:w +AUTOGENERATED_F_6:e--W1:w - + -_ferrule_crimp_7 +AUTOGENERATED_F_7 Crimp ferrule - + -_ferrule_crimp_8 +AUTOGENERATED_F_8 Crimp ferrule - + -_ferrule_crimp_9 +AUTOGENERATED_F_9 Crimp ferrule - + -_ferrule_crimp_10 +AUTOGENERATED_F_10 Crimp ferrule - + -_ferrule_crimp_11 +AUTOGENERATED_F_11 Crimp ferrule - + -_ferrule_crimp_12 +AUTOGENERATED_F_12 Crimp ferrule - + -W1:e--_ferrule_crimp_7:w +W1:e--AUTOGENERATED_F_7:w - + -W1:e--_ferrule_crimp_8:w +W1:e--AUTOGENERATED_F_8:w - + -W1:e--_ferrule_crimp_9:w +W1:e--AUTOGENERATED_F_9:w - + -W1:e--_ferrule_crimp_10:w +W1:e--AUTOGENERATED_F_10:w - + -W1:e--_ferrule_crimp_11:w +W1:e--AUTOGENERATED_F_11:w - + -W1:e--_ferrule_crimp_12:w +W1:e--AUTOGENERATED_F_12:w + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule12
2Wire, 0.25 mm², BN0.2mW1
3Wire, 0.25 mm², BU0.2mW1
4Wire, 0.25 mm², GN0.2mW1
5Wire, 0.25 mm², OG0.2mW1
6Wire, 0.25 mm², RD0.2mW1
7Wire, 0.25 mm², YE0.2mW1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule12
2Wire, 0.25 mm², BN0.2mW1
3Wire, 0.25 mm², BU0.2mW1
4Wire, 0.25 mm², GN0.2mW1
5Wire, 0.25 mm², OG0.2mW1
6Wire, 0.25 mm², RD0.2mW1
7Wire, 0.25 mm², YE0.2mW1
+ + + diff --git a/examples/ex04.svg b/examples/ex04.svg index 19174c3d..fe8bb932 100644 --- a/examples/ex04.svg +++ b/examples/ex04.svg @@ -1,16 +1,16 @@ - - + -_ferrule_crimp_1 +AUTOGENERATED_F_1 Crimp ferrule @@ -54,163 +54,163 @@   - + -_ferrule_crimp_1:e--W1:w +AUTOGENERATED_F_1:e--W1:w - + -_ferrule_crimp_2 +AUTOGENERATED_F_2 Crimp ferrule - + -_ferrule_crimp_2:e--W1:w +AUTOGENERATED_F_2:e--W1:w - + -_ferrule_crimp_3 +AUTOGENERATED_F_3 Crimp ferrule - + -_ferrule_crimp_3:e--W1:w +AUTOGENERATED_F_3:e--W1:w - + -_ferrule_crimp_4 +AUTOGENERATED_F_4 Crimp ferrule - + -_ferrule_crimp_4:e--W1:w +AUTOGENERATED_F_4:e--W1:w - + -_ferrule_crimp_5 +AUTOGENERATED_F_5 Crimp ferrule - + -_ferrule_crimp_5:e--W1:w +AUTOGENERATED_F_5:e--W1:w - + -_ferrule_crimp_6 +AUTOGENERATED_F_6 Crimp ferrule - + -_ferrule_crimp_6:e--W1:w +AUTOGENERATED_F_6:e--W1:w - + -_ferrule_crimp_7 +AUTOGENERATED_F_7 Crimp ferrule - + -_ferrule_crimp_8 +AUTOGENERATED_F_8 Crimp ferrule - + -_ferrule_crimp_9 +AUTOGENERATED_F_9 Crimp ferrule - + -_ferrule_crimp_10 +AUTOGENERATED_F_10 Crimp ferrule - + -_ferrule_crimp_11 +AUTOGENERATED_F_11 Crimp ferrule - + -_ferrule_crimp_12 +AUTOGENERATED_F_12 Crimp ferrule - + -W1:e--_ferrule_crimp_7:w +W1:e--AUTOGENERATED_F_7:w - + -W1:e--_ferrule_crimp_8:w +W1:e--AUTOGENERATED_F_8:w - + -W1:e--_ferrule_crimp_9:w +W1:e--AUTOGENERATED_F_9:w - + -W1:e--_ferrule_crimp_10:w +W1:e--AUTOGENERATED_F_10:w - + -W1:e--_ferrule_crimp_11:w +W1:e--AUTOGENERATED_F_11:w - + -W1:e--_ferrule_crimp_12:w +W1:e--AUTOGENERATED_F_12:w diff --git a/examples/ex05.html b/examples/ex05.html index 7865b886..5be09bd3 100644 --- a/examples/ex05.html +++ b/examples/ex05.html @@ -1,13 +1,36 @@ - - - ex05 - + + + ex05 + +

ex05

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins3X1, X2, X3
2Wire, I2C, 0.25 mm², PK0.4mW1, W2
3Wire, I2C, 0.25 mm², TQ0.4mW1, W2
4Wire, I2C, 0.25 mm², VT0.4mW1, W2
5Wire, I2C, 0.25 mm², YE0.4mW1, W2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins3X1, X2, X3
2Wire, I2C, 0.25 mm², PK0.4mW1, W2
3Wire, I2C, 0.25 mm², TQ0.4mW1, W2
4Wire, I2C, 0.25 mm², VT0.4mW1, W2
5Wire, I2C, 0.25 mm², YE0.4mW1, W2
+ + + diff --git a/examples/ex05.svg b/examples/ex05.svg index abfa6ec7..6d4e75f7 100644 --- a/examples/ex05.svg +++ b/examples/ex05.svg @@ -1,7 +1,7 @@ - - - - ex06 - + + + ex06 + +

ex06

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins6X1, X2, X3, X4, X5, X6
2Wire, 0.25 mm², PK1.0mW1, W2, W3, W4, W5
3Wire, 0.25 mm², TQ1.0mW1, W2, W3, W4, W5
4Wire, 0.25 mm², VT1.0mW1, W2, W3, W4, W5
5Wire, 0.25 mm², YE1.0mW1, W2, W3, W4, W5
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins6X1, X2, X3, X4, X5, X6
2Wire, 0.25 mm², PK1.0mW1, W2, W3, W4, W5
3Wire, 0.25 mm², TQ1.0mW1, W2, W3, W4, W5
4Wire, 0.25 mm², VT1.0mW1, W2, W3, W4, W5
5Wire, 0.25 mm², YE1.0mW1, W2, W3, W4, W5
+ + + diff --git a/examples/ex06.svg b/examples/ex06.svg index 1dc1a5c6..fa1c3785 100644 --- a/examples/ex06.svg +++ b/examples/ex06.svg @@ -1,7 +1,7 @@ - - - - ex07 - + + + ex07 + +

ex07

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 2 x 20 AWG1mC1
2Connector, D-Sub, female, 9 pins1X2
3Connector, TE 776164-1, female, 35 pins1X1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 2 x 20 AWG1mC1
2Connector, D-Sub, female, 9 pins1X2
3Connector, TE 776164-1, female, 35 pins1X1
+ + + diff --git a/examples/ex07.svg b/examples/ex07.svg index 02d8378f..2c92ead0 100644 --- a/examples/ex07.svg +++ b/examples/ex07.svg @@ -1,7 +1,7 @@ -
- +
@@ -135,7 +135,7 @@ graph {
- +
diff --git a/examples/ex08.html b/examples/ex08.html index b23a1a95..cd62b4af 100644 --- a/examples/ex08.html +++ b/examples/ex08.html @@ -1,13 +1,36 @@ - - - ex08 - + + + ex08 + +

ex08

Diagram

- - + + +
+ + Diagram S - + Tip, Ring, and Sleeve @@ -83,7 +106,7 @@

Diagram

  - + Cross-section @@ -117,28 +140,40 @@

Diagram

+ +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 3 x 24 AWG shielded, BK0.2mW1
2Connector, Phone Connector, male 3.51Key
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 3 x 24 AWG shielded, BK0.2mW1
2Connector, Phone Connector, male 3.51Key
+ + + diff --git a/examples/ex08.svg b/examples/ex08.svg index 3355f082..78ab558e 100644 --- a/examples/ex08.svg +++ b/examples/ex08.svg @@ -1,7 +1,7 @@ - S - + Tip, Ring, and Sleeve @@ -77,7 +77,7 @@   - + Cross-section diff --git a/examples/ex09.html b/examples/ex09.html index e0fe77b5..8c6a6fe0 100644 --- a/examples/ex09.html +++ b/examples/ex09.html @@ -1,13 +1,36 @@ - - - ex09 - + + + ex09 + +

ex09

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 12 x 0.25 mm² shielded0.2mW1
2Connector, D-Sub, male, 25 pins1X1
3Connector, F48, female, 48 pins1X2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 12 x 0.25 mm² shielded0.2mW1
2Connector, D-Sub, male, 25 pins1X1
3Connector, F48, female, 48 pins1X2
+ + + diff --git a/examples/ex09.svg b/examples/ex09.svg index 607a6935..e5e5c7cc 100644 --- a/examples/ex09.svg +++ b/examples/ex09.svg @@ -1,7 +1,7 @@ - - - - ex10 - + + + ex10 + +

ex10

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, CAT5e, 8 x 24 AWG1mW1
2Connector, Stewart Connector SS-37000-002, male, 8 pins2X1, X2
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, CAT5e, 8 x 24 AWG1mW1
2Connector, Stewart Connector SS-37000-002, male, 8 pins2X1, X2
+ + + diff --git a/examples/ex10.svg b/examples/ex10.svg index d0e302f1..abc7168f 100644 --- a/examples/ex10.svg +++ b/examples/ex10.svg @@ -1,7 +1,7 @@ - +
+
+ + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_2 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_3 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_4 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X1 [label=< + + + + +
+ + +
X1
+
+ + + + + + +
Screw connectormale4-pinGN
+
+ + + + + + + + + + + + + + + + + +
1A
2B
3C
4D
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#000000:#000000"] + W1:w1:e -- AUTOGENERATED_F_1:w + edge [color="#000000:#ffffff:#000000"] + W1:w2:e -- AUTOGENERATED_F_2:w + edge [color="#000000:#0066ff:#000000"] + W1:w3:e -- AUTOGENERATED_F_3:w + edge [color="#000000:#895956:#000000"] + W1:w4:e -- AUTOGENERATED_F_4:w + W1 [label=< + + + + +
+ + +
W1
+
+ + + + +
4xBK
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ 1:BK +
+ + + + +
+
+ 2:WH +
+ + + + +
+
+ 3:BU +
+ + + + +
+
+ 4:BN +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_1:e -- X1:p1l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_2:e -- X1:p2l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_3:e -- X1:p3l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_4:e -- X1:p4l:w +} diff --git a/examples/ex11.html b/examples/ex11.html new file mode 100644 index 00000000..9f2a3e7d --- /dev/null +++ b/examples/ex11.html @@ -0,0 +1,245 @@ + + + + + ex11 + + +

ex11

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +AUTOGENERATED_F_1 + + +Ferrule + +GY + + + + + +X1 + + +X1 + +Screw connector + +male + +4-pin + +GN + + + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +AUTOGENERATED_F_1:e--X1:w + + + + + +AUTOGENERATED_F_2 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_2:e--X1:w + + + + + +AUTOGENERATED_F_3 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_3:e--X1:w + + + + + +AUTOGENERATED_F_4 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_4:e--X1:w + + + + + +W1 + + +W1 + +4x + +BK + + +  +     1:BK     + + + +     2:WH     + + + +     3:BU     + + + +     4:BN     + + + +  + + + +W1:e--AUTOGENERATED_F_1:w + + + + + + +W1:e--AUTOGENERATED_F_2:w + + + + + + +W1:e--AUTOGENERATED_F_3:w + + + + + + +W1:e--AUTOGENERATED_F_4:w + + + + + + + +
+ +
+ +
+ +

Bill of Materials

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 wires, BK0mW1
2Connector, Ferrule, GY4
3Connector, Screw connector, male, 4 pins, GN1X1
+ +
+ + diff --git a/examples/ex11.png b/examples/ex11.png new file mode 100644 index 0000000000000000000000000000000000000000..1f572f08d1bc26a683fe802b5cf5a89bd1deb7f8 GIT binary patch literal 37497 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 + + + + + + + + +AUTOGENERATED_F_1 + + +Ferrule + +GY + + + + + +X1 + + +X1 + +Screw connector + +male + +4-pin + +GN + + + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +AUTOGENERATED_F_1:e--X1:w + + + + + +AUTOGENERATED_F_2 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_2:e--X1:w + + + + + +AUTOGENERATED_F_3 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_3:e--X1:w + + + + + +AUTOGENERATED_F_4 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_4:e--X1:w + + + + + +W1 + + +W1 + +4x + +BK + + +  +     1:BK     + + + +     2:WH     + + + +     3:BU     + + + +     4:BN     + + + +  + + + +W1:e--AUTOGENERATED_F_1:w + + + + + + +W1:e--AUTOGENERATED_F_2:w + + + + + + +W1:e--AUTOGENERATED_F_3:w + + + + + + +W1:e--AUTOGENERATED_F_4:w + + + + + + diff --git a/examples/ex12.bom.tsv b/examples/ex12.bom.tsv new file mode 100644 index 00000000..b7242cb5 --- /dev/null +++ b/examples/ex12.bom.tsv @@ -0,0 +1,7 @@ +Id Description Qty Unit Designators +1 Connector, Dupont 2.54mm, female, 5 pins, BK 1 X2 +2 Connector, Dupont 2.54mm, male, 5 pins, BK 1 X1 +3 Wire, BK 0.4 m W1, W2 +4 Wire, BU 0.4 m W1, W2 +5 Wire, GN 0.4 m W1, W2 +6 Wire, RD 0.4 m W1, W2 diff --git a/examples/ex12.gv b/examples/ex12.gv new file mode 100644 index 00000000..c5429861 --- /dev/null +++ b/examples/ex12.gv @@ -0,0 +1,269 @@ +graph { +// Graph generated by WireViz 0.4-dev +// https://github.com/formatc1702/WireViz + graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] + node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] + edge [fontname=arial style=bold] + X1 [label=< + + + + +
+ + +
X1
+
+ + + + + + +
Dupont 2.54mmmale5-pinBK
+
+ + + + + + + + + + + + + + + + +
1
2
3
4
5
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X2 [label=< + + + + +
+ + +
X2
+
+ + + + + + +
Dupont 2.54mmfemale5-pinBK
+
+ + + + + + + + + + + + + + + + +
1
2
3
4
5
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ff0000:#000000"] + W1:w1:e -- X1:p1l:w + edge [color="#000000:#000000:#000000"] + W1:w2:e -- X1:p2l:w + edge [color="#000000:#0066ff:#000000"] + W1:w3:e -- X1:p3l:w + edge [color="#000000:#00ff00:#000000"] + W1:w4:e -- X1:p4l:w + W1 [label=< + + + + +
+ + +
W1
+
+ + + +
4x0.2 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ RD + X1:1
+ + + + +
+
+ BK + X1:2
+ + + + +
+
+ BU + X1:3
+ + + + +
+
+ GN + X1:4
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style="filled,dashed"] + edge [color="#000000:#ff0000:#000000"] + X2:p1r:e -- W2:w1:w + edge [color="#000000:#000000:#000000"] + X2:p2r:e -- W2:w2:w + edge [color="#000000:#0066ff:#000000"] + X2:p3r:e -- W2:w3:w + edge [color="#000000:#00ff00:#000000"] + X2:p4r:e -- W2:w4:w + W2 [label=< + + + + +
+ + +
W2
+
+ + + +
4x0.2 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
X2:1 + RD +
+ + + + +
+
X2:2 + BK +
+ + + + +
+
X2:3 + BU +
+ + + + +
+
X2:4 + GN +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style="filled,dashed"] + edge [color="#000000:#000000" dir=forward style=dashed] + X1:e -- X2:w +} diff --git a/examples/ex12.html b/examples/ex12.html new file mode 100644 index 00000000..e3d983cb --- /dev/null +++ b/examples/ex12.html @@ -0,0 +1,289 @@ + + + + + ex12 + + +

ex12

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +X1 + + +X1 + +Dupont 2.54mm + +male + +5-pin + +BK + + + +1 + +2 + +3 + +4 + +5 + + + +X2 + + +X2 + +Dupont 2.54mm + +female + +5-pin + +BK + + + +1 + +2 + +3 + +4 + +5 + + + +X1:e--X2:w + + + + + + +W2 + + +W2 + +4x + +0.2 m +  +X2:1 +     RD     + + + +X2:2 +     BK     + + + +X2:3 +     BU     + + + +X2:4 +     GN     + + + +  + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +W1 + + +W1 + +4x + +0.2 m +  +     RD     +X1:1 + + + +     BK     +X1:2 + + + +     BU     +X1:3 + + + +     GN     +X1:4 + + + +  + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + + +
+ +
+ +
+ +

Bill of Materials

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Dupont 2.54mm, female, 5 pins, BK1X2
2Connector, Dupont 2.54mm, male, 5 pins, BK1X1
3Wire, BK0.4mW1, W2
4Wire, BU0.4mW1, W2
5Wire, GN0.4mW1, W2
6Wire, RD0.4mW1, W2
+ +
+ + diff --git a/examples/ex12.png b/examples/ex12.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0fce6c59488d433ec3a52b39023d0554426b8a GIT binary patch literal 29039 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

YY7x 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 + + + + + + + + +X1 + + +X1 + +Dupont 2.54mm + +male + +5-pin + +BK + + + +1 + +2 + +3 + +4 + +5 + + + +X2 + + +X2 + +Dupont 2.54mm + +female + +5-pin + +BK + + + +1 + +2 + +3 + +4 + +5 + + + +X1:e--X2:w + + + + + + +W2 + + +W2 + +4x + +0.2 m +  +X2:1 +     RD     + + + +X2:2 +     BK     + + + +X2:3 +     BU     + + + +X2:4 +     GN     + + + +  + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +X2:e--W2:w + + + + + + +W1 + + +W1 + +4x + +0.2 m +  +     RD     +X1:1 + + + +     BK     +X1:2 + + + +     BU     +X1:3 + + + +     GN     +X1:4 + + + +  + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + +W1:e--X1:w + + + + + + diff --git a/examples/ex13.bom.tsv b/examples/ex13.bom.tsv new file mode 100644 index 00000000..b5936d26 --- /dev/null +++ b/examples/ex13.bom.tsv @@ -0,0 +1,4 @@ +Id Description Qty Unit Designators +1 Cable, 4 wires 0 m C1, C2, C3 +2 Connector, 4 pins 3 X1, X2, X3 +3 Connector, ferrule 4 diff --git a/examples/ex13.gv b/examples/ex13.gv new file mode 100644 index 00000000..b26897ac --- /dev/null +++ b/examples/ex13.gv @@ -0,0 +1,433 @@ +graph { +// Graph generated by WireViz 0.4-dev +// https://github.com/formatc1702/WireViz + graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] + node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] + edge [fontname=arial style=bold] + X1 [label=< + + + + +
+ + +
X1
+
+ + +
4-pin
+
+ + + + + + + + + + + + + + + + + +
A1
B2
C3
D4
+
+> fillcolor="#FFFFFF" shape=box style=filled] + F1 [label=< + + +
+ + +
ferrule
+
+> fillcolor="#FFFFFF" shape=box style=filled] + F2 [label=< + + +
+ + +
ferrule
+
+> fillcolor="#FFFFFF" shape=box style=filled] + F3 [label=< + + +
+ + +
ferrule
+
+> fillcolor="#FFFFFF" shape=box style=filled] + F4 [label=< + + +
+ + +
ferrule
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X2 [label=< + + + + +
+ + +
X2
+
+ + +
4-pin
+
+ + + + + + + + + + + + + + + + + +
1A
2B
3C
4D
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X3 [label=< + + + + +
+ + +
X3
+
+ + +
4-pin
+
+ + + + + + + + + + + + + + + + + +
1A
2B
3C
4D
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + X1:p1r:e -- C1:w1:w + C1:w1:e -- F1:w + edge [color="#000000:#895956:#000000"] + X1:p2r:e -- C1:w2:w + C1:w2:e -- F2:w + edge [color="#000000:#00ff00:#000000"] + X1:p3r:e -- C1:w3:w + C1:w3:e -- F3:w + edge [color="#000000:#ffff00:#000000"] + X1:p4r:e -- C1:w4:w + C1:w4:e -- F4:w + C1 [label=< + + + + +
+ + +
C1
+
+ + +
4x
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
X1:1:A + 1:WH +
+ + + + +
+
X1:2:B + 2:BN +
+ + + + +
+
X1:3:C + 3:GN +
+ + + + +
+
X1:4:D + 4:YE +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + F1:e -- C2:w1:w + C2:w1:e -- X2:p1l:w + edge [color="#000000:#895956:#000000"] + F2:e -- C2:w2:w + C2:w2:e -- X2:p2l:w + edge [color="#000000:#00ff00:#000000"] + F3:e -- C2:w3:w + C2:w3:e -- X2:p3l:w + edge [color="#000000:#ffff00:#000000"] + F4:e -- C2:w4:w + C2:w4:e -- X2:p4l:w + C2 [label=< + + + + +
+ + +
C2
+
+ + +
4x
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ 1:WH + X2:1:A
+ + + + +
+
+ 2:BN + X2:2:B
+ + + + +
+
+ 3:GN + X2:3:C
+ + + + +
+
+ 4:YE + X2:4:D
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + F1:e -- C3:w1:w + C3:w1:e -- X3:p1l:w + edge [color="#000000:#895956:#000000"] + F2:e -- C3:w2:w + C3:w2:e -- X3:p2l:w + edge [color="#000000:#00ff00:#000000"] + F3:e -- C3:w3:w + C3:w3:e -- X3:p3l:w + edge [color="#000000:#ffff00:#000000"] + F4:e -- C3:w4:w + C3:w4:e -- X3:p4l:w + C3 [label=< + + + + +
+ + +
C3
+
+ + +
4x
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ 1:WH + X3:1:A
+ + + + +
+
+ 2:BN + X3:2:B
+ + + + +
+
+ 3:GN + X3:3:C
+ + + + +
+
+ 4:YE + X3:4:D
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] +} diff --git a/examples/ex13.html b/examples/ex13.html new file mode 100644 index 00000000..1e7bbe55 --- /dev/null +++ b/examples/ex13.html @@ -0,0 +1,449 @@ + + + + + ex13 + + +

ex13

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +X1 + + +X1 + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +C1 + + +C1 + +4x +  +X1:1:A +     1:WH     + + + +X1:2:B +     2:BN     + + + +X1:3:C +     3:GN     + + + +X1:4:D +     4:YE     + + + +  + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +F1 + + +ferrule + + + +C2 + + +C2 + +4x +  +     1:WH     +X2:1:A + + + +     2:BN     +X2:2:B + + + +     3:GN     +X2:3:C + + + +     4:YE     +X2:4:D + + + +  + + + +F1:e--C2:w + + + + + + +C3 + + +C3 + +4x +  +     1:WH     +X3:1:A + + + +     2:BN     +X3:2:B + + + +     3:GN     +X3:3:C + + + +     4:YE     +X3:4:D + + + +  + + + +F1:e--C3:w + + + + + + +F2 + + +ferrule + + + +F2:e--C2:w + + + + + + +F2:e--C3:w + + + + + + +F3 + + +ferrule + + + +F3:e--C2:w + + + + + + +F3:e--C3:w + + + + + + +F4 + + +ferrule + + + +F4:e--C2:w + + + + + + +F4:e--C3:w + + + + + + +X2 + + +X2 + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +X3 + + +X3 + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +C1:e--F1:w + + + + + + +C1:e--F2:w + + + + + + +C1:e--F3:w + + + + + + +C1:e--F4:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + + +
+ +
+ +
+ +

Bill of Materials

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 wires0mC1, C2, C3
2Connector, 4 pins3X1, X2, X3
3Connector, ferrule4
+ +
+ + diff --git a/examples/ex13.png b/examples/ex13.png new file mode 100644 index 0000000000000000000000000000000000000000..9b24caff75716a1008fd19cc80fd421203e556c4 GIT binary patch literal 122595 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 K+UYwF1^)+cBL$5B literal 0 HcmV?d00001 diff --git a/examples/ex13.svg b/examples/ex13.svg new file mode 100644 index 00000000..cf6f3793 --- /dev/null +++ b/examples/ex13.svg @@ -0,0 +1,376 @@ + + + + + + + + + +X1 + + +X1 + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +C1 + + +C1 + +4x +  +X1:1:A +     1:WH     + + + +X1:2:B +     2:BN     + + + +X1:3:C +     3:GN     + + + +X1:4:D +     4:YE     + + + +  + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +X1:e--C1:w + + + + + + +F1 + + +ferrule + + + +C2 + + +C2 + +4x +  +     1:WH     +X2:1:A + + + +     2:BN     +X2:2:B + + + +     3:GN     +X2:3:C + + + +     4:YE     +X2:4:D + + + +  + + + +F1:e--C2:w + + + + + + +C3 + + +C3 + +4x +  +     1:WH     +X3:1:A + + + +     2:BN     +X3:2:B + + + +     3:GN     +X3:3:C + + + +     4:YE     +X3:4:D + + + +  + + + +F1:e--C3:w + + + + + + +F2 + + +ferrule + + + +F2:e--C2:w + + + + + + +F2:e--C3:w + + + + + + +F3 + + +ferrule + + + +F3:e--C2:w + + + + + + +F3:e--C3:w + + + + + + +F4 + + +ferrule + + + +F4:e--C2:w + + + + + + +F4:e--C3:w + + + + + + +X2 + + +X2 + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +X3 + + +X3 + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +C1:e--F1:w + + + + + + +C1:e--F2:w + + + + + + +C1:e--F3:w + + + + + + +C1:e--F4:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C2:e--X2:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + +C3:e--X3:w + + + + + + diff --git a/examples/ex14.bom.tsv b/examples/ex14.bom.tsv new file mode 100644 index 00000000..c0e53074 --- /dev/null +++ b/examples/ex14.bom.tsv @@ -0,0 +1,8 @@ +Id Description Qty Unit Designators +1 Cable, 1 wires 0.1 m +2 Cable, 4 wires 0.4 m W1, W2, W21, W3 +3 Connector, Ferrule, GY 4 +4 Connector, JST SM, female, 4 pins 1 X2 +5 Connector, JST SM, male, 4 pins 2 X1, X3 +6 Connector, Screw terminal connector, 4 pins, GN 1 X4 +7 Connector, Splice, CU 8 diff --git a/examples/ex14.gv b/examples/ex14.gv new file mode 100644 index 00000000..4f24330e --- /dev/null +++ b/examples/ex14.gv @@ -0,0 +1,717 @@ +graph { +// Graph generated by WireViz 0.4-dev +// https://github.com/formatc1702/WireViz + graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] + node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] + edge [fontname=arial style=bold] + X1 [label=< + + + + +
+ + +
X1
+
+ + + + +
JST SMmale4-pin
+
+ + + + + + + + + + + + + + + + + +
A1
B2
C3
D4
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_1 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_2 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + S1 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_3 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_4 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_5 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_6 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_S_7 [label=< + + +
+ + + + +
SpliceCU
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X2 [label=< + + + + +
+ + +
X2
+
+ + + + +
JST SMfemale4-pin
+
+ + + + + + + + + + + + + + + + + +
1A
2B
3C
4D
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X3 [label=< + + + + +
+ + +
X3
+
+ + + + +
JST SMmale4-pin
+
+ + + + + + + + + + + + + + + + + +
A1
B2
C3
D4
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_1 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_2 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_3 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + AUTOGENERATED_F_4 [label=< + + +
+ + + + +
FerruleGY
+
+> fillcolor="#FFFFFF" shape=box style=filled] + X4 [label=< + + + + +
+ + +
X4
+
+ + + + + +
Screw terminal connector4-pinGN
+
+ + + + + + + + + + + + + + + + + +
1W
2X
3Y
4Z
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + X1:p4r:e -- W1:w1:w + W1:w1:e -- AUTOGENERATED_S_1:w + edge [color="#000000:#895956:#000000"] + X1:p3r:e -- W1:w2:w + W1:w2:e -- AUTOGENERATED_S_2:w + edge [color="#000000:#00ff00:#000000"] + X1:p2r:e -- W1:w3:w + W1:w3:e -- S1:w + edge [color="#000000:#ffff00:#000000"] + X1:p1r:e -- W1:w4:w + W1:w4:e -- AUTOGENERATED_S_3:w + W1 [label=< + + + + +
+ + +
W1
+
+ + + +
4x0.1 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
X1:4:D + 1:WH +
+ + + + +
+
X1:3:C + 2:BN +
+ + + + +
+
X1:2:B + 3:GN +
+ + + + +
+
X1:1:A + 4:YE +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + AUTOGENERATED_S_1:e -- W2:w1:w + W2:w1:e -- AUTOGENERATED_S_4:w + edge [color="#000000:#895956:#000000"] + AUTOGENERATED_S_2:e -- W2:w2:w + W2:w2:e -- AUTOGENERATED_S_5:w + edge [color="#000000:#00ff00:#000000"] + S1:e -- W2:w3:w + W2:w3:e -- AUTOGENERATED_S_6:w + edge [color="#000000:#ffff00:#000000"] + AUTOGENERATED_S_3:e -- W2:w4:w + W2:w4:e -- AUTOGENERATED_S_7:w + W2 [label=< + + + + +
+ + +
W2
+
+ + + +
4x0.1 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ 1:WH +
+ + + + +
+
+ 2:BN +
+ + + + +
+
+ 3:GN +
+ + + + +
+
+ 4:YE +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + AUTOGENERATED_S_4:e -- W21:w1:w + W21:w1:e -- X2:p1l:w + edge [color="#000000:#895956:#000000"] + AUTOGENERATED_S_5:e -- W21:w2:w + W21:w2:e -- X2:p2l:w + edge [color="#000000:#00ff00:#000000"] + AUTOGENERATED_S_6:e -- W21:w3:w + W21:w3:e -- X2:p3l:w + edge [color="#000000:#ffff00:#000000"] + AUTOGENERATED_S_7:e -- W21:w4:w + W21:w4:e -- X2:p4l:w + W21 [label=< + + + + +
+ + +
W21
+
+ + + +
4x0.1 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ 1:WH + X2:1:A
+ + + + +
+
+ 2:BN + X2:2:B
+ + + + +
+
+ 3:GN + X2:3:C
+ + + + +
+
+ 4:YE + X2:4:D
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + X3:p1r:e -- W3:w1:w + W3:w1:e -- AUTOGENERATED_F_1:w + edge [color="#000000:#895956:#000000"] + X3:p2r:e -- W3:w2:w + W3:w2:e -- AUTOGENERATED_F_2:w + edge [color="#000000:#00ff00:#000000"] + X3:p3r:e -- W3:w3:w + W3:w3:e -- AUTOGENERATED_F_3:w + edge [color="#000000:#ffff00:#000000"] + X3:p4r:e -- W3:w4:w + W3:w4:e -- AUTOGENERATED_F_4:w + W3 [label=< + + + + +
+ + +
W3
+
+ + + +
4x0.1 m
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
X3:1:A + 1:WH +
+ + + + +
+
X3:2:B + 2:BN +
+ + + + +
+
X3:3:C + 3:GN +
+ + + + +
+
X3:4:D + 4:YE +
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#000000:#000000"] + S1:e -- AUTOGENERATED_WIRE_1:w1:w + AUTOGENERATED_WIRE_1:w1:e -- X2:p4l:w + AUTOGENERATED_WIRE_1 [label=< + + + +
+ + + +
1x0.1 m
+
+ + + + + + + + + + + +
 
+ 1:BK + X2:4:D
+ + + + +
+
 
+
+> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#000000" dir=both style=dashed] + X2:e -- X3:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_1:e -- X4:p2l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_2:e -- X4:p1l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_3:e -- X4:p4l:w + edge [color="#000000" dir=forward style=dashed] + AUTOGENERATED_F_4:e -- X4:p3l:w +} diff --git a/examples/ex14.html b/examples/ex14.html new file mode 100644 index 00000000..e20c2326 --- /dev/null +++ b/examples/ex14.html @@ -0,0 +1,777 @@ + + + + + ex14 + + +

ex14

+

Diagram

+ +
+ +
+ +
+ + + + + + + + +X1 + + +X1 + +JST SM + +male + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +W1 + + +W1 + +4x + +0.1 m +  +X1:4:D +     1:WH     + + + +X1:3:C +     2:BN     + + + +X1:2:B +     3:GN     + + + +X1:1:A +     4:YE     + + + +  + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +AUTOGENERATED_S_1 + + +Splice + +CU + + + + + +W2 + + +W2 + +4x + +0.1 m +  +     1:WH     + + + +     2:BN     + + + +     3:GN     + + + +     4:YE     + + + +  + + + +AUTOGENERATED_S_1:e--W2:w + + + + + + +AUTOGENERATED_S_2 + + +Splice + +CU + + + + + +AUTOGENERATED_S_2:e--W2:w + + + + + + +S1 + + +Splice + +CU + + + + + +S1:e--W2:w + + + + + + +AUTOGENERATED_WIRE_1 + + +1x + +0.1 m +  +     1:BK     +X2:4:D + + + +  + + + +S1:e--AUTOGENERATED_WIRE_1:w + + + + + + +AUTOGENERATED_S_3 + + +Splice + +CU + + + + + +AUTOGENERATED_S_3:e--W2:w + + + + + + +AUTOGENERATED_S_4 + + +Splice + +CU + + + + + +W21 + + +W21 + +4x + +0.1 m +  +     1:WH     +X2:1:A + + + +     2:BN     +X2:2:B + + + +     3:GN     +X2:3:C + + + +     4:YE     +X2:4:D + + + +  + + + +AUTOGENERATED_S_4:e--W21:w + + + + + + +AUTOGENERATED_S_5 + + +Splice + +CU + + + + + +AUTOGENERATED_S_5:e--W21:w + + + + + + +AUTOGENERATED_S_6 + + +Splice + +CU + + + + + +AUTOGENERATED_S_6:e--W21:w + + + + + + +AUTOGENERATED_S_7 + + +Splice + +CU + + + + + +AUTOGENERATED_S_7:e--W21:w + + + + + + +X2 + + +X2 + +JST SM + +female + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +X3 + + +X3 + +JST SM + +male + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +X2:e--X3:w + + + + + + + +W3 + + +W3 + +4x + +0.1 m +  +X3:1:A +     1:WH     + + + +X3:2:B +     2:BN     + + + +X3:3:C +     3:GN     + + + +X3:4:D +     4:YE     + + + +  + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +AUTOGENERATED_F_1 + + +Ferrule + +GY + + + + + +X4 + + +X4 + +Screw terminal connector + +4-pin + +GN + + + +1 + +W + +2 + +X + +3 + +Y + +4 + +Z + + + +AUTOGENERATED_F_1:e--X4:w + + + + + +AUTOGENERATED_F_2 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_2:e--X4:w + + + + + +AUTOGENERATED_F_3 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_3:e--X4:w + + + + + +AUTOGENERATED_F_4 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_4:e--X4:w + + + + + +W1:e--AUTOGENERATED_S_1:w + + + + + + +W1:e--AUTOGENERATED_S_2:w + + + + + + +W1:e--S1:w + + + + + + +W1:e--AUTOGENERATED_S_3:w + + + + + + +W2:e--AUTOGENERATED_S_4:w + + + + + + +W2:e--AUTOGENERATED_S_5:w + + + + + + +W2:e--AUTOGENERATED_S_6:w + + + + + + +W2:e--AUTOGENERATED_S_7:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W3:e--AUTOGENERATED_F_1:w + + + + + + +W3:e--AUTOGENERATED_F_2:w + + + + + + +W3:e--AUTOGENERATED_F_3:w + + + + + + +W3:e--AUTOGENERATED_F_4:w + + + + + + +AUTOGENERATED_WIRE_1:e--X2:w + + + + + + + +
+ +
+ +
+ +

Bill of Materials

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 1 wires0.1m
2Cable, 4 wires0.4mW1, W2, W21, W3
3Connector, Ferrule, GY4
4Connector, JST SM, female, 4 pins1X2
5Connector, JST SM, male, 4 pins2X1, X3
6Connector, Screw terminal connector, 4 pins, GN1X4
7Connector, Splice, CU8
+ +
+ + diff --git a/examples/ex14.png b/examples/ex14.png new file mode 100644 index 0000000000000000000000000000000000000000..bae9a15d316250c2094c2943b1a95a802c5f641f GIT binary patch literal 207268 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
$@{c&u{R?nV2Yl-h7Wj`jXD2Y=FP9$X( zCtu%W-nzhMwBsBgZ{*-|Tf@5ZmAJMZq@%mSKT<;ke4mFEk#CUv?}>NbXr9OMCdrhwBVuYXy9E`gmT1 z_6ehj=3;Ru@lmFeLXeyq=H})xb4M`s?13)^(VKTXD%kfk;`xVGl>^JhbuDoFDG_oh z1~>re_H~%m^^LBr@vLUy+5K{M&sXpg(RCAFK$N4&unZ#p9>f|L`~1nvCV7nE3QtZ^ zD$jeBtqb1Q?=C%+e&q5sd1})HI^Xj{Q+Jr0+N!Uavon`ud9``c!ZRWq~)X0u6Bnq1zu%b?WFo%e@+tbC#3R217SPv-t z))5+|EXmHkNjTIj;_hOjBxgiN1egJ+mB~9KzXP~wuA*%3+p=^;5e2awV{CEBSqOc= zEJ@dF`t_%&L+eI$H4inlon5Eq;KYuR3CCIr<#4tk{ro)F)NJwK2<^bY;HWkgd*6?z zI*u5ilUQ#nCj=JKhvZlsI&^5Fn1k```fplUsQOUtM#}0Lj62t77iK1tQyw&1L_ZXs zP|eXy|H?#@`sfj!{2^#Vg59(|#g;w6RfL_DO-T;^_SnV_kao!&0EfO@JPU9$kSbA$ zgYo;m@QwZVxzhpaIyh>?a?S;vSGifh+^O@u^!>r$9+3cbCQ@?m-|txcUacmj$#N@F zra?%Acn!L)?f3)gRltA2aGekqUU{QllU@6Kx$RxQyNx5iMrDp|X0>G~WN_r!(fmPW znr1rG#LAYj@XBwEu3f^P{SPYoCG&H$Mjl>sGK}$1sH=AAVBx--n*y&#Sw7ghF@K&2^I1`pN3>K z+F>h;CJo-Ntyu^>ES{Pc?y`gSO1u7-z3|=r4|5BGl()0XxcK_oGoJiA80#}YbEy=@ zPeRksnKE8B%(jLFl4sAO)eN+_i?_mjbkZBn1}Gv4(hqf`HQqjC2~0x2!cvL186d4O z-K-@+RQx!?juM@V!kWMA$V)hb_acQ4#{@CDMQ8T-`FW$AsVc$t%zD#x)1h_zs&`@~ z_r`pkZ8z>T|I>PNVb888$MrwTd@CkE7%5iC$M4HAVyToKva1Zi9KrZidfvsVZfDuJ zuMwWihtNg@(K5icjw}xhWg};GgFrX~t%W$@!TBy4X^(qxf2ZJ>!UHILYe8xef{}su zOmHD*IscDp2U)Cy6RvmScBjbQ`CD=QeLj8PoMe>29{<0f-TN-11dL2uG>h4syC`5_ zbTYNmjvGZh>D18(!5!|Ppw(&2$GMLNOfL)HZ8&lKkia|_`+MQg9a6;k3%>}-owJ9c!Om4kp{!oY;?W4GQR|{|bV>WQ?lI-DInETp<#2 zCjOUb?_4gwvEdpE3m47mMklF2fA;NnPl)RaF*WR`dvz>MgHQW(>5ppWE-cG@mm#I~ z;>OpZDaMKSAG70WP%Mz;0F}8V-Z!cB2s{AFX?K}c)AL|9CnrhYLQqOc8u!tZyRZU^ z?$yieY=)w89(9_3GII@>5i{Kuch-U_g(d(_L1%`a2VX!&CZ0azw7`ajs2?=yqBkYvyQ8t+KeNhSVSS#!bz|Cj6XQB9X*@8!Zfo zWj@$KXK{HDP>uTOTmfk45NF?nt`_I}ne;`N^&?nD4s|nfF};E(!1N`!9_A`Vnk9S? zq$2zR4#I?R98i1 zfoh+m1*5klqFS8n0%0uuwvezQ$gJe$1Q`jQtp4;@Ll9f`4=`Iq-?UNQGwbEbohpn1 zy-|itbxcnJ4MLR!e%LK;)-N)><$8zhnJ?|vz~7@6Dkk6y0D=f;>BQXDIUqoz>R&E^ zPhHTIdAeEk0f+<#Q6+kgTNyk8aStmp%7A)7aSD-z#OwSG8gK-+{_A;-zVIpXlXwqY z=+Ni0RgVL60EG|is>)uR8G|xtXI}NEmfwep1572jl0tHh-Y!w%~df!+(pyV zt#gcp5sUEP`C;0(FmCgxUC~)MyCltE;ZqFQdPyNb|91pss?b z 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�#nE3Y79d@_P(*1sm z-nuC^x3#6AXOg?-^{<)4LO?fQ#)AFZ&}0lWl3r5c^_VFXeg&w&p!F5VH85eIDQa<# zFI_bw=puZa0X&N@H!&DFPI5}Gl+%s-)5MD^vDUgVGHO^#Tqh6{tf2ZcIfx`i2U0=Z zvL;XwZdN(i8SxC+$+RVP>qOGXU%@pIK@i7g_sf^FbZLxEyZrVquL8Uk2hWzA z!C;I5%v4H2#47SZWKJ%m8lG7&9DN7WmfgQM(*gTK6(!b&tbN!4!U;wx4WfZD!WK92 z@+u*SsK&-59g*#?lrhf{0nS?HxW9b9;yO-L8zi0D5v2{ZNBk@g+``Kdy0z&BjVvoA zMK~QzW23V;xveObd9a3HkskXZHcj!!AWFUtp#E3FN4G4W&<25kW8C=SWb!vYGo zXM_EU6WMp~>L68&N%HH?Sc0>El%KqpN=W7Xd*g!#!yuIJO+87yO)f?!)MI++H(w2z2mCFtWp{T7{(~z=bb)OVK`vm}$*h4= zsU;a~ilm)VO$vYgXX$2{Xr)!G-@3!^F>k*JzZb^QEl?E4^=nu`9M|OAH~T7uoGBKS zhd8*FhSh}E_w2V?qR>nzCAJ-Koj@30{0>%qJd77XHV}RYx~&mcOO~Oba5#QZWjR}- zaibG_%!jfGmoAJ%K+LDS=iEHrE!sZCa{8qIcV|uF4e;Kb|82J{Ml@dd>jggq*`Y4RUvT0FSH#a5MLsP+&nT-B04X=N*x zyA zI%h!A(P@yZWSJAPE5l4gqatWznQ7&kjSP;P)(rP+!1TVw84rwcAqI&zoMtv30~D>nBi-R{Zvc zBWRDXfvI^C(9`{q9U+lYlMjiRE=$}cbBJ#t+u~95MT)ND+_pTBx3k@8l*~~71$rA) zwGoefuDj(0H%4&=JcijC!luo$$WmuIimi%lb}*4$8-+))RonMEg2%_2BCXr-ve!)X zioekk-F$^8@GY5CYO{UBv>0>(whs>W%54ky7BmJ~TC<**xgp#pNUeBQ@tmsq(T=^h z_W40zR0zW(zlKvrZL{qyAz0}>9YDmc3QkVw%3xpcOOKE6a-6x-fCU7Q#b!VR2nYp4 z4UeP3+@-dWTMI9CAHU`J0I2d#WnC!CHM?`rR59*49^t~|VxjKWa4(`!G7Cykti7=N zEuSqSO58NA8Zt*Z0)aak$z@`KL8sFjVzrZlog-;?fK81>j}_Eb+el+S3q{Mz$|3`9 z>lCo}wvhyBX*bvB@`GqedF`rzoFl5xj6Z#JnI2<=_ljHI*N2uCl})~p99Uxg<g4dP=PreS7D%~4?eROZvIJrFJoX=+o}~+vDHQE9jV&D}ITe13mNqOd{!c z&RK<@UXkjX#g9Mzom6pWmfimO1yZEIEVBCfmH+>epXKrG+5cH_nI9aTgM^>jF-e|9 zmi%SQGX#X= + + + + + + + + +X1 + + +X1 + +JST SM + +male + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +W1 + + +W1 + +4x + +0.1 m +  +X1:4:D +     1:WH     + + + +X1:3:C +     2:BN     + + + +X1:2:B +     3:GN     + + + +X1:1:A +     4:YE     + + + +  + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +X1:e--W1:w + + + + + + +AUTOGENERATED_S_1 + + +Splice + +CU + + + + + +W2 + + +W2 + +4x + +0.1 m +  +     1:WH     + + + +     2:BN     + + + +     3:GN     + + + +     4:YE     + + + +  + + + +AUTOGENERATED_S_1:e--W2:w + + + + + + +AUTOGENERATED_S_2 + + +Splice + +CU + + + + + +AUTOGENERATED_S_2:e--W2:w + + + + + + +S1 + + +Splice + +CU + + + + + +S1:e--W2:w + + + + + + +AUTOGENERATED_WIRE_1 + + +1x + +0.1 m +  +     1:BK     +X2:4:D + + + +  + + + +S1:e--AUTOGENERATED_WIRE_1:w + + + + + + +AUTOGENERATED_S_3 + + +Splice + +CU + + + + + +AUTOGENERATED_S_3:e--W2:w + + + + + + +AUTOGENERATED_S_4 + + +Splice + +CU + + + + + +W21 + + +W21 + +4x + +0.1 m +  +     1:WH     +X2:1:A + + + +     2:BN     +X2:2:B + + + +     3:GN     +X2:3:C + + + +     4:YE     +X2:4:D + + + +  + + + +AUTOGENERATED_S_4:e--W21:w + + + + + + +AUTOGENERATED_S_5 + + +Splice + +CU + + + + + +AUTOGENERATED_S_5:e--W21:w + + + + + + +AUTOGENERATED_S_6 + + +Splice + +CU + + + + + +AUTOGENERATED_S_6:e--W21:w + + + + + + +AUTOGENERATED_S_7 + + +Splice + +CU + + + + + +AUTOGENERATED_S_7:e--W21:w + + + + + + +X2 + + +X2 + +JST SM + +female + +4-pin + +1 + +A + +2 + +B + +3 + +C + +4 + +D + + + +X3 + + +X3 + +JST SM + +male + +4-pin + +A + +1 + +B + +2 + +C + +3 + +D + +4 + + + +X2:e--X3:w + + + + + + + +W3 + + +W3 + +4x + +0.1 m +  +X3:1:A +     1:WH     + + + +X3:2:B +     2:BN     + + + +X3:3:C +     3:GN     + + + +X3:4:D +     4:YE     + + + +  + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +X3:e--W3:w + + + + + + +AUTOGENERATED_F_1 + + +Ferrule + +GY + + + + + +X4 + + +X4 + +Screw terminal connector + +4-pin + +GN + + + +1 + +W + +2 + +X + +3 + +Y + +4 + +Z + + + +AUTOGENERATED_F_1:e--X4:w + + + + + +AUTOGENERATED_F_2 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_2:e--X4:w + + + + + +AUTOGENERATED_F_3 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_3:e--X4:w + + + + + +AUTOGENERATED_F_4 + + +Ferrule + +GY + + + + + +AUTOGENERATED_F_4:e--X4:w + + + + + +W1:e--AUTOGENERATED_S_1:w + + + + + + +W1:e--AUTOGENERATED_S_2:w + + + + + + +W1:e--S1:w + + + + + + +W1:e--AUTOGENERATED_S_3:w + + + + + + +W2:e--AUTOGENERATED_S_4:w + + + + + + +W2:e--AUTOGENERATED_S_5:w + + + + + + +W2:e--AUTOGENERATED_S_6:w + + + + + + +W2:e--AUTOGENERATED_S_7:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W21:e--X2:w + + + + + + +W3:e--AUTOGENERATED_F_1:w + + + + + + +W3:e--AUTOGENERATED_F_2:w + + + + + + +W3:e--AUTOGENERATED_F_3:w + + + + + + +W3:e--AUTOGENERATED_F_4:w + + + + + + +AUTOGENERATED_WIRE_1:e--X2:w + + + + + + diff --git a/examples/readme.md b/examples/readme.md index 145ee5a9..88a4389c 100644 --- a/examples/readme.md +++ b/examples/readme.md @@ -60,3 +60,27 @@ [Source](ex10.yml) - [Bill of Materials](ex10.bom.tsv) +## Example 11 +![](ex11.png) + +[Source](ex11.yml) - [Bill of Materials](ex11.bom.tsv) + + +## Example 12 +![](ex12.png) + +[Source](ex12.yml) - [Bill of Materials](ex12.bom.tsv) + + +## Example 13 +![](ex13.png) + +[Source](ex13.yml) - [Bill of Materials](ex13.bom.tsv) + + +## Example 14 +![](ex14.png) + +[Source](ex14.yml) - [Bill of Materials](ex14.bom.tsv) + + diff --git a/tutorial/readme.md b/tutorial/readme.md index ee64faf5..b65b1e4b 100644 --- a/tutorial/readme.md +++ b/tutorial/readme.md @@ -189,7 +189,6 @@ connectors: subtype: female F1: style: simple - autogenerate: true type: Crimp ferrule subtype: 0.5 mm² color: OG # optional color @@ -203,7 +202,7 @@ cables: connections: - - - F1 # a new ferrule is auto-generated for each of the four wires + - F1. # a new ferrule is auto-generated for each of the four wires - W1: [1-4] - X1: [1-4] ``` @@ -228,13 +227,11 @@ connectors: subtype: female F_10: # this is a unique ferrule style: simple - show_name: false # non-autogenerated connectors show their name by default; override type: Crimp ferrule subtype: 1.0 mm² color: YE # optional color F_05: # this is a ferrule that will be auto-generated on demand style: simple - autogenerate: true type: Crimp ferrule subtype: 0.5 mm² color: OG @@ -248,7 +245,7 @@ cables: connections: - - - [F_05, F_10, F_10, F_05] + - [F_05., F_10.F1, F_10.F1, F_05.] - W1: [1-4] - X1: [1-4] ``` diff --git a/tutorial/tutorial01.html b/tutorial/tutorial01.html index 00c5502a..16f19934 100644 --- a/tutorial/tutorial01.html +++ b/tutorial/tutorial01.html @@ -1,13 +1,36 @@ - - - tutorial01 - + + + tutorial01 + +

tutorial01

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 4 wires1mW1
2Connector, 4 pins2X1, X2
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 wires1mW1
2Connector, 4 pins2X1, X2
+ + + diff --git a/tutorial/tutorial01.svg b/tutorial/tutorial01.svg index c96a7c39..ca1330aa 100644 --- a/tutorial/tutorial01.svg +++ b/tutorial/tutorial01.svg @@ -1,7 +1,7 @@ - - - - tutorial02 - + + + tutorial02 + +

tutorial02

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 4 x 0.25 mm²1mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 x 0.25 mm²1mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + diff --git a/tutorial/tutorial02.svg b/tutorial/tutorial02.svg index 30d0a32b..6b546a1d 100644 --- a/tutorial/tutorial02.svg +++ b/tutorial/tutorial02.svg @@ -1,7 +1,7 @@ - - - - tutorial03 - + + + tutorial03 + +

tutorial03

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 4 x 0.25 mm² shielded1mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 x 0.25 mm² shielded1mW1
2Connector, Molex KK 254, female, 4 pins2X1, X2
+ + + diff --git a/tutorial/tutorial03.svg b/tutorial/tutorial03.svg index c49d74bd..d6640e48 100644 --- a/tutorial/tutorial03.svg +++ b/tutorial/tutorial03.svg @@ -1,7 +1,7 @@ - - - - tutorial04 - + + + tutorial04 + +

tutorial04

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Cable, 4 x 24 AWG0.4mW1, W2
2Connector, Molex KK 254, female, 4 pins2X2, X3
3Connector, Molex KK 254, male, 4 pins1X1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Cable, 4 x 24 AWG0.4mW1, W2
2Connector, Molex KK 254, female, 4 pins2X2, X3
3Connector, Molex KK 254, male, 4 pins1X1
+ + + diff --git a/tutorial/tutorial04.svg b/tutorial/tutorial04.svg index 42e08901..430a4b93 100644 --- a/tutorial/tutorial04.svg +++ b/tutorial/tutorial04.svg @@ -1,7 +1,7 @@ -
- -
X1
-
- - - - + + + +
Molex 8981female4-pinCrimp ferrule0.5 mm²OG
- - - - - - - - - - - - - - - - - -
1+12V
2GND
3GND
4+5V
-
> fillcolor="#FFFFFF" shape=box style=filled] - _F1_1 [label=< + AUTOGENERATED_F1_2 [label=< ", - # ] - # return "\n".join(html) class Tr(Tag): pass - # cells: List[Cell] = field(default_factory=list) - # - # def __init__(self, cells, *args, **kwargs): - # self.cells = cells - # super().__init__(*args, **kwargs) - # - # def __repr__(self): - # html = [ - # f"", - # "\n".join([str(c) for c in self.cells]), - # f"", - # ] - # return "\n".join(html) class Table(Tag): pass - # rows: List[Row] = field(default_factory=list) - # - # def __repr__(self): - # html = [ - # f"", - # "\n".join([str(r) for r in self.rows]), - # "
@@ -52,7 +28,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _F1_2 [label=< + AUTOGENERATED_F1_3 [label=<
@@ -64,7 +40,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _F1_3 [label=< + AUTOGENERATED_F1_4 [label=<
@@ -76,29 +52,53 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _F1_4 [label=< + X1 [label=< + +
- - - - +
Crimp ferrule0.5 mm²OGX1
+ + + + +
Molex 8981female4-pin
+
+ + + + + + + + + + + + + + + + + +
1+12V
2GND
3GND
4+5V
+
> fillcolor="#FFFFFF" shape=box style=filled] edge [color="#000000:#ffff00:#000000"] - _F1_1:e -- W1:w1:w + AUTOGENERATED_F1_1:e -- W1:w1:w W1:w1:e -- X1:p1l:w edge [color="#000000:#000000:#000000"] - _F1_2:e -- W1:w2:w + AUTOGENERATED_F1_2:e -- W1:w2:w W1:w2:e -- X1:p2l:w edge [color="#000000:#000000:#000000"] - _F1_3:e -- W1:w3:w + AUTOGENERATED_F1_3:e -- W1:w3:w W1:w3:e -- X1:p3l:w edge [color="#000000:#ff0000:#000000"] - _F1_4:e -- W1:w4:w + AUTOGENERATED_F1_4:e -- W1:w4:w W1:w4:e -- X1:p4l:w W1 [label=< diff --git a/tutorial/tutorial05.html b/tutorial/tutorial05.html index f1ec2fc4..a906e4a2 100644 --- a/tutorial/tutorial05.html +++ b/tutorial/tutorial05.html @@ -1,51 +1,45 @@ - - - tutorial05 - + + + tutorial05 + +

tutorial05

Diagram

- - + + +
+ + - + -X1 - - -X1 - -Molex 8981 - -female - -4-pin - -1 - -+12V - -2 - -GND - -3 - -GND - -4 - -+5V - - - -_F1_1 +AUTOGENERATED_F1_1 Crimp ferrule @@ -91,16 +85,16 @@

Diagram

  - + -_F1_1:e--W1:w +AUTOGENERATED_F1_1:e--W1:w - - -_F1_2 + + +AUTOGENERATED_F1_2 Crimp ferrule @@ -111,16 +105,16 @@

Diagram

- + -_F1_2:e--W1:w +AUTOGENERATED_F1_2:e--W1:w - - -_F1_3 + + +AUTOGENERATED_F1_3 Crimp ferrule @@ -131,16 +125,16 @@

Diagram

- + -_F1_3:e--W1:w +AUTOGENERATED_F1_3:e--W1:w - - -_F1_4 + + +AUTOGENERATED_F1_4 Crimp ferrule @@ -151,13 +145,42 @@

Diagram

- + -_F1_4:e--W1:w +AUTOGENERATED_F1_4:e--W1:w + + +X1 + + +X1 + +Molex 8981 + +female + +4-pin + +1 + ++12V + +2 + +GND + +3 + +GND + +4 + ++5V + W1:e--X1:w @@ -188,49 +211,61 @@

Diagram

+ +
+ +
+ +
+

Bill of Materials

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule, 0.5 mm², OG4
2Connector, Molex 8981, female, 4 pins1X1
3Wire, 0.5 mm², BK0.6mW1
4Wire, 0.5 mm², RD0.3mW1
5Wire, 0.5 mm², YE0.3mW1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule, 0.5 mm², OG4
2Connector, Molex 8981, female, 4 pins1X1
3Wire, 0.5 mm², BK0.6mW1
4Wire, 0.5 mm², RD0.3mW1
5Wire, 0.5 mm², YE0.3mW1
+ + + diff --git a/tutorial/tutorial05.svg b/tutorial/tutorial05.svg index 7c485c22..389147b2 100644 --- a/tutorial/tutorial05.svg +++ b/tutorial/tutorial05.svg @@ -1,45 +1,16 @@ - - + -X1 - - -X1 - -Molex 8981 - -female - -4-pin - -1 - -+12V - -2 - -GND - -3 - -GND - -4 - -+5V - - - -_F1_1 +AUTOGENERATED_F1_1 Crimp ferrule @@ -85,16 +56,16 @@   - + -_F1_1:e--W1:w +AUTOGENERATED_F1_1:e--W1:w - - -_F1_2 + + +AUTOGENERATED_F1_2 Crimp ferrule @@ -105,16 +76,16 @@ - + -_F1_2:e--W1:w +AUTOGENERATED_F1_2:e--W1:w - - -_F1_3 + + +AUTOGENERATED_F1_3 Crimp ferrule @@ -125,16 +96,16 @@ - + -_F1_3:e--W1:w +AUTOGENERATED_F1_3:e--W1:w - - -_F1_4 + + +AUTOGENERATED_F1_4 Crimp ferrule @@ -145,13 +116,42 @@ - + -_F1_4:e--W1:w +AUTOGENERATED_F1_4:e--W1:w + + +X1 + + +X1 + +Molex 8981 + +female + +4-pin + +1 + ++12V + +2 + +GND + +3 + +GND + +4 + ++5V + W1:e--X1:w diff --git a/tutorial/tutorial06.gv b/tutorial/tutorial06.gv index 3b0fb8e1..472fa8b2 100644 --- a/tutorial/tutorial06.gv +++ b/tutorial/tutorial06.gv @@ -4,43 +4,19 @@ graph { graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] edge [fontname=arial style=bold] - X1 [label=< + AUTOGENERATED_F_05_1 [label=< - -
- -
X1
-
- - - - + + + +
Molex 8981female4-pinCrimp ferrule0.5 mm²OG
- - - - - - - - - - - - - - - - - -
1+12V
2GND
3GND
4+5V
-
> fillcolor="#FFFFFF" shape=box style=filled] - F_10 [label=< + F1 [label=<
@@ -52,7 +28,7 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _F_05_1 [label=< + AUTOGENERATED_F_05_2 [label=<
@@ -64,29 +40,53 @@ graph {
> fillcolor="#FFFFFF" shape=box style=filled] - _F_05_2 [label=< + X1 [label=< + +
- - - - +
Crimp ferrule0.5 mm²OGX1
+ + + + +
Molex 8981female4-pin
+
+ + + + + + + + + + + + + + + + + +
1+12V
2GND
3GND
4+5V
+
> fillcolor="#FFFFFF" shape=box style=filled] edge [color="#000000:#ffff00:#000000"] - _F_05_1:e -- W1:w1:w + AUTOGENERATED_F_05_1:e -- W1:w1:w W1:w1:e -- X1:p1l:w edge [color="#000000:#000000:#000000"] - F_10:e -- W1:w2:w + F1:e -- W1:w2:w W1:w2:e -- X1:p2l:w edge [color="#000000:#000000:#000000"] - F_10:e -- W1:w3:w + F1:e -- W1:w3:w W1:w3:e -- X1:p3l:w edge [color="#000000:#ff0000:#000000"] - _F_05_2:e -- W1:w4:w + AUTOGENERATED_F_05_2:e -- W1:w4:w W1:w4:e -- X1:p4l:w W1 [label=< diff --git a/tutorial/tutorial06.html b/tutorial/tutorial06.html index 21df96aa..8fba7133 100644 --- a/tutorial/tutorial06.html +++ b/tutorial/tutorial06.html @@ -1,60 +1,54 @@ - - - tutorial06 - + + + tutorial06 + +

tutorial06

Diagram

- - + + +
+ + - + -X1 - - -X1 - -Molex 8981 - -female - -4-pin - -1 - -+12V - -2 - -GND - -3 - -GND - -4 - -+5V - - - -F_10 - - -Crimp ferrule - -1.0 mm² - -YE - - +AUTOGENERATED_F_05_1 + + +Crimp ferrule + +0.5 mm² + +OG + + @@ -91,43 +85,43 @@

Diagram

  - + + +AUTOGENERATED_F_05_1:e--W1:w + + + + + + +F1 + + +Crimp ferrule + +1.0 mm² + +YE + + + + -F_10:e--W1:w +F1:e--W1:w - + -F_10:e--W1:w +F1:e--W1:w - + -_F_05_1 - - -Crimp ferrule - -0.5 mm² - -OG - - - - - -_F_05_1:e--W1:w - - - - - - -_F_05_2 +AUTOGENERATED_F_05_2 Crimp ferrule @@ -138,13 +132,42 @@

Diagram

- + -_F_05_2:e--W1:w +AUTOGENERATED_F_05_2:e--W1:w + + +X1 + + +X1 + +Molex 8981 + +female + +4-pin + +1 + ++12V + +2 + +GND + +3 + +GND + +4 + ++5V + W1:e--X1:w @@ -175,56 +198,68 @@

Diagram

+ +
+ +
+ +
+

Bill of Materials

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule, 0.5 mm², OG2
2Connector, Crimp ferrule, 1.0 mm², YE1
3Connector, Molex 8981, female, 4 pins1X1
4Wire, 0.5 mm², BK0.6mW1
5Wire, 0.5 mm², RD0.3mW1
6Wire, 0.5 mm², YE0.3mW1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Crimp ferrule, 0.5 mm², OG2
2Connector, Crimp ferrule, 1.0 mm², YE1
3Connector, Molex 8981, female, 4 pins1X1
4Wire, 0.5 mm², BK0.6mW1
5Wire, 0.5 mm², RD0.3mW1
6Wire, 0.5 mm², YE0.3mW1
+ + + diff --git a/tutorial/tutorial06.svg b/tutorial/tutorial06.svg index 4eb4093a..99f61192 100644 --- a/tutorial/tutorial06.svg +++ b/tutorial/tutorial06.svg @@ -1,54 +1,25 @@ - - + -X1 - - -X1 - -Molex 8981 - -female - -4-pin - -1 - -+12V - -2 - -GND - -3 - -GND - -4 - -+5V - - - -F_10 - - -Crimp ferrule - -1.0 mm² - -YE - - +AUTOGENERATED_F_05_1 + + +Crimp ferrule + +0.5 mm² + +OG + + @@ -85,43 +56,43 @@   - + + +AUTOGENERATED_F_05_1:e--W1:w + + + + + + +F1 + + +Crimp ferrule + +1.0 mm² + +YE + + + + -F_10:e--W1:w +F1:e--W1:w - + -F_10:e--W1:w +F1:e--W1:w - + -_F_05_1 - - -Crimp ferrule - -0.5 mm² - -OG - - - - - -_F_05_1:e--W1:w - - - - - - -_F_05_2 +AUTOGENERATED_F_05_2 Crimp ferrule @@ -132,13 +103,42 @@ - + -_F_05_2:e--W1:w +AUTOGENERATED_F_05_2:e--W1:w + + +X1 + + +X1 + +Molex 8981 + +female + +4-pin + +1 + ++12V + +2 + +GND + +3 + +GND + +4 + ++5V + W1:e--X1:w diff --git a/tutorial/tutorial07.html b/tutorial/tutorial07.html index fd226a10..181abea8 100644 --- a/tutorial/tutorial07.html +++ b/tutorial/tutorial07.html @@ -1,13 +1,36 @@ - - - tutorial07 - + + + tutorial07 + +

tutorial07

Diagram

- - + + +
+ + Diagram + +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins6X1, X2, X3, X4, X5, X6
2Wire, 0.25 mm², PK1.0mW1, W2, W3, W4, W5
3Wire, 0.25 mm², TQ1.0mW1, W2, W3, W4, W5
4Wire, 0.25 mm², VT1.0mW1, W2, W3, W4, W5
5Wire, 0.25 mm², YE1.0mW1, W2, W3, W4, W5
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignators
1Connector, Molex KK 254, female, 4 pins6X1, X2, X3, X4, X5, X6
2Wire, 0.25 mm², PK1.0mW1, W2, W3, W4, W5
3Wire, 0.25 mm², TQ1.0mW1, W2, W3, W4, W5
4Wire, 0.25 mm², VT1.0mW1, W2, W3, W4, W5
5Wire, 0.25 mm², YE1.0mW1, W2, W3, W4, W5
+ + + diff --git a/tutorial/tutorial07.svg b/tutorial/tutorial07.svg index 7a18935b..e5cf4314 100644 --- a/tutorial/tutorial07.svg +++ b/tutorial/tutorial07.svg @@ -1,7 +1,7 @@ -
- +
1 x Test
P/N: ABC, Molex: 45454, Mousikey: 9999
1 x
P/N: ABC, Molex: 45454, Mousikey: 9999
@@ -106,7 +106,7 @@ graph {
- +
1 x Test
P/N: ABC, Molex: 45454, Mousikey: 9999
1 x
P/N: ABC, Molex: 45454, Mousikey: 9999
@@ -159,7 +159,7 @@ graph {
- +
1 x Test
P/N: ABC, Molex: 45454, Mousikey: 9999
1 x
P/N: ABC, Molex: 45454, Mousikey: 9999
diff --git a/tutorial/tutorial08.html b/tutorial/tutorial08.html index ce4f1aee..09e56003 100644 --- a/tutorial/tutorial08.html +++ b/tutorial/tutorial08.html @@ -1,13 +1,36 @@ - - - tutorial08 - + + + tutorial08 + +

tutorial08

Diagram

- - + + +
+ + Diagram 4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 @@ -236,7 +259,7 @@

Diagram

4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 @@ -269,7 +292,7 @@

Diagram

4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 @@ -330,139 +353,151 @@

Diagram

+ +
+ +
+ +
+

Bill of Materials

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
IdDescriptionQtyUnitDesignatorsP/NManufacturerMPNSupplierSPN
1Cable, 4 x 0.25 mm²1mW1CAB1CablesCoABC123Cables R Us999-888-777
2Connector, Molex KK 254, female, 4 pins2X1, X3Molex22013047Digimouse1234
3Connector, Molex KK 254, female, 4 pins1X2CON4Molex22013047Digimouse1234
4Crimp, Molex KK 254, 22-30 AWG12X1, X2, X3Molex08500030
5Label, pinout information2X2, X3Label-ID-1BradyB-499
6Sleve, Braided nylon, black, 3mm1mW2SLV-1
7Test3X1, X2, X3ABCMolex45454Mousikey9999
8Wire, 0.25 mm², BK2mW2WIRE2WiresCoW1-BKWireShack1002
9Wire, 0.25 mm², RD1mW2WIRE3WiresCoW1-RDWireShack1009
10Wire, 0.25 mm², YE1mW2WIRE1WiresCoW1-YEWireShack1001
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdDescriptionQtyUnitDesignatorsP/NManufacturerMPNSupplierSPN
13X1, X2, X3ABCMolex45454Mousikey9999
2Cable, 4 x 0.25 mm²1mW1CAB1CablesCoABC123Cables R Us999-888-777
3Connector, Molex KK 254, female, 4 pins2X1, X3Molex22013047Digimouse1234
4Connector, Molex KK 254, female, 4 pins1X2CON4Molex22013047Digimouse1234
5Crimp, Molex KK 254, 22-30 AWG12X1, X2, X3Molex08500030
6Label, pinout information2X2, X3Label-ID-1BradyB-499
7Sleve, Braided nylon, black, 3mm1mW2SLV-1
8Wire, 0.25 mm², BK2mW2WIRE2WiresCoW1-BKWireShack1002
9Wire, 0.25 mm², RD1mW2WIRE3WiresCoW1-RDWireShack1009
10Wire, 0.25 mm², YE1mW2WIRE1WiresCoW1-YEWireShack1001
+ + + diff --git a/tutorial/tutorial08.png b/tutorial/tutorial08.png index d2b10be44127e33b89b0da5dfea90f6ca17e79de..b6cefb930d8c17b3893a1d3224e3cdd814a409c4 100644 GIT binary patch delta 125763 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

-hJ(a6ox*7E5meZ1Onmf%Wm*z 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 z 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 diff --git a/tutorial/tutorial08.svg b/tutorial/tutorial08.svg index a6125f23..391897ae 100644 --- a/tutorial/tutorial08.svg +++ b/tutorial/tutorial08.svg @@ -1,7 +1,7 @@ - 4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 @@ -230,7 +230,7 @@ 4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 @@ -263,7 +263,7 @@ 4 x Crimp, Molex KK 254, 22-30 AWG Molex: 08500030 -1 x Test +1 x P/N: ABC, Molex: 45454, Mousikey: 9999 From 1435d9c6076ff8af0c8460344a1fd6de261b1844 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 13:11:19 +0200 Subject: [PATCH 003/111] Add `metadata.title` to `demo01.yml` to avoid diffs later when calling via CLI --- examples/demo01.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/demo01.yml b/examples/demo01.yml index 56c77c11..fc93c5c2 100644 --- a/examples/demo01.yml +++ b/examples/demo01.yml @@ -1,3 +1,6 @@ +metadata: + title: demo01 + connectors: X1: type: D-Sub From 82b5cb710f12b0c5eb45c65bf0e8d58301f2d39d Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 13:12:44 +0200 Subject: [PATCH 004/111] Add temporary loop to `demo01` for debugging purposes --- examples/demo01.gv | 2 ++ examples/demo01.html | 21 ++++++++++++++------- examples/demo01.png | Bin 56966 -> 64020 bytes examples/demo01.svg | 21 ++++++++++++++------- examples/demo01.yml | 2 ++ 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/examples/demo01.gv b/examples/demo01.gv index 49261168..56dc5f70 100644 --- a/examples/demo01.gv +++ b/examples/demo01.gv @@ -60,6 +60,8 @@ graph {

> fillcolor="#FFFFFF" shape=box style=filled] + edge [color="#000000:#ffffff:#000000"] + X1:p7r:e -- X1:p8r:e X2 [label=<
diff --git a/examples/demo01.html b/examples/demo01.html index 207bb10f..c7b557b4 100644 --- a/examples/demo01.html +++ b/examples/demo01.html @@ -86,6 +86,13 @@

Diagram

9 + + +X1:e--X1:e + + + + W1 @@ -126,28 +133,28 @@

Diagram

 
- + X1:e--W1:w - + X1:e--W1:w - + X1:e--W1:w - + X1:e--W1:w @@ -177,21 +184,21 @@

Diagram

TX
- + W1:e--X2:w - + W1:e--X2:w - + W1:e--X2:w diff --git a/examples/demo01.png b/examples/demo01.png index f8a95a3174c31f80b6df25a6195122dffa87122b..75ac33326f449d797d3c934cbf90c161630ef096 100644 GIT binary patch delta 12785 zcmbWdcQn_1{5P&Ww4@M85eivFwk8cxSJ^W=dyDXHtE>w}MpWvOY_eC8J+oK#DtmA4 z$6I~Rx&Qh7?)%)IbDS%e&*$@gjpulb=hLhWFQ+!dIe%S$m?Dw*dSEM2kr&1>y5g0? z?&~ph#_k-=<*m0*Mmd~mx)dlN<}mHTF;U962{&K!Plq;oPo#+p^Qzbs%h;G0?n`|NVo9TNpr zb@g&rCYPd_;g+D_?xCTwRLgE+ZmLGkVJN<^sHDWmZrA;c3{edYjk&owUaOu<$!0%a zL`HI+)GssSSHBdPAX`o^=^}RM(4lLd*FwY&+#k(ZU3t;K%DncnO0#)w!73o|O2D{& z&!I!IIWEf08Q4>%e==vj z+`KWxoXK@JlbMwXQTJJ%qSYdAXY#RY7uH@q35NDNO=(Z4=yE+!Q&G9%=qR!{I~pDp z<-RzQ;f0?{q1pNVP=nF7EV1$L)KMx)FQ{0gs=}mq|MSm3N;xj#(w+x9Bf>+B62vCu z9DaTDS4!01$>cP)&i<#Zze4t%Z@zL8#U-ye1B5J@d9sN)=Hr&7i`_3y)PMPCbzP{8C9z1ZT<9kT1;<7K>ZTgtlpM`BsF z?%YY}wP!oGI?w)WwXPIb;-YbKb`B7==cc6LinDe2bFs{(CA#rST#~I+w6uj^?$o^I z*Sq3-IE>{OCnpOl>yty`jy9=hbSr{|xs($gGiALIRQ%_kb9Q!u-rnBV9`dLr)>|cI zY5e)B>XGj$8Qz@Hog*W%t1HW<>IH;AeoYOvoSdAh|B=6O)MWGQY4YDkGbg{dxcKK@ zE_~R(FXqp=JbU)#VebAv!9nG%a6R>Z-d(+YyW-z>Ur;&Q`Qq=}FL5@84u1XiXiLCJ zgNj#C7gcVT`kkO~ti)Rh^6fFazWLhmOBT{k`SRuE!oq@JY*T3|rEl@$ zH*Xk2LP98ngoHZ!`kp2xo_r%>n~P&&XJ>D1ZMCqr&inC$iid}%_2>cTqyWiXHQ*v_s)~gAL ziIt1a8XAYNe!+;E;^J+zw6sIR!7-%?c6thRM~@!}W?`RI(_~UmS?Trm?P1h_ZQHjq^YZ>%Rdqc# zH+L%~CClN%9X|j2G9qQppWmRYto-5QNAJKuGC%L!xl^EMtW{mFrmh}z?aBDW1WwDh z;*IEO(Z1imU%0w%8EcOa8W|aBY-#E4>U!wwdo!q^Q2}d;AR;2(y?_5OA%VXlMEok2 ziwis9*%9wKQCwNcE-4xM@ZowRBclq3<%I>ugoFf?Ns)fxii!%Us=YKcQg`nP-MDe% zf|S(Wy?Y-P>!u$};a-bH{|7iP&Y_{E#1G-&47Z;PT!`O%48^auzCQW4FfMWH)~#O~ z8fcjarcnL%lzoAXEt;Y^yQ0DjRKiecT3gj7CMMjgdZ&KX^z`)n8xU|=R(2OY-_zHZ zJm;dIsObCh+E!?y28(Zbe0x9A`(ap(q{T)uOn4`*w7U>RNa0G2^XqWw3B!@xCWZOHOv9ZRN<7i0J5##Olh9 zLt?N0{rBJc_Dfq7R8?EL?oFL{adBaExpKkQR-n*}ssH

H@o^IZN3$A{XuKW>}+@ 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 Z?)4|uDD@Y@j1+iXz9@Sk=A72U{{t_ delta 5676 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 9 + + +X1:e--X1:e + + + + W1 @@ -97,28 +104,28 @@   - + X1:e--W1:w - + X1:e--W1:w - + X1:e--W1:w - + X1:e--W1:w @@ -148,21 +155,21 @@ TX - + W1:e--X2:w - + W1:e--X2:w - + W1:e--X2:w diff --git a/examples/demo01.yml b/examples/demo01.yml index fc93c5c2..d5ed3ef2 100644 --- a/examples/demo01.yml +++ b/examples/demo01.yml @@ -6,6 +6,8 @@ connectors: type: D-Sub subtype: female pinlabels: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS, RI] + loops: + - [7,8] X2: type: Molex KK 254 subtype: female From f7359ff9b1f380c059be72d3ad58ca9365ba2c0f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 15:33:41 +0200 Subject: [PATCH 005/111] WIP --- src/wireviz/Harness.py | 98 +++-------------------- src/wireviz/wv_bom.py | 13 +-- src/wireviz/wv_colors.py | 4 +- src/wireviz/wv_gv_html.py | 148 ++++++++++++++++++++++++++++++++++- src/wireviz/wv_helper.py | 13 ++- src/wireviz/wv_table_util.py | 104 ++++++++++++++++++++++++ 6 files changed, 276 insertions(+), 104 deletions(-) create mode 100644 src/wireviz/wv_table_util.py diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index d99786ff..c72ab170 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -33,6 +33,9 @@ ) from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( + gv_connector_loops, + gv_node_connector, + gv_pin, html_bgcolor, html_bgcolor_attr, html_caption, @@ -174,102 +177,21 @@ def create_graph(self) -> Graph: dot.attr("edge", style="bold", fontname=self.options.fontname) for connector in self.connectors.values(): - - # If no wires connected (except maybe loop wires)? - if not (connector.ports_left or connector.ports_right): - connector.ports_left = True # Use left side pins. - - html = [] - # fmt: off - rows = [[f'{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}' - if connector.show_name else None], - [pn_info_string(HEADER_PN, None, remove_links(connector.pn)), - html_line_breaks(pn_info_string(HEADER_MPN, connector.manufacturer, connector.mpn)), - html_line_breaks(pn_info_string(HEADER_SPN, connector.supplier, connector.spn))], - [html_line_breaks(connector.type), - html_line_breaks(connector.subtype), - f'{connector.pincount}-pin' if connector.show_pincount else None, - translate_color(connector.color, self.options.color_mode) if connector.color else None, - html_colorbar(connector.color)], - '' if connector.style != 'simple' else None, - [html_image(connector.image)], - [html_caption(connector.image)]] - # fmt: on - - rows.extend(get_additional_component_table(self, connector)) - rows.append([html_line_breaks(connector.notes)]) - html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) - - if connector.style != "simple": - pinhtml = [] - pinhtml.append( - '' - ) - - for pinindex, (pinname, pinlabel, pincolor) in enumerate( - zip_longest( - connector.pins, connector.pinlabels, connector.pincolors - ) - ): - if ( - connector.hide_disconnected_pins - and not connector.visible_pins.get(pinname, False) - ): - continue - - pinhtml.append(" ") - if connector.ports_left: - pinhtml.append(f' ') - if pinlabel: - pinhtml.append(f" ") - if connector.pincolors: - if pincolor in wv_colors._color_hex.keys(): - # fmt: off - pinhtml.append(f' ') - pinhtml.append( ' ') - # fmt: on - else: - pinhtml.append(' ') - - if connector.ports_right: - pinhtml.append(f' ') - pinhtml.append(" ") - - pinhtml.append("
{pinname}{pinlabel}{translate_color(pincolor, self.options.color_mode)}') - pinhtml.append( ' ') - pinhtml.append(f' ') - pinhtml.append( '
') - pinhtml.append( '
{pinname}
") - - html = [ - row.replace("", "\n".join(pinhtml)) - for row in html - ] - - html = "\n".join(html) + gv_html = gv_node_connector(connector, self.options) + _default_fillcolor = translate_color(self.options.bgcolor_connector, "HEX") dot.node( connector.name, - label=f"<\n{html}\n>", + label=f"<\n{gv_html}\n>", shape="box", style="filled", - fillcolor=translate_color(self.options.bgcolor_connector, "HEX"), + fillcolor=_default_fillcolor, ) if len(connector.loops) > 0: dot.attr("edge", color="#000000:#ffffff:#000000") - if connector.ports_left: - loop_side = "l" - loop_dir = "w" - elif connector.ports_right: - loop_side = "r" - loop_dir = "e" - else: - raise Exception("No side for loops") - for loop in connector.loops: - dot.edge( - f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}", - f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}", - ) + loops = gv_connector_loops(connector) + for head, tail in loops: + dot.edge(head, tail) # determine if there are double- or triple-colored wires in the harness; # if so, pad single-color wires to make all wires of equal thickness diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index 6689d79a..d28e3a15 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -7,7 +7,7 @@ from wireviz.DataClasses import AdditionalComponent, Cable, Color, Connector from wireviz.wv_colors import translate_color from wireviz.wv_gv_html import html_bgcolor_attr, html_line_breaks -from wireviz.wv_helper import clean_whitespace +from wireviz.wv_helper import clean_whitespace, pn_info_string BOM_COLUMNS_ALWAYS = ("id", "description", "qty", "unit", "designators") BOM_COLUMNS_OPTIONAL = ("pn", "manufacturer", "mpn", "supplier", "spn") @@ -263,17 +263,6 @@ def component_table_entry(

""" -def pn_info_string( - header: str, name: Optional[str], number: Optional[str] -) -> Optional[str]: - """Return the company name and/or the part number in one single string or None otherwise.""" - number = str(number).strip() if number is not None else "" - if name or number: - return f'{name if name else header}{": " + number if number else ""}' - else: - return None - - def index_if_list(value: Any, index: int) -> Any: """Return the value indexed if it is a list, or simply the value otherwise.""" return value[index] if isinstance(value, list) else value diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index 857f3077..34d92410 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -178,8 +178,10 @@ def from_hex(hex_input: str) -> str: def translate_color(input: Colors, color_mode: ColorMode) -> str: - if input == "" or input is None: + if input == "": return "" + if input is None: + return None upper = color_mode.isupper() if not (color_mode.isupper() or color_mode.islower()): raise Exception("Unknown color mode capitalization") diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index ec80aa74..92c29a56 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -1,11 +1,155 @@ # -*- coding: utf-8 -*- import re +from itertools import zip_longest from typing import List, Optional, Union -from wireviz.DataClasses import Color +from wireviz.DataClasses import Color, Connector, Options from wireviz.wv_colors import translate_color -from wireviz.wv_helper import remove_links +from wireviz.wv_helper import pn_info_string, remove_links +from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later + +HEADER_PN = "P/N" +HEADER_MPN = "MPN" +HEADER_SPN = "SPN" + +# TODO: remove harness argument; only used by get_additional_component_table() +def gv_node_connector(connector: Connector, harness_options: Options) -> str: + # If no wires connected (except maybe loop wires)? + if not (connector.ports_left or connector.ports_right): + connector.ports_left = True # Use left side pins by default + + html = [] + if connector.show_name: + row_name = [ + f"{html_bgcolor(connector.bgcolor_title)}" f"{remove_links(connector.name)}" + ] + else: + row_name = [] + + row_pn = [ + pn_info_string(HEADER_PN, None, connector.pn), + pn_info_string(HEADER_MPN, connector.manufacturer, connector.mpn), + pn_info_string(HEADER_SPN, connector.supplier, connector.spn), + ] + row_pn = [html_line_breaks(cell) for cell in row_pn] + + row_info = [ + html_line_breaks(connector.type), + html_line_breaks(connector.subtype), + f"{connector.pincount}-pin" if connector.show_pincount else None, + translate_color(connector.color, harness_options.color_mode), + html_colorbar(connector.color), + ] + + if connector.style != "simple": + row_connector_table = "" + else: + row_connector_table = None + + row_image = [html_image(connector.image)] + row_image_caption = [html_caption(connector.image)] + row_notes = [html_line_breaks(connector.notes)] + # row_additional_component_table = get_additional_component_table(self, connector) + row_additional_component_table = None + + rows = [ + row_name, + row_pn, + row_info, + row_connector_table, + row_image, + row_image_caption, + row_additional_component_table, + row_notes, + ] + + html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) + + if connector.style != "simple": + pinhtml = [] + # fmt: off + # pinhtml.append('') + # fmt: on + + pin_tuples = zip_longest( + connector.pins, + connector.pinlabels, + connector.pincolors, + ) + + contents = [] + for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): + if connector.hide_disconnected_pins and not connector.visible_pins.get( + pinname, False + ): + continue + + contents.append(gv_pin(pinindex, pinname, pinlabel, pincolor, connector)) + + table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } + pinhtml.append(str(Table(contents, attribs=Attribs(table_attribs)))) + + pin_html_joined = "\n".join(pinhtml) + + html = [ + row.replace("", pin_html_joined) for row in html + ] + + html = "\n".join(html) + + return html + + +def gv_pin(pinindex, pinname, pinlabel, pincolor, connector): + pinhtml = [] + pinhtml.append(" ") + if connector.ports_left: + pinhtml.append(f' ') + if pinlabel: + pinhtml.append(f" ") + if connector.pincolors: + if pincolor in wv_colors._color_hex.keys(): + # fmt: off + pinhtml.append(f' ') + pinhtml.append( ' ') + # fmt: on + else: + pinhtml.append(' ') + + if connector.ports_right: + pinhtml.append(f' ') + pinhtml.append(" ") + + pinhtml = "\n".join(pinhtml) + + return pinhtml + + +def gv_connector_loops(connector: Connector) -> List: + loop_edges = [] + if connector.ports_left: + loop_side = "l" + loop_dir = "w" + elif connector.ports_right: + loop_side = "r" + loop_dir = "e" + else: + raise Exception("No side for loops") + for loop in connector.loops: + head = f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}" + tail = f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}" + loop_edges.append((head, tail)) + return loop_edges def nested_html_table( diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index a10f6acf..8c46299c 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -2,7 +2,7 @@ import re from pathlib import Path -from typing import Dict, List +from typing import Dict, List, Optional awg_equiv_table = { "0.09": "28", @@ -176,3 +176,14 @@ def smart_file_resolve(filename: str, possible_paths: (str, List[str])) -> Path: f"{filename} was not found in any of the following locations: \n" + "\n".join([str(x) for x in possible_paths]) ) + + +def pn_info_string( + header: str, name: Optional[str], number: Optional[str] +) -> Optional[str]: + """Return the company name and/or the part number in one single string or None otherwise.""" + number = str(number).strip() if number is not None else "" + if name or number: + return f'{name if name else header}{": " + number if number else ""}' + else: + return None diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py new file mode 100644 index 00000000..eb764088 --- /dev/null +++ b/src/wireviz/wv_table_util.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +from dataclasses import dataclass, field +from typing import Dict, List, Optional +from collections.abc import Iterable + + +class Attribs(Dict): + def __repr__(self): + if len(self) == 0: + return "" + + html = [] + for k, v in self.items(): + if v is not None: + html.append(f' {k}="{v}"') + else: + html.append(f" {k}") + return "".join(html) + + +@dataclass +class Tag: + contents: str + attribs: Attribs = field(default_factory=Attribs) + one_line: bool = False + + @property + def tagname(self): + return type(self).__name__.lower() + + def get_contents(self): + if isinstance(self.contents, Iterable): + return "\n".join([str(c) for c in self.contents]) + else: + return str(self.contents) + + + def __repr__(self): + separator = "" if self.one_line else "\n" + html = [ + f"<{self.tagname}{str(self.attribs)}>", + self.get_contents(), + f"", + ] + return separator.join(html) + + +@dataclass +class TagSingleton(Tag): + def __repr__(self): + return f"<{self.tagname}{self.attribs} />" + + +@dataclass +class Br(TagSingleton): + pass + + +class Td(Tag): + pass + # contents: str = "" + # + # def __init__(self, contents, *args, **kwargs): + # self.contents = contents + # super().__init__(*args, **kwargs) + # + # def __repr__(self): + # html = [ + # f"", + # self.contents, + # f"", + # ] + # return "\n".join(html) + + +class Tr(Tag): + pass + # cells: List[Cell] = field(default_factory=list) + # + # def __init__(self, cells, *args, **kwargs): + # self.cells = cells + # super().__init__(*args, **kwargs) + # + # def __repr__(self): + # html = [ + # f"", + # "\n".join([str(c) for c in self.cells]), + # f"", + # ] + # return "\n".join(html) + + +class Table(Tag): + pass + # rows: List[Row] = field(default_factory=list) + # + # def __repr__(self): + # html = [ + # f"", + # "\n".join([str(r) for r in self.rows]), + # "
{pinname}{pinlabel}{translate_color(pincolor, harness_options.color_mode)}') + pinhtml.append( ' ') + pinhtml.append(f' ') + pinhtml.append( '
') + pinhtml.append( '
{pinname}
", + # ] + # return "\n".join(html) From 046a1c2ea624ee945960b0d9e7af74a4729b762b Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 16:12:36 +0200 Subject: [PATCH 006/111] Refactor connector node generation --- src/wireviz/DataClasses.py | 3 + src/wireviz/Harness.py | 4 +- src/wireviz/wv_gv_html.py | 111 ++++++++++++----------------------- src/wireviz/wv_table_util.py | 15 +++-- 4 files changed, 53 insertions(+), 80 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index cdefdddd..b7d3f712 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -169,6 +169,9 @@ class Connector: def is_autogenerated(self): return self.name.startswith(AUTOGENERATED_PREFIX) + def should_show_pin(self, pin_name): + return not self.hide_disconnected_pins or self.visible_pins.get(pin_name, False) + def __post_init__(self) -> None: if isinstance(self.image, dict): diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index c72ab170..0eb98cea 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -35,7 +35,6 @@ from wireviz.wv_gv_html import ( gv_connector_loops, gv_node_connector, - gv_pin, html_bgcolor, html_bgcolor_attr, html_caption, @@ -177,6 +176,7 @@ def create_graph(self) -> Graph: dot.attr("edge", style="bold", fontname=self.options.fontname) for connector in self.connectors.values(): + # generate connector node gv_html = gv_node_connector(connector, self.options) _default_fillcolor = translate_color(self.options.bgcolor_connector, "HEX") dot.node( @@ -186,7 +186,7 @@ def create_graph(self) -> Graph: style="filled", fillcolor=_default_fillcolor, ) - + # generate edges for connector loops if len(connector.loops) > 0: dot.attr("edge", color="#000000:#ffffff:#000000") loops = gv_connector_loops(connector) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 92c29a56..88e3ea4b 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -19,10 +19,10 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> str: if not (connector.ports_left or connector.ports_right): connector.ports_left = True # Use left side pins by default - html = [] + # generate all rows to be shown in the node if connector.show_name: row_name = [ - f"{html_bgcolor(connector.bgcolor_title)}" f"{remove_links(connector.name)}" + f"{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}" ] else: row_name = [] @@ -42,97 +42,64 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> str: html_colorbar(connector.color), ] - if connector.style != "simple": - row_connector_table = "" - else: - row_connector_table = None - row_image = [html_image(connector.image)] row_image_caption = [html_caption(connector.image)] row_notes = [html_line_breaks(connector.notes)] # row_additional_component_table = get_additional_component_table(self, connector) row_additional_component_table = None - rows = [ - row_name, - row_pn, - row_info, - row_connector_table, - row_image, - row_image_caption, - row_additional_component_table, - row_notes, - ] - - html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) - if connector.style != "simple": - pinhtml = [] - # fmt: off - # pinhtml.append('') - # fmt: on - pin_tuples = zip_longest( connector.pins, connector.pinlabels, connector.pincolors, ) - contents = [] + pin_rows = [] for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): - if connector.hide_disconnected_pins and not connector.visible_pins.get( - pinname, False - ): - continue - - contents.append(gv_pin(pinindex, pinname, pinlabel, pincolor, connector)) - - table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - pinhtml.append(str(Table(contents, attribs=Attribs(table_attribs)))) + if connector.should_show_pin(pinname): + pin_rows.append( + gv_pin_row(pinindex, pinname, pinlabel, pincolor, connector) + ) - pin_html_joined = "\n".join(pinhtml) + table_attribs = Attribs( + {"border": 0, "cellspacing": 0, "cellpadding": 3, "cellborder": 1} + ) + row_connector_table = str(Table(pin_rows, attribs=table_attribs)) + else: + row_connector_table = None - html = [ - row.replace("", pin_html_joined) for row in html - ] + rows = [ + row_name, + row_pn, + row_info, + row_connector_table, + row_image, + row_image_caption, + row_additional_component_table, + row_notes, + ] - html = "\n".join(html) + html = "\n".join(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) return html -def gv_pin(pinindex, pinname, pinlabel, pincolor, connector): - pinhtml = [] - pinhtml.append(" ") - if connector.ports_left: - pinhtml.append(f' ') - if pinlabel: - pinhtml.append(f" ") - if connector.pincolors: - if pincolor in wv_colors._color_hex.keys(): - # fmt: off - pinhtml.append(f' ') - pinhtml.append( ' ') - # fmt: on - else: - pinhtml.append(' ') - - if connector.ports_right: - pinhtml.append(f' ') - pinhtml.append(" ") - - pinhtml = "\n".join(pinhtml) - - return pinhtml +def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): + cell_pin_left = Td( + pin_name, attribs=Attribs({"port": f"p{pin_index+1}l"}), flat=True + ) + cell_pin_label = Td(pin_label, flat=True) + cell_pin_right = Td( + pin_name, attribs=Attribs({"port": f"p{pin_index+1}r"}), flat=True + ) + + cells = [ + cell_pin_left if connector.ports_left else None, + cell_pin_label, + cell_pin_right if connector.ports_right else None, + ] + return Tr(cells) def gv_connector_loops(connector: Connector) -> List: diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index eb764088..a3264c71 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- +from collections.abc import Iterable from dataclasses import dataclass, field from typing import Dict, List, Optional -from collections.abc import Iterable class Attribs(Dict): @@ -23,21 +23,24 @@ def __repr__(self): class Tag: contents: str attribs: Attribs = field(default_factory=Attribs) - one_line: bool = False + flat: bool = False @property def tagname(self): return type(self).__name__.lower() def get_contents(self): - if isinstance(self.contents, Iterable): - return "\n".join([str(c) for c in self.contents]) + # import pudb; pudb.set_trace() + separator = "" if self.flat else "\n" + if isinstance(self.contents, Iterable) and not isinstance(self.contents, str): + return separator.join([str(c) for c in self.contents if c is not None]) + elif self.contents is None: + return "" else: return str(self.contents) - def __repr__(self): - separator = "" if self.one_line else "\n" + separator = "" if self.flat else "\n" html = [ f"<{self.tagname}{str(self.attribs)}>", self.get_contents(), From 60b2f6caa93b0ecc5dd6d6f7113aa70e4d59777d Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 18:13:59 +0200 Subject: [PATCH 007/111] Further refactor connector node generation --- src/wireviz/Harness.py | 2 - src/wireviz/wv_gv_html.py | 152 ++++++++++++++++++++++++++++++----- src/wireviz/wv_table_util.py | 31 +++++-- 3 files changed, 155 insertions(+), 30 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 0eb98cea..9630aa73 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -178,13 +178,11 @@ def create_graph(self) -> Graph: for connector in self.connectors.values(): # generate connector node gv_html = gv_node_connector(connector, self.options) - _default_fillcolor = translate_color(self.options.bgcolor_connector, "HEX") dot.node( connector.name, label=f"<\n{gv_html}\n>", shape="box", style="filled", - fillcolor=_default_fillcolor, ) # generate edges for connector loops if len(connector.loops) > 0: diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 88e3ea4b..949a8180 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -13,17 +13,22 @@ HEADER_MPN = "MPN" HEADER_SPN = "SPN" -# TODO: remove harness argument; only used by get_additional_component_table() -def gv_node_connector(connector: Connector, harness_options: Options) -> str: + +def gv_node_connector(connector: Connector, harness_options: Options) -> Table: # If no wires connected (except maybe loop wires)? if not (connector.ports_left or connector.ports_right): connector.ports_left = True # Use left side pins by default # generate all rows to be shown in the node if connector.show_name: - row_name = [ - f"{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}" - ] + str_name = [f"{remove_links(connector.name)}"] + if connector.bgcolor_title: + row_name_attribs = { + "bgcolor": translate_color(connector.bgcolor_title, "HEX") + } + row_name = [Td(str_name, attribs=row_name_attribs)] + else: + row_name = [str_name] else: row_name = [] @@ -34,16 +39,47 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> str: ] row_pn = [html_line_breaks(cell) for cell in row_pn] + if connector.color: + colorbar_attribs = { + "bgcolor": translate_color(connector.color, "HEX"), + "width": 4, + } + colorbar_cell = Td("", attribs=colorbar_attribs) + else: + colorbar_cell = None + row_info = [ html_line_breaks(connector.type), html_line_breaks(connector.subtype), f"{connector.pincount}-pin" if connector.show_pincount else None, translate_color(connector.color, harness_options.color_mode), - html_colorbar(connector.color), + colorbar_cell, ] - row_image = [html_image(connector.image)] - row_image_caption = [html_caption(connector.image)] + # + # {html_size_attr(image)} + if connector.image and connector.image.caption: + # import pudb; pudb.set_trace() + row_image_attribs = html_size_attr_dict(connector.image) + row_image_attribs["balign"] = "left" + row_image_attribs["sides"] = "TLR" + if connector.image.bgcolor: + row_image_attribs["bgcolor"] = translate_color( + connector.image.bgcolor, "HEX" + ) + row_caption_attribs = {"balign": "left", "sides": "BLR"} + row_image = [Td(html_image_new(connector.image), attribs=row_image_attribs)] + row_image_caption = [ + Td( + html_caption_new(connector.image), + attribs=row_caption_attribs, + flat=True, + ) + ] + else: + row_image = [] + row_image_caption = [] row_notes = [html_line_breaks(connector.notes)] # row_additional_component_table = get_additional_component_table(self, connector) row_additional_component_table = None @@ -62,9 +98,12 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> str: gv_pin_row(pinindex, pinname, pinlabel, pincolor, connector) ) - table_attribs = Attribs( - {"border": 0, "cellspacing": 0, "cellpadding": 3, "cellborder": 1} - ) + table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } row_connector_table = str(Table(pin_rows, attribs=table_attribs)) else: row_connector_table = None @@ -80,19 +119,20 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> str: row_notes, ] - html = "\n".join(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) + tbl = nested_table(rows) - return html + if connector.bgcolor: + tbl.attribs["bgcolor"] = translate_color(connector.bgcolor, "HEX") + elif harness_options.bgcolor_connector: + tbl.attribs["bgcolor"] = translate_color(harness_options.bgcolor_connector, "HEX") + + return tbl def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): - cell_pin_left = Td( - pin_name, attribs=Attribs({"port": f"p{pin_index+1}l"}), flat=True - ) - cell_pin_label = Td(pin_label, flat=True) - cell_pin_right = Td( - pin_name, attribs=Attribs({"port": f"p{pin_index+1}r"}), flat=True - ) + cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}, flat=True) + cell_pin_label = Td(pin_label, flat=True, empty_is_none=True) + cell_pin_right = Td(pin_name, attribs={"port": f"p{pin_index+1}r"}, flat=True) cells = [ cell_pin_left if connector.ports_left else None, @@ -119,6 +159,39 @@ def gv_connector_loops(connector: Connector) -> List: return loop_edges +def nested_table(rows_in: List[Tr]): + outer_rows = [] + for row in rows_in: + if isinstance(row, List) and len(row) > 0 and any(row): + # remove rows which are none + row_no_empty = [cell for cell in row if cell is not None] + inner_cells = [] + for cell in row_no_empty: + if isinstance(cell, Td): + inner_cells.append(cell) + else: + inner_cell_attribs = {"balign": "left"} + inner_cells.append(Td(cell, attribs=inner_cell_attribs, flat=True)) + + inner_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } + if len(inner_cells) > 0: + inner_table = Table(Tr(inner_cells), attribs=inner_table_attribs) + outer_rows.append(Tr(Td(inner_table))) + elif row is not None and any(row): + outer_rows.append(Tr(Td(row))) + if len(outer_rows) == 0: + outer_rows = Tr(Td("")) # Generate empty cell to avoid GraphViz errors + outer_table_attribs = {"border": 0, "cellspacing": 0, "cellpadding": 0} + outer_table = Table(outer_rows, attribs=outer_table_attribs) + + return outer_table + + def nested_html_table( rows: List[Union[str, List[Optional[str]], None]], table_attrs: str = "" ) -> str: @@ -193,6 +266,24 @@ def html_image(image): return f"""' + if image.fixedsize: + # Close the preceeding tag and enclose the image cell in a table without + # borders to avoid narrow borders when the fixed width < the node width. + html = f""" +
{pinname}{pinlabel}{translate_color(pincolor, harness_options.color_mode)}') - pinhtml.append( ' ') - pinhtml.append(f' ') - pinhtml.append( '
') - pinhtml.append( '
{pinname}
+ +
{html}
+ """ + return f"{html_bgcolor_attr(image.bgcolor)}{html}" + + def html_caption(image): from wireviz.DataClasses import Image @@ -203,6 +294,12 @@ def html_caption(image): ) +def html_caption_new(image): + from wireviz.DataClasses import Image + + return f"{html_line_breaks(image.caption)}" if image and image.caption else None + + def html_size_attr(image): from wireviz.DataClasses import Image @@ -218,5 +315,20 @@ def html_size_attr(image): ) +def html_size_attr_dict(image): + # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object + from wireviz.DataClasses import Image + + attr_dict = {} + if image: + if image.width: + attr_dict["width"] = image.width + if image.height: + attr_dict["height"] = image.height + if image.fixedsize: + attr_dict["fixedsize"] = "true" + return attr_dict + + def html_line_breaks(inp): return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index a3264c71..b5a36e6e 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -24,13 +24,25 @@ class Tag: contents: str attribs: Attribs = field(default_factory=Attribs) flat: bool = False + empty_is_none: bool = False + + def __post_init__(self): + if self.attribs is None: + self.attribs = Attribs({}) + elif isinstance(self.attribs, Dict): + self.attribs = Attribs(self.attribs) + elif not isinstance(self.attribs, Attribs): + raise Exception( + "Tag.attribs must be of type None, Dict, or Attribs, " + f"but type {type(self.attribs).__name__} was given instead:\n" + f"{self.attribs}" + ) @property def tagname(self): return type(self).__name__.lower() def get_contents(self): - # import pudb; pudb.set_trace() separator = "" if self.flat else "\n" if isinstance(self.contents, Iterable) and not isinstance(self.contents, str): return separator.join([str(c) for c in self.contents if c is not None]) @@ -41,18 +53,21 @@ def get_contents(self): def __repr__(self): separator = "" if self.flat else "\n" - html = [ - f"<{self.tagname}{str(self.attribs)}>", - self.get_contents(), - f"", - ] - return separator.join(html) + if self.contents is None and self.empty_is_none: + return "" + else: + html = [ + f"<{self.tagname}{str(self.attribs)}>", + self.get_contents(), + f"", + ] + return separator.join(html) @dataclass class TagSingleton(Tag): def __repr__(self): - return f"<{self.tagname}{self.attribs} />" + return f"<{self.tagname}{str(self.attribs)} />" @dataclass From 98e594cf96c7beb31a8d084d4f06ee1428662019 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 19:22:59 +0200 Subject: [PATCH 008/111] Rebuild demos --- examples/demo01.html | 2 ++ examples/demo01.png | Bin 64020 -> 64428 bytes examples/demo01.svg | 2 ++ examples/demo02.html | 6 ++++++ examples/demo02.png | Bin 188704 -> 189607 bytes examples/demo02.svg | 6 ++++++ 6 files changed, 16 insertions(+) diff --git a/examples/demo01.html b/examples/demo01.html index c7b557b4..8dcb5501 100644 --- a/examples/demo01.html +++ b/examples/demo01.html @@ -41,6 +41,7 @@

Diagram

X1 + X1 @@ -162,6 +163,7 @@

Diagram

X2 + X2 diff --git a/examples/demo01.png b/examples/demo01.png index 75ac33326f449d797d3c934cbf90c161630ef096..179147d40af80914f3f4c48b272f91804bd1757b 100644 GIT binary patch literal 64428 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�tlzlJu#EDz8-y$P86csfXNNDlUxbV}b10lc& z_CR5xGP1R`ZGI>}_7BJifC((?r09_R^5#wNWVi>D^)i2w8n6V+?tv~F>iWWnuS<#8 z-hoBQ$32I6Mee%wxuUT*(kHu2miNCeHk=IqfY=TnUEZ5bGqxpUAls6(s7ceN%#D9{ z$Sh)x;zQ?z)E1~X5ZQAWU)z1~;Ha#0Liyr>%C{4g+qNAVpLqFlPP=Z_omyFUYV!V} z?e6t`!h&tXnmdK7JBO(+343@n%rI!(msj|T5&31v4MozEiwZPTEwLp;61?6#2!Mn7 zCqpfFNAFo@=N2ykcFB@%UAqQ8W+M4)FJ;#-Lzgf^_b|hyb9~)PWWD34esEJ^Ny*uP zihDcUU@J$)l{A}ePqe)hx_ zhrt%iH4-&C$f-ry>cYWkG=LE#U)ev=CnGfasoD%5@3>Zx1+jwue{`LJDO+QmvpBHP z*(?mMc~WE+92CTJbXtb`&67skhjqGxFQGFRU0T5sgZ1%5rUivpkh%Qh!qc~tW7QlVH{%EmEc>-5zz*OA%wg`X+j%G)d9fC!~C3T_5B8R z_V)ivAA9M@AJKpgD22VtXa>1lQ}yfz+aZEmbHAr9{Q;HX80pael_R2$hK3DAfzWQ0 zp7)*<{k*iZ%ZIxq-Tki`oHuW>ov$uvgGIXE+|~R{V+2-P!RwXiZn9?D>le^( zhuvSs?fpL`Tp^gP6aumsOuQC)P&=&nzB=rPfENct%zB5tN27^^fQNX z!k-gG5H4Jx0>DmU3Nl8T%nZ-FZAk+L$^|iATalz9nkYt*i9_p{FR#><2rkYR$Lm(i zoCxA@|NClr~myi z4>zs5OHV9~*n>g;WvDuvienERLo?y_*W zE6O1B^dj*YGv@h|qG)r@9uYY}uiIErCy3zy))A7)YK2Yz@ig2m4fC5`6IV7@*MWdx zgXmSf=&oJ%09;}QncMo$H@kcmV2c_SN@_?^QIR-e35Z^|vyCm6=I^Aj7yp!o^T;DP z(X--$s!oBwUHh)CMwq^I$hYz(uhmHBVaZ6!_h&$+$Kg}a-FzNTV{w*b30pZt$QbTl-<*& zHB+22tW}3;!k^TA{Z|3_7LB@(R8#AZ6!*t>pJ?#E)#V|2OM4_P_Eh$>4Xdo*^Lwk@GDN&RnEm}%x zNPE}wK043q{y+Eqf9~ggp03O5I?pb@@%cJp)BijH-u}bSP@6 zAw|*n(J#YqMm|+MqC`&y-}8OHemv}ZjNR78cnU&6S&H%uII~g-GWXjLty;S zSI)o&mi-lZ-jn?%^(XAtMxMAmF(E&b;8=BM>h!Nw+gqz*HnAwuGqe2jqpe!X*&|2G z|IbgX%(`15O8@@EzwTuC&)*W_?3JVV`D;^pdaOLJ?NhSLTgJHl^_w^QTg~xKzeD_% zG_kVii?RkPwem679IvXaWv!{H(MV@z(N<=8D`*%HAiPyZMrQG)kJ$tdw|z@F{?dJ9 z3;8rXbBR1fCB6M+rKLS`OZhLZWL&p>X+}oI^y(`C0f(OLdL;Hgz6JS<|NQ7NXr%t< z8X{=_*DtM2m+8IWb-po^E-x=n&C>PH_cxJZ$J3qr3?gjAO^ZUrj_0;bkM#*x+O-q} zrl(7!yi>>9j&3n?@DB(`pl!@|6+d`mV_;|Jsrbx*0Q!)PyIJ2}Wqj+ua_#L3!!(oY zVVhJset&tUX4%--*wb3P*Td7ZQot7XFm^cP0|)+xp|q@wj-4$Ni`?G`!NvQmFM$`i{cWR}pZv)*MJ`D%&4kOv#f7|)gQMexzis>7 zryd`;#v691GmYaz|MxsLAt52Pw8b5yFYxc1WG?+snYOH~y!xkN2$PDn>>Q z6Gk-+4W)b1Hd@IBV*bvB(*i5;+1kpbWCv=~eJS$16n*br5T%G64I1R8WAQ8?bFIX68${dFLl zAo&od-?elRB8J~o5*Am6`=6Bwy?&ihR7{Lz{raHi&qd=qgDzjDdF48I13M%xF3!FH zdx$^QVsX3c?RW0`#&~JskAGm`3R&mgIK7svGe-orZ0TssI`hvV;JEV7rmMhRRitx*S+Cu+7|N6g`g(*-ec91!sN6ck*^1>=ES-pQM z%TjW`IBws(d9&!i=LT$X8Vb9)&QV}gcK`nUR$rbn%DVn}KB$%5`}y&KU7pjU8{Fr5 zDzH85yDB)OY?}01A1@XtC3?P5uB9kdH~Ir3WQNMUuPkGvC>gt!ujH**1D7f&C>Z6O zjVL-$BW!AFx|EKtFs%M&>Z*TAQ9w{o2l*m;+NJg%$=Z;gSe?akK{i}K0{h}tSp2;( z-4@ile}2?1XVKxF1R57!RY=C@ev2ZGm#X}z#LLEfV# zR{8J9$QM_u_02Erc;w~f?HA@fDe=?WSQYmPNAOEXFc%dST@2PV^b8Fc{W&@GGvNC5 zI#*65y?0kvt&6>FrmdE`QO;%6pFe+OR|Xw2?H?GJ`b4X}g8YtL^Sc{d!Fi6|iu_@( zTU&V^de84ZTbJaYak9KuPATHg_q;0?e!hG2<_!&MmV~6_oAAx*f9niQA7f3TWu4Dv z3`B_@^$iVWc5`=sQ(nHDalO=QG%!iWUm7p-^7wY{)bzfIcHGXMNvoKZdZDwP0olDN;5sH}G^r+DI zK=U=b;<+_no*jug!j^LGRWDY}8++5<-u^Q#H_j64tD>b9T9L_bx-v66+pn`ne&8D1lODJ^4tN3`nUAs7M2_D%tUKjNFvlhzjCINw^s3Vk*knU4nTqDY};@Pvp z8#ivWAM4dWWoc>N_WCmCj?*EB$2B+f_xGEfIkTKPq^i1KQIR%M^k{5-bgoVFGF&q0 zWCQnZqo~F{dPIpBJom}U+CjZ8EnWKH!Gp=3CpSN5Tk9$vJlMNAFE&}>kkWK_TbmDh zNw3^0e&HqS1r4#9`b8>AqtaW`S~s#4u8=<8;DfU1Zb3(V{PfBE^y#bJ)eo0YXlN|# z>`Rv~U;Z&>x30>N%hD`wgyOTup7 zUbo}8(EFgaFlI`qS}m2b};uGG}jzr(|d01fIt47Nx~vFkoN?4On-*DhSm+6J)&!01|S#wq8Cie%^h;aZT;oo{2*EkuBd3=!Gp`LGV!dYdKxk|ZQrp&^3wSEsfJCvckkwuKF>Km*qSzC zH!?pzV<+$SmohLgP_xXm^qw732^+Y6{rXT>l&Qt+@Y1<& z&9YUTKG@nPdp~H}3Mm=}w%x`w6H{;zEZ~e`_&MSXfv_~N4uB(GX3C@^(cNG`eDcE}HIXPut6Lm9O2Tg!MdMspa z_hd4yiIz3ii$SLG+1 z6r6cOgTsqFWErTWc)4D-mP^nfWzL0ZED9ZdinBY{T9O{!?e`&!;P(d^=WBZN7gu^A0;+N zMqSprb?a8w&*%NkFPKnzRg{$cW`CLfXtZB1Wkv1XyB8gbPf&0YSuhHu>5}U4YgP0JB+V#D|iH8CD`R8?D3-9^NqeI@?8=| zi$Ro1N=hn(mH7EnBzEk$^5TUI0|Nu|+O^NLwp?Op|MMe%^TmPv8+yMcE(uifotYRE ziTDutfmJb$jhUGOs&8m+{@GLWL`~+Y@&#vSy1yN3Q|pC#4<5a5`cdsmuDn%C!R}+( zR+q7s?@b-u7v?6qD(_0$96Qw<6SMLBk5~HhvSA?^8IlB`4m7_w*_3Vl(sL$P=YFOE z_jKF67L+Qd_+vR|0|Eoz0ELknnD~5$`|v67CY|=gx4yo#9^;K?-0;SdR-bu8*6(B( zA0JQ8%6f~+;KZTud&Po`*n!Q3TP-uQvTBOGy(g!qBb|Yl&wlv$u@qli|L}gn4Kn;Y zcIXy~qABIO43zk-VEa4zTNm%8_OsD6`>{^ET7qdY;YDeBTaFuiH+!@lw5ViuYNY-5 z??CJd)b<09| z_wL<$m*!o2&;LWjc7yO>Rsz%7dV7T**4_$8kWbKlvdn9K>deQ7drg0Dm_)Os7Q72P zhr24H6+C6pUejF$j)@w-WL~ji#l=fItwwul(Ak%!8t3twMm~IaGv)Y;SnLa&2BF+J zY)58JPI@dd8fXa)cjDo(-Z~a;?i=fNoZc#M$7gNYg+l_Yqkn!Jmy^?@L5XO`$?!vs zIyT0*YSrf#cBV0MuB*|MwS-Ybl-=BR39zoXIMy3KU~j6v7HBIV`)x@H?FJd!(yTMp z5+0NGon2itl-I(Xt46d0jZIVbn~De#jwZjWS4+Ns--sJRK)I->sDxz&yPKO^8 z)>*OgPPKI+AC%Xzuv|X<=`Nq7r1pS{XJCNSo7b-?8XB7S6&1e8$s#B*S8v~DC+`d( z^;Ynq2koUxmpZ$<30v7JDyoF5Z5@Ao)SepfJbF*weLIkjZ%g5&O(=VU zhhttp+JA*q?DGxj`^}r$=Vm6}R#Y&UdQEM{9g+HUUvBNyt5-u02>{*+Kh?Ms`**iX zKWChd&>B%ApZ@;ytJX^$Qn*zKoS9)+xke*q7YmwE?Nm{5A~^&AQwPk`>*|lDo6(Si z1H4@V@Q4kkc<2!Q>FNj9T?U%W>r+oe@3|z6Q>lA3EcvM|k4Me|P45KRSr5S7Ujs-c zCMMF;)9=G!|Ni3#UxXS97gtJXXVr%fZ?H)S0u^GUZ%sWRN4*9RaazCk_nPI|bu^92 zd1vc{mo8muRu!{b+2l6WHZX7n0tNK(fK#CjCJnnmq%>T(B>;T{WJ36ZL zP{9+do}j3|f9>P_RL~s>1qUOgp;%d2J9U3w_47+GE>1}iLyed8oOa^ma+Gpw&?NPRbF0RmM^a@Er^cq#Z4u5-D_q*=DAS@ts?!QcpZ<)_G=9SQY{ z{r6toT|9*kP$VoC=I4xFISExg*c069y})(+g>6JN{nnG`&p!`k_dcqmw3He%S%{N~ zc2m~VyG`+a|Nh-XELP|JhYu_uOtB~q7Qm{sJ`Jy&lPg}~n@22o;uj@fzv>y98*oy7 zL4S_u@mVD=ba!_Lt4D1MT)B2z!0fDtn9}&g$jHc&+S<&oeR-&PfJl*R_=S&oc@@39 zIF^JzXYbfPE1>1|@bDPrx(ZyKvCHvS2zGOA#Wa4G?J(C9%hVf;ia_zk#>S3vF@#lR zEEL}-=g0i~c~L3=%)|Ptw5;qgirK`(#FCxsw~pjgxRpX)?52YU4-UH~x%M|)CiLX( z+XI$AuyJ~J$@24mQjM>*IAbeR-3zq#t2tCHo|M;04>>*5xE&2mO#siEU-ev3Qi|h( z3gr8^J@|Nc)I(v9`!8SaB6`-hZ{IF%aJ=Dk?PO|?ma4egB6a1jE&Tr7_+@_n69Dz9 zs;Y)un+@Oz3r#L)l$;V~)Os1)5J0n7RD0Qg$kD(L99%-bl~swfp`XD*v2=D`h!7f*^-qH|7w{$5%U#R=LE{<*$6iVccHm(T^H@^MPOXGN&b8X(rw0c|t zb++k0Q zao!t0=Y|yiiCx9SR9@gdlI}6(ut!DhpD*X`?*8}h-`8)iF=d>o=Kh*`;`n0^6xm%) zJbRay2SyE!pU3S_Df_%&e@j4u#mq8mR?k zlgG5y=}g2*Nl5tMubpB3ciFOVliz{~S?nPsw z8kPq;_I(p0`mIu&BT=37wLqVyS3fRo>1+@Q$EJef`CBez`x_8AB_;8bP*M|UgMxxe zfC$F8ma!E20}atqv+E8(&tWJh!r9`_|E!h}9c%IDe=n|7t@(G$C=-G<^s^lA{`*Z= zWt29g1oXGxa-)LIRUQ28vVOO+rIML+@KY=-X;;d3uU- zmpyNiK}u4MOGihC7IYcl&In->O(KSP19*fDnG|`f`|#ld&?_rSW$5kOaoV1VddK?5 zzkK-;78!XJQq?1HI*`C6t5&f;-2C#w&t(9o37Lf{DK;5>3t*6DXU_%!_HY~@bhd3R zy8a{I^=ECox>aN5=7ZPQ>nDv_-&2^bs!KM!Fx;t%Re4iW!-9XSpO*HT8#9#moMwjr zS3CX6QtEIjSXD=f|4N2RTm}(h$RjbPH6}Rl~!>X6McYgM~lQesXa0 zF&+xkY?F-4+9k_YZ5@);6B=B*^wCUkM_TcG$%k8l+9}6&I`w{CfznqyE$wt+|DsnA z5dp2=19g(3Hf`DjZBNOvaOb&iW>dpml*xCuvv-Z}$k=g1&UU_dWg{!AFJ!KtkVw>q z9snZ!c;);SQVuxGl0?0v3v;ocZf012kdFiA=6paUT1G|zX#9NJx3fx1OAo&ymI2C+ ze(EzcVOS%Ujld^0&yMiCeDx|)IB&S8W)u02zzJ6%?Lyl${PSnC^AFe4AEPgW^wRTn zR<02@3EA!V%gR{}7-_OEt+>L_!4hRcxhk7KLJe)3#@pK)_baim3K9-l#FB}@*5!XK zww>o&3N!pK81gr9t?Xh$6j`vhs()z!s-WB~>^R1jPcK9!MVh|D})Vw-j?k z80EPRav!|Oof6@A0g5jX${+^NuUh5z*u2autg|8GTyh5In%5Kc`iPjddSLZw;KI8*&n=_gfBIC0y_n%XavFe`AF|c6!}o=UC0|6H z_&+Lc*Od4#-@JK5^+27l33HIIuP;H?(62!LmtpUgPqcd9gv9w6rIb^_WWyAYU7{0_)XU~bp8op@!Hqd@%^Y?hFg zUPfu$*-i&g*pO|_rlYId4jnAnFpXbCWaX0Ot4qN{zP4P$r$0vfed#**pvfjE95xcw zgKy_wd~>M}WUePTe)OwXAH>e5D8j0}p!<}*dv|tcUdO;dN{%x}eCd)VX}gwH3~a<69%0ahrXPmX4t zHp+Jq1F<%3J~%Gmo229)5y1g9fiStL)$>H70|vR>>oxJi6{?=Ht!=7KBfcHPrmIW} zlN8x_sVDNKe(a>mOqqQya{aM+#XCRUCobrtCEU}h^RQon})_JDEoT3`3_wS3X^S1&NpSRfLo^ATI5N(&J8X(3shNU z+db7iEay8-canlmo)A1`46m{ zVL$*N`oO3&=&R)1u;FK=c(L9~mC!Kg_^J_+k;|Zx0I`|B_Mx%*@oFbtCtS>QsV?VS zy@XAZl&Deqz6S|H*L&-d-$LS}w9rcmX8z;@W1qdh;SM|*U>8~tvV#{d%HkyYgH_T& z@HHxMlSC1}2Kor&i5(Qe4`&O8XY;4xIT7H3UshA{x2+zzEp1r{c6gxb*WXAe8@9ech! zV*-Tf8YA*I4^P_XKi7D?d~V%hBLr)gtSn>`Hn1<@5yrDDX)v-_DZhL7nv<0k>G=R{ zmQrCcG0!uN>G@!G3Q_@IzkcQKd%tnFgAzb&O}hC3Sd_xRst+ytUO<7CI`>V(I`74c z7ZmRU1y5nq({^^^fEvQEVwJ$r$^e~-jk}b}0KDRVVQy_L1e-G=Qv6uT3-dE+%!&ahlIl|D8??x$r5u-$JX5uiXw2qTR$Eb{L`|IZxL^Yh69#X^51z9=rvWw1poBqYQyA|m4N`1l%x z4%opMSSbhzn}YTn?tS;{!_Z6nc3+D3-A$e}z1-8E*3<0s7^^cZOFizQ0qP>q;@-^# z_$&mF&j;gGfC`9?=5*h4=FAy#WBgr!uGzpOB6w~w?VZ)4n2CGha_?UpHTk71&T&QQ*~0ijY{K*@vp4O}GQajGRG4 zl-#ae0cgts@Zc(3LXK{!bd)XqAsNwZJXq`>I0C&(}G?^G}MCXMsZho_oQ# zZ*p=nL3AY((^{$&KGqh~r+@NTI?Cpls0{md#i>l3_7xQ2;~hZF!(G51EEH*we$0wc zRQD6<_Iu$aLlYn-EwU{*VUXiX^7-}7*l1dO?Q|>nh&qhlGEn?mxAx?WS)MBIgdq|t zURhne7L9)`FgAzx!rTjH#j!#GiiMe(*K`~t(){GfO=QbJH`TLEi}p};x+7p%H1kJ} zrY%QiU^|5WSnSy04J~LMLAY4~lap@lXCiB)@`igaSAF`#flki;^yyRnO`8r_$}4YX z^V9O&Pyg8K+LtoA$Gy8Ee)(?gb%Qb%h?*6QQyGkE=)e7_!zm)sq#7QqU+c%Lk*Zbp z4!(NC<}HQ^{9gp}hEWfMHg7|<69nbmL_!!55ZdS|i;CMqYJCx#Edk*CnS&;1(L|Xk zczuOB`PVndFi;kdj)#eVL+gX{e-lEMMSnxa*@1k~qZZg6_yU5(doS&NqkVU}w<+t) zO$oGSF#Zk*m&09Pr6pBWhmG?bl#BYYU19+#N+3hV?73u6Q_Cw)t~r#OQ%;9ul6)S-Og&-dN&18x^DGEg08(Ten4Glw)!dPKbXzySw+ z=!4)xdR<*z?KG1;{^E_nKRY`GP$k%hDMk7WyH*97eP|0S`Se=V)dX0luB_S);G!e@ zPF!SLUTj^x@2OL10f7HW`rat+kXeL@ONlVB6fhL?~vkU~EnAL_Yro({Ic=h5$!xQX~h_u^CDX{N3%}ePrR`_`vP!!p6{8DIdVMMadCv=~Jy| zj@?z!yDr4ew!)70dH9fLc6K)O)~zd$X-)z~02eKnb?WgM9d*)6(o_9ugbo`kb*=`@ zk)C?#F_rnQPq(XX^+YC|TcNKsYOedqO(hpXq&eePPAl+#loc<`uiQ7cvcq}E+5(E^ zp(97iQN0C@7}TYn*ns0lG%;AvGzCRW1%G_Cc4~4xn)`=09a;-U*ai><6QK09~2&s`)NRhEYu_PE{31S-=k+&oVgqkcKyEl#GezWtNXg7 zgHbu9-F1jUWCbT~%i)-Sn+ntPDBWVtbFoAUo}Zl}(AeeA_dxWngu1G_I#_q}_{N}v zF)CC;&bg=(qx%rj%E3u%p!*}tU@f&wQ(Mi!)}-jBM`Pcz?{nkLc9MWVptg^IQ>>bE z#eiqSLPLE}xUF}-tNqt~Lf(x990uFiKSP&-ldr@V#hY*Ebw||o(OC_HJBEXs)RQ&B zMKU)yi-?F&;>(ukIPX)K8`VAETEsQhS8wPRThh?LiF&Ov@#jbT&!1PYkr8PkI-0U= zRzj)bg}olxJ9`qJF2YSvDwYi!g0V>nBt{)0R|)}}qR@Wnw48WCPq24&`7R1LwH&y^ z&rjs90p@xGX|Aoa(+_Kq^jt)J-z;zp3}W#Y`g5tkAA?KWE_`_fv&BENpgEqpO4Tb;@kG^8;~CI)47-Xz>f(92)dWW?M2R_yCESpad|09y3^i=|$BKjg9H=HXEw6 zZ7E31)`%1pIr}Xo^U+wR8UU$Fe*?|AbLWrNON@c!FkRrh!82Sh@`FOZp#UXhM7v)@isxp)lf&@WeM1D}o=b$k( z6kd`c<`AqF3uv#$Qi^SV$Sz&BtOTNRtLMc13IVNueJ?B}LODX;)xiRw{yuUYY@vLx z=aRqQfXV{D?CGfg1#2q@TeY8H5X4i$7UUS8LnlFag+^=iErTV;NkGNFXd=XYhbqsY znoDdtpDS0c9P4}KH7AQqrZ4D9MU+iLIt{c5aOw4B`sIVrN~L+ea-q8OK-13n-&bL}0pzRyP_;A}uooX08M%^}CBj$M0g7q#!j_AG;o*tXOO`Boek_N9j*hOU`Gq)% z&A=EU;yY4OBx8bO69j`Kgj13h_nDrF=^7G@xZptC#*@H2NM?8hPV7MP1xJ){=yb>K z!zp#e|EoyOq5D)rdy*)Vu%TA25#0xO3DIIdpp3Ye3KV4%#;jvRq1^#;+$BM%km{w@f*IdMF}mjO8ljfkK_#`b)3E+c|n+xM{8uWv9CqSph2ct41s>DCpP@hU z1Hk*01+U#CC$|C2tk&uTXr!{17W4Cz6c!GS_^5x|RTM!G(7BxuHXSUQvCVKUEGRHL ze|{CPoYPjW_$Rw`~W@Q?A)9`*xIZI zLO&!!ye7XY3W=ydAge%#K9$wF;OB(Jv-c+6Rp_fbDdfkzFgNH;M-4%&V9(QRl;lkc z_*=mqMi>bI&~Rd}p8I(J9f*3&P&2YXp=4|WP%N)^5V^V(heOXx3PK_;3WFf|V!#e% zI0|C0j!Q{~r+15>U@$`VLlFMf&ni@N;VI=o~^n z!N{)!L)H(591sA7m$ghQ{G1B?r|ClG&3!YQ2PR^I?g(erYnDCNd|}tR1_E3C%O8L# zWzZCYXWfT#3C$$T{K$nA8!g9PbA6`^wtrd*ML@_?hxW`=4(trnzW+1q;X`of3rYSSAI?okiQO?$T zpV;2+TrnN{d5rFH)zJH@sx?qJb?=%QbG<6!^@DRHEUjNWIyTs9N-+burc_9y^RQ4T zi_di$L4%aBKl~vlAH1+@_imxheU?1V-bDjH@(rbM+FA}r_R#UdJ{CbxD_P4M_=DER zs;ihAmaIF)G#&t4OR1n8;Zz0Eo2 z1h<(KB-G@pUmUP%8uZ_Kv{l@?_zW&?`w8%54`EG*E*rgXn-W>JP!=ifioK->~I*mTBiFxiip z*inF40q7SZo?oY?)^KrMUzqLQ3)7#(KXBu&0vLn5RxH2QSC_n&7+&$Yu+&NoO+Dka zKT^!VM!>QdDL@Q{W$)Z5+w}NAFtR()L{!XY6NeSQICge)fFb-egCylqFsuIwazy;_ zf6b3A!$Nzz$ScdkN6N5YX{WI!SqYo%>(u7n|iiCZmt;+0;a z=f8-}SobZ?@XxT)XL2MwQ zWEd12+T>C|vh>W%67k~MSS>FE#bfq*qs@(eJ~sR6k##E*Bcnf1eeSP#1B5g2p8va)j+D>+ z{&(B{8I{@UPzW=XL}H=jbXA^e{f636)DW$gLuVqdO@i!`Gc!-X?u45wmhCu)j*TwE zQ30#%3V~3FuytviQw*^9dGU@C|9*tF0hg{qjOLeW_qK6>DXlm`rX+^%M_a(BhF_%*>9lKZi#LjHf${eA+ zUDUdysc)t$ua%8OyNrdCGXQ|aq}7~4S*f@@?6jX*-w8<=f24XMx1C^s-7*WtM9;{m zzx!N0xC_>GxXExI@qSTLMLcvL{6FdHLCC=t<%&^+_q|>)H5aNN;R=T?wfNG|^WS`s zisqPNEPjf^1rL&_oM$aPn;uo|)^QFwVQl=j?ah+ep>m#K%b}s61d~Epq|85K_yy_T z4s5OAVL%x`{DSeA+lIZPp1`#pQ(aMDhSuyar$GZIOZX)Fw-I|f;`dw zTU#{A-5>3(TZx#9P_EeDjvRhn-7h-VYer#9Xe;Xz=<=8C zK2#?e`JaPN(50aX*N1K`t}faQksD0-v1@C9Ne4V zt5avPVUGK=ZL7EL%pN3Xau-Ln95B~s@9L_ue?JXE=NS-3o|_h%^fgbR50E&+-wLo2 zIx@qD6NY38M{^NyI6)-jIQn-X{70k=jN=fIU;fhgD$H)++L`oH%UfEwvFxuwN7d(o zN>Sx$_RV*e+|v+_hy^zt7BoDyW66hbk=Mb`NRRhJnyej$&epA4wYGX6-M5b-_cfx0UdcOJVAf~d^-fFedU{rF7FTW9n z5(f;aAl#Y~Bm|*PlA!0vK>n*&B^X^n=D6%z7Q8Wl7!s}Uf3}&ZlhM&z7bZ}BfJS>P z>bsD41~=g2<)uhG;zIwTXo#3Vgd0~^U~uqCAjZpbu77wH6u9v|QN^^h1&6W;G*(qr z-R00p55c9qrzfF2Kwafa5f3x74=U#q*lrDZj)L$Qw0}vS%|iM3J!5ygSg(5a_nHMmiCjvcLUZnKf)&ZPN{vCHRr2B#dlu>CMXB$l60k%2rl?duIW z3rCM0MWEQ_j>nS8E!<4}wco+?|9+BbeFOZU6lVH&_-Dc(rr8&^gF-6+Be#gudBS$169P7{^? zNh--K&A2U?dBKp__RtUCHa8!CT=3uK_>@KF4)90~%#fTX$f5k6Jy1DP9oiZ)AARy- zx?MC_e0}agfbdf^DXK{|mF(+eLzA%-MJ}eHAdCjk`0#iMmtITYrzKH9_Q(^(UMGm- zLCnPtlvD;w;Ndk?Deh3PaW`5l!EVQzs{uKG{rVM)W8DFPmBDh;!4MKB!RRPQ{tbky z7o~Qp1ac~JUm|sR2qqG#p5ldBfx$kF2l7WLW*OV>T1k5$Nz?3uCZL^jR^NX+4-XH` zKDg*2Ir)y=Hzr}%(orm|tiw%n^=mb&!b0NX;}I>0qId~H)cXS~48wM!Na-j+KGK=` zFNi1oABd-I+!SZsx_}vlrBwUCfEdHdmFk6_npNtmGyg%@aKlPIebP+vjM#zHHX(V;imi_eSfIug9pDv~ z0cIhi0@y|ts520_auuflP%gj{Bgs;P3zS~i{*XGhfJ7|O!a~;VSO)CjuP0oF?=FF~ zB67a;XhLO|1`8MYKlIgTDQi|7!uZUT5U2=51f=InN1OyxOzb#~WIo|9T4e{23Yoye zcOc^!pvZGM7b;A`U@0nwIm5TB?Bt75P2YZs_YqAHMo0=>zoF*Y9<)_5|1|Jyl4d-8or~gI5&!pA* z1C_C@OVS2s>`oR7B2+AWgN#wX@%%q03xO|^3g@34dDsD2o#Bf8;fD%bn6EL)wqil) zVW3E>Mg3W}cW<#pa|M7pNfx6}ltV}*4HGi~927}v5wQS?W1y!i$1bd2x6T~bS9W8= z@Nm>>WLHUs6V(~w$u5`T)5u)+&P$@ z3gm(GLnU>Q5hRdOVy8$8gm{5?U+_Q;Uy3ob(>B@-_4Xkv{&5y6M1BED?*{mypq# zb3Y2)*#KEKp8L&6a1AmPZNT=EV7Q+j?O%d)E}86f>%Q;G-upBzt_`%6gd1@4^izQx zJ(2Ce-vO3fYjFAAq$k}2bW z7GrRc$9?)bSgWL=s{gU7@jf|J1c?p>z zV#LKAgb>|j`7e`!i^v3JoiG`pJRR(Qg6g3!A@dmD)NF&44yxdz^z&F^GE#y{1Br^?C zjaPt6`gi@S3j)&lBTRJ`e!8I{`NSYwSICRwzjQalGYIp5ii=|uW0^T^ia6oGHz~Zetlc= zXoELzE_KR>_ENSs1+Q;&ESF{5>yQrz<>2=F}4J2@y;g^275de0<(uSBain0Q9lAeJKf#X)RYOC8As)Hy7^m_ zihU^tQM-=7)T4mY@x}G`=d4JT-^fS|csRRTqaJL&sot3)b;?XRT&){I`bJr&001Qi zJX`^*8NBCmjN;?hpFS~OKX?GH4H+w|s=9%$^yP^P)AYok>EXO6f!`Ngz;$roaWXTU z3+bVw0brk9#dOKPx)S8m>9!inq-6nub5rDZs}x~M47;4e5j9*EcJQhjmZ=Rv5oUA4pH zw(70!4Bho19LtyoKmnEOw5gkG&*#ff{XUJ(Kznf;`6RQl@EdC4r>n~&zC!S)Ntz4F zuiNr6TyFhSgJf%zCyb_*TS@);&8iOUH!92rhXmNQ}lRhHrSAt_h;%?$alNLp$*&KCm-(JDsT9D^;JRgRX zXvAnUB3)90a96t8t)k)1qnd7!m3{S^z7Z{F3M0hs13C5ZaZd&gZpQWLVe?wRD0qJS zMe6GoA#QGNAcQ;KbA6`SHqC2HOTXZBzGNVjZR=A{W+P>OZi zPtl+I_WT2zSsorNg2^J!u+(}KNcc_fk^0rz%3j8h4rlHr263O%otRthUa*ZXJ~c8TbaZA`U<-J{!K)=(C`*jokmP~SRg5epsxeM74qdN zDJfI+#q(uQ@INBCbO`y;VJ9JJ&Q;$F+;0J$UikHK9SU0+3LDI+U)b=c*=}+8Gy8&= zL?szx73g+*PG`qw@v4T88tDi}5U9(y6t46ZdHEQ;l2mw*`(0kMyFj@Qq}7kS+hF&% zR$YA0@ZH^S$@sfr+ip~zr&wtU=-+W}+8OJ4P)&^iku7Qbak&$bk(o67Cc+nax@%0` zz)oi{;tUbsE|B!ycsb`@cH#=a|FwXJ7XK;5mL2He=~Z@d9F-4*mVx2GIqro&8D8d)$nV zr?t0zD8zSg=o!0+{t&(6%xZG#%Hf**#v^Yqybz08h>-G~8z&0f!oU@WATF?Sb03Bq z_u!leI|GUX8QM<7R4Sb5Cs-JqF)hUC&VG9yhz<%15-&GDckZ4YHwOb9GLdJ{DJ_q? z;o2oqlp<%Y=L+oEh5~lP$S68KOWW3K`nMqVuP}eS&WAYFTZE^;-yo?KBp#638{XrM z>=p(`(_i=P!N#AeV%mjvftjS^r>9aYlJxB3U)H3fC1#zg-$ue1IQK;6_vvR^gGj(H z*xlWE-48@=UBbq4t9<|7>_hlwaM5cxR?%GNnzDsJJbAZnrN_rnnVFfyl1JRQzbPje z&G~LTzRY6;Qshw^kv<5=^Gj+Wf;b#CG5NQ06oJp#J33}LNhcKwvlt6$N zfEoBZfd5 z$s}SgceYyw9n~sB|9sJMF&LnB2LilKAVAXm1*PvP{>~bq zYyZ5nfNK0i!%{>1OGO1zS5ru=1_lLfA8>SX>MWdSIoVMfh}AcfTHjdYDF>U|45xse zPb*Q+X`m?ry3-f9ir5#{Z*4XqI3B$rb+hDc_AxQsWGLicaKb&RN%;qq5&q_( zkC}`ZdG~M>LP%*Es6|@B5jQnlJ4#m|=5g-~ZdK`r4}rjo(R9s~Ng)v@RQpB{<3Q}M z?EFK>x` z>OvE7lDmemuW6(5SStVzQ3w_>OvRlzgfS8jA6EDPYkXjKu;QIN;G1$Bd{R@gS;FwU zj3*KHzkJcfbbt4h88WfL6p{ZtzMy3oqU4^Slvk%NW{DA%J%k5T8Dk72h;HQ?deloY zGw}G!ZwAeWY{re**0)}I&AqY?Mmijl8mR_re30@mx^p`tQ^dye*HS|`LIQwKrD%j@ zB-raU*}k0E;WPoz1@2Ws*T4pFL zB2sCvzzGR^Y6Fr(%Zw8x-OR(n!WVMzWM0mtb;e=bXSTo8+4-R@NKbG3%VEyYHxV6S zZ#WVYR`V!`KJc2h&a(4pMq(C~dW+xt)diwQGfUa^G7w581}F-1&iQvMwZmmR5yV)7 zg+kCM5UDIaKW50hEU3I4cg{RuIhG=Qg?*GPYtNyxV-`a0y4%>Gjn(9uvfi`6U=i;g7 z?l&ZhhNn`9L14KrctW2cm0o)`SNpE);Mc@k@QXOm?Vfrf98l8IVuBSbG@4Ry{Szak zrE6d*!tg)e27fxkAnCt`;R3%UZ^gu5i=HHB5W`Kh`<~RKo4uhWL6~DNY(GKLvBsbY z9{mA>(I4rp0Q60gzJ{P-)<}CBnSfU;8#jK$!;k1!tk|Di#|rO9E#3lD*ZtQIil`D+ z4e5L;H#U-LK4mh22WSwMfWQh(qoX{gaYIN53ryH06}XN$IVSiRNl01k3&MZ6+ zB}Ygbv?`u7uFtw=Lt})Xe z_k`o(CzRb0BvS5dQOL>3u|y<$>cI>iWfv%J06dM2E=}`1e~{KQq=>j&avCoLo9 zYQsjp3o&A11N%U~XE!{L&g(KQFmEV+fP>gnDE@|zP+>B z1H}-Okh}9k-WpH4P`)qgjORRTb(ro*_%mPO^FOh#(`QQgn@u%HaZm5Dz7Ay|C68eE?iQq|Ls+ynt{VroBsv#c?dwj3u2&$wERio8uC-6C+iL0s+EZh*v(v|APFbwA_jX%BHqp6DbF$6>Q^Ax3iw z;Xrb%NW;{q(5X>tl2+60#$*RgW_Ox3%x+vjCt4Do=98so>2Bm~HxYhn1%SpU*Y|OH zyW!K(NC2j;>{d$ZM-F50;=RSTz3YFW16^mOFn8zK{o%|dR#HLav?#{w+-WM+J+fyr z3F@PuLsa0v<P7y^TxZs%94a_#L z*yq&Wpbdyq{Qft?F|n<{A9yzB5v1UQ$+Oa0v*U$uzH6sN&*$*+&AZPvzOZ}9-0`r^ z7fBymSwW0}5O|VMcb2$tHSy|eVVD`cqSa3i&%Pf1&D{&ITZGEMm;(PZp^CHn6>kF> zCDWv)ot4_dhWq6QU>KZ_$QRe%H%kSA00r-0OzA>ZPus;bG!Mopv+CUzCNsc9m z@@_nT^W=^fYF>+LIzN35k0PmpzkuYL#qZj9*g=x`8}iA~x4#j3fJdT$r4YJB#*L@% z!gnEw&O(zTpva#L7<_}oPbv%Foc^et?_xtC;HcfU8}u;b;3jPGWC!P?;knx3vNwZ+ zf5M47g+uIqqb@=Ft<&M7Nmbax`0B#pt5Oezk2VBezaEdx0ESBo7FUf^LQ*K`Z3TE# z7)dfh^~E#Es!_y}N99@KIk>n!5sUlpUtTGxuTqW2aaxFeu^Wu_A)5Q0AA`6d=Ga$c zf(hH^sYaCVKyCa=GAE!(qVW~ z?c#M*kwSuVNSZcsSz*x1w&RI}gq{QbWA63-@A=Kv3-Lntu!c|*Zm~6~VHF#)&M?6( z=0zllLgo_|EQt&d-c2e7g|I_A#%wZ98HijbjTQL{v=ZX)k8E@W%fY2Q1E)uh^#T~T zg=X%Z$jEm9SDLN0kkRT#Cyr*GQZ2HEf~8p~zG^9^iw4XH&)K*K4!Ip|!NhxRjK2$v=qfM2V1*>{ZDuv+S&jkX^D$Mn(uBn?y-6GO`L8*@(cpWQo*SeZCtihJHb13HiGoJ16>$y)QFd@rl0FS( z#MdtaM+dB}iVT1O0QpWM_-FKDgDMy2&z~09Cs-Ve8#g}3lh_*tpZ3LJuTS05kWjZk z=0fQ#@s9ez71#c)Ot|xoRwb@OBsXq!ui*58u;?+QnW!R37mu?t3Aco=pI<8ys9v8h zj^ksdN1DWbU7@fCN{vQ>c0cCKu`kiHHeBXTYoLr*XluJ}=TkJ#2K|6PrXBlE->2$1 zR*60ic=?n~sTzT;7B5i=0Ofvz@1%SoPX!R;O23xvI%j_kEdSmP^j6?&97>jraM+<4 zqyki93}9HmpfCWJ%E6W&X!c1k0)Bi<<(7vz^nrJ59?ePV;&YvwdNnvS^a5Xct?dr% zNg>gV8Lpgn{2yyMBkCsve|&RF>zd~{vdD#u`x9c*TjQXtB;X@;v|;JNWAe#of7&D z8(TBlQzBZ2`u%x-e*)S{YLeW7MHU0)GwL3pCCL(G^gwsojHi=z#b{KWqHyrKFrgsH zLEZ!4n*f>Uc+TT>qLgTu`h`+-cw(X+CDWm6f1Y*=bxSMpjB}Cl(Gf`npx|r49upNH zS~7>x6&W&Du+d4TPD*QlOcDuYf>8cGP!psVwxFKE-%JbOw|w2B6Xe+3J(`ab2*fCM z1YL{d{5qV>Pk{@QbA*8EP4MA z#)CzP@v?*I7Z7<;1YJmQy8%gDTX;WLNKNXrVuR8jfAT;mRo&qDIPLSk^2>W~i)L^j zC;7j{{v*q4xM%Us#_+~T8PaJ*hk%(>4JasY2%imooS8XSeVvm#-QL&VA97x6v8`8C zSCXZH+R^iCt3tkaq(-xBDQfT^M||O~(~4( zN)9N!KA;0PM=t?w*gc$B`5+EIFM(-D-`unLVEsDG&{{WfUI|4^Mj#8++(#{;Vklz3Cn8u%e-`+8(w|&keT>xc5=q zyysDDp#2j@C?}K(uTVR#UAJ@eod@4Dqv*eDGm2y+L(?<}WC3=Ic(}&wkxqmfrV7wI zX;ZK_MqQRaRWgpEsC63-JqX^%7*8y^`KA^ea2i&ATN2qXlq) zmh$Yr2#TUc8CoVmT=ZzE1qS*f4jnx#Apy555l#JUH845#IA4Zk8YiW`%zf~| zgS2~>dpV zoRr$iY)GGPbs_0;dx~>=_@`)kPOrlsR!ba40{`yYTKOT@4D!vQ^ij~kqLl^(9@&?G zt3Vo4xI^Vlf7*;e`vTN(c7EOz!UMuFqR<;r6v5^p#SNZ58$7C~q`oo3xdok3y^Y&g ztu`pu$OrabHakWYkN9S-=BCd7%5e47SI0ok4fIsEuW-elkrH%Ro{F@780vpoahh71 zHL5?RdLX7E*TM9Gro(^T(mLVCHo1M7R=}Mh zG>--Uint1;vX2U)Q3dy=2`Psb3EnLdC!RJ;+CdVegUjy%DsPnT5JW3M=m}-U81RV3 zcIzd3P221I3?5p;RNc}In&#Km+^@Xq)Bf%fv-`~`4aN1FH@Ao7g=_FfJ=9WyhIww? zkH;Dm`!)-e`2Z?jHKVLz;ii@0vKeYdm#nQ5wsYZMszkh@=3Uj*-IJ)stG32F+gY`5 z?IUfS?kZ~I+Fm*F>$`Ih`h2ymfVr zyJhbvK2cS8qN8jeFTrOy@gOagh5f;ess0Uzs*lg5sPPi#DLNa%aX-6y1wL#Ulr%`S zaZ6YXhEHYk8@WxXow`#taO<3;Lsn_fh)3L$_A(^r6+0k%Cu3NoQ^laS8V{Hu^nNdx;pLwWF>7ZyYY+m7Y zQkCJTwfT_?N52cd?q9h5PL%%GJspL6stQ3m!EcSEX+N%$*Ffw=TDtvFp+FCN`!u&& z2PPSkOAR=(8Yvue9G9J)Qvr^ktqei$b?@rMH;LZecepfKEsG2Q|C5v*+6^2Z014lU zTWYF=PEm)_W{_&^*|TOZH0RRc+Jmyr92(mmS6m1ldP4o%T*`8DTiug*nuFe3K8Ts^ zF%MVlFXoB~#zh}->PS@sW$ASpYWuN67jSqX(Y2qtETZ8x0LAX7ZX!n!B8@yZ31~0O zk=6+jOg>IPN&cCAdXK%Z`Q~aipCjd-q35jJ+R@&*OlLcqIkB5)t`gr(ny=*J(f-T@ zfM;1DK~u-^!j@2ZSQaX|ps7+w7g^4fU2_cOQi7w1u<#qJBJ=S3`QdlNWrln%ZTg}o zzQ1Nrr<$fnVyWqAu)I%^vx{JDcWWzii2dWD>bI|+F5W{GIxJfew2|85bgbm1C)vzO zHk?YA`eS*o(Q~O$n7OA#Q?)4SqcM~p+uxmvdwE!t#V7Qv_c$7Wzv7G;^pcA6W6~~y zz29fvY)IK;EJ#JYPTp70q^|LJl3G|)OiW)yK9!Omb!hxv_QR*GG{66%WEgByoS4A- zi%5PK5p7<#;rWBqO|fCpo+dkA`A@TK-`;}q5IF;3-B-cz5K<5#AWOsrpeRZM2Sotj z3I|RmiTImf2ku_yBVm9^U(QWE{j64~8TRLlgyhP?>tFBvxW<*dk)C7vaN?6kJLhv% zgjLO+vwUFRxZaY@^1*GLDar9iCJ$RJAd!KR@m}`MyB^8zfLMVL&uztd;&C%K_fo3cx&2Y=kziB#V{9vsu^O!Ek08^5pF$gZ6K4G}k3Y}^ zoC2!>u`h{;0chAxeW>KA)%G)PrS@@<9U+?qRkkXsY*#dF(akb35QH3(KqBahP?#GU%`r{rXEzNo{-HDM3k=LNQWcQ>GDP7ijM|;y`MFnn=z&!f{njFu zw>mmq`ln4zQ(x7$uHd1iwURhIJoV8lC4Sq@;^Hm?edBm0t+$g+)FL;F#l(Ah)M|_5 zD;I^fgyQ8fMMSE2%C8QLaW@IqEZv57s8z!3*(&nH%#JFAOqxq(y-ktf_+FIe>HTL9eui~)5nB}qsp#|P%-V?V@D8w<_alWKEW+iV` zIX(`(xI94Thfvd4GL8WJj@cvA+zpx$%u3o0B};e)pY^QLB@zh8j|Ae^XM_;lFmcZM zCCr0WxqGGfJI*|MseyrkXKi~WjOnzGlxl>(B9cY~9G|sdM^`L=#CPxTp!Qv>j=JTO zX6B}XTTWaR^tPT(kSg<-mh27YK_h|-G7jb53Ze#t7L0T*kQETM737cit}QPONYAcR zD)Tu}<|9|8y%6Pv3O`e#qROk^Xom-5Fm1)gppCS;RCui7-R}o&F8G%RuQi;W?r>`R zU~}nKMGrlH%BGNR{vR2UN>&mQ8Y1`UF19;KOmlNH#m32)q}^PaVCxM%wPVkb{;4aY zq&q-LCUkKkpXX<01ZfNsJf;r;3(Pvpa0e|D0r-e20zLl8+;Ij?1HQbgJ?yr+d!1-x z6;@^xk5z5*Q!~2O$NBrdyKuG0;O?2t4|rH4;NrQ^dU@!hta>DC$$$Uk6Xb=5n505ibpJ$!2tC$iDJ6xQP znc9XnSghi*dz_b)lIqco6omWyr;Z@y?~*9U|`>r2xg^XwI{K zceLU%%n%a@+J-i~jO)2oFrRb9!iI4QJ zHpmycjOE^X%lDSII?7_va*#J*_|cd(EXQ1 zX@~F5*bNFj`~iieyP4Glu}HgI9smT4G{6STJ9>^-8)=Zu`bdTKqt&4zW!LZMNBJB0 zY|xk99^=5}Ny&-hDq)!o0ZX-0Na*%I4YUeV=a>yh%~9+=!qH(_XiCH%3HDH|?^RYB z`xRf#A@0%aq>`;MIQ^jNWJ*1c~s=u*;%|K1Dfn}1Yj;cw_k{>EpV`NoeqWWE@@r&@F*@+L zWOkM?F&?_|dv%&X zi%OSzRZntDh(&jOzvezcNG&L+Ku2Z>;A;>CAU;%ko~Z)IJX?-dKY`u=K|rs-ges)2 zBt5l9Jv1|x-uBeqfo<}P?E}M`ZSQ7hBqu>)r(#KxxOiBP5gmE) z_I?E%G7UkV*P$_+I9uT!1qZ<08+D#IgP}HzMxLJ^AnBx5i|+`GnO#^Ywo`>h@j*ia zt~;AkG6m4o;-B6(pu8C zxYqU}H_WZuQ!f*JDpDoV3?+bt-p=jDX>?e)bf=<5YIJzG4Du0x7OnhnbomFvrHXH? z5M`Lc0f9n^#9HU(=K47rRB)r}f;S7?1^v{gTtIu6wE@)|!W%{pT}8k?V3Zofn4Nv( zaqfvzAk;vR{XyY*ZN#?;f;l8}uuSxzR@-yvP+5n07Jbm^TMQ!Xp`=d*SVwA4oR`S6 zNhMl?<||}k8tluba5B0M1@g>QjG-zh#lSm|hyv;{4Vsocp3q36&m-an90;gzVojQ| z)!V+}ocRDC)NO%3N(q)Y61E8pgc2dFqX5DstzLb5+Pg`JvWRaW?K8SWsA0lyXN=EP zY}q#uJh(W&IX^d5Lp}Y*+HZZm7Tq&+pE~TS8Z3^RUQjNOFg%bo9ChWakN4Ka;WC%y zBPE*crB3s#6AWWtgtx3id`SqFSRPau9af?(Qi~kGlhdFZ0ztgu^y&AEcNPhx)>9aW zZ)s0dp!4axTJ%#AJ-7S$w;8Us)tqWdF=1OLKE>#Du*>S_CiXMKU^Rd&~gvz#wSg@x`+|b2GH~{Z1a-TE)0(abwxC zrg^6CPcMTRuIuOB+M$8cB7q)c08-k8$zk3dI}%^!7KD#N@T-eo@7lVA5)wZs)Z=X4*@%n>}>>*w+Y$ktnw-95ZsgLmn7qonO-h|N?Fy8W+OoPABN@m zw7Nm>_oX2_nF=}PyJ3vn2WXMl=6o?iidbIWOgQ=V=N3*lUgwAQkP&FiL0bS^Bn2uN zFeCLwl;`~RY{5hJ^f@Cu@Tn00xCx&6P|-U>CSYVgRttAfqFi58pMCl!zii9EILqvh z58gDirxR@VCLm{2oSD(a-pPp>-;M<_A7zN@KOi+gk}rv5jyMj@JL z{ll)^@7H9h@mKM$nQCh927@#Wxyqrn@7zbZeE78^z*fs?>)FY1`MPa?j@kn8&L^a$ zy)4BXGv>A)y()?O^7Um!NxuDlGAnjWW--3U9SkAFD~khAJbs5f*0MF31~}Xv%%A~7 ziZ`-Xxci)Tx*D(Ev#U~Aw!AJql9}uANaO~iAfehL9Zz;9_Wl;J2s=p1=^j2$A*zs1BHk?9~egt0Q{lx(D=YI z;r1yby|Jwl0$FIO!sFu3u*&V-Tw}QzB`a=VJA}>^46@_x?K*HE5+xg^C!PCHp%nXP z`OlZ-yN4Y2fXh0JILt;zNfb@E51|EvPbI|ip}Ky_?>H{`xho?_Ay;W43Nr?Vaj?Z7 zP|jEsjaA!3($ge}o^j2OrrpbaAklFB=17K$Q|OC&OSiX-cIoAC?{*kn*!J~D<1K2S ziwO2u50Rr=|CfhTTD*o@VVy_U8qzp~P8Ecfa64Yv^Ga|R$EtP99M;gQ;p>i~HckQ; zpgk9(*Z+@jdJ8cXqvls!x;(iN=Odvegch}R@O_b$>I8M@{kZhOvbqt@{QiCyK zLcqA5qN?5l6U2@0n9)dPv&}y^_t?mr>Lnh(MbDz$mCZa?j@cebA8#Nz4@UZA|4`XO zOKWl`?;+=60>2!tYc8zm8VD|4qNEnUB|5jERh{?v-U~dfIjs>UUtdeT9G9J2u%Tmn zb1LNH-2T}YntP95Y3cc~pi{FXlHQ#Ruxg|G!RhN#10GI`Qm9|NRg_(Ns5dWvoN z5e}xGdf$hIFMT|ycVth=r;5?`_KXk4#~dQw4?k9nx&`eo(GX2sLM+Q}D0@&`63aFe zKY@6Qdg6Dqw?^(OP42Y9AiZ3*tj;0waJ-OiZCg1$#!1movl~TA$>@bN5}BmMlSm0d zTNFd}vSi@u>5;EBbUDoFHrm?upOD_PK+W6cxt-xPT@L7@v&e2)-V}EE=7UVeGkmt? zNZ|{mB3ZbW=hWX{xjL~{Y3bpI253Hf4YElXoVnqvUL5e>QLT}9qn8*KNwSaqva+lb z76p|2WID3+HJz?x`rYkHzjODHxZ1C0S960_d`@6$`s7O2>2t`vQH=Zg_$J?-Cte67 zCO=JNR*{_vaf642o4gcqxS_;0p2*B_7}jOq3*KEW}`I*6cWRC7K#85nL+w@kdt-H!dl4RIr)*o8d5&zPj{&m4-( zrcf?Q86qN+mX@}F<-8IZ*h2a{T%yo^XpZVEQcjk4!3P3y7B^^F+&-}jn~VC!?)*`= z{J#ngh4-dtxl^KopzM2t-9&;J&^`hSB3U0C;&xszJCXTrIRnpHzAY_wFTLxY;%b)J z!TBUwhOR+OX`N4q;1;_U=NbCPEA$v%MaUO8Vfi3AF$mi*9vsQ=(2z!@A1K7k^YrU- zBr(hsF<&J+=XXZEK&AkmWyr5smfP!cv{VW5hzCKF2wRCwZ|NqS;?VyQHW({$1Qcbl z-9GL*!}IL`Fu6zYqf?(mBmND>T*}utd|MF+_K0gl)S4B6_*|$H>L!B8&hBO|;e^E# zlC6e2-@!3=+?4Z#s_Gc_&Mxve%{a!MAA;tOJYv|J5NQI09Dx7k1!r>$#_)-geI)^ z@rDy-7LRZaeO~8if~$rh)nZ8i>bdj{MS3wqeOA{YLgSS{-@RP2E?aBSvch z?ieI81jXX;Ai-%!V+i%;Uuz!P2{`&gg!wh)cooa_AcTRWWf1;4K*uX*%9=g*a#FD+@SpE<(;AweQUJ}@v6r7h7IhP;}39w?LXJky88 zbA9jX4J&r7D4~7ULMtJyb9PtA%0E=x^rYR-`X=J})8LZ)v#&dsulC$wUH{4Sj}0=!>T_8vXRb{1hj^6aKIfVfz!htM^NGs|C?+gD(RGThN$$sXkx( zLGoME=9&1oB=tR-7Ly{Eqp$h5k zG0l0i1>SBuF0RS{Q+IvQ%OLTlZi?OmuWKv%r3JfJ+@Y1yp0a&p*_p^GmGCX)O8XuQ z8{3R=orrx+v5X@F(Jh9PO^R)T$i`NWrO$@(t7HamdwT>{ z7_k?m`O$Q}ok?9&0l*GeHE4;=D2)JflSQ z|DyKr)`>U}pc&%K1p&L7JKTp4w;wt+Pyd-wr;|`a!X7pH@F5;;+uPwVE?KWB<2|c= zlAg~8Q7*WKwOW`Vu39@;HTeBL7;j#p%Osx_ zcw$Th=(--Q)c{0lk9j*n0Sbr{^=iINw=fkXiPaEgsPi(DP!mkOjw0k4vW)b_?=VWE za|e-L3$y5(H*cound=jFe^#bT;*kYJn=3ian;rS^a8_$Yn(R|b z-AsevHqG=5p^HK$dKaXhDKjt(ZN_=KuhE-hjda5Vc6sS5uQ z@6)q%zgV3)Q)Rr%BX00W_PV{QrTxOb@1fTd(X$z+=kJfpds?yUnwkbGDv!I%P`8#` zH1!l*R0irqT!>PAfEfU8ynw=w+?G$>98qDN-oq58%rXf%Im-HfJX#fTKI!zqAtAdd zl*|+3=)EFvhoFy>MZGdFr2y{-<__cHg3y!l`jO6|&Yh(@x1Jc?z5PX73h{{@XbIBD zFhg5G7A+Du;h9jz?^W4O#r?l2Um>9(nG}sT_x~TfT+PmN9*~Ga92XAf&^$!WRNbGs zcJKCG?Dx0@(JtgSdH{g*^Gs*}`4BTHCNJka{~DEQ6Rp$ZuJ!-J-O9pu4(F9QuzeKL zIlT>r1~s;u5gX$PFBzhbP{40F>|&E(y@CBe0AdAJx=ljhSzI@v+%pDmax=;<5+3CW z3~&OqQIYLZ)Jf=dfioK6M?!NWHSi-)tC*s-P1~$8JkUOI)7k86H>mZ~^-O=&pLlyi z;H$^iuq+XE6jT!f&yK=h0nxAEz|ujRt}w)=FfudyLZ=El<=>`^Q5_**i{asAcOn}H zgYT$Qm|fr6C8>Yz`7Y*py+@T@OXkC;k6u~BM^~t48@7Zl&GrVI`e5iTp*!8neMq#^ z=?q-GV9Lm^*wJ(xf~1-uzew&gm&3s4gshmBM9(b0?}dOaOh;(L6oJB4iM4asvSV~U{c1CV5CGT;aCoY)JC!vZWnDp zQ(+gDNeDX?f;xO9Ye`TD8SuHB>bW-qpD;z0+3P!c>$Q#ZfMi$g`1CG!Kgb;IeYQtY?5@2wzFyxSQ zRU;b5WGI(qlGH|)4r(9H@cSlhUA1}@UqJ7222-cZY`n~ywcb6F@fcx%{yGig4y#o!w=1U)rT4C65E*uYuxQ?!<`zh-Bk|pD;rOXs*#51WB!0^1JQ^ilk)kS9Vab z+6ZUa+wVTPcLiYt^d&sZ(;&x8#;@pRc|Q{S31C{#7UwdP*T=r{lI}lvQV>zfA!-yl zd1f*TghFYUGQgosy%Cjcv6>~tkZU%4Jw2C0?(k}qoPy3gP|ujE4~ei|hT|OAmi5oy zxGRY46|Kzp4|$BA76V_u9oP!O-HCr47FD5b=U^tlA~A=SjErYt(Yevae)OtmLO^~h ziGqOKiR53B$)U{jG~@^X7epkkn|8_TNd%`|Y>7&$3k$i>o?S#_L<*7b5y-4k)=d)jI8eimm zxIT2flxJTVx5h$dYFTb+dah+m>ccyibb3tgrAAMljvk9v&at%0h)Vr(%D$Rgwuzf% zubjHe`Mcj1X@wNMuCH0?dhN+r(4m(3xbdqu?C+M1$1Uw1E6w!?IGnLfBWc%0`raZ+ znV3$nTLoL~!42Qp9-l9S8yztY$AI^fj2(#b_jgzyLNfz^N(8kDH_GYL@tjog^0F+? z@;e@?CAfEH4yC_KX&k+x9mE$uNk@0)l*&jk`KQ1$!J$pMd&%5nm01!N&GLh*t2m5_5mCC^urvz?2G*nw~1 z(f9*pm_@0?gos;sN@2#krD8IARY}fa^jIC!gPF(&n+F>&F+HV%lQlgfj!A(@r zI3@YcRZ60nlg)^%X~ZBQW(GKF30|bG*Q>bj0jpe<071JDZM$sc#=b*@mGbeCOV!cUlQ;S%*6h`ukao zl*rb>W1i^c$^BA|tq_^(xcM?l-bRO`=wyLeY}~q)=%vmwN7?xSMVLWnEsTU3fJB?Y z66j<08;aVT4cT3;W)b{5PKCYD2siXq{uDOaI6|fpJEn#tB}VV`UAzFcusQV{qSd7V3zRucFhW;! zJVOfsKbZpj9B{F3l!M?tkbvTFXpVozwcqu5fn!lOGwLJzC&3%+_JuAVzTfdF%(v8E zX#JB^^DCRJR*d#-pH3;0&On0}yF@mw(cjsM@ zc>n-CaCwsT%4dd3DHjeZpSPh@+t2-~kj&7@qmKIhYo>Kl{qWQWyTr?muZuO*_r&(8 zTDeQq%QGp;@0xHqJi&XSz(7$bR`G-)_YuCpttA&n-FnoK5s61%cJl}$8<8uK@x+~0 z<`ByfKWisf;LZn~R^$l-ViiAKY-0?wJFG4(oyIKux11d05_b5VGW1=mpuRl2`0X21 z;K-@FSyFNk;Wo{yAc)$(+Ghm};*d_@S--n>>SK(8U8=zZt%m;h>$Lz0LCcA zrR6_IgUK;hEJb)g97u|`wx%-yp`$W30=LKa|LVJ?p{Rd~;aA1eHN2;9BzjRbEV-uW zQq+G%@q*=co%n|TXzg4)9@#gzqsDA!P2|mblUHU%#+tl&yw6Q8hg~c&EqX7M7Ms`e zS>Xu zB?*R;v?ahN5)e)}faOL(P7o_F;V#YIm4_{dM@L6hdN3_bTww^hJn?jWI_#Fq%D~*n zNdUQI>}2s&~~ZedI%X2B{_o zo^4K*8B}?}T=ed3&a-7zZnZI)Rme6WlY@xk3&NR(=)IFeb;s4Ax#U5FWNec>BG;f} zIFGtk!?v0xfK8A0t_a3vYQPhbi-wcUQJ%3ue z?&vS=fQ6i@eSos%ZyiiVQAHt5haK;L$J4a&yHl03t%&%FG0q$K-QNd4V)7r zL6XOURP#JGRnpsd@g%su=r(ILc%0?1yvw>)HB*8GH2WlPpp%@$L_-Ky${`lBlbUJ9 zn&;P9pH%DJ6*Ir_kmt7DVN|2^DUND95A9Fc*Y4_EX`9J<^7`ttnHx&94o221F)PwH zZ#z^QpLKZ$%dfuQ8AIo2G?N1hcv?(Ex_O7SSI5@KD`_ZIMw>s41%qaBfVDd^qda*1 zg}2$>k7{l^DmC<8IdlFx4^K>O|LcmIEto|R$N#YJGk`$u;xS~`xgrpU9Xba$_fS}0 zpAXs@6&Wb1s;(B6k43G55iKeX4#Fs7nwRi@zvKf!mQvnD8myCYEVn(WvouLP?<(r1 zn`(BS(BU>!*E^y8p#SKrUf$=Qthrkc-ahV-+kdU(^tIoYOAhz`Sh`8~)zbYdo%=ez z)$1%*AK+u}ptCBpG|;l7FbC3e)NjB)Ol7z<&YqvLbeWoP2?>6tr-&&(v+9A)t%OUo^sp@NR=Wo zTEd0N-dLBU67y^=8Nog-{dPY^Zo&z^-Wv?tRe=%e<(c@+D~}O48?X^ERslPX0T>Xx z%eg{9`0p#*wf_afbNYq%E{qp9H=T&)V3YomQrk4Jp5YurX^-|}R5d0Lf<@J_=J!d(o z&7U&v58ix_d411;y+56eucX%yKZ)W*!(!5 zB;4ZlANTklE1uz6Axcod^J#g`H2Y z{vM#IwGlg=Fn0d504pNlrpxbl+w2h)T{?IcCsp%cBYKps&n{?ZK)`hWJQ$<0C6vwi zBz|Yyz!Njh#WxSUg_;6pPnjktB#s1bu%mrib@0vRWvf4Wy#i-cpN6!_D*8mP7mPgk zVa6%(tJct)!-88IyS|Fq7;K%m=cFN;akuk)h|;e5pr_Bu>I3`U8M?xmZ)(4Y4Z~G~~HPJ?xboWQ~_RD5po>-TwaP{hes% zpq6KHT*oKur%N0k#4D!Q|9FM<`XbW2eEn90-3Xb^7u}X;XD#wO(DKYG*7cY3{Hmur zKIbmaDVu8!+P`1fDasP<$f|KO^@I4N*TD0u^{V;YzTW+w%o6K#p^@Lf4@XV@9cnOa}y`?cZT) zFo$U`)$lS;4}Cmt>;cOsnYaj5p7Xwns|VqwCJBM4KClf35m4*)Kw(zupBGjc{&iiSR|lbkwU1p>i_+&n!2{4Zwjk0K%=xJE`pBiwNr z7YuEdpUKZjm#stBZt-0GGSF^e(b>&sFZ(G%?-R$7*vQD2pue$&7^ncV z0hTcpjuF4|^8nHdLgnW_h^mEi@f`}>Jy%J6ywcUnKbO|(nrMQ#WZu>(plp%TO1Ov6 zIOToHeppB;l-SF9c`ei#ezDZSZ?7BX)@J6N?`UbYIPoqm#X&Pki%-!}xf=G&tQSGu zO(9CDFCHDZz<2#u%Ry|I2bmi2?;XRFRjP6xj~iHY`_e_ch#VH<^5s=A@Mn$Rl``Wp z<{@&hd@Fm_>L@wCo@9B`4lf!lK8lT{7)Qp2DSMZ;OAkzcwVzN@p&!!|dAahkSFDln zz5LLC`cNPkklgJM7rzS$mm16guyiP6k(<$M=bFRV5i%WJ*PrWno(?5~KiM^G^I#h> z3%5^9AATSvA#o4BQEE1RGN;fV0KFhsUr4}6tU58J8wq04#fVCy*&f?}W&S_}AmBtN z9IqJLxD-Pd4+j8F6l|Z}Qc_Z<+KZ<7xlQR=b<4iQ{btPOX7h{p+nBsDb@|&lW2jh> zlI#b>L!->W95Wt{A*uqOJrR(0cbeB)RK|YC!ue$a{Bejy0oe?Xjutw26~I`bMJtIW zou4lMlH5K)X7i%0rP{wgm*WoIz5sllw)XY{75@esXvALHh#|Zz1XZ4yFbTr$wrLhy z-(Zp_o_?n9ERsn55}&^9-z2l<_BH$rsI?pJ?7#Kw+0lO`?O(o}@}p-Vcq7u9$WYg4 zNmiLP>H;SmO1REI zk;ezPh1O5T8w2Oie`f0hR~bpCY77D>Nl(8J9eeB6t%9>zO=V#iLA^%(j3W7PYDg|j z0L4qKhKCDr^@``96TwG?BtgfI1nQ@?X~mdCrMsEnPc!yPrNV5&63?D6Dbo@ zGX$j8akB!L6B*`he17|Uc^{MH-xzWAtWJ{Rjz=}ta-U>P5ThX4I~V&%42HvRU!yL* zyKJW~Zy1&WB)^~IhUS_Ne?g#`H5p3=)-uX4*CDy$ z2RunDED-es&*o0Zh~Ta>5{@BxsAz1Q|NU#^fQq$sas_zSoe41p=(q3Yapud5KTG!3 zvv9p!xdcU8e33SCs|i?wa|pQ*_GoRpet50B>-1-m>#PglK2C zUFWTGIGIC2E|C(#VlI$OMPdi3e#8gvbR4PMG(LYarF8}>Fw_IJ03V4j0MHomf&dWR ztU&qu{SP2i>Vv>10i~Px*(=D@0z62iAhbF=PoK`Ik3tBta&ghB@PQa!ddNjdUTyQJ zA6|em;v~VDm_fgba4eF?;;ch{;%r^_V`HBz*^M%#(m6D?0MJ9L2g6R&l_Ards#Nl3 zxC0YI^Z5cHOl?GR6SXwBRySBWNJ>{Kyyg-I#1qhlHpAPZC;! zVW!)t(4`qcN84p1M&gD5e2~xwC<(%XQ<(pGuK~%sXl(ryLMQkAM+>mgZ2`rMFw_lH zAi=894A@`(Ygi_12mZf#3>zvJSNgjsaJU%=V`1Lr0kAd<|HmqchwHEbMGl*L{b47 zF^VY5YeY%5smt7HnjWi2av!AAVKBG@roT5 zL%uXZs&I-^KKqTL^o>sj!|{f^IYDCV2g&^t+-?f1F%5-?pb?n~qv zol?w+6lB_?Vg#ar3ddF;gm%gACW%xALgD2#Yu6G*j>G@jv4aNqtHV)$nj?^mfef$) z4OfFlst+Oz3TwCx)>RlXJcl*sA(CLc1>I^g684*y zaQ~7(DMD`G-EcyYgbAAT^TNuZXqrUOZE$Sx$3gSsE2ON4A|jx0B=~_A;;g_f-^Zz? zfkUtod1D9ILxXp*{QHL9QS9rZz?EH4^rQka=L0^F96=;`3`zY|+L>BO7+BN%8^Od> zyt+ALd`QbT4k$f#2?`1-pT^^%V_+aO5`=^6%lmF>@O|_8asdb`FfoGX>H6=SGsfx+ z;gn*h3YD)$g@8)g7|RaxY+~>Yh%4nUzVx46^x~V6oQrgl8c{+5s;PyeTTxk=KXM*F zk+=_uBpHvMev~7%9vB-DxB!?=-JPry23W2Q6R~Z?w*Esdyg};PpT%d(vv_WRj7STI z$*a*>vj2Yj0FxxGD?^{*U3Dp!YLT;zh3jzd^cw>`CyrLUUE@4GJTY)Q0hkm>EODNV_p;eS^ObGRK(3-?laWbLen-ObH<|%URcd*W5>x4p3Cw zgz}AwP4fxZcNvJ>AbaLIawGxl0hy-u-|bzaoS~Fs#+n)mnUmU4q;5C7)k%_}!C4Gu zLB*T#;H~T6ckCfbL$rjqQmTWq_)Z3xsDTx)Jb0;p6;aL+ArC^u+cANbL>b}xQnYvJl6i>IYHDiUKf$LU z%keLzN7A%O+X0<81S%d-EAF*>l-h}|dj*NLgyzGsIJW6Lc%DjOT-BXI+23y1VpWkwxwB^Q$G5 zL9tCe&T{n(Es~ptp0^Dvl_(%OK50bx|7UgjXKHzx1cip0f1eq=tFi}a_IkX|M@Vk2 zq1z}6tAL&~4qwDcU;Q}FyFOY#Kist3FgG3FiIATGyBH500xb^x8PA?QtLsiYB9SgQ zHPHQ&CqqK$Kz1NF_KCQ`e~$Qmr85rZC}NG46wlLJ30f5DY6-0h@Nwf9?e- zeuQu&IG!eZylQCIKW>9-2y2VAaWu@Zc*}YR^TU> zFaE-sbAie^HeHXaeiZ0rasR_50cysSuv z`R~`@R>dnY_AUySm@dS^X7{;v1$p7z0x_yfK z{7BHooy(2qMc^nRxsOz+b)Zl@39pV4qQkcxb{PQ>hRIB!xSAAadla-Vf`Vu=vpU=G zusIfmVpQ;+H(k1P2~Q~8b_thRH*)7HKN(`gATrd$hDnmTbV9a>n#apZ_|8^3kj20_w8D9H2|5bl8xb|z-#<2d=} zIW8FoA)X2hDj7JQrw5)X3Hw_MGn-#u1?Gm3&o&rtmKMq|o&jyl1mdA8O@3gb<#pQ} zI&$vM1eOJ1yl@6?R#JB-t1m!i{5!dX4^b(A6qHD&E5tFi`r~6gfqgf1n7N;mXk-Cf96rueH;I+D))eU6 zG!+M|x{bwqMMXPXagF$wmwQwW;d?tDIlAmt@cy&gCsVMWM8+^~FA?AT!x8o8Hhi0g z{AK>!r$ba6D3qJNxh%uhc&rl?6g*wGPX`4A8r4&kqC9Kc0hcI1gEv?B1t}ccyikOVElDPSpMWao z=`B=;vk&$6@6z?<^}`uWBp*bhw1PBE*nLUB&ah8-lO*>9ynq_T{KkhAl6!+O z78u;KX9gct6WZ(XVzekEWkV2S$?!R%MoYnr5RVdm_U&Bi0o*-!lWpiGkj;C~*26F; z0-?g>^$dUh+yoj^9?yYH6GLG=i0M~jsI#0^Jv_!@F647~U^5>1H6u&pwUV{#9z#Eh zYnxUYtSh#%2^I`A#rJTmSG zeqi3f#7D}%Ak$}5;>C%-{ft={woGb3^`H^SOoIyeL3;X1wsw9JLy@VI-GE}k6)IOM zU|KYQhwRNuleZ9W1kw+Q)B|q`y5m6k6fSh+B&rf`;K%V0kwoe1$8N261DeqG+aD=M#xmYcq9l-E)FD; zqKX@0N6UCNrbggEdfoOGLu?Sda`))9BWS=#mhz9vgzG)H_r+pEu|1hsSy!8>oc;vK z;a-D6;#a^!`{^Cd4=TvBYmlC7kw}R-=c0|NFVRPkhllOa{89;<1$qxsrwt%Z&Noh@Z+0pLl!r^P^?k(N?#EP`=wk5IxcE-s_8=oTFc)ncpVKV}?d-Kt;&{f>_#3DN zj{WGJe_BNWH0uExMleOeg5-;HU$$7XC6Ax85mm~ z5qp#1Iz)%P3M-3hPVEhUf760)%pfF|SI>p+3z(Dg`o~XhQpBihj2bwaT>;gZTU%q$6G}Umn?V@#nu5(lem}ZwKV-d(xC&sLxFpni-9bVml~-SP zWO`yRnau^DTz{c+!b#v+Ip%w;a}Qn9$?7C;1)5i&e37AyaQaq-WXiz~TGSx$5?0Em=3qTcM=2cikKIq*CCfz*+WwWo<%?7V?|iKOEuotv4G2CzFP^q%R-w(Mh7G zOLi6V~LrBC$=F`QZxz*gVP#iT8-rR{R4nWv!r-9Dva#uN5l+_Bp9u;R}G}2XkFi0a3&&`&@XkRJ~L| z^hcPqZRDpz;+e297k-lNB54d#CLpb2%}hA`71mC7w-jUQL!X}|8vn}+HhpiU|dFTfu? zF?vMdh~swz-!%=j1L?6zJT|H`QhR|Dh}$0GSC<8`G6}8&R8$KfKd$9IelMYu$(@15 zc6&n^^qeFj8fa9V&V4gLjCcZ2)0KHFV3ct)0i|(0Ho-9GDA47OiFw%CQR#Of9wq}F z#gVW`a#xmWsDRv&Da#S{F9Cc6d(tOhE)yPfoP=`_uA>X@LG3l8tU^DAb0A52JQL1H z*cyk)F{b0YfCPYQc;OKC&R1)SPkjpiP9M;C^k}Z;|I^u-faSQi?LI8SGKZ85QHoV$ zj*=lVX4XK15J@U3MV4Y27K_Tt6on|3siKg|JQS4%Q%Rweii9#N?BDgo`@Z`-_Wt&F z?2g0tewKQAp8Nja*KnTabzak^J)kuDGok zj#M2D`^J?+3|ge&>yU)9RIp$mJZw3TEjurHen(r@^if=hBOcgn_bhQp66`Z%WS`$1T0EV}`}`3w^7Nx)Qt7TQPgEnTZB)le*P)tZ za(pI!@8E11-e8E*ytiL`-URt8Y_(XlF*Z-FCgL){p>Q5*eg9e8=Pf>8*??F&mj}u) zPz_uE+1yU1Li(WB6&)%lU1;eyw!oqgowoDoDZ=KMqvll*MgqEZb}&sNZ2djIe(0XS z^n>QQazJG@BK^p0o|M#Nj?c za>3NRd>N;SWKSnShAR8d5eN2Dp%C^DT&}-f0q@w3D~$g=YW!>n56WX!c)gx$m6h#w z7Gvm6QnBzMn8=m7LZKa*SNvalW`Xd2^vn&1o12@*E$;b##Sj)*;G#bjQOJf>b6S`< zn&hpjF|yO)%WO@78}=NdI!yH5t+Cqn>v9%!i=n#67C^CgX?Ftpn6cCpJ#_Q*>LR&GKPgz zJXApGabKrShy>=86_t`zk?5Y%Hm9-&pL@pV3MY>v(`7VXG8?BFa9M--ygrQ5@qqWx z==_saQv2;g$_{{4+5RB+sqn|=NCQGG%Qs0Z98MV#MHE;8mkRO;`}15m5|g-$G7a*ac@zZgYezGQJYe9 znx1jKufznAx~#sSGttr4ZysftChIRD3)ocC;NND6-M*>Qv| zI)8z;D7?nu+=-EFDaT$fLW;%8!U};UnzKF}&uS2T{)^-NjmW07yTp{+#4DJ>5!5_tLsu^UtNTUgzPqsp z0;Z7YAlHIYIKj8tfaF&MMj~^yA|Czzb=fV)w?nGmzI_`3$W&8q|NSW&93w#1GhAs{ z*k`$&D$SEdxwF>HPuMz2=S29Qek4cH@$w163pV+BJmXr&pF4-vBfakXw~Xt?F!Bnz zG8!PJv3Xf9&o(CbVRW_fSb}UA%@P2>LBc5RoZGnNvKonkDT7>5_@d?BzU7xF^!P5c z^Yvd$K59OVh0AmeqbY=bZPrYifM~XNH(CD_J_X2PuY>Zr59*K+qKC1~ey)&H|B$*# zKd*3jS)1zO@wHt`_Z_J{Dr8_uQ?u?(qo@VkWS02!u^DExH;~WST3!9co=)%fYs`L> zpTF8)yZb0_(e9xc1LADmp+nPo#+CpwrNEYA&gB#BJKemm)xK1{wO59dv5s0ssS~nA zw9RU)Fgm^YHi7r%#w;ngT!#_YE9|wnLGpc(-&RfSCgtMt!u6_qw%m_Mo*RR>Woy(U z=QECaHBH)?ebmv`p1b?oxk1AaVjI)Y=VeNy=lg0-?C?JnC($eJMm~I1kC(~ghfvSlB8e9d(+kSs2LU`*u*5=#YzmFH}? zQE_1*y+bqE8An>zugIw8{48MB z{$s^raQT`4G#s*#%B~(evEB{8G3=PEqaT6g;e&3_!$6ThzcaCU|iez%!hu>2w9#*B@xY5nbcVEMx zJg-L+p*LxfQ3crS_x!bs=_LGCie9v&j@vldYHND&b85U^GxOJ-AiEU6fhqImGB8|!(!1@W8J=d2vMEwG3T6ONPd6Lj zH)0mFM8*ZfRLtUxW*mN ztu`J-vrb#P2Bxhm-RUHKkJO=+5{O1IJVcR5@Q^e~vZag^YbBXbBWKHwB5Hctb=ml2 z{65rhNEw0L&@GH7fIB6IS$`23>4;G6Il?BhUf}5gJBNk1DK3YJ#T%$Da}l#id*;V2 z1DGQ_NeM|WF_8pd*HK4u8Rf=jqvYAWr(9U!C4vIL_9GyO#JfZA11;v?Tl3>BZ`^wH zK{u<;T32EPy3RR~DNFw-M1;6fqKXsQKX%1$uD70CoG_W3N8y7VvqfOu>sg~lGJM~% z%@9rc&PF{-Ua35QW;-n@khzive>G(Z?7@i2qGb~ryoBa zMutqA*@@a%AQM}aBm9Tx=2o?rvx{k;gG*{0eEue+F^xBgTe!KR?_QSlO1&VYOv{!9 zFP3atkF=%_@O<4~^{adHs4u8|NWT$puxr)L34tnyZv7^>({kxVe{e8P`R_Uq1<$zNTL1})|Et- z^z$F5DsAP(fBs{4C2+)_-#DVpYNj!Neq)!$!%?98>mTcPMqu>wA2-&WQW_^?r$~Im z{YM%9QZ-nCp2*K`vP9`aI0QsF%)hm{j63XQg86uC@{W)EO&OI(x#BTWy!7@~2|8Bj z>u*AiZ0g%~suC|+L}R?;$;?jw{t(x%X%6_GzB6GUe!gwfI>pvmaq(hBDID2D8haovoJjBL)a**7h1Gbc?F_8R*vtmBJ@Taal>(bOR*81KwngG)=K{mb{9w;= zB@IMZLmZH!^}-y76_hFko5r6-g>whpEiEjoy3i>}Kx9_tsNK1^rbA90YwF|IE*wc2ptvCTx`-3bX?@8 z@R)n+%}1o1H>EX(j2Hq3s(Z{#-(3_kECpO|9aRDfK!qVljaUcaCHtT6=UA(L9@^7s z*cL)o?~H>7YpJY!g|xF9)R6k5-fZ{+J`NVw6L~cM?z7{_s_)-K;t0Mc0x9s_*uC=P z0o^(-#CynqFe_Ras`EK#^QP*W+4>#J;_bJf)I{JWBYaAN$x~LyG(UNB)<2fN7S83z zw!UmLqD=_1@8^tu;Z}u@-4S0reiD^FZ$yxi*{nk#P}QS60ZUYZ14(PzxUm>4N@1ZV zSma19fFRV=Y2hnBSG9O=Jzf?u`cnf8YOS|h6giZ342QPVyvw_>?YO38`1a~jRdWub z=|U^rt$Mp9Rf62feiGRTO<@G&yp2#6B-(071zqza1^KJUwV#LHzy)m(OJ~4Wx6Vj0 znKn%}kjvE}e#Q8_bqwraID+z5ZP1d=lw8ZaHjXf^B3J$E(duq7-oiuMGiiTWnUjn* zJ2`cyOP|YY%lfRXXxpQrMyzj4doP}*yya=jRi~}7yX4n#wP24-+k{e7g(CYA zG7)>h6!8h;Qo{KCTTZ!d`JnL@1G2fab*6B6dQ_la6&_MrCJfD>ekX!+3mpgNcWrLW zyz=t@Miw)Kc|j$7-9Ew9)h^nifNp_E2ZiA?*6=O+my)c@^=s3QZPf!~-tc|#>x^p= zy05=&xzuf2z{}y@BifE@G^byr&+y#w%Jo&uf}*U=qMA4lnBDW0Z&^{@`aSO*cRJJ9 z*?rtECR2txDbH(dQumh;!*7mn75lo$%#x2|{5+i}4Db9$m%_J+(Vp6dxOlzZeZ@AT z+sCgL7P?s4*x98E)Cckvx~J&n%UfvG1YPoZ8FS-iYO1q$a~bZ2Z=^PsmL$&Y(I&jC zxW-O>?Z$@0PD;n&!I(MOiGdUM8Mj-_jsLbOhq7P3JQ9}fTB3~#8U9D?qS0^QfY{Z* zVCR@lKE->s2;nMQTZj4hqH#cNYr+O*vF${YobLR3EK)*u4-d_O1JCBh@Sp2CwQ~fp zT4|Cg zM}yz2?BVIjEpRQ*D{BdWd+Brf;s@-u+R#G7&BKMXuav*!TC=$B;?&Alajes_X0EC| zt>^Xl!`9k*Jgheu;^D|he~gp1@F#Q7M>H{lRmw(oR(Ea^Xp1`yF(si-c*UcK_c_NJ zznv^5O>&ksR=%mT?2%Wn<;8_p;8{{Yf(1vE_yYkdcKk%9e(2-iYFzBX>FxO%8@g~= zAsyEF$_v}JwdQD2Gp&&~L8CgS?{5DhAg7lYF^tjh-A;ig_$u%q%6Qu6D@-lJ4GZP2FS@+@-1Oty$Lc)@E5A%- z3P_!?BXX4W9DoC*6`4Q2HM;kq{$CsK<>Y{mk8pSILmvXOre=eoF(9B)8x@s0 zQ!Fh<+u3#8v17-*d-tYHpFWa*^YZfAzGKG#!?UMPZ~yY;i@}LpD#&dq>+p&PqF2Hj ztDvMr9H1l>bCK}YlVw((p4V>QRz^@Ol_r`w)*FC{>4YlY?9GJkw#v^7I0HUDKE=_X0fMEWmfynn$?MSZ*cT(?FzG(6&2{2Z_Mk9 z(7yg^W?j9#T`$d^Ic^+~LNm@3!lF9fE_t>wmtB;}b@XtjDHunHviUkp~k6ZL-y(*>|#S?d(D) zt`{~C>p8mefrCq4yx7Dbz?&yW2g!V7ULGcsYuHc_n)AStx5TX1f$;D(cAfU>fDyHy^Va~=m&w555UtC=L_wLtO2HdfXAF_DKQ??vXSm|H08*uEziNkSmJHg(kSy_#l zII$Ur$K1kVDu40uN$At8l#8`}=gw(%b`xjLY&U=YeDL-uwzd;SjjGRAa{rE-lRO@G z>cw+a>iZ~i`W7XJUji;%kji|xLqRcjnb^o4VY$N~-W(`;+eW)1OId}frnRI)$Bv=v zCvyTo(e6?kzr8q%K9xuy7ncPcOpPRaqnl+=CnR9a(a1<7N*6_LxG44sr99NSnho3z zH~YnF#T}mOP@!x4nGBC%XQ5B#Zj|Q;0rfc4cW&Eu4YVrb_Y8!F7*SqPIaXGs+oMNU7Dvv-TiOfx}{UvR#o*BOb3O6^Gi0j%%)_7fZWsGEne(AIq~|{ z<+Z{6`~B#vD#vMd`anMwm8PbS7k#XVS|Bf2Avy={hrUZJSJg@n9Xu#gRc@EQdZS3$ zt&_tr!7lmx-G@j#pUIWgj{dI5o=J z4l;Fg)InsEc-7*}EDH-2GQSQZS%9T#Hj^f0)VGh|yD23H{yKpZEKum6LGc!8Uk&>A zm(I<>rQ}3a- zX3Pv-OitYoOCnDa8A~8#f|c6c`*aH{#=RHKJs(d( z;8ATtJM%?%%5vQ=mK+PlXH7-?*1Z&% z@oF*Q9*S@h*BA0p^rK=6xI7~<(THv*69J{{s;9Z?vu3AUTgc>Dk5#8g%q>>Gr+;mS zCrOCaD7n$D*q_<-=IjDbx)W1xuh9KbvQuGp&;(N0yUj` zZdottJHyhko0>eUsE{ocL~R;k8q&4=h4#2&A z_3ik`^?Dp?5eQwreA(>PWcNJRvz5V@YSuUGw0t$9fSq}6=b}Jn^$EGrIhB7Q!+-g2hqgV z^0)@tw9G_0_7{z$SNHGKS^oa%liKvh#i=nL=70VTKN!j7>8?@sQ8p$fbq0ICoK5mf zb|6Y}j95e-h9IjiY7T~{t|I+yhioltP@je@%vIk!qi(q?vrri2#R8}#lKsQPJ&t}IB8hB_rCg(z4(R=C#L%uIir-dFqt zKNZvyataVh5DzwXsH1o7#;6L1#&XDwGglwxe_-${&Rsiw_XHgn_e^d%Z&#d?$Zy|^ zi)bNJ($b`Tf!2vdS7@;K@dOi-EA@w*Si80!`pSM+w`y$YPJq1h&*5h`SJnUJ7mOLR zB5%7=`y#aIz2dk;1*g~=MmCjL)Sk*TO+dPl%8|sx5bk#+K(26TscC5oiKrn@|3s^K zxn7GUtbDLva?Z(A)fjrAfc>IW(^|S=UX=vjf|?=D%P_qIdS<-BJUgA8(PMjX@HRj@A;|dA z8NlC^xvERQf2r16NiaB=R@gU!-FNju|RRq z@5Fkyi>4f-T&v&T@8$!fxX@H{;S9y^zwl3v`N48(-M7eO?!drCEUVLBzusWj6{NFc zuzn?3%a*M4Zy`M({`M>9YlbYe=9rfLS8pisp3L0}+L0pyy`tgsez0(|x< zg9F9<5lifR&W1qFB1d6-OSJxi;u7a5TW^I83zH9-ZL@elyPjH#yBA<|%lfJ$t)MZT zx{!SyJa}N1_$U1Z6sI1Al_MxLx=dP$s^6gE^65ThN%2t^z@JRG(uS2mp%i@TaHIhW8W1fD-{ zEEOQ?rN36ZYxT+C7gFG-CKgOwM`?s1fdGZ2~YWa+ullD&nq*cCo|IoE{ zdP-uZz(ZDw$>?lorr@Ok==k9E#CCe2aC` z`k8sM5nv^c9=+O)>_dBkgM(FRGi2CZ_9r4AmrN=v08v+n4{usI)zg|ic2VJb4m+Q6LRv6z*>s+d_f_MJ;t-04Ye@K$iP)ck2&KW~6n2uyTwWE&fcDK6b0(Ci zif5z8!~G~Xeud)PA76|4&kVnK*>_KIDL(MLn5#vOg><>hVXSyp=58^$4iUXMs^7vf zix2Nv`~Jk66&FlHs<{&B8sFYDq_dX2$Guj4Zo(NINE$Z&@W3J2BNKq@5<24==K9XM zCn*l4fy$EuqoZw`a|6i7-;Xu7G&OyAhoCIV;hC}XepOLXk)z{C$pLCu$$x#z^MHfN zkrO9MnPQv|0}!V_Q!efGe*|e7+Yjel`Gp|*GXBN;Z)f152KpfCv-6a@gN%&ozM&6% zi)1x7ey)6Q<-DnaMwPZ3s;}kbMNUq$IlI>3v*fo$ z&lJ$A_&g8pOa@KC2vsS)@|WJ72t3pWS3Qo~IHkr-ngC#)aX+N^v~dRn7W3PB=80rR ziFD9Hbwv!s_&~jr0Q2Zm=cn~mU}r8P1PQZk$#z#!>+nPZ>}z)EQm0|Vh9br->M-D} zplLyif&^7dm@Tmw3lb$`&_g9T&Yb%?Cmqw(S=s7p8Kyv*dIB^l2W|F9>v>j5L?$!{ zb%d~1;+c>j9y8Om_MOgN6wi>mJS~bcNucSplB+AM$+UqIHJf1uruTAdQj!@ zs_*QU&0O`gxR?!S#ynRHT~r}5s)Hw4irunD^NVy9XDIqS8C&cF&b><9Ol7LXmI+Fh zBo~9X1#4SWoxSw6+2Fy0Eu(FDip=!OLXh`&W5bJ*%j5IAsZ6HNn9-U%KY(A)(J#sKeKs(IE+QPA8wx-BZLbEE8BCSZBH|*A`{gRgxjD__(HC=%V{Lmx$|}uo?|pbn41l0<0_6fNxYH=6slFtensYs7cxu`W4*KFO$-l zDr>;qkQYx*H9;g?_)n-?toxbT19dxkbhN}9)+`|?!px!`06=mKaKAgYNkZ#>tK72c z4O05s{Qp!l0iMRj#!7GAzn@QS+jHm*+J&PhPAnkcLlx9rO$UKUx~U9;Ga-d=11{!6 z-^UB9KTulLeS_>wZTcT_6J*+t2sblv>Cv8C^d|4nzrM{H*+Qs8pkYJ?9mSrB)90@- zY#+H*$t~eoTQs6hd2?%{%n`fwdN8yRv9Vj}VGMq?jFcg8kxWxx0V~8GEbXqZ-{A7& zi=WLrA9>|eQd3L?F&{Z{!op%lGu>7}o2Sx9ve#|~`yXI- z@_kD8is}XG$iOZCCP>k5y1I2|qZ1_aocT0(x&($|>)X+H{@`K83MFIkyPCkkuL>lC zFuZ#4V5x8*jLaFoxm@r3`)nH^*8YY=(NhBIt3>X(!RY^AAdAqnJqXv~=g;o}tz#RQ zJG|w>@+#Bf4urs&499`9*6`dULyN=UtYIu+&z?O(uF%Q!Ub6!(HkP0Wu;XHzpoo{Q zXO0gW@Cs6qhP3UN(WiI(zgjuegY$p?7Fa+rJR444@&R2Ogxv(-D|~6{Qc?Ivr7aQ? zo?VQ+QCrGg#&ts7BXs~v{Q_j34~03ab0*N&&cMM~iV2=d*>*|y7zS*xKPKg)%(HTl z-&HFxjCI~^qQR=C&6qKkpVF`POows?KN6|($%S`yNGzg(_d#umB61M6ji3v&J{Uce zvF%E#gz1)+$vjp5%uNE4$W_i?UK9Wlm71-sE`uLRk9|Md?T@*XLF#H}w6r@Nm=16W zP>k>D?adE^$@2uo@X*tAj3yvRefFLGcAp--_S*m-LJL2KOs7~L(W9*rpqURCL;|x^ zt}7eXhJY>Jt)n4O6xO`kww)MzX`6^*A=dz8$ADkUs2_2`f!;v&lyIB_mJHhP`|AtA z2v0(2CfnaVCCY7y7To4ZZf^P@CvomOM87U#ZHj(>UkDAEZ{lCnt8Hy|u0CHW@+&P30*$_bW ztX^72hR_&nkeS8yj}&R~=KUz*j7&Fz6`y~bG59>Y5_|4Dg)mua8Sag~ku9q!iF0DT z#MQd@)bPhRKFQg3>DQb!k&!)Kym-NUhqHGNHgn#r_^irJTigD)}TM6SW zLv@vR%zE`fEy&B{7k?5qbJ(h(P&z`~s`~npe%&s-x0KavP~o?zpEu~-Smf+1DU)FX zkjey$k9VfBhVUtLFkMat(i(SY+Q183#oC6TPc8+#j&@+t=K_>I#!L%LV62|U0HWe5T0wbZ{w;j0)3X%CgemFVS&4_7`UFz7_Xp19nMX}9SV)@Ng<1>&i3hx% z!(d=v;M$1Or%&fP$aXXqhyhMAAR`Svjp*&-OD7mf7f6xAoWi4fG&CSELdzo_N&`pyLwgMIiUnf0)X+i?%fN(5u_-VDQ>vPKvtaWghVmB zI1tqUPl7-r$ewDYrK`dCkdnwI`l6zd)E4j+caB*F?>;l9N@zl^zLwTnP)JrV8)ExN zB11KQD5>C@F62DF--C2}_w3>)o(+8A0Y%6xSrhrnw%xmPpT37sxh66Zcu{~h*A*j} zcBQdbwX^s29fF9WP20AtbWZ|5rvp-xac4>i0=3<{0hw%b6P`%R<#Xl7Qlk=9BOqt` z@S(y@DPQ}yUcE%c1H(ia_nW@{Kc`RMdk`EJHrdZ_D3q*#S-?s_WnjbS_LmbvaE%GGy^(U^>GL-+|kvW%SagnAAQreFj*auA3qr2k)BpSTxiYLyc@Pfr9)9;K;z z`SIg@lmxv|wmHa00DS3vbth&Cj3V83)T+yc2q-AJLE@25O6}U!*mw_1AstpsM(nov z?m-F$K0k;l)W%iX?U23GA z?+!WtLu3(>oK**$C)pa9nE14;Y$J*d$5Xj#+C?QLqbYmYPL-UV9+g|xgiWKKfpv|Z z^f^w;r>?HPI$0_FpMM%St-Rp(V8Oxo_y>)0bai!)96h?Q?Jfv>b(8Un)|x@?75P#E z45n^7%*m%F$5h>a%a%;T!?!?TD)F>v_q{=j4ufRi079^IWUlsjj1- zDQ!msjAUGMF%TD7Qc4nsJm9Ogwziydm|L0SB72S-Ki=70eKeVj<^kY2Dz^`ZURtBe zFsZvpT}7qHX+0<9#r)Zht4OhYI=<$N1x+%~78r{Z$e^7Nh7(8Iz;Lv`Yl)a?vD=t54zqf)$uPb*c%!MxLfNZA6j;T!=1%8fglZ9_%Jrv**R; z!J#Sh`l^4m9+N)2Xk&Y)JzMW0@{qB6)>w1=le1BwIyByn&PEPse0&xU<>p!cd=mW& zBAu;UM>snlt9%b7ET4qz*(7liORxH*I!m6^7;3Af=-NzO#ujcG+rA3<08W6oP#wvQ zK?@@ug4WjR;9j&F8dJ#un|#EawO_lcAhAqkS%0ehSOW7p;5^ z-N}iozoD+Qj3!jpbf; z$)2jy^Zn#Hh%ow(2*v?`8xgv$H~ebp`442XfEMqDC1qqZ=a$20`yW1B>N9XrYn$>+ z3OXiJ;!;v=vkOX`ZK7@(c^x}=@cIJ;OQ91YVhxU^r>76_b6eghbC6q=2|IgC`Ykx@i$Erxufmva+(aTVQ6tmw4B$+XmvDhlj@?RNiDy z4nLvf_s1%MTp=V{eZL&EZM?|AdeKO0RaI3wTz|*7Y`@;a_5{kxnZ0}WR_@Z6l(`UE zJx=O4j~u{1LXIdVBCfb{?$D!%;BDs26h1QmwbPxZXQO~$aRnWNo#C0Rh>qf1LZ=`jy?->~}KeCxil$L9xmV4ygeUa0{{c7%G z<^i7Z6mC5tA|h(>7bx!1jG;_hEL4vd8aX;QkOn`roPUtKkcV9(sk6L zl|SW>{}b_K;htu$dB-I~fvz}KN2Q$_tx%5Lez}}DA$CNpVZOYI*T`fyy9@BC*nmO79n3jM5U>0Z<*u19<&I85m74v zAc;b4P+JX+7Q@}$W1>}7sS@kJfx*k5X7X4Oz zz2IEB&Ckzztx5q6O&06FjT;NVV2gnn8?r3;ZnDac<9T{-^Y%ZuVTRXRkmu)dL#R|l zDxq_C{lSWa#6;G7gq;L<5Z#9`_v9GmV?6o~;z!hevY@!ToRhD+Sn0%M%xn^cSd&uZ zGi>c*XSrcJiHTEI+XkprpLNY^aG6rn)k2mj@-;TJ{G^tZb>II@K7Pi_u%jh}E%?yk zW5-e-Sb=mg43I8vueqlVH#`3GvfAXB$Jc#Bzb>XO3blgEgW2UCMhC?-khJCpVlA`D zOmnYrOMI>ayzIkDJ6F4XKYx2-$$#bcPP&ikn2Fx)Gm$C{8JeCm0naIi9t!^9cIEkbJtGw{SX@kCck#(dU};nArs1#SNxz z{IOZRYA@fy;HM{c{~71;40|xCXdfoZ5;?wt(q4pwwyjMsnwocZ{{Ks|g%qj%T3El@ zv!mD_0L)s&wq027-^%PrM=dL{{`g*#`Taq-f>M_^;eA5{>2dlBB9sT{;NDGEnLnPu f|GOZ(@OzzIN3wX0Q2QvZ?#V diff --git a/examples/demo01.svg b/examples/demo01.svg index 7f284b7a..03b2a4bf 100644 --- a/examples/demo01.svg +++ b/examples/demo01.svg @@ -12,6 +12,7 @@ X1 + X1 @@ -133,6 +134,7 @@ X2 + X2 diff --git a/examples/demo02.html b/examples/demo02.html index 1002edda..8fe7c472 100644 --- a/examples/demo02.html +++ b/examples/demo02.html @@ -199,6 +199,7 @@ X1 + X1 @@ -445,6 +446,7 @@ X2 + X2 @@ -474,6 +476,7 @@ X3 + X3 @@ -503,6 +506,7 @@ X4 + X4 @@ -536,6 +540,7 @@ AUTOGENERATED_F_1 + Crimp ferrule @@ -581,6 +586,7 @@ AUTOGENERATED_F_2 + Crimp ferrule diff --git a/examples/demo02.png b/examples/demo02.png index 667267704f56e435a495791a2525a0d14ebfec64..f7dd69188130f0292ecca718b122bc78a878c71e 100644 GIT binary patch literal 189607 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℘z?CeQ4!vT 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�hLUjhxp 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 diff --git a/examples/demo02.svg b/examples/demo02.svg index a23c9f63..130922be 100644 --- a/examples/demo02.svg +++ b/examples/demo02.svg @@ -12,6 +12,7 @@ X1 + X1 @@ -258,6 +259,7 @@ X2 + X2 @@ -287,6 +289,7 @@ X3 + X3 @@ -316,6 +319,7 @@ X4 + X4 @@ -349,6 +353,7 @@ AUTOGENERATED_F_1 + Crimp ferrule @@ -394,6 +399,7 @@ AUTOGENERATED_F_2 + Crimp ferrule From 7134b6841fa1f6755726b26c24a80c74e33a2972 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 20:01:05 +0200 Subject: [PATCH 009/111] Generate gauge string inside Cable object --- src/wireviz/DataClasses.py | 18 +++++++++++++++++- src/wireviz/Harness.py | 14 +------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index b7d3f712..11c7dec6 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -6,7 +6,7 @@ from typing import Dict, List, Optional, Tuple, Union from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme -from wireviz.wv_helper import aspect_ratio, int2tuple +from wireviz.wv_helper import aspect_ratio, awg_equiv, int2tuple, mm2_equiv # Each type alias have their legal values described in comments - validation might be implemented in the future PlainText = str # Text not containing HTML tags nor newlines @@ -281,6 +281,22 @@ class Cable: def is_autogenerated(self): return self.name.startswith(AUTOGENERATED_PREFIX) + @property + def gauge_str(self): + if not self.gauge: + return None + actual_gauge = f"{self.gauge} {self.gauge_unit}" + equivalent_gauge = "" + if self.show_equiv: + # Only convert units we actually know about, i.e. currently + # mm2 and awg --- other units _are_ technically allowed, + # and passed through as-is. + if self.gauge_unit == "mm\u00B2": + equivalent_gauge = f" ({awg_equiv(self.gauge)} AWG)" + elif self.gauge_unit.upper() == "AWG": + equivalent_gauge = f" ({mm2_equiv(self.gauge)} mm\u00B2)" + return f"{actual_gauge}{equivalent_gauge}" + def __post_init__(self) -> None: if isinstance(self.image, dict): diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 9630aa73..bd138e8b 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -45,10 +45,8 @@ remove_links, ) from wireviz.wv_helper import ( - awg_equiv, flatten2d, is_arrow, - mm2_equiv, open_file_read, open_file_write, tuplelist2tsv, @@ -203,16 +201,6 @@ def create_graph(self) -> Graph: html = [] - awg_fmt = "" - if cable.show_equiv: - # Only convert units we actually know about, i.e. currently - # mm2 and awg --- other units _are_ technically allowed, - # and passed through as-is. - if cable.gauge_unit == "mm\u00B2": - awg_fmt = f" ({awg_equiv(cable.gauge)} AWG)" - elif cable.gauge_unit.upper() == "AWG": - awg_fmt = f" ({mm2_equiv(cable.gauge)} mm\u00B2)" - # fmt: off rows = [[f'{html_bgcolor(cable.bgcolor_title)}{remove_links(cable.name)}' if cable.show_name else None], @@ -226,7 +214,7 @@ def create_graph(self) -> Graph: cable.spn if not isinstance(cable.spn, list) else None))], [html_line_breaks(cable.type), f'{cable.wirecount}x' if cable.show_wirecount else None, - f'{cable.gauge} {cable.gauge_unit}{awg_fmt}' if cable.gauge else None, + cable.gauge_str, '+ S' if cable.shield else None, f'{cable.length} {cable.length_unit}' if cable.length > 0 else None, translate_color(cable.color, self.options.color_mode) if cable.color else None, From d348ebe4ce82953526c17da03aee507ee19dd53f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 20:43:38 +0200 Subject: [PATCH 010/111] WIP: refactor cable node generation --- src/wireviz/Harness.py | 11 ++ src/wireviz/wv_gv_html.py | 234 +++++++++++++++++++++++++++++--------- 2 files changed, 193 insertions(+), 52 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index bd138e8b..5f1230c4 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -35,6 +35,7 @@ from wireviz.wv_gv_html import ( gv_connector_loops, gv_node_connector, + gv_node_cable, html_bgcolor, html_bgcolor_attr, html_caption, @@ -199,6 +200,16 @@ def create_graph(self) -> Graph: for cable in self.cables.values(): + gv_html = gv_node_cable(cable, self.options, pad) + dot.node( + cable.name, + label=f"<\n{gv_html}\n>", + shape="box", + # style=style, + # fillcolor=translate_color(bgcolor, "HEX"), + ) + continue + html = [] # fmt: off diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 949a8180..98acc6e3 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -4,8 +4,8 @@ from itertools import zip_longest from typing import List, Optional, Union -from wireviz.DataClasses import Color, Connector, Options -from wireviz.wv_colors import translate_color +from wireviz.DataClasses import Cable, Color, Connector, Options +from wireviz.wv_colors import translate_color, get_color_hex from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -21,68 +21,26 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> Table: # generate all rows to be shown in the node if connector.show_name: - str_name = [f"{remove_links(connector.name)}"] - if connector.bgcolor_title: - row_name_attribs = { - "bgcolor": translate_color(connector.bgcolor_title, "HEX") - } - row_name = [Td(str_name, attribs=row_name_attribs)] - else: - row_name = [str_name] + str_name = f"{remove_links(connector.name)}" + row_name = [colored_cell(str_name, connector.bgcolor_title)] else: row_name = [] - row_pn = [ - pn_info_string(HEADER_PN, None, connector.pn), - pn_info_string(HEADER_MPN, connector.manufacturer, connector.mpn), - pn_info_string(HEADER_SPN, connector.supplier, connector.spn), - ] - row_pn = [html_line_breaks(cell) for cell in row_pn] - - if connector.color: - colorbar_attribs = { - "bgcolor": translate_color(connector.color, "HEX"), - "width": 4, - } - colorbar_cell = Td("", attribs=colorbar_attribs) - else: - colorbar_cell = None + row_pn = par_number_cell_list(connector) row_info = [ html_line_breaks(connector.type), html_line_breaks(connector.subtype), f"{connector.pincount}-pin" if connector.show_pincount else None, translate_color(connector.color, harness_options.color_mode), - colorbar_cell, + colorbar_cell(connector.color), ] - # - # {html_size_attr(image)} - if connector.image and connector.image.caption: - # import pudb; pudb.set_trace() - row_image_attribs = html_size_attr_dict(connector.image) - row_image_attribs["balign"] = "left" - row_image_attribs["sides"] = "TLR" - if connector.image.bgcolor: - row_image_attribs["bgcolor"] = translate_color( - connector.image.bgcolor, "HEX" - ) - row_caption_attribs = {"balign": "left", "sides": "BLR"} - row_image = [Td(html_image_new(connector.image), attribs=row_image_attribs)] - row_image_caption = [ - Td( - html_caption_new(connector.image), - attribs=row_caption_attribs, - flat=True, - ) - ] - else: - row_image = [] - row_image_caption = [] - row_notes = [html_line_breaks(connector.notes)] + row_image, row_image_caption = image_and_caption_cells(connector) + # row_additional_component_table = get_additional_component_table(self, connector) row_additional_component_table = None + row_notes = [html_line_breaks(connector.notes)] if connector.style != "simple": pin_tuples = zip_longest( @@ -124,7 +82,9 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> Table: if connector.bgcolor: tbl.attribs["bgcolor"] = translate_color(connector.bgcolor, "HEX") elif harness_options.bgcolor_connector: - tbl.attribs["bgcolor"] = translate_color(harness_options.bgcolor_connector, "HEX") + tbl.attribs["bgcolor"] = translate_color( + harness_options.bgcolor_connector, "HEX" + ) return tbl @@ -159,6 +119,176 @@ def gv_connector_loops(connector: Connector) -> List: return loop_edges +def gv_node_cable(cable: Cable, harness_options: Options, pad) -> Table: + + if cable.show_name: + str_name = f"{remove_links(cable.name)}" + row_name = [colored_cell(str_name, cable.bgcolor_title)] + else: + row_name = [] + + row_pn = par_number_cell_list(cable) + + row_info = [ + html_line_breaks(cable.type), + f"{cable.wirecount}x" if cable.show_wirecount else None, + f"{cable.gauge_str}" if cable.gauge else None, + "+ S" if cable.shield else None, + f"{cable.length} {cable.length_unit}" if cable.length > 0 else None, + translate_color(cable.color, self.options.color_mode) if cable.color else None, + html_colorbar(cable.color), + ] + + row_image, row_image_caption = image_and_caption_cells(cable) + + row_conductor_table = str(gv_conductor_table(cable, harness_options, pad)) + + # row_additional_component_table = get_additional_component_table(self, cable) + row_additional_component_table = None + row_notes = [html_line_breaks(cable.notes)] + + rows = [ + row_name, + row_pn, + row_info, + row_conductor_table, + row_image, + row_image_caption, + row_additional_component_table, + row_notes, + ] + + tbl = nested_table(rows) + + return tbl + + +def gv_conductor_table(cable, harness_options, pad) -> Table: + + rows = [] + rows.append(Tr(Td(" "))) + + for i, (connection_color, wirelabel) in enumerate( + zip_longest(cable.colors, cable.wirelabels), 1 + ): + + # row above the wire + wireinfo = [] + if cable.show_wirenumbers: + wireinfo.append(str(i)) + colorstr = translate_color(connection_color, harness_options.color_mode) + if colorstr: + wireinfo.append(colorstr) + if cable.wirelabels: + wireinfo.append(wirelabel if wirelabel is not None else "") + + cells_above = [ + Td(f""), + Td(":".join(wireinfo)), + Td(f""), + ] + rows.append(Tr(cells_above)) + + # the wire itself + rows.append(Tr(gv_wire_cell(i, connection_color, pad))) + + rows.append(Tr(Td(" "))) + + table_attribs = { + "border": 0, + "cellspacing": 0, + "cellborder": 0, + } + tbl = Table(rows, attribs=table_attribs) + + return tbl + +def gv_wire_cell(index, color, pad) -> Td: + bgcolors = ['#000000'] + get_color_hex(color, pad=pad) + ['#000000'] + wire_inner_rows = [] + for j, bgcolor in enumerate(bgcolors[::-1]): + wire_inner_cell_attribs = { + "colspan": 3, + "cellpadding": 0, + "height": 2, + "border": 0, + "bgcolor": bgcolor if bgcolor != "" else "BK", + } + wire_inner_rows.append(Tr(Td("", attribs=wire_inner_cell_attribs))) + wire_inner_table_attribs = {"cellspacing":0, "cellborder":0, "border":0} + wire_inner_table = Table(wire_inner_rows, wire_inner_table_attribs) + wire_outer_cell_attribs = { + "colspan": 3, + "border": 0, + "cellspacing": 0, + "port": f"w{index}", + "height": 2 * len(bgcolors), + } + wire_outer_cell = Td(wire_inner_table, attribs=wire_outer_cell_attribs) + + return wire_outer_cell + + + +def colored_cell(contents, bgcolor) -> Td: + if bgcolor: + attribs = {"bgcolor": translate_color(bgcolor, "HEX")} + else: + attribs = {} + return Td(contents, attribs=attribs) + + +def colorbar_cell(color) -> Td: + if color: + colorbar_attribs = { + "bgcolor": translate_color(color, "HEX"), + "width": 4, + } + return Td("", attribs=colorbar_attribs) + else: + return None + + +def image_and_caption_cells(component): + if component.image: + row_image_attribs = html_size_attr_dict(component.image) + row_image_attribs["balign"] = "left" + if component.image.bgcolor: + row_image_attribs["bgcolor"] = translate_color( + component.image.bgcolor, "HEX" + ) + if component.image.caption: + row_image_attribs["sides"] = "TLR" + row_image = [Td(html_image_new(component.image), attribs=row_image_attribs)] + + if component.image.caption: + row_caption_attribs = {"balign": "left", "sides": "BLR"} + row_image_caption = [ + Td( + html_caption_new(component.image), + attribs=row_caption_attribs, + flat=True, + ) + ] + else: + row_image_caption = None + return (row_image, row_image_caption) + else: + return (None, None) + + +def par_number_cell_list(component) -> List[Td]: + cell_contents = [ + pn_info_string(HEADER_PN, None, component.pn), + pn_info_string(HEADER_MPN, component.manufacturer, component.mpn), + pn_info_string(HEADER_SPN, component.supplier, component.spn), + ] + if any(cell_contents): + return [Td(html_line_breaks(cell)) for cell in cell_contents] + else: + return None + + def nested_table(rows_in: List[Tr]): outer_rows = [] for row in rows_in: From 1f8dd49eb9752e7acae4b8e406c5e9549c25f37e Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 12:20:40 +0200 Subject: [PATCH 011/111] Implement HTML indentation --- src/wireviz/Harness.py | 2 +- src/wireviz/wv_gv_html.py | 17 ++++----- src/wireviz/wv_table_util.py | 73 +++++++++++++++--------------------- 3 files changed, 40 insertions(+), 52 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 5f1230c4..956efe61 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -34,8 +34,8 @@ from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( gv_connector_loops, - gv_node_connector, gv_node_cable, + gv_node_connector, html_bgcolor, html_bgcolor_attr, html_caption, diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 98acc6e3..36de0735 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -5,7 +5,7 @@ from typing import List, Optional, Union from wireviz.DataClasses import Cable, Color, Connector, Options -from wireviz.wv_colors import translate_color, get_color_hex +from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -90,9 +90,9 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> Table: def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): - cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}, flat=True) - cell_pin_label = Td(pin_label, flat=True, empty_is_none=True) - cell_pin_right = Td(pin_name, attribs={"port": f"p{pin_index+1}r"}, flat=True) + cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}) + cell_pin_label = Td(pin_label, empty_is_none=True) + cell_pin_right = Td(pin_name, attribs={"port": f"p{pin_index+1}r"}) cells = [ cell_pin_left if connector.ports_left else None, @@ -203,8 +203,9 @@ def gv_conductor_table(cable, harness_options, pad) -> Table: return tbl + def gv_wire_cell(index, color, pad) -> Td: - bgcolors = ['#000000'] + get_color_hex(color, pad=pad) + ['#000000'] + bgcolors = ["#000000"] + get_color_hex(color, pad=pad) + ["#000000"] wire_inner_rows = [] for j, bgcolor in enumerate(bgcolors[::-1]): wire_inner_cell_attribs = { @@ -215,7 +216,7 @@ def gv_wire_cell(index, color, pad) -> Td: "bgcolor": bgcolor if bgcolor != "" else "BK", } wire_inner_rows.append(Tr(Td("", attribs=wire_inner_cell_attribs))) - wire_inner_table_attribs = {"cellspacing":0, "cellborder":0, "border":0} + wire_inner_table_attribs = {"cellspacing": 0, "cellborder": 0, "border": 0} wire_inner_table = Table(wire_inner_rows, wire_inner_table_attribs) wire_outer_cell_attribs = { "colspan": 3, @@ -229,7 +230,6 @@ def gv_wire_cell(index, color, pad) -> Td: return wire_outer_cell - def colored_cell(contents, bgcolor) -> Td: if bgcolor: attribs = {"bgcolor": translate_color(bgcolor, "HEX")} @@ -267,7 +267,6 @@ def image_and_caption_cells(component): Td( html_caption_new(component.image), attribs=row_caption_attribs, - flat=True, ) ] else: @@ -301,7 +300,7 @@ def nested_table(rows_in: List[Tr]): inner_cells.append(cell) else: inner_cell_attribs = {"balign": "left"} - inner_cells.append(Td(cell, attribs=inner_cell_attribs, flat=True)) + inner_cells.append(Td(cell, attribs=inner_cell_attribs)) inner_table_attribs = { "border": 0, diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index b5a36e6e..a071f17e 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -4,6 +4,8 @@ from dataclasses import dataclass, field from typing import Dict, List, Optional +indent_count = 1 + class Attribs(Dict): def __repr__(self): @@ -42,23 +44,40 @@ def __post_init__(self): def tagname(self): return type(self).__name__.lower() + @property + def auto_flat(self): + if self.flat: # force flat + return True + if not _is_iterable_not_str(self.contents): # catch str, int, float, ... + if not isinstance(self.contents, Tag): # avoid recursion + return not "\n" in str(self.contents) # flatten if single line + + def indent_lines(self, lines): + if self.auto_flat: + return lines + else: + indenter = " " * indent_count + return "\n".join(f"{indenter}{line}" for line in lines.split("\n")) + def get_contents(self): - separator = "" if self.flat else "\n" - if isinstance(self.contents, Iterable) and not isinstance(self.contents, str): - return separator.join([str(c) for c in self.contents if c is not None]) + separator = "" if self.auto_flat else "\n" + if _is_iterable_not_str(self.contents): + return separator.join( + [self.indent_lines(str(c)) for c in self.contents if c is not None] + ) elif self.contents is None: return "" - else: - return str(self.contents) + else: # str, int, float, etc. + return self.indent_lines(str(self.contents)) def __repr__(self): - separator = "" if self.flat else "\n" + separator = "" if self.auto_flat else "\n" if self.contents is None and self.empty_is_none: return "" else: html = [ f"<{self.tagname}{str(self.attribs)}>", - self.get_contents(), + f"{self.get_contents()}", f"", ] return separator.join(html) @@ -70,6 +89,11 @@ def __repr__(self): return f"<{self.tagname}{str(self.attribs)} />" +def _is_iterable_not_str(inp): + # str is iterable, but should be treated as not iterable + return isinstance(inp, Iterable) and not isinstance(inp, str) + + @dataclass class Br(TagSingleton): pass @@ -77,46 +101,11 @@ class Br(TagSingleton): class Td(Tag): pass - # contents: str = "" - # - # def __init__(self, contents, *args, **kwargs): - # self.contents = contents - # super().__init__(*args, **kwargs) - # - # def __repr__(self): - # html = [ - # f"", - # self.contents, - # f"

", - # ] - # return "\n".join(html) From f46bce6867b8f656b91b39e84f08da373ba6a95b Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 13:42:51 +0200 Subject: [PATCH 012/111] WIP --- src/wireviz/DataClasses.py | 8 +- src/wireviz/Harness.py | 13 +- src/wireviz/wv_bom.py | 2 +- src/wireviz/wv_gv_html.py | 364 ++++++++++++++--------------------- src/wireviz/wv_table_util.py | 6 +- 5 files changed, 159 insertions(+), 234 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 11c7dec6..2ed6e6cd 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -138,7 +138,11 @@ def description(self) -> str: @dataclass -class Connector: +class Component(): + pass + +@dataclass +class Connector(Component): name: Designator bgcolor: Optional[Color] = None bgcolor_title: Optional[Color] = None @@ -247,7 +251,7 @@ def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> i @dataclass -class Cable: +class Cable(Component): name: Designator bgcolor: Optional[Color] = None bgcolor_title: Optional[Color] = None diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 956efe61..ba07ff21 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -34,15 +34,8 @@ from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( gv_connector_loops, - gv_node_cable, - gv_node_connector, - html_bgcolor, - html_bgcolor_attr, - html_caption, - html_colorbar, - html_image, + gv_node_component, html_line_breaks, - nested_html_table, remove_links, ) from wireviz.wv_helper import ( @@ -176,7 +169,7 @@ def create_graph(self) -> Graph: for connector in self.connectors.values(): # generate connector node - gv_html = gv_node_connector(connector, self.options) + gv_html = gv_node_component(connector, self.options) dot.node( connector.name, label=f"<\n{gv_html}\n>", @@ -200,7 +193,7 @@ def create_graph(self) -> Graph: for cable in self.cables.values(): - gv_html = gv_node_cable(cable, self.options, pad) + gv_html = gv_node_component(cable, self.options, pad) dot.node( cable.name, label=f"<\n{gv_html}\n>", diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index d28e3a15..3de45d83 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -6,7 +6,7 @@ from wireviz.DataClasses import AdditionalComponent, Cable, Color, Connector from wireviz.wv_colors import translate_color -from wireviz.wv_gv_html import html_bgcolor_attr, html_line_breaks +from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_helper import clean_whitespace, pn_info_string BOM_COLUMNS_ALWAYS = ("id", "description", "qty", "unit", "designators") diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 36de0735..cb78c674 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -4,7 +4,7 @@ from itertools import zip_longest from typing import List, Optional, Union -from wireviz.DataClasses import Cable, Color, Connector, Options +from wireviz.DataClasses import Cable, Color, Connector, Component, Options from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -14,63 +14,80 @@ HEADER_SPN = "SPN" -def gv_node_connector(connector: Connector, harness_options: Options) -> Table: +def gv_node_component(component: Component, harness_options: Options, pad=None) -> Table: # If no wires connected (except maybe loop wires)? - if not (connector.ports_left or connector.ports_right): - connector.ports_left = True # Use left side pins by default + if isinstance(component, Connector): + if not (component.ports_left or component.ports_right): + component.ports_left = True # Use left side pins by default # generate all rows to be shown in the node - if connector.show_name: - str_name = f"{remove_links(connector.name)}" - row_name = [colored_cell(str_name, connector.bgcolor_title)] + if component.show_name: + str_name = f"{remove_links(component.name)}" + row_name = [colored_cell(str_name, component.bgcolor_title)] else: row_name = [] - row_pn = par_number_cell_list(connector) + row_pn = par_number_cell_list(component) - row_info = [ - html_line_breaks(connector.type), - html_line_breaks(connector.subtype), - f"{connector.pincount}-pin" if connector.show_pincount else None, - translate_color(connector.color, harness_options.color_mode), - colorbar_cell(connector.color), - ] + if isinstance(component, Connector): + row_info = [ + html_line_breaks(component.type), + html_line_breaks(component.subtype), + f"{component.pincount}-pin" if component.show_pincount else None, + translate_color(component.color, harness_options.color_mode), + colorbar_cell(component.color), + ] + elif isinstance(component, Cable): + row_info = [ + html_line_breaks(component.type), + f"{component.wirecount}x" if component.show_wirecount else None, + f"{component.gauge_str}" if component.gauge else None, + "+ S" if component.shield else None, + f"{component.length} {component.length_unit}" if component.length > 0 else None, + translate_color(component.color, harness_options.color_mode), + colorbar_cell(component.color), + ] - row_image, row_image_caption = image_and_caption_cells(connector) + row_image, row_image_caption = image_and_caption_cells(component) # row_additional_component_table = get_additional_component_table(self, connector) row_additional_component_table = None - row_notes = [html_line_breaks(connector.notes)] - - if connector.style != "simple": - pin_tuples = zip_longest( - connector.pins, - connector.pinlabels, - connector.pincolors, - ) - - pin_rows = [] - for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): - if connector.should_show_pin(pinname): - pin_rows.append( - gv_pin_row(pinindex, pinname, pinlabel, pincolor, connector) - ) - - table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - row_connector_table = str(Table(pin_rows, attribs=table_attribs)) - else: - row_connector_table = None + row_notes = [html_line_breaks(component.notes)] + + + if isinstance(component, Connector): + # pin table + if component.style != "simple": + pin_tuples = zip_longest( + component.pins, + component.pinlabels, + component.pincolors, + ) + + pin_rows = [] + for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): + if component.should_show_pin(pinname): + pin_rows.append( + gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) + ) + + table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } + row_ports = str(Table(pin_rows, attribs=table_attribs)) + else: + row_ports = None + elif isinstance(component, Cable): + row_ports = str(gv_conductor_table(component, harness_options, pad)) rows = [ row_name, row_pn, row_info, - row_connector_table, + row_ports, row_image, row_image_caption, row_additional_component_table, @@ -79,12 +96,18 @@ def gv_node_connector(connector: Connector, harness_options: Options) -> Table: tbl = nested_table(rows) - if connector.bgcolor: - tbl.attribs["bgcolor"] = translate_color(connector.bgcolor, "HEX") - elif harness_options.bgcolor_connector: - tbl.attribs["bgcolor"] = translate_color( - harness_options.bgcolor_connector, "HEX" - ) + if component.bgcolor: + tbl.attribs["bgcolor"] = translate_color(component.bgcolor, "HEX") + else: + if isinstance(component, Connector) and harness_options.bgcolor_connector: + tbl.attribs["bgcolor"] = translate_color( + harness_options.bgcolor_connector, "HEX" + ) + elif isinstance(component, Cable) and harness_options.bgcolor_cable: + tbl.attribs["bgcolor"] = translate_color( + harness_options.bgcolor_cable, "HEX" + ) + return tbl @@ -119,50 +142,6 @@ def gv_connector_loops(connector: Connector) -> List: return loop_edges -def gv_node_cable(cable: Cable, harness_options: Options, pad) -> Table: - - if cable.show_name: - str_name = f"{remove_links(cable.name)}" - row_name = [colored_cell(str_name, cable.bgcolor_title)] - else: - row_name = [] - - row_pn = par_number_cell_list(cable) - - row_info = [ - html_line_breaks(cable.type), - f"{cable.wirecount}x" if cable.show_wirecount else None, - f"{cable.gauge_str}" if cable.gauge else None, - "+ S" if cable.shield else None, - f"{cable.length} {cable.length_unit}" if cable.length > 0 else None, - translate_color(cable.color, self.options.color_mode) if cable.color else None, - html_colorbar(cable.color), - ] - - row_image, row_image_caption = image_and_caption_cells(cable) - - row_conductor_table = str(gv_conductor_table(cable, harness_options, pad)) - - # row_additional_component_table = get_additional_component_table(self, cable) - row_additional_component_table = None - row_notes = [html_line_breaks(cable.notes)] - - rows = [ - row_name, - row_pn, - row_info, - row_conductor_table, - row_image, - row_image_caption, - row_additional_component_table, - row_notes, - ] - - tbl = nested_table(rows) - - return tbl - - def gv_conductor_table(cable, harness_options, pad) -> Table: rows = [] @@ -249,26 +228,45 @@ def colorbar_cell(color) -> Td: return None +# def html_image_new(image): +# from wireviz.DataClasses import Image +# if not image: +# return None +# image_tag = Img(attribs={"scale": image.scale, "src": image.src}) +# image_table = Table(Tr(Td(image_tag, attribs=html_size_attr_dict(image))), attribs={"border": 0, "cellspacing": 0, "cellborder": 0}) +# return image_table + def image_and_caption_cells(component): if component.image: - row_image_attribs = html_size_attr_dict(component.image) - row_image_attribs["balign"] = "left" - if component.image.bgcolor: - row_image_attribs["bgcolor"] = translate_color( - component.image.bgcolor, "HEX" - ) - if component.image.caption: - row_image_attribs["sides"] = "TLR" - row_image = [Td(html_image_new(component.image), attribs=row_image_attribs)] + # outer_cell_attribs = {} + # outer_cell_attribs["balign"] = "left" + # outer_cell_attribs["bgcolor"] = translate_color( + # component.image.bgcolor, "HEX" + # ) + # if component.image.caption: + # outer_cell_attribs["sides"] = "TLR" + + image_tag = Img(attribs={"scale": component.image.scale, "src": component.image.src}) + cell_attribs = html_size_attr_dict(component.image) + image_cell = Td(image_tag, attribs=cell_attribs) + image_row = Tr(image_cell) + image_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 0, + "cellborder": 1, + } + image_table = Table(image_row, attribs=image_table_attribs) + outer_cell = Td(image_table) + # return: + row_image = outer_cell if component.image.caption: - row_caption_attribs = {"balign": "left", "sides": "BLR"} - row_image_caption = [ - Td( - html_caption_new(component.image), - attribs=row_caption_attribs, - ) - ] + row_caption_attribs = {"balign": "left", "sides": "BLR", "id": "td_caption"} + row_image_caption = Td( + html_caption_new(component.image), + attribs=row_caption_attribs, + ) else: row_image_caption = None return (row_image, row_image_caption) @@ -288,12 +286,14 @@ def par_number_cell_list(component) -> List[Td]: return None -def nested_table(rows_in: List[Tr]): +def nested_table(rows_in: List[Tr]) -> Table: outer_rows = [] for row in rows_in: if isinstance(row, List) and len(row) > 0 and any(row): + # row is a nested list # remove rows which are none row_no_empty = [cell for cell in row if cell is not None] + # if row item is Td, append directly; else convert to Td inner_cells = [] for cell in row_no_empty: if isinstance(cell, Td): @@ -311,8 +311,13 @@ def nested_table(rows_in: List[Tr]): if len(inner_cells) > 0: inner_table = Table(Tr(inner_cells), attribs=inner_table_attribs) outer_rows.append(Tr(Td(inner_table))) - elif row is not None and any(row): - outer_rows.append(Tr(Td(row))) + elif row is not None: + if isinstance(row, Iterable) and not any(row): + continue + # row is a single item + # if item is Td, append directly; else convert to Td + cell = row if isinstance(row, Td) else Td(row) + outer_rows.append(Tr(cell)) if len(outer_rows) == 0: outer_rows = Tr(Td("")) # Generate empty cell to avoid GraphViz errors outer_table_attribs = {"border": 0, "cellspacing": 0, "cellpadding": 0} @@ -321,106 +326,25 @@ def nested_table(rows_in: List[Tr]): return outer_table -def nested_html_table( - rows: List[Union[str, List[Optional[str]], None]], table_attrs: str = "" -) -> str: - # input: list, each item may be scalar or list - # output: a parent table with one child table per parent item that is list, and one cell per parent item that is scalar - # purpose: create the appearance of one table, where cell widths are independent between rows - # attributes in any leading inside a list are injected into to the preceeding
tag - html = [] - html.append( - f'' - ) - - num_rows = 0 - for row in rows: - if isinstance(row, List): - if len(row) > 0 and any(row): - html.append(" ") - num_rows = num_rows + 1 - elif row is not None: - html.append(" ") - num_rows = num_rows + 1 - if num_rows == 0: # empty table - # generate empty cell to avoid GraphViz errors - html.append("") - html.append("
") - # fmt: off - html.append(' ') - # fmt: on - for cell in row: - if cell is not None: - # Inject attributes to the preceeding '.replace(">
tag where needed - # fmt: off - html.append(f' {cell}
") - html.append("
") - html.append(f" {row}") - html.append("
") - return html - - -def html_bgcolor_attr(color: Color) -> str: - """Return attributes for bgcolor or '' if no color.""" - return f' bgcolor="{translate_color(color, "HEX")}"' if color else "" - - -def html_bgcolor(color: Color, _extra_attr: str = "") -> str: - """Return
attributes prefix for bgcolor or '' if no color.""" - return f"" if color else "" - - -def html_colorbar(color: Color) -> str: - """Return attributes prefix for bgcolor and minimum width or None if no color.""" - return html_bgcolor(color, ' width="4"') if color else None -def html_image(image): - from wireviz.DataClasses import Image +# def html_image(image): +# from wireviz.DataClasses import Image +# if not image: +# return None +# # The leading attributes belong to the preceeding tag. See where used below. +# html = f'{html_size_attr(image)}>' +# if image.fixedsize: +# # Close the preceeding tag and enclose the image cell in a table without +# # borders to avoid narrow borders when the fixed width < the node width. +# html = f"""> +# +# +#
+# """ +# return f"""' - if image.fixedsize: - # Close the preceeding tag and enclose the image cell in a table without - # borders to avoid narrow borders when the fixed width < the node width. - html = f"""> - - -
- """ - return f"""' - if image.fixedsize: - # Close the preceeding tag and enclose the image cell in a table without - # borders to avoid narrow borders when the fixed width < the node width. - html = f""" - - -
{html}
- """ - return f"{html_bgcolor_attr(image.bgcolor)}{html}" - - -def html_caption(image): - from wireviz.DataClasses import Image - - return ( - f'{html_line_breaks(image.caption)}' - if image and image.caption - else None - ) def html_caption_new(image): @@ -429,19 +353,19 @@ def html_caption_new(image): return f"{html_line_breaks(image.caption)}" if image and image.caption else None -def html_size_attr(image): - from wireviz.DataClasses import Image - - # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object - return ( - ( - (f' width="{image.width}"' if image.width else "") - + (f' height="{image.height}"' if image.height else "") - + (' fixedsize="true"' if image.fixedsize else "") - ) - if image - else "" - ) +# def html_size_attr(image): +# from wireviz.DataClasses import Image +# +# # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object +# return ( +# ( +# (f' width="{image.width}"' if image.width else "") +# + (f' height="{image.height}"' if image.height else "") +# + (' fixedsize="true"' if image.fixedsize else "") +# ) +# if image +# else "" +# ) def html_size_attr_dict(image): diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index a071f17e..a0177de1 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -23,7 +23,7 @@ def __repr__(self): @dataclass class Tag: - contents: str + contents: str = None attribs: Attribs = field(default_factory=Attribs) flat: bool = False empty_is_none: bool = False @@ -99,6 +99,10 @@ class Br(TagSingleton): pass +class Img(TagSingleton): + pass + + class Td(Tag): pass From d65222953efeb53900688101e82d5900a278fc92 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 17:23:15 +0200 Subject: [PATCH 013/111] More WIP --- src/wireviz/DataClasses.py | 3 +- src/wireviz/wv_gv_html.py | 231 +++++++++++++++++++---------------- src/wireviz/wv_table_util.py | 6 +- 3 files changed, 131 insertions(+), 109 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 2ed6e6cd..c2c7f5b1 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -138,9 +138,10 @@ def description(self) -> str: @dataclass -class Component(): +class Component: pass + @dataclass class Connector(Component): name: Designator diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index cb78c674..c2523987 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -4,7 +4,7 @@ from itertools import zip_longest from typing import List, Optional, Union -from wireviz.DataClasses import Cable, Color, Connector, Component, Options +from wireviz.DataClasses import Cable, Color, Component, Connector, Options from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -14,7 +14,9 @@ HEADER_SPN = "SPN" -def gv_node_component(component: Component, harness_options: Options, pad=None) -> Table: +def gv_node_component( + component: Component, harness_options: Options, pad=None +) -> Table: # If no wires connected (except maybe loop wires)? if isinstance(component, Connector): if not (component.ports_left or component.ports_right): @@ -23,14 +25,14 @@ def gv_node_component(component: Component, harness_options: Options, pad=None) # generate all rows to be shown in the node if component.show_name: str_name = f"{remove_links(component.name)}" - row_name = [colored_cell(str_name, component.bgcolor_title)] + line_name = colored_cell(str_name, component.bgcolor_title) else: - row_name = [] + line_name = None - row_pn = par_number_cell_list(component) + line_pn = part_number_str_list(component) if isinstance(component, Connector): - row_info = [ + line_info = [ html_line_breaks(component.type), html_line_breaks(component.subtype), f"{component.pincount}-pin" if component.show_pincount else None, @@ -38,22 +40,23 @@ def gv_node_component(component: Component, harness_options: Options, pad=None) colorbar_cell(component.color), ] elif isinstance(component, Cable): - row_info = [ + line_info = [ html_line_breaks(component.type), f"{component.wirecount}x" if component.show_wirecount else None, f"{component.gauge_str}" if component.gauge else None, "+ S" if component.shield else None, - f"{component.length} {component.length_unit}" if component.length > 0 else None, + f"{component.length} {component.length_unit}" + if component.length > 0 + else None, translate_color(component.color, harness_options.color_mode), colorbar_cell(component.color), ] - row_image, row_image_caption = image_and_caption_cells(component) - - # row_additional_component_table = get_additional_component_table(self, connector) - row_additional_component_table = None - row_notes = [html_line_breaks(component.notes)] + line_image, line_image_caption = image_and_caption_cells(component) + # line_additional_component_table = get_additional_component_table(self, connector) + line_additional_component_table = None + line_notes = [html_line_breaks(component.notes)] if isinstance(component, Connector): # pin table @@ -77,24 +80,26 @@ def gv_node_component(component: Component, harness_options: Options, pad=None) "cellpadding": 3, "cellborder": 1, } - row_ports = str(Table(pin_rows, attribs=table_attribs)) + line_ports = Table(pin_rows, attribs=table_attribs) else: - row_ports = None + line_ports = None elif isinstance(component, Cable): - row_ports = str(gv_conductor_table(component, harness_options, pad)) - - rows = [ - row_name, - row_pn, - row_info, - row_ports, - row_image, - row_image_caption, - row_additional_component_table, - row_notes, + line_ports = gv_conductor_table(component, harness_options, pad) + + lines = [ + line_name, + line_pn, + line_info, + line_ports, + line_image, + line_image_caption, + line_additional_component_table, + line_notes, ] - tbl = nested_table(rows) + cell_lists = [make_list_of_cells(line) for line in lines] + + tbl = nested_table(cell_lists) if component.bgcolor: tbl.attribs["bgcolor"] = translate_color(component.bgcolor, "HEX") @@ -108,10 +113,64 @@ def gv_node_component(component: Component, harness_options: Options, pad=None) harness_options.bgcolor_cable, "HEX" ) + return tbl + + +def nested_table(cell_lists: List[Td]) -> Table: + outer_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 0, + } + inner_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } + + rows = [] + for lst in cell_lists: + if len(lst) == 0: + continue # no cells in list + cells = [item for item in lst if item.contents is not None] + if len(cells) == 0: + continue # no cells in list that are not None + if ( + len(cells) == 1 + and isinstance(cells[0].contents, Table) + and not "!" in cells[0].contents.attribs.get("id", "") + ): + # cell content is already a table, no need to re-wrap it; + # unless explicitly asked to by a "!" in the ID field + # as used by image_and_caption_cells() + inner_table = cells[0].contents + else: + # nest cell content inside a table + inner_table = Table(Tr(cells), attribs=inner_table_attribs) + rows.append(Tr(Td(inner_table))) + if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty + rows = Tr(Td("")) + tbl = Table(rows, attribs=outer_table_attribs) return tbl +def make_list_of_cells(inp) -> List[Td]: + # inp may be List, + if isinstance(inp, List): + # ensure all list items are Td + list_out = [item if isinstance(item, Td) else Td(item) for item in inp] + return list_out + else: + if inp is None: + return [] + if isinstance(inp, Td): + return [inp] + else: + return [Td(inp)] + + def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}) cell_pin_label = Td(pin_label, empty_is_none=True) @@ -236,98 +295,58 @@ def colorbar_cell(color) -> Td: # image_table = Table(Tr(Td(image_tag, attribs=html_size_attr_dict(image))), attribs={"border": 0, "cellspacing": 0, "cellborder": 0}) # return image_table -def image_and_caption_cells(component): - if component.image: - # outer_cell_attribs = {} - # outer_cell_attribs["balign"] = "left" - # outer_cell_attribs["bgcolor"] = translate_color( - # component.image.bgcolor, "HEX" - # ) - # if component.image.caption: - # outer_cell_attribs["sides"] = "TLR" - - image_tag = Img(attribs={"scale": component.image.scale, "src": component.image.src}) - cell_attribs = html_size_attr_dict(component.image) - image_cell = Td(image_tag, attribs=cell_attribs) - image_row = Tr(image_cell) - image_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 0, - "cellborder": 1, - } - image_table = Table(image_row, attribs=image_table_attribs) - outer_cell = Td(image_table) - # return: - row_image = outer_cell - - if component.image.caption: - row_caption_attribs = {"balign": "left", "sides": "BLR", "id": "td_caption"} - row_image_caption = Td( - html_caption_new(component.image), - attribs=row_caption_attribs, + +def image_and_caption_cells(component: Component) -> (Td, Td): + if not component.image: + return (None, None) + + image_tag = Img( + attribs={"scale": component.image.scale, "src": component.image.src} + ) + image_cell_inner = Td(image_tag, flat=True) + if component.image.fixedsize: + # further nest the image in a table with width/height/fixedsize parameters, and place that table in a cell + inner_cell_attribs = html_size_attr_dict(component.image) + image_cell_inner.attribs = Attribs(inner_cell_attribs) + image_cell = Td( + Table( + Tr(image_cell_inner), + attribs={"border": 0, "cellspacing": 0, "cellborder": 0, "id": "!"}, ) - else: - row_image_caption = None - return (row_image, row_image_caption) + ) else: - return (None, None) + image_cell = image_cell_inner + + outer_cell_attribs = {} + outer_cell_attribs["balign"] = "left" + if component.image.bgcolor: + outer_cell_attribs["bgcolor"] = translate_color(component.image.bgcolor, "HEX") + if component.image.caption: + outer_cell_attribs["sides"] = "TLR" + image_cell.attribs = Attribs(outer_cell_attribs) + + if component.image.caption: + caption_cell_attribs = {"balign": "left", "sides": "BLR", "id": "td_caption"} + caption_cell = Td( + html_caption_new(component.image), attribs=caption_cell_attribs + ) + else: + caption_cell = None + return (image_cell, caption_cell) -def par_number_cell_list(component) -> List[Td]: +def part_number_str_list(component: Component) -> List[str]: cell_contents = [ pn_info_string(HEADER_PN, None, component.pn), pn_info_string(HEADER_MPN, component.manufacturer, component.mpn), pn_info_string(HEADER_SPN, component.supplier, component.spn), ] if any(cell_contents): - return [Td(html_line_breaks(cell)) for cell in cell_contents] + return [html_line_breaks(cell) for cell in cell_contents] else: return None -def nested_table(rows_in: List[Tr]) -> Table: - outer_rows = [] - for row in rows_in: - if isinstance(row, List) and len(row) > 0 and any(row): - # row is a nested list - # remove rows which are none - row_no_empty = [cell for cell in row if cell is not None] - # if row item is Td, append directly; else convert to Td - inner_cells = [] - for cell in row_no_empty: - if isinstance(cell, Td): - inner_cells.append(cell) - else: - inner_cell_attribs = {"balign": "left"} - inner_cells.append(Td(cell, attribs=inner_cell_attribs)) - - inner_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - if len(inner_cells) > 0: - inner_table = Table(Tr(inner_cells), attribs=inner_table_attribs) - outer_rows.append(Tr(Td(inner_table))) - elif row is not None: - if isinstance(row, Iterable) and not any(row): - continue - # row is a single item - # if item is Td, append directly; else convert to Td - cell = row if isinstance(row, Td) else Td(row) - outer_rows.append(Tr(cell)) - if len(outer_rows) == 0: - outer_rows = Tr(Td("")) # Generate empty cell to avoid GraphViz errors - outer_table_attribs = {"border": 0, "cellspacing": 0, "cellpadding": 0} - outer_table = Table(outer_rows, attribs=outer_table_attribs) - - return outer_table - - - - # def html_image(image): # from wireviz.DataClasses import Image # if not image: @@ -345,8 +364,6 @@ def nested_table(rows_in: List[Tr]) -> Table: # return f"""", ] - return separator.join(html) + html_joined = separator.join(html) + return html_joined @dataclass From 0078a18953f2bb5d2d3d35d6bfc7bc97e308f580 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 17:29:25 +0200 Subject: [PATCH 014/111] Remove old stuff, slightly simplify code --- src/wireviz/wv_gv_html.py | 105 +++++++++++--------------------------- 1 file changed, 29 insertions(+), 76 deletions(-) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index c2523987..99275010 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -116,6 +116,21 @@ def gv_node_component( return tbl +def make_list_of_cells(inp) -> List[Td]: + # inp may be List, + if isinstance(inp, List): + # ensure all list items are Td + list_out = [item if isinstance(item, Td) else Td(item) for item in inp] + return list_out + else: + if inp is None: + return [] + if isinstance(inp, Td): + return [inp] + else: + return [Td(inp)] + + def nested_table(cell_lists: List[Td]) -> Table: outer_table_attribs = { "border": 0, @@ -156,21 +171,6 @@ def nested_table(cell_lists: List[Td]) -> Table: return tbl -def make_list_of_cells(inp) -> List[Td]: - # inp may be List, - if isinstance(inp, List): - # ensure all list items are Td - list_out = [item if isinstance(item, Td) else Td(item) for item in inp] - return list_out - else: - if inp is None: - return [] - if isinstance(inp, Td): - return [inp] - else: - return [Td(inp)] - - def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}) cell_pin_label = Td(pin_label, empty_is_none=True) @@ -276,6 +276,18 @@ def colored_cell(contents, bgcolor) -> Td: return Td(contents, attribs=attribs) +def part_number_str_list(component: Component) -> List[str]: + cell_contents = [ + pn_info_string(HEADER_PN, None, component.pn), + pn_info_string(HEADER_MPN, component.manufacturer, component.mpn), + pn_info_string(HEADER_SPN, component.supplier, component.spn), + ] + if any(cell_contents): + return [html_line_breaks(cell) for cell in cell_contents] + else: + return None + + def colorbar_cell(color) -> Td: if color: colorbar_attribs = { @@ -287,15 +299,6 @@ def colorbar_cell(color) -> Td: return None -# def html_image_new(image): -# from wireviz.DataClasses import Image -# if not image: -# return None -# image_tag = Img(attribs={"scale": image.scale, "src": image.src}) -# image_table = Table(Tr(Td(image_tag, attribs=html_size_attr_dict(image))), attribs={"border": 0, "cellspacing": 0, "cellborder": 0}) -# return image_table - - def image_and_caption_cells(component: Component) -> (Td, Td): if not component.image: return (None, None) @@ -326,65 +329,15 @@ def image_and_caption_cells(component: Component) -> (Td, Td): image_cell.attribs = Attribs(outer_cell_attribs) if component.image.caption: - caption_cell_attribs = {"balign": "left", "sides": "BLR", "id": "td_caption"} caption_cell = Td( - html_caption_new(component.image), attribs=caption_cell_attribs + f"{html_line_breaks(component.image.caption)}", + attribs={"balign": "left", "sides": "BLR", "id": "td_caption"}, ) else: caption_cell = None return (image_cell, caption_cell) -def part_number_str_list(component: Component) -> List[str]: - cell_contents = [ - pn_info_string(HEADER_PN, None, component.pn), - pn_info_string(HEADER_MPN, component.manufacturer, component.mpn), - pn_info_string(HEADER_SPN, component.supplier, component.spn), - ] - if any(cell_contents): - return [html_line_breaks(cell) for cell in cell_contents] - else: - return None - - -# def html_image(image): -# from wireviz.DataClasses import Image -# if not image: -# return None -# # The leading attributes belong to the preceeding tag. See where used below. -# html = f'{html_size_attr(image)}>' -# if image.fixedsize: -# # Close the preceeding tag and enclose the image cell in a table without -# # borders to avoid narrow borders when the fixed width < the node width. -# html = f"""> -#
-# -#
-# """ -# return f""" Date: Mon, 18 Oct 2021 17:52:07 +0200 Subject: [PATCH 015/111] Outsource `gv_pin_table()`, simplify padding --- src/wireviz/DataClasses.py | 4 ++ src/wireviz/Harness.py | 30 ++------------ src/wireviz/wv_gv_html.py | 85 +++++++++++++++++++------------------- 3 files changed, 50 insertions(+), 69 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index c2c7f5b1..d7c8cb44 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -60,6 +60,10 @@ class Options: color_mode: ColorMode = "SHORT" mini_bom_mode: bool = True template_separator: str = "." + _pad: int = 0 + # TODO: resolve template and image paths during rendering, not during YAML parsing + _template_paths: [List] = field(default_factory=list) + _image_paths: [List] = field(default_factory=list) def __post_init__(self): if not self.bgcolor_node: diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index ba07ff21..3db5f8b4 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -191,9 +191,11 @@ def create_graph(self) -> Graph: for colorstr in cable.colors ) + self.options._pad = pad + for cable in self.cables.values(): - gv_html = gv_node_component(cable, self.options, pad) + gv_html = gv_node_component(cable, self.options) dot.node( cable.name, label=f"<\n{gv_html}\n>", @@ -205,32 +207,6 @@ def create_graph(self) -> Graph: html = [] - # fmt: off - rows = [[f'{html_bgcolor(cable.bgcolor_title)}{remove_links(cable.name)}' - if cable.show_name else None], - [pn_info_string(HEADER_PN, None, - remove_links(cable.pn)) if not isinstance(cable.pn, list) else None, - html_line_breaks(pn_info_string(HEADER_MPN, - cable.manufacturer if not isinstance(cable.manufacturer, list) else None, - cable.mpn if not isinstance(cable.mpn, list) else None)), - html_line_breaks(pn_info_string(HEADER_SPN, - cable.supplier if not isinstance(cable.supplier, list) else None, - cable.spn if not isinstance(cable.spn, list) else None))], - [html_line_breaks(cable.type), - f'{cable.wirecount}x' if cable.show_wirecount else None, - cable.gauge_str, - '+ S' if cable.shield else None, - f'{cable.length} {cable.length_unit}' if cable.length > 0 else None, - translate_color(cable.color, self.options.color_mode) if cable.color else None, - html_colorbar(cable.color)], - '', - [html_image(cable.image)], - [html_caption(cable.image)]] - # fmt: on - - rows.extend(get_additional_component_table(self, cable)) - rows.append([html_line_breaks(cable.notes)]) - html.extend(nested_html_table(rows, html_bgcolor_attr(cable.bgcolor))) wirehtml = [] # conductor table diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 99275010..002c8ac3 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -53,38 +53,17 @@ def gv_node_component( ] line_image, line_image_caption = image_and_caption_cells(component) - # line_additional_component_table = get_additional_component_table(self, connector) line_additional_component_table = None line_notes = [html_line_breaks(component.notes)] if isinstance(component, Connector): - # pin table if component.style != "simple": - pin_tuples = zip_longest( - component.pins, - component.pinlabels, - component.pincolors, - ) - - pin_rows = [] - for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): - if component.should_show_pin(pinname): - pin_rows.append( - gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) - ) - - table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - line_ports = Table(pin_rows, attribs=table_attribs) + line_ports = gv_pin_table(component) else: line_ports = None elif isinstance(component, Cable): - line_ports = gv_conductor_table(component, harness_options, pad) + line_ports = gv_conductor_table(component, harness_options) lines = [ line_name, @@ -97,9 +76,7 @@ def gv_node_component( line_notes, ] - cell_lists = [make_list_of_cells(line) for line in lines] - - tbl = nested_table(cell_lists) + tbl = nested_table(lines) if component.bgcolor: tbl.attribs["bgcolor"] = translate_color(component.bgcolor, "HEX") @@ -131,19 +108,8 @@ def make_list_of_cells(inp) -> List[Td]: return [Td(inp)] -def nested_table(cell_lists: List[Td]) -> Table: - outer_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 0, - } - inner_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - +def nested_table(lines: List[Td]) -> Table: + cell_lists = [make_list_of_cells(line) for line in lines] rows = [] for lst in cell_lists: if len(lst) == 0: @@ -162,16 +128,51 @@ def nested_table(cell_lists: List[Td]) -> Table: inner_table = cells[0].contents else: # nest cell content inside a table + inner_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } inner_table = Table(Tr(cells), attribs=inner_table_attribs) rows.append(Tr(Td(inner_table))) if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty rows = Tr(Td("")) + outer_table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 0, + } tbl = Table(rows, attribs=outer_table_attribs) return tbl -def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector): +def gv_pin_table(component) -> Table: + pin_tuples = zip_longest( + component.pins, + component.pinlabels, + component.pincolors, + ) + + pin_rows = [] + for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): + if component.should_show_pin(pinname): + pin_rows.append( + gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) + ) + + table_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 3, + "cellborder": 1, + } + + return Table(pin_rows, attribs=table_attribs) + + +def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector) -> Tr: cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}) cell_pin_label = Td(pin_label, empty_is_none=True) cell_pin_right = Td(pin_name, attribs={"port": f"p{pin_index+1}r"}) @@ -201,7 +202,7 @@ def gv_connector_loops(connector: Connector) -> List: return loop_edges -def gv_conductor_table(cable, harness_options, pad) -> Table: +def gv_conductor_table(cable, harness_options) -> Table: rows = [] rows.append(Tr(Td(" "))) @@ -228,7 +229,7 @@ def gv_conductor_table(cable, harness_options, pad) -> Table: rows.append(Tr(cells_above)) # the wire itself - rows.append(Tr(gv_wire_cell(i, connection_color, pad))) + rows.append(Tr(gv_wire_cell(i, connection_color, harness_options._pad))) rows.append(Tr(Td(" "))) From 2f03dcd1a33ffa1fa8526a1097573805303086b6 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 18:08:09 +0200 Subject: [PATCH 016/111] Add TODOs --- src/wireviz/Harness.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 3db5f8b4..8c07296c 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -194,8 +194,11 @@ def create_graph(self) -> Graph: self.options._pad = pad for cable in self.cables.values(): - + # generate cable node gv_html = gv_node_component(cable, self.options) + # TODO: PN info for bundles (per wire) + # shield + # dot.node( cable.name, label=f"<\n{gv_html}\n>", @@ -205,6 +208,8 @@ def create_graph(self) -> Graph: ) continue + # TODO: connection edges + html = [] From 587b359fa0afefa6f2bdfd6113719e08b40749b7 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Mon, 18 Oct 2021 18:20:19 +0200 Subject: [PATCH 017/111] Outsource `set_dot_basics()` and `apply_dot_tweaks()` --- src/wireviz/Harness.py | 90 ++----------------------------------- src/wireviz/wv_gv_html.py | 95 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 87 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 8c07296c..1cc1ec62 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -33,10 +33,12 @@ ) from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_gv_html import ( + apply_dot_tweaks, gv_connector_loops, gv_node_component, html_line_breaks, remove_links, + set_dot_basics, ) from wireviz.wv_helper import ( flatten2d, @@ -145,27 +147,7 @@ def connect( def create_graph(self) -> Graph: dot = Graph() - dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") - dot.body.append(f"// {APP_URL}\n") - dot.attr( - "graph", - rankdir="LR", - ranksep="2", - bgcolor=wv_colors.translate_color(self.options.bgcolor, "HEX"), - nodesep="0.33", - fontname=self.options.fontname, - ) - dot.attr( - "node", - shape="none", - width="0", - height="0", - margin="0", # Actual size of the node is entirely determined by the label. - style="filled", - fillcolor=wv_colors.translate_color(self.options.bgcolor_node, "HEX"), - fontname=self.options.fontname, - ) - dot.attr("edge", style="bold", fontname=self.options.fontname) + set_dot_basics(dot, self.options) for connector in self.connectors.values(): # generate connector node @@ -212,7 +194,6 @@ def create_graph(self) -> Graph: html = [] - wirehtml = [] # conductor table wirehtml.append('
') @@ -405,70 +386,7 @@ def create_graph(self) -> Graph: fillcolor=translate_color(bgcolor, "HEX"), ) - def typecheck(name: str, value: Any, expect: type) -> None: - if not isinstance(value, expect): - raise Exception( - f"Unexpected value type of {name}: Expected {expect}, got {type(value)}\n{value}" - ) - - # TODO?: Differ between override attributes and HTML? - if self.tweak.override is not None: - typecheck("tweak.override", self.tweak.override, dict) - for k, d in self.tweak.override.items(): - typecheck(f"tweak.override.{k} key", k, str) - typecheck(f"tweak.override.{k} value", d, dict) - for a, v in d.items(): - typecheck(f"tweak.override.{k}.{a} key", a, str) - typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None))) - - # Override generated attributes of selected entries matching tweak.override. - for i, entry in enumerate(dot.body): - if isinstance(entry, str): - # Find a possibly quoted keyword after leading TAB(s) and followed by [ ]. - match = re.match( - r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S - ) - keyword = match and match[2] - if keyword in self.tweak.override.keys(): - for attr, value in self.tweak.override[keyword].items(): - if value is None: - entry, n_subs = re.subn( - f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry - ) - if n_subs < 1: - print( - f"Harness.create_graph() warning: {attr} not found in {keyword}!" - ) - elif n_subs > 1: - print( - f"Harness.create_graph() warning: {attr} removed {n_subs} times in {keyword}!" - ) - continue - - if len(value) == 0 or " " in value: - value = value.replace('"', r"\"") - value = f'"{value}"' - entry, n_subs = re.subn( - f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry - ) - if n_subs < 1: - # If attr not found, then append it - entry = re.sub(r"\]$", f" {attr}={value}]", entry) - elif n_subs > 1: - print( - f"Harness.create_graph() warning: {attr} overridden {n_subs} times in {keyword}!" - ) - - dot.body[i] = entry - - if self.tweak.append is not None: - if isinstance(self.tweak.append, list): - for i, element in enumerate(self.tweak.append, 1): - typecheck(f"tweak.append[{i}]", element, str) - dot.body.extend(self.tweak.append) - else: - typecheck("tweak.append", self.tweak.append, str) - dot.body.append(self.tweak.append) + apply_dot_tweaks(dot, self.tweak) for mate in self.mates: if mate.shape[0] == "<" and mate.shape[-1] == ">": diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 002c8ac3..af117430 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -2,8 +2,9 @@ import re from itertools import zip_longest -from typing import List, Optional, Union +from typing import Any, List, Optional, Union +from wireviz import APP_NAME, APP_URL, __version__ from wireviz.DataClasses import Cable, Color, Component, Connector, Options from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links @@ -356,3 +357,95 @@ def html_size_attr_dict(image): def html_line_breaks(inp): return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp + + +def set_dot_basics(dot, options): + dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") + dot.body.append(f"// {APP_URL}\n") + dot.attr( + "graph", + rankdir="LR", + ranksep="2", + bgcolor=translate_color(options.bgcolor, "HEX"), + nodesep="0.33", + fontname=options.fontname, + ) + dot.attr( + "node", + shape="none", + width="0", + height="0", + margin="0", # Actual size of the node is entirely determined by the label. + style="filled", + fillcolor=translate_color(options.bgcolor_node, "HEX"), + fontname=options.fontname, + ) + dot.attr("edge", style="bold", fontname=options.fontname) + + +def apply_dot_tweaks(dot, tweak): + def typecheck(name: str, value: Any, expect: type) -> None: + if not isinstance(value, expect): + raise Exception( + f"Unexpected value type of {name}: Expected {expect}, got {type(value)}\n{value}" + ) + + # TODO?: Differ between override attributes and HTML? + if tweak.override is not None: + typecheck("tweak.override", tweak.override, dict) + for k, d in tweak.override.items(): + typecheck(f"tweak.override.{k} key", k, str) + typecheck(f"tweak.override.{k} value", d, dict) + for a, v in d.items(): + typecheck(f"tweak.override.{k}.{a} key", a, str) + typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None))) + + # Override generated attributes of selected entries matching tweak.override. + for i, entry in enumerate(dot.body): + if not isinstance(entry, str): + continue + # Find a possibly quoted keyword after leading TAB(s) and followed by [ ]. + match = re.match(r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S) + keyword = match and match[2] + if not keyword in tweak.override.keys(): + continue + + for attr, value in tweak.override[keyword].items(): + if value is None: + entry, n_subs = re.subn( + f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry + ) + if n_subs < 1: + print( + f"Harness.create_graph() warning: {attr} not found in {keyword}!" + ) + elif n_subs > 1: + print( + f"Harness.create_graph() warning: {attr} removed {n_subs} times in {keyword}!" + ) + continue + + if len(value) == 0 or " " in value: + value = value.replace('"', r"\"") + value = f'"{value}"' + entry, n_subs = re.subn( + f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry + ) + if n_subs < 1: + # If attr not found, then append it + entry = re.sub(r"\]$", f" {attr}={value}]", entry) + elif n_subs > 1: + print( + f"Harness.create_graph() warning: {attr} overridden {n_subs} times in {keyword}!" + ) + + dot.body[i] = entry + + if tweak.append is not None: + if isinstance(tweak.append, list): + for i, element in enumerate(tweak.append, 1): + typecheck(f"tweak.append[{i}]", element, str) + dot.body.extend(tweak.append) + else: + typecheck("tweak.append", tweak.append, str) + dot.body.append(tweak.append) From 31c5e1aad9c278cae89a9db26908fec7a47d2e69 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 15:44:52 +0200 Subject: [PATCH 018/111] Make setting HTML tag attributes easier through `kwargs` --- src/wireviz/wv_gv_html.py | 106 +++++++++++------------------------ src/wireviz/wv_table_util.py | 64 +++++++++++---------- 2 files changed, 68 insertions(+), 102 deletions(-) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index af117430..812b9a01 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -79,17 +79,16 @@ def gv_node_component( tbl = nested_table(lines) - if component.bgcolor: - tbl.attribs["bgcolor"] = translate_color(component.bgcolor, "HEX") - else: - if isinstance(component, Connector) and harness_options.bgcolor_connector: - tbl.attribs["bgcolor"] = translate_color( - harness_options.bgcolor_connector, "HEX" - ) - elif isinstance(component, Cable) and harness_options.bgcolor_cable: - tbl.attribs["bgcolor"] = translate_color( - harness_options.bgcolor_cable, "HEX" - ) + tbl.update_attribs(bgcolor=translate_color(component.bgcolor, "HEX")) + + if isinstance(component, Connector) and harness_options.bgcolor_connector: + tbl.update_attribs( + bgcolor=translate_color(harness_options.bgcolor_connector, "HEX") + ) + elif isinstance(component, Cable) and harness_options.bgcolor_cable: + tbl.update_attribs( + bgcolor=translate_color(harness_options.bgcolor_cable, "HEX") + ) return tbl @@ -129,22 +128,13 @@ def nested_table(lines: List[Td]) -> Table: inner_table = cells[0].contents else: # nest cell content inside a table - inner_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - inner_table = Table(Tr(cells), attribs=inner_table_attribs) + inner_table = Table( + Tr(cells), border=0, cellspacing=0, cellpadding=3, cellborder=1 + ) rows.append(Tr(Td(inner_table))) if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty
rows = Tr(Td("")) - outer_table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 0, - } - tbl = Table(rows, attribs=outer_table_attribs) + tbl = Table(rows, border=0, cellspacing=0, cellpadding=0) return tbl @@ -163,20 +153,13 @@ def gv_pin_table(component) -> Table: gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) ) - table_attribs = { - "border": 0, - "cellspacing": 0, - "cellpadding": 3, - "cellborder": 1, - } - - return Table(pin_rows, attribs=table_attribs) + return Table(pin_rows, border=0, cellspacing=0, cellpadding=3, cellborder=1) def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector) -> Tr: - cell_pin_left = Td(pin_name, attribs={"port": f"p{pin_index+1}l"}) - cell_pin_label = Td(pin_label, empty_is_none=True) - cell_pin_right = Td(pin_name, attribs={"port": f"p{pin_index+1}r"}) + cell_pin_left = Td(pin_name, port=f"p{pin_index+1}l") + cell_pin_label = Td(pin_label, delete_if_empty=True) + cell_pin_right = Td(pin_name, port=f"p{pin_index+1}r") cells = [ cell_pin_left if connector.ports_left else None, @@ -234,12 +217,7 @@ def gv_conductor_table(cable, harness_options) -> Table: rows.append(Tr(Td(" "))) - table_attribs = { - "border": 0, - "cellspacing": 0, - "cellborder": 0, - } - tbl = Table(rows, attribs=table_attribs) + tbl = Table(rows, border=0, cellspacing=0, cellborder=0) return tbl @@ -255,9 +233,8 @@ def gv_wire_cell(index, color, pad) -> Td: "border": 0, "bgcolor": bgcolor if bgcolor != "" else "BK", } - wire_inner_rows.append(Tr(Td("", attribs=wire_inner_cell_attribs))) - wire_inner_table_attribs = {"cellspacing": 0, "cellborder": 0, "border": 0} - wire_inner_table = Table(wire_inner_rows, wire_inner_table_attribs) + wire_inner_rows.append(Tr(Td("", **wire_inner_cell_attribs))) + wire_inner_table = Table(wire_inner_rows, cellspacing=0, cellborder=0, border=0) wire_outer_cell_attribs = { "colspan": 3, "border": 0, @@ -265,17 +242,13 @@ def gv_wire_cell(index, color, pad) -> Td: "port": f"w{index}", "height": 2 * len(bgcolors), } - wire_outer_cell = Td(wire_inner_table, attribs=wire_outer_cell_attribs) + wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs) return wire_outer_cell def colored_cell(contents, bgcolor) -> Td: - if bgcolor: - attribs = {"bgcolor": translate_color(bgcolor, "HEX")} - else: - attribs = {} - return Td(contents, attribs=attribs) + return Td(contents, bgcolor=translate_color(bgcolor, "HEX")) def part_number_str_list(component: Component) -> List[str]: @@ -292,11 +265,7 @@ def part_number_str_list(component: Component) -> List[str]: def colorbar_cell(color) -> Td: if color: - colorbar_attribs = { - "bgcolor": translate_color(color, "HEX"), - "width": 4, - } - return Td("", attribs=colorbar_attribs) + return Td("", bgcolor=translate_color(color, "HEX"), width=4) else: return None @@ -305,35 +274,26 @@ def image_and_caption_cells(component: Component) -> (Td, Td): if not component.image: return (None, None) - image_tag = Img( - attribs={"scale": component.image.scale, "src": component.image.src} - ) + image_tag = Img(scale=component.image.scale, src=component.image.src) image_cell_inner = Td(image_tag, flat=True) if component.image.fixedsize: # further nest the image in a table with width/height/fixedsize parameters, and place that table in a cell - inner_cell_attribs = html_size_attr_dict(component.image) - image_cell_inner.attribs = Attribs(inner_cell_attribs) + image_cell_inner.update_attribs(**html_size_attr_dict(component.image)) image_cell = Td( - Table( - Tr(image_cell_inner), - attribs={"border": 0, "cellspacing": 0, "cellborder": 0, "id": "!"}, - ) + Table(Tr(image_cell_inner), border=0, cellspacing=0, cellborder=0, id="!") ) else: image_cell = image_cell_inner - outer_cell_attribs = {} - outer_cell_attribs["balign"] = "left" - if component.image.bgcolor: - outer_cell_attribs["bgcolor"] = translate_color(component.image.bgcolor, "HEX") - if component.image.caption: - outer_cell_attribs["sides"] = "TLR" - image_cell.attribs = Attribs(outer_cell_attribs) + image_cell.update_attribs( + balign="left", + bgcolor=translate_color(component.image.bgcolor, "HEX"), + sides="TLR" if component.image.caption else None, + ) if component.image.caption: caption_cell = Td( - f"{html_line_breaks(component.image.caption)}", - attribs={"balign": "left", "sides": "BLR", "id": "td_caption"}, + f"{html_line_breaks(component.image.caption)}", balign="left", sides="BLR" ) else: caption_cell = None diff --git a/src/wireviz/wv_table_util.py b/src/wireviz/wv_table_util.py index aa236637..6de208c0 100644 --- a/src/wireviz/wv_table_util.py +++ b/src/wireviz/wv_table_util.py @@ -16,29 +16,27 @@ def __repr__(self): for k, v in self.items(): if v is not None: html.append(f' {k}="{v}"') - else: - html.append(f" {k}") + # else: + # html.append(f" {k}") return "".join(html) @dataclass class Tag: - contents: str = None + contents = None attribs: Attribs = field(default_factory=Attribs) - flat: bool = False - empty_is_none: bool = False - - def __post_init__(self): - if self.attribs is None: - self.attribs = Attribs({}) - elif isinstance(self.attribs, Dict): - self.attribs = Attribs(self.attribs) - elif not isinstance(self.attribs, Attribs): - raise Exception( - "Tag.attribs must be of type None, Dict, or Attribs, " - f"but type {type(self.attribs).__name__} was given instead:\n" - f"{self.attribs}" - ) + flat: bool = None + delete_if_empty: bool = False + + def __init__(self, contents, flat=None, delete_if_empty=False, **kwargs): + self.contents = contents + self.flat = flat + self.delete_if_empty = delete_if_empty + self.attribs = Attribs({**kwargs}) + + def update_attribs(self, **kwargs): + for k, v in kwargs.items(): + self.attribs[k] = v @property def tagname(self): @@ -46,36 +44,41 @@ def tagname(self): @property def auto_flat(self): - if self.flat: # force flat - return True + if self.flat is not None: # user specified + return self.flat if not _is_iterable_not_str(self.contents): # catch str, int, float, ... if not isinstance(self.contents, Tag): # avoid recursion return not "\n" in str(self.contents) # flatten if single line - def indent_lines(self, lines): - if self.auto_flat: + @property + def is_empty(self): + return self.get_contents(force_flat=True) == "" + + def indent_lines(self, lines, force_flat=False): + if self.auto_flat or force_flat: return lines else: indenter = " " * indent_count return "\n".join(f"{indenter}{line}" for line in lines.split("\n")) - def get_contents(self): - separator = "" if self.auto_flat else "\n" + def get_contents(self, force_flat=False): + separator = "" if self.auto_flat or force_flat else "\n" if _is_iterable_not_str(self.contents): return separator.join( - [self.indent_lines(str(c)) for c in self.contents if c is not None] + [ + self.indent_lines(str(c), force_flat) + for c in self.contents + if c is not None + ] ) elif self.contents is None: return "" else: # str, int, float, etc. - return self.indent_lines(str(self.contents)) + return self.indent_lines(str(self.contents), force_flat) def __repr__(self): - # if self.flat: - # import pudb; pudb.set_trace() - separator = "" if self.auto_flat else "\n" - if self.contents is None and self.empty_is_none: + if self.delete_if_empty and self.is_empty: return "" else: html = [ @@ -89,6 +92,9 @@ def __repr__(self): @dataclass class TagSingleton(Tag): + def __init__(self, **kwargs): + self.attribs = Attribs({**kwargs}) + def __repr__(self): return f"<{self.tagname}{str(self.attribs)} />" From 84dd10a2dcdb361a4e82359889a5fc9469153728 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 15:57:00 +0200 Subject: [PATCH 019/111] Fix and simplify bgcolor logic --- src/wireviz/wv_gv_html.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 812b9a01..c7cd6ec0 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -77,19 +77,15 @@ def gv_node_component( line_notes, ] - tbl = nested_table(lines) - - tbl.update_attribs(bgcolor=translate_color(component.bgcolor, "HEX")) - - if isinstance(component, Connector) and harness_options.bgcolor_connector: - tbl.update_attribs( - bgcolor=translate_color(harness_options.bgcolor_connector, "HEX") - ) + if component.bgcolor: + tbl_bgcolor = translate_color(component.bgcolor, "HEX") + elif isinstance(component, Connector) and harness_options.bgcolor_connector: + tbl_bgcolor = translate_color(harness_options.bgcolor_connector, "HEX") elif isinstance(component, Cable) and harness_options.bgcolor_cable: - tbl.update_attribs( - bgcolor=translate_color(harness_options.bgcolor_cable, "HEX") - ) + tbl_bgcolor = translate_color(harness_options.bgcolor_cable, "HEX") + tbl = nested_table(lines) + tbl.update_attribs(bgcolor=tbl_bgcolor) return tbl @@ -111,6 +107,7 @@ def make_list_of_cells(inp) -> List[Td]: def nested_table(lines: List[Td]) -> Table: cell_lists = [make_list_of_cells(line) for line in lines] rows = [] + for lst in cell_lists: if len(lst) == 0: continue # no cells in list @@ -132,10 +129,10 @@ def nested_table(lines: List[Td]) -> Table: Tr(cells), border=0, cellspacing=0, cellpadding=3, cellborder=1 ) rows.append(Tr(Td(inner_table))) + if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty
rows = Tr(Td("")) tbl = Table(rows, border=0, cellspacing=0, cellpadding=0) - return tbl @@ -152,8 +149,8 @@ def gv_pin_table(component) -> Table: pin_rows.append( gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) ) - - return Table(pin_rows, border=0, cellspacing=0, cellpadding=3, cellborder=1) + tbl = Table(pin_rows, border=0, cellspacing=0, cellpadding=3, cellborder=1) + return tbl def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector) -> Tr: @@ -187,9 +184,8 @@ def gv_connector_loops(connector: Connector) -> List: def gv_conductor_table(cable, harness_options) -> Table: - rows = [] - rows.append(Tr(Td(" "))) + rows.append(Tr(Td(" "))) # spacer row on top for i, (connection_color, wirelabel) in enumerate( zip_longest(cable.colors, cable.wirelabels), 1 @@ -215,10 +211,11 @@ def gv_conductor_table(cable, harness_options) -> Table: # the wire itself rows.append(Tr(gv_wire_cell(i, connection_color, harness_options._pad))) - rows.append(Tr(Td(" "))) + # row below the wire + # TODO: PN stuff for bundles + rows.append(Tr(Td(" "))) # spacer row on bottom tbl = Table(rows, border=0, cellspacing=0, cellborder=0) - return tbl From 266eb659bb3fc5157563f8ce3bca79df6e40e008 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 16:17:38 +0200 Subject: [PATCH 020/111] Reactivate cable edge generation --- src/wireviz/Harness.py | 185 +++++++++++++------------------------- src/wireviz/wv_gv_html.py | 26 ++++-- 2 files changed, 81 insertions(+), 130 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 1cc1ec62..c2639a2f 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -188,117 +188,49 @@ def create_graph(self) -> Graph: # style=style, # fillcolor=translate_color(bgcolor, "HEX"), ) - continue # TODO: connection edges - html = [] - wirehtml = [] - # conductor table - wirehtml.append('
') - wirehtml.append(" ") + # # for bundles, individual wires can have part information + # if cable.category == "bundle": + # # create a list of wire parameters + # wireidentification = [] + # if isinstance(cable.pn, list): + # wireidentification.append( + # pn_info_string( + # HEADER_PN, None, remove_links(cable.pn[i - 1]) + # ) + # ) + # manufacturer_info = pn_info_string( + # HEADER_MPN, + # cable.manufacturer[i - 1] + # if isinstance(cable.manufacturer, list) + # else None, + # cable.mpn[i - 1] if isinstance(cable.mpn, list) else None, + # ) + # supplier_info = pn_info_string( + # HEADER_SPN, + # cable.supplier[i - 1] + # if isinstance(cable.supplier, list) + # else None, + # cable.spn[i - 1] if isinstance(cable.spn, list) else None, + # ) + # if manufacturer_info: + # wireidentification.append(html_line_breaks(manufacturer_info)) + # if supplier_info: + # wireidentification.append(html_line_breaks(supplier_info)) + # # print parameters into a table row under the wire + # if len(wireidentification) > 0: + # # fmt: off + # wirehtml.append(' ") + # # fmt: on - for i, (connection_color, wirelabel) in enumerate( - zip_longest(cable.colors, cable.wirelabels), 1 - ): - wirehtml.append(" ") - wirehtml.append(f" ") - wirehtml.append(f" ") - wirehtml.append(f" ") - wirehtml.append(" ") - - # fmt: off - bgcolors = ['#000000'] + get_color_hex(connection_color, pad=pad) + ['#000000'] - wirehtml.append(f" ") - wirehtml.append(f' ") - wirehtml.append(" ") - # fmt: on - - # for bundles, individual wires can have part information - if cable.category == "bundle": - # create a list of wire parameters - wireidentification = [] - if isinstance(cable.pn, list): - wireidentification.append( - pn_info_string( - HEADER_PN, None, remove_links(cable.pn[i - 1]) - ) - ) - manufacturer_info = pn_info_string( - HEADER_MPN, - cable.manufacturer[i - 1] - if isinstance(cable.manufacturer, list) - else None, - cable.mpn[i - 1] if isinstance(cable.mpn, list) else None, - ) - supplier_info = pn_info_string( - HEADER_SPN, - cable.supplier[i - 1] - if isinstance(cable.supplier, list) - else None, - cable.spn[i - 1] if isinstance(cable.spn, list) else None, - ) - if manufacturer_info: - wireidentification.append(html_line_breaks(manufacturer_info)) - if supplier_info: - wireidentification.append(html_line_breaks(supplier_info)) - # print parameters into a table row under the wire - if len(wireidentification) > 0: - # fmt: off - wirehtml.append(' ") - # fmt: on - - if cable.shield: - wirehtml.append(" ") # spacer - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - if isinstance(cable.shield, str): - # shield is shown with specified color and black borders - shield_color_hex = wv_colors.get_color_hex(cable.shield)[0] - attributes = ( - f'height="6" bgcolor="{shield_color_hex}" border="2" sides="tb"' - ) - else: - # shield is shown as a thin black wire - attributes = f'height="2" bgcolor="#000000" border="0"' - # fmt: off - wirehtml.append(f' ') - # fmt: on - - wirehtml.append(" ") - wirehtml.append("
 
') + # wirehtml.append(' ') + # for attrib in wireidentification: + # wirehtml.append(f" ") + # wirehtml.append("
{attrib}
") + # wirehtml.append("
") - - wireinfo = [] - if cable.show_wirenumbers: - wireinfo.append(str(i)) - colorstr = wv_colors.translate_color( - connection_color, self.options.color_mode - ) - if colorstr: - wireinfo.append(colorstr) - if cable.wirelabels: - wireinfo.append(wirelabel if wirelabel is not None else "") - wirehtml.append(f' {":".join(wireinfo)}') - - wirehtml.append(f"
') - wirehtml.append(' ') - for j, bgcolor in enumerate(bgcolors[::-1]): # Reverse to match the curved wires when more than 2 colors - wirehtml.append(f' ') - wirehtml.append("
") - wirehtml.append("
') - wirehtml.append(' ') - for attrib in wireidentification: - wirehtml.append(f" ") - wirehtml.append("
{attrib}
") - wirehtml.append("
 
Shield
 
") - - html = [ - row.replace("", "\n".join(wirehtml)) for row in html - ] # connections for connection in cable.connections: @@ -316,11 +248,14 @@ def create_graph(self) -> Graph: ) else: # it's a shield connection # shield is shown with specified color and black borders, or as a thin black wire otherwise + if isinstance(cable.shield, str): + shield_color_hex = wv_colors.get_color_hex(cable.shield)[0] + shield_color_str = ":".join(["#000000", shield_color_hex, "#000000"]) + else: + shield_color_str = "#000000" dot.attr( "edge", - color=":".join(["#000000", shield_color_hex, "#000000"]) - if isinstance(cable.shield, str) - else "#000000", + color=shield_color_str, ) if connection.from_pin is not None: # connect to left from_connector = self.connectors[connection.from_name] @@ -345,10 +280,10 @@ def create_graph(self) -> Graph: from_string = ":".join(from_info) else: from_string = "" - html = [ - row.replace(f"", from_string) - for row in html - ] + # html = [ + # row.replace(f"", from_string) + # for row in html + # ] if connection.to_pin is not None: # connect to right to_connector = self.connectors[connection.to_name] to_pin_index = to_connector.pins.index(connection.to_pin) @@ -367,24 +302,24 @@ def create_graph(self) -> Graph: to_string = ":".join(to_info) else: to_string = "" - html = [ - row.replace(f"", to_string) - for row in html - ] + # html = [ + # row.replace(f"", to_string) + # for row in html + # ] style, bgcolor = ( ("filled,dashed", self.options.bgcolor_bundle) if cable.category == "bundle" else ("filled", self.options.bgcolor_cable) ) - html = "\n".join(html) - dot.node( - cable.name, - label=f"<\n{html}\n>", - shape="box", - style=style, - fillcolor=translate_color(bgcolor, "HEX"), - ) + # html = "\n".join(html) + # dot.node( + # cable.name, + # label=f"<\n{html}\n>", + # shape="box", + # style=style, + # fillcolor=translate_color(bgcolor, "HEX"), + # ) apply_dot_tweaks(dot, self.tweak) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index c7cd6ec0..ff8c77f4 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -209,20 +209,36 @@ def gv_conductor_table(cable, harness_options) -> Table: rows.append(Tr(cells_above)) # the wire itself - rows.append(Tr(gv_wire_cell(i, connection_color, harness_options._pad))) + color_list = ["#000000"] + get_color_hex(connection_color, pad=harness_options._pad) + ["#000000"] + rows.append(Tr(gv_wire_cell(i, color_list))) # row below the wire # TODO: PN stuff for bundles + if cable.shield: + rows.append(Tr(Td(" "))) # spacer between wires and shield + # row above the shield + cells_above = [ + Td(""), + Td("Shield"), + Td(""), + ] + rows.append(Tr(cells_above)) + # thw shield itself + if isinstance(cable.shield, str): + color_list = ["#000000"] + get_color_hex(cable.shield) + ["#000000"] + else: + color_list = ["#000000"] + rows.append(Tr(gv_wire_cell("s", color_list))) + rows.append(Tr(Td(" "))) # spacer row on bottom tbl = Table(rows, border=0, cellspacing=0, cellborder=0) return tbl -def gv_wire_cell(index, color, pad) -> Td: - bgcolors = ["#000000"] + get_color_hex(color, pad=pad) + ["#000000"] +def gv_wire_cell(index, color_list) -> Td: wire_inner_rows = [] - for j, bgcolor in enumerate(bgcolors[::-1]): + for j, bgcolor in enumerate(color_list[::-1]): wire_inner_cell_attribs = { "colspan": 3, "cellpadding": 0, @@ -237,7 +253,7 @@ def gv_wire_cell(index, color, pad) -> Td: "border": 0, "cellspacing": 0, "port": f"w{index}", - "height": 2 * len(bgcolors), + "height": 2 * len(color_list), } wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs) From 8aaee0c85a197058e2b44426560b8f1af8795396 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Tue, 19 Oct 2021 16:46:34 +0200 Subject: [PATCH 021/111] Outsource `gv_edge_wire()` --- src/wireviz/Harness.py | 154 ++++---------------------------------- src/wireviz/wv_gv_html.py | 119 ++++++++++++++++++++++++++++- 2 files changed, 133 insertions(+), 140 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index c2639a2f..34b08022 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -35,6 +35,7 @@ from wireviz.wv_gv_html import ( apply_dot_tweaks, gv_connector_loops, + gv_edge_wire, gv_node_component, html_line_breaks, remove_links, @@ -153,10 +154,7 @@ def create_graph(self) -> Graph: # generate connector node gv_html = gv_node_component(connector, self.options) dot.node( - connector.name, - label=f"<\n{gv_html}\n>", - shape="box", - style="filled", + connector.name, label=f"<\n{gv_html}\n>", shape="box", style="filled" ) # generate edges for connector loops if len(connector.loops) > 0: @@ -177,149 +175,25 @@ def create_graph(self) -> Graph: for cable in self.cables.values(): # generate cable node - gv_html = gv_node_component(cable, self.options) # TODO: PN info for bundles (per wire) - # shield - # - dot.node( - cable.name, - label=f"<\n{gv_html}\n>", - shape="box", - # style=style, - # fillcolor=translate_color(bgcolor, "HEX"), - ) - - # TODO: connection edges - - - # # for bundles, individual wires can have part information - # if cable.category == "bundle": - # # create a list of wire parameters - # wireidentification = [] - # if isinstance(cable.pn, list): - # wireidentification.append( - # pn_info_string( - # HEADER_PN, None, remove_links(cable.pn[i - 1]) - # ) - # ) - # manufacturer_info = pn_info_string( - # HEADER_MPN, - # cable.manufacturer[i - 1] - # if isinstance(cable.manufacturer, list) - # else None, - # cable.mpn[i - 1] if isinstance(cable.mpn, list) else None, - # ) - # supplier_info = pn_info_string( - # HEADER_SPN, - # cable.supplier[i - 1] - # if isinstance(cable.supplier, list) - # else None, - # cable.spn[i - 1] if isinstance(cable.spn, list) else None, - # ) - # if manufacturer_info: - # wireidentification.append(html_line_breaks(manufacturer_info)) - # if supplier_info: - # wireidentification.append(html_line_breaks(supplier_info)) - # # print parameters into a table row under the wire - # if len(wireidentification) > 0: - # # fmt: off - # wirehtml.append('
') - # wirehtml.append(' ') - # for attrib in wireidentification: - # wirehtml.append(f" ") - # wirehtml.append("
{attrib}
") - # wirehtml.append("
') + # wirehtml.append(' ') + # for attrib in wireidentification: + # wirehtml.append(f" ") + # wirehtml.append("
{attrib}
") + # wirehtml.append("
just below the image cell: caption: Optional[MultilineHypertext] = None # See also HTML doc at https://graphviz.org/doc/info/shapes.html#html def __post_init__(self): + self.bgcolor = SingleColor(self.bgcolor) + if self.fixedsize is None: # Default True if any dimension specified unless self.scale also is specified. self.fixedsize = (self.width or self.height) and self.scale is None @@ -141,7 +156,10 @@ class AdditionalComponent: qty: float = 1 unit: Optional[str] = None qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None - bgcolor: Optional[Color] = None + bgcolor: SingleColor = None + + def __post_init__(self): + self.bgcolor = SingleColor(self.bgcolor) @property def description(self) -> str: @@ -159,7 +177,7 @@ class PinClass: index: int id: str label: str - color: str + color: MultiColor parent: str # designator of parent connector _anonymous: bool = False # true for pins on autogenerated connectors _simple: bool = False # true for simple connector @@ -178,7 +196,7 @@ class WireClass: index: int id: str label: str - color: str + color: MultiColor parent: str # designator of parent cable/bundle # gauge: Gauge # pn: str @@ -203,8 +221,8 @@ class Connection: @dataclass class Connector(Component): name: Designator - bgcolor: Optional[Color] = None - bgcolor_title: Optional[Color] = None + bgcolor: SingleColor = None + bgcolor_title: SingleColor = None manufacturer: Optional[MultilineHypertext] = None mpn: Optional[MultilineHypertext] = None supplier: Optional[MultilineHypertext] = None @@ -219,8 +237,8 @@ class Connector(Component): notes: Optional[MultilineHypertext] = None pins: List[Pin] = field(default_factory=list) pinlabels: List[Pin] = field(default_factory=list) - pincolors: List[Color] = field(default_factory=list) - color: Optional[Color] = None + pincolors: List[str] = field(default_factory=list) + color: MultiColor = None show_name: Optional[bool] = None show_pincount: Optional[bool] = None hide_disconnected_pins: bool = False @@ -238,6 +256,10 @@ def should_show_pin(self, pin_name): def __post_init__(self) -> None: + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_title = SingleColor(self.bgcolor_title) + self.color = SingleColor(self.color) + if isinstance(self.image, dict): self.image = Image(**self.image) @@ -280,7 +302,7 @@ def __post_init__(self) -> None: index=pin_index, id=pin_id, label=pin_label, - color=pin_color, + color=MultiColor(pin_color), parent=self.name, _anonymous=self.is_autogenerated, _simple=self.style == "simple", @@ -345,8 +367,8 @@ def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> i @dataclass class Cable(Component): name: Designator - bgcolor: Optional[Color] = None - bgcolor_title: Optional[Color] = None + bgcolor: SingleColor = None + bgcolor_title: SingleColor = None manufacturer: Union[MultilineHypertext, List[MultilineHypertext], None] = None mpn: Union[MultilineHypertext, List[MultilineHypertext], None] = None supplier: Union[MultilineHypertext, List[MultilineHypertext], None] = None @@ -359,14 +381,14 @@ class Cable(Component): show_equiv: bool = False length: float = 0 length_unit: Optional[str] = None - color: Optional[Color] = None + color: MultiColor = None wirecount: Optional[int] = None - shield: Union[bool, Color] = False + shield: Union[bool, MultiColor] = False image: Optional[Image] = None notes: Optional[MultilineHypertext] = None - colors: List[Colors] = field(default_factory=list) + colors: List[str] = field(default_factory=list) wirelabels: List[Wire] = field(default_factory=list) - color_code: Optional[ColorScheme] = None + color_code: Optional[str] = None show_name: Optional[bool] = None show_wirecount: bool = True show_wirenumbers: Optional[bool] = None @@ -397,6 +419,10 @@ def gauge_str(self): def __post_init__(self) -> None: + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_title = SingleColor(self.bgcolor_title) + self.color = SingleColor(self.color) + if isinstance(self.image, dict): self.image = Image(**self.image) @@ -445,21 +471,20 @@ def __post_init__(self) -> None: if self.wirecount: # number of wires explicitly defined if self.colors: # use custom color palette (partly or looped if needed) - pass + self.colors = [ + self.colors[i % len(self.colors)] for i in range(self.wirecount) + ] elif self.color_code: # use standard color palette (partly or looped if needed) if self.color_code not in COLOR_CODES: raise Exception("Unknown color code") - self.colors = COLOR_CODES[self.color_code] + self.colors = [ + get_color_by_colorcode_index(self.color_code, i) + for i in range(self.wirecount) + ] else: # no colors defined, add dummy colors self.colors = [""] * self.wirecount - # make color code loop around if more wires than colors - if self.wirecount > len(self.colors): - m = self.wirecount // len(self.colors) + 1 - self.colors = self.colors * int(m) - # cut off excess after looping - self.colors = self.colors[: self.wirecount] else: # wirecount implicit in length of color list if not self.colors: raise Exception( @@ -495,7 +520,7 @@ def __post_init__(self) -> None: index=wire_index, # TODO: wire_id id=wire_index + 1, # TODO: wire_id label=wire_label, - color=wire_color, + color=MultiColor(wire_color), parent=self.name, ) ) @@ -508,7 +533,9 @@ def __post_init__(self) -> None: index=index_offset, id="s", label="Shield", - color=self.shield if isinstance(self.shield, str) else None, + color=MultiColor(self.shield) + if isinstance(self.shield, str) + else MultiColor(None), parent=self.name, ) ) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 8c6572f4..e7a7603d 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -5,6 +5,7 @@ from graphviz import Graph +import wireviz.wv_colors from wireviz.DataClasses import ( Arrow, ArrowWeight, @@ -152,7 +153,7 @@ def create_graph(self) -> Graph: for connector in self.connectors.values(): # generate connector node - gv_html = gv_node_component(connector, self.options) + gv_html = gv_node_component(connector) bgcolor = calculate_node_bgcolor(connector, self.options) dot.node( connector.name, @@ -163,25 +164,27 @@ def create_graph(self) -> Graph: ) # generate edges for connector loops if len(connector.loops) > 0: - dot.attr("edge", color="#000000:#ffffff:#000000") + dot.attr("edge", color="#000000") loops = gv_connector_loops(connector) for head, tail in loops: dot.edge(head, tail) # determine if there are double- or triple-colored wires in the harness; # if so, pad single-color wires to make all wires of equal thickness - pad = any( - len(colorstr) > 2 + multicolor_wires = [ + len(wire.color) > 1 for cable in self.cables.values() - for colorstr in cable.colors - ) - - self.options._pad = pad + for wire in cable.wire_objects + ] + if any(multicolor_wires): + wireviz.wv_colors.padding_amount = 3 + else: + wireviz.wv_colors.padding_amount = 1 for cable in self.cables.values(): # generate cable node # TODO: PN info for bundles (per wire) - gv_html = gv_node_component(cable, self.options) + gv_html = gv_node_component(cable) bgcolor = calculate_node_bgcolor(cable, self.options) style = "filled,dashed" if cable.category == "bundle" else "filled" dot.node( diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index 3de45d83..4e075a3c 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -4,8 +4,7 @@ from itertools import groupby from typing import Any, Dict, List, Optional, Tuple, Union -from wireviz.DataClasses import AdditionalComponent, Cable, Color, Connector -from wireviz.wv_colors import translate_color +from wireviz.DataClasses import AdditionalComponent, Cable, Connector from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_helper import clean_whitespace, pn_info_string @@ -99,7 +98,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: + (f", {connector.subtype}" if connector.subtype else "") + (f", {connector.pincount} pins" if connector.show_pincount else "") + ( - f", {translate_color(connector.color, harness.options.color_mode)}" + f", xxx" # {translate_color(connector.color, harness.options.color_mode)} if connector.color else "" ) @@ -132,7 +131,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: ) + (" shielded" if cable.shield else "") + ( - f", {translate_color(cable.color, harness.options.color_mode)}" + f", xxx" # {translate_color(cable.color, harness.options.color_mode)} if cable.color else "" ) @@ -154,7 +153,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: + (f", {cable.type}" if cable.type else "") + (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "") + ( - f", {translate_color(color, harness.options.color_mode)}" + f", xxx" # {translate_color(color, harness.options.color_mode)} if color else "" ) @@ -236,7 +235,7 @@ def component_table_entry( type: str, qty: Union[int, float], unit: Optional[str] = None, - bgcolor: Optional[Color] = None, + bgcolor: Optional[str] = None, pn: Optional[str] = None, manufacturer: Optional[str] = None, mpn: Optional[str] = None, diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index 34d92410..be8fefbf 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -1,6 +1,206 @@ # -*- coding: utf-8 -*- -from typing import Dict, List +from collections import namedtuple +from dataclasses import dataclass, field +from enum import Enum +from typing import List + +KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") + +ColorOutputMode = Enum( + "ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER" +) + +known_colors = { # v--------v--------- for future use + "BK": KnownColor("#000000", "sw", "black", "schwarz"), + "WH": KnownColor("#ffffff", "ws", "white", "weiß"), + "GY": KnownColor("#999999", "gr", "grey", "grau"), + "PK": KnownColor("#ff66cc", "rs", "pink", "rosa"), + "RD": KnownColor("#ff0000", "rt", "red", "rot"), + "OG": KnownColor("#ff8000", "or", "orange", "orange"), + "YE": KnownColor("#ffff00", "ge", "yellow", "gelb"), + "OL": KnownColor("#708000", "ol", "olive green", "olivgrün"), + "GN": KnownColor("#00ff00", "gn", "green", "grün"), + "TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"), + "LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"), + "BU": KnownColor("#0066ff", "bl", "blue", "blau"), + "VT": KnownColor("#8000ff", "vi", "violet", "violett"), + "BN": KnownColor("#895956", "br", "brown", "braun"), + "BG": KnownColor("#ceb673", "bg", "beige", "beige"), + "IV": KnownColor("#f5f0d0", "eb", "ivory", "elfenbein"), + "SL": KnownColor("#708090", "si", "slate", "schiefer"), + "CU": KnownColor("#d6775e", "ku", "copper", "Kupfer"), + "SN": KnownColor("#aaaaaa", "vz", "tin", "verzinkt"), + "SR": KnownColor("#84878c", "ag", "silver", "Silber"), + "GD": KnownColor("#ffcf80", "au", "gold", "Gold"), +} + +color_output_mode = ColorOutputMode.EN_UPPER + +padding_amount = 1 + + +def convert_case(inp): + if "_LOWER" in color_output_mode.name: + return inp.lower() + elif "_UPPER" in color_output_mode.name: + return inp.upper() + else: # currently not used + return inp + + +def get_color_by_colorcode_index(color_code: str, index: int) -> str: + num_colors_in_code = len(COLOR_CODES[color_code]) + actual_index = index % num_colors_in_code # wrap around if index is out of bounds + return COLOR_CODES[color_code][actual_index] + + # # make color code loop around if more wires than colors + # if self.wirecount > len(self.colors): + # m = self.wirecount // len(self.colors) + 1 + # self.colors = self.colors * int(m) + # # cut off excess after looping + # self.colors = self.colors[: self.wirecount] + + +@dataclass +class SingleColor: + _code_en: str + _html: str + + @property + def code_en(self): + return convert_case(self._code_en) if self._code_en else None + + @property + def code_de(self): + return ( + convert_case(known_colors[self._code_en.upper()].code_de) + if self._code_en + else None + ) + + @property + def html(self): + return convert_case(self._html) if self._code_en else None + + @property + def known(self): + return ( + self.code_en.upper() in known_colors.keys() if self._code_en else True + ) # ? + + def __init__(self, inp): + if inp is None: + self._html = None + self._code_en = None + elif isinstance(inp, int): + hex_str = f"#{inp:06x}" + self._html = hex_str + self._code_en = hex_str # do not perform reverse lookup + elif inp.upper() in known_colors.keys(): + inp_upper = inp.upper() + self._code_en = inp_upper + self._html = known_colors[inp_upper].html + else: # assume valid HTML color + self._html = inp + self._code_en = inp + + @property + def html_padded(self): + return ":".join([self.html] * padding_amount) + + def __bool__(self): + return self._code_en is not None + + def __str__(self): + if self._html is None: + return "" + elif self.known and "EN_" in color_output_mode.name: + return self.code_en + elif self.known and "DE_" in color_output_mode.name: + return self.code_de + else: + return self.html + + +@dataclass +class MultiColor: + colors: List[SingleColor] = field(default_factory=list) + + def __init__(self, inp): + self.colors = [] + if inp is None: + pass + elif isinstance(inp, List): # input is already a list + for item in inp: + if item is None: + pass + elif isinstance(item, SingleColor): + self.colors.append(item) + else: # string + self.colors.append(SingleColor(item)) + elif isinstance(inp, SingleColor): # single color + self.colors = [inp] + else: # split input into list + if ":" in str(inp): + self.colors = [SingleColor(item) for item in inp.split(":")] + else: + if isinstance(inp, int): + self.colors = [SingleColor(inp)] + elif len(inp) % 2 == 0: + items = [inp[i : i + 2] for i in range(0, len(inp), 2)] + known = [item.upper() in known_colors.keys() for item in items] + if all(known): + self.colors = [SingleColor(item) for item in items] + else: # assume it's a HTML color name + self.colors = [SingleColor(inp)] + else: # assume it's a HTML color name + self.colors = [SingleColor(inp)] + + def __len__(self): + return len(self.colors) + + def __bool__(self): + return len(self.colors) >= 1 + + def __str__(self): + if "EN_" in color_output_mode.name or "DE_" in color_output_mode.name: + joiner = "" if self.all_known else ":" + elif "HTML_" in color_output_mode.name: + joiner = ":" + else: + joiner = "???" + return joiner.join([str(color) for color in self.colors]) + + @property + def all_known(self): + return all([color.known for color in self.colors]) + + @property + def html(self): + return ":".join([color.html for color in self.colors]) + + @property + def html_padded_list(self): + # padding only properly works for padding_amount 1 or 3 + if padding_amount == 1: + out = [color.html for color in self.colors] + elif len(self) == 0: + out = [] + elif len(self) == 1: + out = [self.colors[0].html for i in range(3)] + elif len(self) == 2: + out = [self.colors[0].html, self.colors[1].html, self.colors[0].html] + elif len(self) == 3: + out = [color.html for color in self.colors] + else: + raise Exception(f"Padding not supported for len {len(selfq)}") + return [str(color) for color in out] + + @property + def html_padded(self): + return ":".join(self.html_padded_list) + COLOR_CODES = { # fmt: off @@ -38,166 +238,3 @@ "T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"], "T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"], } - -# Convention: Color names should be 2 letters long, to allow for multicolored wires - -_color_hex = { - "BK": "#000000", - "WH": "#ffffff", - "GY": "#999999", - "PK": "#ff66cc", - "RD": "#ff0000", - "OG": "#ff8000", - "YE": "#ffff00", - "OL": "#708000", # olive green - "GN": "#00ff00", - "TQ": "#00ffff", - "LB": "#a0dfff", # light blue - "BU": "#0066ff", - "VT": "#8000ff", - "BN": "#895956", - "BG": "#ceb673", # beige - "IV": "#f5f0d0", # ivory - "SL": "#708090", - "CU": "#d6775e", # Faux-copper look, for bare CU wire - "SN": "#aaaaaa", # Silvery look for tinned bare wire - "SR": "#84878c", # Darker silver for silvered wire - "GD": "#ffcf80", # Golden color for gold -} - -_color_full = { - "BK": "black", - "WH": "white", - "GY": "grey", - "PK": "pink", - "RD": "red", - "OG": "orange", - "YE": "yellow", - "OL": "olive green", - "GN": "green", - "TQ": "turquoise", - "LB": "light blue", - "BU": "blue", - "VT": "violet", - "BN": "brown", - "BG": "beige", - "IV": "ivory", - "SL": "slate", - "CU": "copper", - "SN": "tin", - "SR": "silver", - "GD": "gold", -} - -_color_ger = { - "BK": "sw", - "WH": "ws", - "GY": "gr", - "PK": "rs", - "RD": "rt", - "OG": "or", - "YE": "ge", - "OL": "ol", # olivgrün - "GN": "gn", - "TQ": "tk", - "LB": "hb", # hellblau - "BU": "bl", - "VT": "vi", - "BN": "br", - "BG": "bg", # beige - "IV": "eb", # elfenbeinfarben - "SL": "si", # Schiefer - "CU": "ku", # Kupfer - "SN": "vz", # verzinkt - "SR": "ag", # Silber - "GD": "au", # Gold -} - - -color_default = "#ffffff" - -_hex_digits = set("0123456789abcdefABCDEF") - - -# Literal type aliases below are commented to avoid requiring python 3.8 -Color = str # Two-letter color name = Literal[_color_hex.keys()] -Colors = str # One or more two-letter color names (Color) concatenated into one string -ColorMode = ( - str # = Literal['full', 'FULL', 'hex', 'HEX', 'short', 'SHORT', 'ger', 'GER'] -) -ColorScheme = str # Color scheme name = Literal[COLOR_CODES.keys()] - - -def get_color_hex(input: Colors, pad: bool = False) -> List[str]: - """Return list of hex colors from either a string of color names or :-separated hex colors.""" - if input is None or input == "": - return [color_default] - elif input[0] == "#": # Hex color(s) - output = input.split(":") - for i, c in enumerate(output): - if c[0] != "#" or not all(d in _hex_digits for d in c[1:]): - if c != input: - c += f" in input: {input}" - print(f"Invalid hex color: {c}") - output[i] = color_default - else: # Color name(s) - - def lookup(c: str) -> str: - try: - return _color_hex[c] - except KeyError: - if c != input: - c += f" in input: {input}" - print(f"Unknown color name: {c}") - return color_default - - output = [lookup(input[i : i + 2]) for i in range(0, len(input), 2)] - - if len(output) == 2: # Give wires with EXACTLY 2 colors that striped look. - output += output[:1] - elif pad and len(output) == 1: # Hacky style fix: Give single color wires - output *= 3 # a triple-up so that wires are the same size. - - return output - - -def get_color_translation(translate: Dict[Color, str], input: Colors) -> List[str]: - """Return list of colors translations from either a string of color names or :-separated hex colors.""" - - def from_hex(hex_input: str) -> str: - for color, hex in _color_hex.items(): - if hex == hex_input: - return translate[color] - return f'({",".join(str(int(hex_input[i:i+2], 16)) for i in range(1, 6, 2))})' - - return ( - [from_hex(h) for h in input.lower().split(":")] - if input[0] == "#" - else [translate.get(input[i : i + 2], "??") for i in range(0, len(input), 2)] - ) - - -def translate_color(input: Colors, color_mode: ColorMode) -> str: - if input == "": - return "" - if input is None: - return None - upper = color_mode.isupper() - if not (color_mode.isupper() or color_mode.islower()): - raise Exception("Unknown color mode capitalization") - - color_mode = color_mode.lower() - if color_mode == "full": - output = "/".join(get_color_translation(_color_full, input)) - elif color_mode == "hex": - output = ":".join(get_color_hex(input, pad=False)) - elif color_mode == "ger": - output = "".join(get_color_translation(_color_ger, input)) - elif color_mode == "short": - output = input - else: - raise Exception("Unknown color mode") - if upper: - return output.upper() - else: - return output.lower() diff --git a/src/wireviz/wv_colors_new.py b/src/wireviz/wv_colors_new.py deleted file mode 100644 index 24fdee99..00000000 --- a/src/wireviz/wv_colors_new.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- - -from collections import namedtuple -from dataclasses import dataclass, field -from enum import Enum -from typing import List - -KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") -ColorOutputMode = Enum("ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER") - -known_colors = { - "BK": KnownColor("#000000", "sw", "black", "schwarz"), - "WH": KnownColor("#ffffff", "ws", "white", "weiß"), - "GY": KnownColor("#999999", "gr", "grey", "grau"), - "PK": KnownColor("#ff66cc", "rs", "pink", "rosa"), - "RD": KnownColor("#ff0000", "rt", "red", "rot"), - "OG": KnownColor("#ff8000", "or", "orange", "orange"), - "YE": KnownColor("#ffff00", "ge", "yellow", "gelb"), - "OL": KnownColor("#708000", "ol", "olive green", "olivgrün"), - "GN": KnownColor("#00ff00", "gn", "green", "grün"), - "TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"), - "LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"), - "BU": KnownColor("#0066ff", "bl", "blue", "blau"), - "VT": KnownColor("#8000ff", "vi", "violet", "violett"), - "BN": KnownColor("#895956", "br", "brown", "braun"), - "BG": KnownColor("#ceb673", "bg", "beige", "beige"), - "IV": KnownColor("#f5f0d0", "eb", "ivory", "elfenbein"), - "SL": KnownColor("#708090", "si", "slate", "schiefer"), - "CU": KnownColor("#d6775e", "ku", "copper", "Kupfer"), - "SN": KnownColor("#aaaaaa", "vz", "tin", "verzinkt"), - "SR": KnownColor("#84878c", "ag", "silver", "Silber"), - "GD": KnownColor("#ffcf80", "au", "gold", "Gold"), -} - -color_output_mode = ColorOutputMode.EN_UPPER -padding_amount = 1 - -def convert_case(inp): - if "_LOWER" in color_output_mode.name: - return inp.lower() - elif "_UPPER" in color_output_mode.name: - return inp.upper() - else: # currently not used - return inp - -@dataclass -class SingleColor(): - _code_en: str - _code_de: str - _html: str - - @property - def code_en(self): - return convert_case(self._code_en) - # repeat for _code_de, _html - - @property - def code_de(self): - return convert_case(self._code_de) - # repeat for _code_de, _html - - @property - def html(self): - return convert_case(self._html) - # repeat for _code_de, _html - - @property - def known(self): - return self.code_en.upper() in known_colors.keys() - - def __init__(self, inp): - if isinstance(inp, int): - hex_str = f"#{inp:06x}" - self._html = hex_str - self._code_en = hex_str # do not perform reverse lookup - self._code_de = hex_str - elif inp.upper() in known_colors.keys(): - inp_upper = inp.upper() - self._code_en = inp_upper - self._code_de = known_colors[inp_upper].code_de - self._html = known_colors[inp_upper].html - else: # assume valid HTML color - self._html = inp - self._code_en = inp - self._code_de = inp - - @property - def html_padded(self): - return ":".join([self.html] * padding_amount) - - def __str__(self): - if self.known and "EN_" in color_output_mode.name: - return self.code_en - elif self.known and "DE_" in color_output_mode.name: - return self.code_de - else: - return self.html - -@dataclass -class MultiColor(): - colors: List[SingleColor] = field(default_factory=list) - - def __init__(self, inp): - self.colors = [] - if isinstance(inp, List): # input is already a list - for item in inp: - if isinstance(item, SingleColor): - self.colors.append(item) - else: # string - self.colors.append(SingleColor(item)) - elif isinstance(inp, SingleColor): # single color - self.colors = [inp] - else: # split input into list - if ":" in str(inp): - self.colors = [SingleColor(item) for item in inp.split(":")] - else: - if isinstance(inp, int): - self.colors = [SingleColor(inp)] - elif len(inp) % 2 == 0: - items = [inp[i:i+2] for i in range(0, len(inp), 2)] - known = [item.upper() in known_colors.keys() for item in items] - if all(known): - self.colors = [SingleColor(item) for item in items] - else: # assume it's a HTML color name - self.colors = [SingleColor(inp)] - else: # assume it's a HTML color name - self.colors = [SingleColor(inp)] - - - def __len__(self): - return len(self.colors) - - def __str__(self): - if "EN_" in color_output_mode.name or "DE_" in color_output_mode.name: - joiner = "" if self.all_known else ":" - elif "HTML_" in color_output_mode.name: - joiner = ":" - else: - joiner = "???" - return joiner.join([str(color) for color in self.colors]) - - @property - def all_known(self): - return all([color.known for color in self.colors]) - - @property - def html(self): - return ":".join([color.html for color in self.colors]) - - @property - def html_padded(self): - if len(self) == 0: - out = [] - elif len(self) == 1: - out = [self.colors[0] for i in range(3)] - elif len(self) == 2: - out = [self.colors[0], self.colors[1], self.colors[0]] - elif len(self) == 3: - out = self.colors - else: - raise Exception(f"Padding not supported for len {len(selfq)}") - return ":".join([str(color) for color in out]) - -COLOR_CODES = { - # fmt: off - "DIN": [ - "WH", "BN", "GN", "YE", "GY", "PK", "BU", "RD", "BK", "VT", "GYPK", "RDBU", - "WHGN", "BNGN", "WHYE", "YEBN", "WHGY", "GYBN", "WHPK", "PKBN", "WHBU", "BNBU", - "WHRD", "BNRD", "WHBK", "BNBK", "GYGN", "YEGY", "PKGN", "YEPK", "GNBU", "YEBU", - "GNRD", "YERD", "GNBK", "YEBK", "GYBU", "PKBU", "GYRD", "PKRD", "GYBK", "PKBK", - "BUBK", "RDBK", "WHBNBK", "YEGNBK", "GYPKBK", "RDBUBK", "WHGNBK", "BNGNBK", - "WHYEBK", "YEBNBK", "WHGYBK", "GYBNBK", "WHPKBK", "PKBNBK", "WHBUBK", - "BNBUBK", "WHRDBK", "BNRDBK", - ], - # fmt: on - "IEC": ["BN", "RD", "OG", "YE", "GN", "BU", "VT", "GY", "WH", "BK"], - "BW": ["BK", "WH"], - # 25-pair color code - see also https://en.wikipedia.org/wiki/25-pair_color_code - # 5 major colors (WH,RD,BK,YE,VT) combined with 5 minor colors (BU,OG,GN,BN,SL). - # Each POTS pair tip (+) had major/minor color, and ring (-) had minor/major color. - # fmt: off - "TEL": [ # 25x2: Ring and then tip of each pair - "BUWH", "WHBU", "OGWH", "WHOG", "GNWH", "WHGN", "BNWH", "WHBN", "SLWH", "WHSL", - "BURD", "RDBU", "OGRD", "RDOG", "GNRD", "RDGN", "BNRD", "RDBN", "SLRD", "RDSL", - "BUBK", "BKBU", "OGBK", "BKOG", "GNBK", "BKGN", "BNBK", "BKBN", "SLBK", "BKSL", - "BUYE", "YEBU", "OGYE", "YEOG", "GNYE", "YEGN", "BNYE", "YEBN", "SLYE", "YESL", - "BUVT", "VTBU", "OGVT", "VTOG", "GNVT", "VTGN", "BNVT", "VTBN", "SLVT", "VTSL", - ], - "TELALT": [ # 25x2: Tip and then ring of each pair - "WHBU", "BU", "WHOG", "OG", "WHGN", "GN", "WHBN", "BN", "WHSL", "SL", - "RDBU", "BURD", "RDOG", "OGRD", "RDGN", "GNRD", "RDBN", "BNRD", "RDSL", "SLRD", - "BKBU", "BUBK", "BKOG", "OGBK", "BKGN", "GNBK", "BKBN", "BNBK", "BKSL", "SLBK", - "YEBU", "BUYE", "YEOG", "OGYE", "YEGN", "GNYE", "YEBN", "BNYE", "YESL", "SLYE", - "VTBU", "BUVT", "VTOG", "OGVT", "VTGN", "GNVT", "VTBN", "BNVT", "VTSL", "SLVT", - ], - # fmt: on - "T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"], - "T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"], -} diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index e6ed54de..498805d9 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -17,7 +17,6 @@ ShieldClass, WireClass, ) -from wireviz.wv_colors import get_color_hex, translate_color from wireviz.wv_helper import pn_info_string, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -26,9 +25,7 @@ HEADER_SPN = "SPN" -def gv_node_component( - component: Component, harness_options: Options, pad=None -) -> Table: +def gv_node_component(component: Component) -> Table: # If no wires connected (except maybe loop wires)? if isinstance(component, Connector): if not (component.ports_left or component.ports_right): @@ -52,8 +49,8 @@ def gv_node_component( html_line_breaks(component.type), html_line_breaks(component.subtype), f"{component.pincount}-pin" if component.show_pincount else None, - translate_color(component.color, harness_options.color_mode), - colorbar_cell(component.color), + str(component.color) if component.color else None, + colorbar_cell(component.color) if component.color else None, ] elif isinstance(component, Cable): line_info = [ @@ -64,10 +61,12 @@ def gv_node_component( f"{component.length} {component.length_unit}" if component.length > 0 else None, - translate_color(component.color, harness_options.color_mode), - colorbar_cell(component.color), + str(component.color) if component.color else None, + colorbar_cell(component.color) if component.color else None, ] + x = colorbar_cell(component.color) if component.color else None + line_image, line_image_caption = image_and_caption_cells(component) # line_additional_component_table = get_additional_component_table(self, connector) line_additional_component_table = None @@ -79,7 +78,7 @@ def gv_node_component( else: line_ports = None elif isinstance(component, Cable): - line_ports = gv_conductor_table(component, harness_options) + line_ports = gv_conductor_table(component) lines = [ line_name, @@ -109,17 +108,17 @@ def calculate_node_bgcolor(component, harness_options): # assign component node bgcolor at the GraphViz node level # instead of at the HTML table level for better rendering of node outline if component.bgcolor: - return translate_color(component.bgcolor, "HEX") + return component.bgcolor.html elif isinstance(component, Connector) and harness_options.bgcolor_connector: - return translate_color(harness_options.bgcolor_connector, "HEX") + return harness_options.bgcolor_connector.html elif ( isinstance(component, Cable) and component.category == "bundle" and harness_options.bgcolor_bundle ): - return translate_color(harness_options.bgcolor_bundle, "HEX") + return harness_options.bgcolor_bundle.html elif isinstance(component, Cable) and harness_options.bgcolor_cable: - return translate_color(harness_options.bgcolor_cable, "HEX") + return harness_options.bgcolor_cable.html def make_list_of_cells(inp) -> List[Td]: @@ -170,31 +169,25 @@ def nested_table(lines: List[Td]) -> Table: def gv_pin_table(component) -> Table: - pin_tuples = zip_longest( - component.pins, - component.pinlabels, - component.pincolors, - ) - pin_rows = [] - for pinindex, (pinname, pinlabel, pincolor) in enumerate(pin_tuples): - if component.should_show_pin(pinname): - pin_rows.append( - gv_pin_row(pinindex, pinname, pinlabel, pincolor, component) - ) + for pin in component.pin_objects: + if component.should_show_pin(pin.id): # TODO remove True + pin_rows.append(gv_pin_row(pin, component)) tbl = Table(pin_rows, border=0, cellborder=1, cellpadding=3, cellspacing=0) return tbl -def gv_pin_row(pin_index, pin_name, pin_label, pin_color, connector) -> Tr: +def gv_pin_row(pin, connector) -> Tr: # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers - cell_pin_left = Td(pin_name, port=f"p{pin_index+1}l") - cell_pin_label = Td(pin_label, delete_if_empty=True) - cell_pin_right = Td(pin_name, port=f"p{pin_index+1}r") + cell_pin_left = Td(pin.id, port=f"p{pin.index+1}l") + cell_pin_label = Td(pin.label, delete_if_empty=True) + cell_pin_color = Td(str(pin.color), delete_if_empty=True) + cell_pin_right = Td(pin.id, port=f"p{pin.index+1}r") cells = [ cell_pin_left if connector.ports_left else None, cell_pin_label, + cell_pin_color, # TODO: generate proper color mini-table too cell_pin_right if connector.ports_right else None, ] return Tr(cells) @@ -217,7 +210,7 @@ def gv_connector_loops(connector: Connector) -> List: return loop_edges -def gv_conductor_table(cable, harness_options) -> Table: +def gv_conductor_table(cable) -> Table: rows = [] rows.append(Tr(Td(" "))) # spacer row on top @@ -233,7 +226,7 @@ def gv_conductor_table(cable, harness_options) -> Table: wireinfo = [] if cable.show_wirenumbers and not isinstance(wire, ShieldClass): wireinfo.append(str(wire.id)) - wireinfo.append(translate_color(wire.color, harness_options.color_mode)) + wireinfo.append(str(wire.color)) wireinfo.append(wire.label) ins, outs = [], [] @@ -252,7 +245,7 @@ def gv_conductor_table(cable, harness_options) -> Table: rows.append(Tr(cells_above)) # the wire itself - rows.append(Tr(gv_wire_cell(wire, padding=harness_options._pad))) + rows.append(Tr(gv_wire_cell(wire))) # row below the wire # TODO: PN stuff for bundles @@ -263,16 +256,17 @@ def gv_conductor_table(cable, harness_options) -> Table: return tbl -def gv_wire_cell(wire: Union[WireClass, ShieldClass], padding) -> Td: +def gv_wire_cell(wire: Union[WireClass, ShieldClass]) -> Td: + # import pudb; pudb.set_trace() if wire.color: - color_list = ["#000000"] + get_color_hex(wire.color, pad=padding) + ["#000000"] + color_list = ["#000000"] + wire.color.html_padded_list + ["#000000"] else: color_list = ["#000000"] wire_inner_rows = [] for j, bgcolor in enumerate(color_list[::-1]): wire_inner_cell_attribs = { - "bgcolor": bgcolor if bgcolor != "" else "BK", + "bgcolor": bgcolor if bgcolor != "" else "#000000", "border": 0, "cellpadding": 0, "colspan": 3, @@ -339,16 +333,9 @@ def wire_pn_stuff(): def gv_edge_wire(harness, cable, connection) -> (str, str, str): if connection.via.color: # check if it's an actual wire and not a shield - wire_color = get_color_hex(connection.via.color, pad=harness.options._pad) - color = ":".join(["#000000"] + wire_color + ["#000000"]) + color = f"#000000:{connection.via.color.html_padded}:#000000" else: # it's a shield connection - # shield is shown with specified color and black borders, or as a thin black wire otherwise - if connection.via.color: - shield_color_hex = get_color_hex(connection.via.color)[0] - shield_color_str = ":".join(["#000000", shield_color_hex, "#000000"]) - else: - shield_color_str = "#000000" - color = shield_color_str + color = "#000000" if connection.from_ is not None: # connect to left from_port_str = ( @@ -417,7 +404,7 @@ def gv_edge_mate(mate) -> (str, str, str, str): def colored_cell(contents, bgcolor) -> Td: - return Td(contents, bgcolor=translate_color(bgcolor, "HEX")) + return Td(contents, bgcolor=bgcolor.html) def part_number_str_list(component: Component) -> List[str]: @@ -433,10 +420,7 @@ def part_number_str_list(component: Component) -> List[str]: def colorbar_cell(color) -> Td: - if color: - return Td("", bgcolor=translate_color(color, "HEX"), width=4) - else: - return None + return Td("", bgcolor=color.html, width=4) def image_and_caption_cells(component: Component) -> (Td, Td): @@ -456,7 +440,7 @@ def image_and_caption_cells(component: Component) -> (Td, Td): image_cell.update_attribs( balign="left", - bgcolor=translate_color(component.image.bgcolor, "HEX"), + bgcolor=component.image.bgcolor.html, sides="TLR" if component.image.caption else None, ) @@ -495,7 +479,7 @@ def set_dot_basics(dot, options): "graph", rankdir="LR", ranksep="2", - bgcolor=translate_color(options.bgcolor, "HEX"), + bgcolor=options.bgcolor.html, nodesep="0.33", fontname=options.fontname, ) @@ -506,7 +490,7 @@ def set_dot_basics(dot, options): height="0", margin="0", # Actual size of the node is entirely determined by the label. style="filled", - fillcolor=translate_color(options.bgcolor_node, "HEX"), + fillcolor=options.bgcolor_node.html, fontname=options.fontname, ) dot.attr("edge", style="bold", fontname=options.fontname) diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 15342668..8af39cb4 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -79,7 +79,7 @@ def generate_html_output( replacements = { "": f"{APP_NAME} {__version__} - {APP_URL}", "": options.fontname, - "": wv_colors.translate_color(options.bgcolor, "hex"), + "": options.bgcolor.html, "": svgdata, "": bom_html, "": bom_html_reversed, From 22cd25871c4dbb41c1e0f1dfe2ad33625b6bff14 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Wed, 20 Oct 2021 21:04:28 +0200 Subject: [PATCH 033/111] Re-sort `wv_colors.py` --- src/wireviz/wv_colors.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index be8fefbf..95398dee 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -5,12 +5,16 @@ from enum import Enum from typing import List -KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") +padding_amount = 1 ColorOutputMode = Enum( "ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER" ) +color_output_mode = ColorOutputMode.EN_UPPER + +KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") + known_colors = { # v--------v--------- for future use "BK": KnownColor("#000000", "sw", "black", "schwarz"), "WH": KnownColor("#ffffff", "ws", "white", "weiß"), @@ -35,10 +39,6 @@ "GD": KnownColor("#ffcf80", "au", "gold", "Gold"), } -color_output_mode = ColorOutputMode.EN_UPPER - -padding_amount = 1 - def convert_case(inp): if "_LOWER" in color_output_mode.name: @@ -54,13 +54,6 @@ def get_color_by_colorcode_index(color_code: str, index: int) -> str: actual_index = index % num_colors_in_code # wrap around if index is out of bounds return COLOR_CODES[color_code][actual_index] - # # make color code loop around if more wires than colors - # if self.wirecount > len(self.colors): - # m = self.wirecount // len(self.colors) + 1 - # self.colors = self.colors * int(m) - # # cut off excess after looping - # self.colors = self.colors[: self.wirecount] - @dataclass class SingleColor: @@ -85,9 +78,8 @@ def html(self): @property def known(self): - return ( - self.code_en.upper() in known_colors.keys() if self._code_en else True - ) # ? + # treat None as a known color + return self.code_en.upper() in known_colors.keys() if self._code_en else True def __init__(self, inp): if inp is None: @@ -101,7 +93,7 @@ def __init__(self, inp): inp_upper = inp.upper() self._code_en = inp_upper self._html = known_colors[inp_upper].html - else: # assume valid HTML color + else: # assume it's a valid HTML color name self._html = inp self._code_en = inp @@ -152,9 +144,9 @@ def __init__(self, inp): known = [item.upper() in known_colors.keys() for item in items] if all(known): self.colors = [SingleColor(item) for item in items] - else: # assume it's a HTML color name + else: # assume it's a valud HTML color name self.colors = [SingleColor(inp)] - else: # assume it's a HTML color name + else: # assume it's a valid HTML color name self.colors = [SingleColor(inp)] def __len__(self): From 95cc1be64783533baa6e3f8a6fc39038bf3b849f Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Wed, 20 Oct 2021 21:05:56 +0200 Subject: [PATCH 034/111] Make green color darker --- src/wireviz/wv_colors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index 95398dee..a813339a 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -24,7 +24,7 @@ "OG": KnownColor("#ff8000", "or", "orange", "orange"), "YE": KnownColor("#ffff00", "ge", "yellow", "gelb"), "OL": KnownColor("#708000", "ol", "olive green", "olivgrün"), - "GN": KnownColor("#00ff00", "gn", "green", "grün"), + "GN": KnownColor("#00aa00", "gn", "green", "grün"), "TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"), "LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"), "BU": KnownColor("#0066ff", "bl", "blue", "blau"), From cc0bd76e99848b092f3b8c12006fabdfacf5ba37 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 12:05:00 +0200 Subject: [PATCH 035/111] Break longer lines not caught by `black` because they were unbroken strings or comments --- src/wireviz/DataClasses.py | 27 ++++++++++++++++++--------- src/wireviz/Harness.py | 12 ++++++++---- src/wireviz/wireviz.py | 17 ++++++++++++----- src/wireviz/wv_cli.py | 5 ++++- src/wireviz/wv_gv_html.py | 15 ++++++++++----- src/wireviz/wv_html.py | 3 ++- 6 files changed, 54 insertions(+), 25 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index d5a2bda4..df91e907 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -14,7 +14,8 @@ ) from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv -# Each type alias have their legal values described in comments - validation might be implemented in the future +# Each type alias have their legal values described in comments +# - validation might be implemented in the future PlainText = str # Text not containing HTML tags nor newlines Hypertext = str # Text possibly including HTML hyperlinks that are removed in all outputs except HTML output MultilineHypertext = ( @@ -280,7 +281,8 @@ def __post_init__(self) -> None: ) if not self.pincount: raise Exception( - "You need to specify at least one, pincount, pins, pinlabels, or pincolors" + "You need to specify at least one: " + "pincount, pins, pinlabels, or pincolors" ) # create default list for pins (sequential) if not specified @@ -317,7 +319,8 @@ def __post_init__(self) -> None: self.show_pincount = self.style != "simple" for loop in self.loops: - # TODO: allow using pin labels in addition to pin numbers, just like when defining regular connections + # TODO: allow using pin labels in addition to pin numbers, + # just like when defining regular connections # TODO: include properties of wire used to create the loop if len(loop) != 2: raise Exception("Loops must be between exactly two pins!") @@ -431,13 +434,15 @@ def __post_init__(self) -> None: g, u = self.gauge.split(" ") except Exception: raise Exception( - f"Cable {self.name} gauge={self.gauge} - Gauge must be a number, or number and unit separated by a space" + f"Cable {self.name} gauge={self.gauge} - " + "Gauge must be a number, or number and unit separated by a space" ) self.gauge = g if self.gauge_unit is not None: print( - f"Warning: Cable {self.name} gauge_unit={self.gauge_unit} is ignored because its gauge contains {u}" + f"Warning: Cable {self.name} gauge_unit={self.gauge_unit} " + f"is ignored because its gauge contains {u}" ) if u.upper() == "AWG": self.gauge_unit = u.upper() @@ -456,12 +461,14 @@ def __post_init__(self) -> None: L = float(L) except Exception: raise Exception( - f"Cable {self.name} length={self.length} - Length must be a number, or number and unit separated by a space" + f"Cable {self.name} length={self.length} - " + "Length must be a number, or number and unit separated by a space" ) self.length = L if self.length_unit is not None: print( - f"Warning: Cable {self.name} length_unit={self.length_unit} is ignored because its length contains {u}" + f"Warning: Cable {self.name} length_unit={self.length_unit} is ignored " + f"because its length contains {u}" ) self.length_unit = u elif not any(isinstance(self.length, t) for t in [int, float]): @@ -488,7 +495,8 @@ def __post_init__(self) -> None: else: # wirecount implicit in length of color list if not self.colors: raise Exception( - "Unknown number of wires. Must specify wirecount or colors (implicit length)" + "Unknown number of wires. " + "Must specify wirecount or colors (implicit length)" ) self.wirecount = len(self.colors) @@ -498,7 +506,8 @@ def __post_init__(self) -> None: '"s" may not be used as a wire label for a shielded cable.' ) - # if lists of part numbers are provided check this is a bundle and that it matches the wirecount. + # if lists of part numbers are provided, + # check this is a bundle and that it matches the wirecount. for idfield in [self.manufacturer, self.mpn, self.supplier, self.spn, self.pn]: if isinstance(idfield, list): if self.category == "bundle": diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index e7a7603d..d80efd41 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -88,9 +88,11 @@ def connect( if pin in connector.pins and pin in connector.pinlabels: if connector.pins.index(pin) != connector.pinlabels.index(pin): raise Exception( - f"{name}:{pin} is defined both in pinlabels and pins, for different pins." + f"{name}:{pin} is defined both in pinlabels and pins, " + "for different pins." ) - # TODO: Maybe issue a warning if present in both lists but referencing the same pin? + # TODO: Maybe issue a warning if present in both lists + # but referencing the same pin? if pin in connector.pinlabels: if connector.pinlabels.count(pin) > 1: raise Exception(f"{name}:{pin} is defined more than once.") @@ -110,9 +112,11 @@ def connect( if via_wire in cable.colors and via_wire in cable.wirelabels: if cable.colors.index(via_wire) != cable.wirelabels.index(via_wire): raise Exception( - f"{via_name}:{via_wire} is defined both in colors and wirelabels, for different wires." + f"{via_name}:{via_wire} is defined both in colors and wirelabels, " + "for different wires." ) - # TODO: Maybe issue a warning if present in both lists but referencing the same wire? + # TODO: Maybe issue a warning if present in both lists + # but referencing the same wire? if via_wire in cable.colors: if cable.colors.count(via_wire) > 1: raise Exception( diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 05369ae9..9754886c 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -93,7 +93,8 @@ def parse( output_file = output_dir / output_name if yaml_file: - # if reading from file, ensure that input file's parent directory is included in image_paths + # if reading from file, ensure that input file's parent directory + # is included in image_paths default_image_path = yaml_file.parent.resolve() if not default_image_path in [Path(x).resolve() for x in image_paths]: image_paths.append(default_image_path) @@ -128,7 +129,8 @@ def parse( if len(yaml_data[sec]) > 0: # section has contents if ty == dict: for key, attribs in yaml_data[sec].items(): - # The Image dataclass might need to open an image file with a relative path. + # The Image dataclass might need to open + # an image file with a relative path. image = attribs.get("image") if isinstance(image, dict): image_path = image["src"] @@ -164,12 +166,16 @@ def resolve_designator(inp, separator): autogenerated_designators[template] = ( autogenerated_designators.get(template, 0) + 1 ) - designator = f"{AUTOGENERATED_PREFIX}{template}_{autogenerated_designators[template]}" + designator = ( + f"{AUTOGENERATED_PREFIX}" + "{template}_{autogenerated_designators[template]}" + ) # check if redefining existing component to different template if designator in designators_and_templates: if designators_and_templates[designator] != template: raise Exception( - f"Trying to redefine {designator} from {designators_and_templates[designator]} to {template}" + f"Trying to redefine {designator}" + f" from {designators_and_templates[designator]} to {template}" ) else: designators_and_templates[designator] = template @@ -300,7 +306,8 @@ def alternate_type(): # flip between connector and cable/arrow f"{template} is an unknown template/designator/arrow." ) - alternate_type() # entries in connection set must alternate between connectors and cables/arrows + # entries in connection set must alternate between connectors and cables/arrows + alternate_type() # transpose connection set list # before: one item per component, one subitem per connection in set diff --git a/src/wireviz/wv_cli.py b/src/wireviz/wv_cli.py index 73150720..c10600f9 100644 --- a/src/wireviz/wv_cli.py +++ b/src/wireviz/wv_cli.py @@ -58,7 +58,10 @@ "--output-name", default=None, type=str, - help="File name (without extension) to use for output files, if different from input file name.", + help=( + "File name (without extension) to use for output files, " + "if different from input file name." + ), ) @click.option( "-V", diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 498805d9..3c0f693d 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -430,7 +430,8 @@ def image_and_caption_cells(component: Component) -> (Td, Td): image_tag = Img(scale=component.image.scale, src=component.image.src) image_cell_inner = Td(image_tag, flat=True) if component.image.fixedsize: - # further nest the image in a table with width/height/fixedsize parameters, and place that table in a cell + # further nest the image in a table with width/height/fixedsize parameters, + # and place that table in a cell image_cell_inner.update_attribs(**html_size_attr_dict(component.image)) image_cell = Td( Table(Tr(image_cell_inner), border=0, cellborder=0, cellspacing=0, id="!") @@ -500,7 +501,8 @@ def apply_dot_tweaks(dot, tweak): def typecheck(name: str, value: Any, expect: type) -> None: if not isinstance(value, expect): raise Exception( - f"Unexpected value type of {name}: Expected {expect}, got {type(value)}\n{value}" + f"Unexpected value type of {name}: " + f"Expected {expect}, got {type(value)}\n{value}" ) # TODO?: Differ between override attributes and HTML? @@ -530,11 +532,13 @@ def typecheck(name: str, value: Any, expect: type) -> None: ) if n_subs < 1: print( - f"Harness.create_graph() warning: {attr} not found in {keyword}!" + "Harness.create_graph() warning: " + f"{attr} not found in {keyword}!" ) elif n_subs > 1: print( - f"Harness.create_graph() warning: {attr} removed {n_subs} times in {keyword}!" + "Harness.create_graph() warning: " + f"{attr} removed {n_subs} times in {keyword}!" ) continue @@ -549,7 +553,8 @@ def typecheck(name: str, value: Any, expect: type) -> None: entry = re.sub(r"\]$", f" {attr}={value}]", entry) elif n_subs > 1: print( - f"Harness.create_graph() warning: {attr} overridden {n_subs} times in {keyword}!" + "Harness.create_graph() warning: " + f"{attr} overridden {n_subs} times in {keyword}!" ) dot.body[i] = entry diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 8af39cb4..fb70d1b8 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -25,7 +25,8 @@ def generate_html_output( # load HTML template templatename = metadata.get("template", {}).get("name") if templatename: - # if relative path to template was provided, check directory of YAML file first, fall back to built-in template directory + # if relative path to template was provided, + # check directory of YAML file first, fall back to built-in template directory templatefile = smart_file_resolve( f"{templatename}.html", [Path(filename).parent, Path(__file__).parent / "templates"], From 96a3a87f9ecb466561972baea5225c291b390ea4 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 12:09:28 +0200 Subject: [PATCH 036/111] Make variable name more expressive --- src/wireviz/Harness.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index d80efd41..a3d8e411 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -175,12 +175,12 @@ def create_graph(self) -> Graph: # determine if there are double- or triple-colored wires in the harness; # if so, pad single-color wires to make all wires of equal thickness - multicolor_wires = [ + wire_is_multicolor = [ len(wire.color) > 1 for cable in self.cables.values() for wire in cable.wire_objects ] - if any(multicolor_wires): + if any(wire_is_multicolor): wireviz.wv_colors.padding_amount = 3 else: wireviz.wv_colors.padding_amount = 1 From 842e174bb98d39b89c694ffbe576708f0172e95c Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 12:11:04 +0200 Subject: [PATCH 037/111] Apply dot tweaks last --- src/wireviz/Harness.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index a3d8e411..f3971c71 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -208,14 +208,14 @@ def create_graph(self) -> Graph: if not (r1, r2) == (None, None): dot.edge(r1, r2) - apply_dot_tweaks(dot, self.tweak) - for mate in self.mates: color, dir, code_from, code_to = gv_edge_mate(mate) dot.attr("edge", color=color, style="dashed", dir=dir) dot.edge(code_from, code_to) + apply_dot_tweaks(dot, self.tweak) + return dot # cache for the GraphViz Graph object From ef2b406c78e340d6915aa8dc3c2c0b556b7fb114 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 12:21:00 +0200 Subject: [PATCH 038/111] Remove unused line --- src/wireviz/Harness.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index f3971c71..9d46fbc1 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -252,10 +252,6 @@ def output( ) -> None: # graphical output graph = self.graph - svg_already_exists = Path( - f"{filename}.svg" - ).exists() # if SVG already exists, do not delete later - # graphical output for f in fmt: if f in ("png", "svg", "html"): if f == "html": # if HTML format is specified, From 36ffa969f4f6f3bd85da50d65f41a9352e50bdaa Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 17:15:02 +0200 Subject: [PATCH 039/111] Improve subclassing of components, prepare for BOM refactoring --- src/wireviz/DataClasses.py | 286 ++++++++++++++++++++++---------- src/wireviz/Harness.py | 106 ++++++++++-- src/wireviz/wireviz.py | 10 +- src/wireviz/wv_bom.py | 326 ++++++------------------------------- src/wireviz/wv_gv_html.py | 30 +--- src/wireviz/wv_helper.py | 11 -- 6 files changed, 351 insertions(+), 418 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index df91e907..848c3bce 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- +from collections import namedtuple from dataclasses import dataclass, field from enum import Enum from itertools import zip_longest from typing import Dict, List, Optional, Tuple, Union +from wireviz.wv_bom import BomHash, BomHashList, PartNumberInfo from wireviz.wv_colors import ( COLOR_CODES, ColorOutputMode, @@ -145,34 +147,6 @@ def __post_init__(self): self.height = self.width / aspect_ratio(self.src) -@dataclass -class AdditionalComponent: - type: MultilineHypertext - subtype: Optional[MultilineHypertext] = None - manufacturer: Optional[MultilineHypertext] = None - mpn: Optional[MultilineHypertext] = None - supplier: Optional[MultilineHypertext] = None - spn: Optional[MultilineHypertext] = None - pn: Optional[Hypertext] = None - qty: float = 1 - unit: Optional[str] = None - qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None - bgcolor: SingleColor = None - - def __post_init__(self): - self.bgcolor = SingleColor(self.bgcolor) - - @property - def description(self) -> str: - s = self.type.rstrip() + f", {self.subtype.rstrip()}" if self.subtype else "" - return s - - -@dataclass -class Component: - pass - - @dataclass class PinClass: index: int @@ -220,43 +194,144 @@ class Connection: @dataclass -class Connector(Component): - name: Designator - bgcolor: SingleColor = None - bgcolor_title: SingleColor = None - manufacturer: Optional[MultilineHypertext] = None - mpn: Optional[MultilineHypertext] = None - supplier: Optional[MultilineHypertext] = None - spn: Optional[MultilineHypertext] = None - pn: Optional[Hypertext] = None - style: Optional[str] = None - category: Optional[str] = None - type: Optional[MultilineHypertext] = None - subtype: Optional[MultilineHypertext] = None - pincount: Optional[int] = None +class Component: + category: Optional[str] = None # currently only used by cables, to define bundles + type: Union[MultilineHypertext, List[MultilineHypertext]] = None + subtype: Union[MultilineHypertext, List[MultilineHypertext]] = None + + # part number + partnumbers: PartNumberInfo = None # filled by fill_partnumbers() + # the following are provided for user convenience and should not be accessed later. + # their contents are loaded into partnumbers during the child class __post_init__() + pn: str = None + manufacturer: str = None + mpn: str = None + supplier: str = None + spn: str = None + + ignore_in_bom: bool = False + bom_id: Optional[str] = None # to be filled after harness is built + + def fill_partnumbers(self): + self.partnumbers = PartNumberInfo( + self.pn, self.manufacturer, self.mpn, self.supplier, self.spn + ) + + @property + def bom_hash(self) -> BomHash: + def _force_list(inp): + if isinstance(inp, list): + return inp + else: + return [inp for i in range(len(self.colors))] + + if self.category == "bundle": + # create a temporary single item that includes the necessary fields, + # which may or may not be lists + _hash_list = BomHashList( + self.description, + self.unit, + self.partnumbers, + ) + # convert elements that are not lists, into lists + _hash_matrix = list(map(_force_list, [elem for elem in _hash_list])) + # transpose list of lists, convert to tuple for next step + _hash_matrix = list(map(tuple, zip(*_hash_matrix))) + # generate list of BomHashes + hash_list = [BomHash(*item) for item in _hash_matrix] + return hash_list + else: + return BomHash( + self.description, + self.unit, + self.partnumbers, + ) + + +@dataclass +class AdditionalComponent(Component): + qty: float = 1 + unit: Optional[str] = None + qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None + designators: Optional[str] = None # used for components definedi in the + # additional_bom_items section within another component + bgcolor: SingleColor = None # ^ same here + + def __post_init__(self): + super().fill_partnumbers() + self.bgcolor = SingleColor(self.bgcolor) + + @property + def description(self) -> str: + s = self.type.rstrip() + f", {self.subtype.rstrip()}" if self.subtype else "" + return s + + +@dataclass +class GraphicalComponent(Component): # abstract class, for future use + bgcolor: Optional[SingleColor] = None + + +@dataclass +class TopLevelGraphicalComponent(GraphicalComponent): # abstract class + # component properties + designator: Designator = None + color: Optional[SingleColor] = None image: Optional[Image] = None + additional_components: List[AdditionalComponent] = field(default_factory=list) notes: Optional[MultilineHypertext] = None - pins: List[Pin] = field(default_factory=list) - pinlabels: List[Pin] = field(default_factory=list) - pincolors: List[str] = field(default_factory=list) - color: MultiColor = None + # rendering options + bgcolor_title: Optional[SingleColor] = None show_name: Optional[bool] = None + + +@dataclass +class Connector(TopLevelGraphicalComponent): + # connector-specific properties + style: Optional[str] = None + category: Optional[str] = None + loops: List[List[Pin]] = field(default_factory=list) + # pin information in particular + pincount: Optional[int] = None + pins: List[Pin] = field(default_factory=list) # legacy + pinlabels: List[Pin] = field(default_factory=list) # legacy + pincolors: List[str] = field(default_factory=list) # legacy + pin_objects: List[PinClass] = field( + default_factory=list + ) # new, to replace the lists above + # rendering option show_pincount: Optional[bool] = None hide_disconnected_pins: bool = False - loops: List[List[Pin]] = field(default_factory=list) - ignore_in_bom: bool = False - additional_components: List[AdditionalComponent] = field(default_factory=list) - pin_objects: List[PinClass] = field(default_factory=list) @property def is_autogenerated(self): - return self.name.startswith(AUTOGENERATED_PREFIX) + import pudb + + pudb.set_trace() + return self.designator.startswith(AUTOGENERATED_PREFIX) + + @property + def description(self) -> str: + substrs = [ + "Connector", + self.type, + self.subtype, + self.pincount if self.show_pincount else None, + str(self.color) if self.color else None, + ] + return ", ".join([str(s) for s in substrs if s is not None and s != ""]) def should_show_pin(self, pin_name): return not self.hide_disconnected_pins or self.visible_pins.get(pin_name, False) + @property + def unit(self): # for compatibility with BOM hashing + return None # connectors do not support units. + def __post_init__(self) -> None: + super().fill_partnumbers() + self.bgcolor = SingleColor(self.bgcolor) self.bgcolor_title = SingleColor(self.bgcolor_title) self.color = SingleColor(self.color) @@ -305,7 +380,7 @@ def __post_init__(self) -> None: id=pin_id, label=pin_label, color=MultiColor(pin_color), - parent=self.name, + parent=self.designator, _anonymous=self.is_autogenerated, _simple=self.style == "simple", ) @@ -337,9 +412,9 @@ def __post_init__(self) -> None: def _check_if_unique_id(self, id): results = [pin for pin in self.pin_objects if pin.id == id] if len(results) == 0: - raise Exception(f"Pin ID {id} not found in {self.name}") + raise Exception(f"Pin ID {id} not found in {self.designator}") if len(results) > 1: - raise Exception(f"Pin ID {id} found more than once in {self.name}") + raise Exception(f"Pin ID {id} found more than once in {self.designator}") return True def get_pin_by_id(self, id): @@ -368,41 +443,36 @@ def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> i @dataclass -class Cable(Component): - name: Designator - bgcolor: SingleColor = None - bgcolor_title: SingleColor = None - manufacturer: Union[MultilineHypertext, List[MultilineHypertext], None] = None - mpn: Union[MultilineHypertext, List[MultilineHypertext], None] = None - supplier: Union[MultilineHypertext, List[MultilineHypertext], None] = None - spn: Union[MultilineHypertext, List[MultilineHypertext], None] = None - pn: Union[Hypertext, List[Hypertext], None] = None - category: Optional[str] = None - type: Optional[MultilineHypertext] = None +class Cable(TopLevelGraphicalComponent): + # cable-specific properties gauge: Optional[float] = None gauge_unit: Optional[str] = None - show_equiv: bool = False length: float = 0 length_unit: Optional[str] = None - color: MultiColor = None + color_code: Optional[str] = None + # wire information in particular wirecount: Optional[int] = None shield: Union[bool, MultiColor] = False - image: Optional[Image] = None - notes: Optional[MultilineHypertext] = None - colors: List[str] = field(default_factory=list) - wirelabels: List[Wire] = field(default_factory=list) - color_code: Optional[str] = None + colors: List[str] = field(default_factory=list) # legacy + wirelabels: List[Wire] = field(default_factory=list) # legacy + wire_objects: List[WireClass] = field( + default_factory=list + ) # new, to replace the lists above + # internal + _connections: List[Connection] = field(default_factory=list) + # rendering options show_name: Optional[bool] = None + show_equiv: bool = False show_wirecount: bool = True show_wirenumbers: Optional[bool] = None - ignore_in_bom: bool = False - additional_components: List[AdditionalComponent] = field(default_factory=list) - connections: List[Connection] = field(default_factory=list) - wire_objects: List[WireClass] = field(default_factory=list) @property def is_autogenerated(self): - return self.name.startswith(AUTOGENERATED_PREFIX) + return self.designator.startswith(AUTOGENERATED_PREFIX) + + @property + def unit(self): # for compatibility with parent class + return self.length_unit @property def gauge_str(self): @@ -420,8 +490,43 @@ def gauge_str(self): equivalent_gauge = f" ({mm2_equiv(self.gauge)} mm\u00B2)" return f"{actual_gauge}{equivalent_gauge}" + @property + def description(self) -> str: + if self.category == "bundle": + desc_list = [] + for index, color in enumerate(self.colors): + substrs = [ + "Wire", + self.type, + self.subtype, + f"{self.gauge} {self.gauge_unit}" if self.gauge else None, + str(self.color) + if self.color + else None, # translate_color(self.color, harness.options.color_mode)] <- get harness.color_mode! + ] + desc_list.append( + ", ".join([s for s in substrs if s is not None and s != ""]) + ) + return desc_list + else: + substrs = [ + ("", "Cable"), + (", ", self.type), + (", ", self.subtype), + (", ", self.wirecount), + (" ", f"x {self.gauge} {self.gauge_unit}" if self.gauge else " wires"), + (" ", "shielded" if self.shield else None), + (", ", str(self.color) if self.color else None), + ] + desc = "".join( + [f"{s[0]}{s[1]}" for s in substrs if s[1] is not None and s[1] != ""] + ) + return desc + def __post_init__(self) -> None: + super().fill_partnumbers() + self.bgcolor = SingleColor(self.bgcolor) self.bgcolor_title = SingleColor(self.bgcolor_title) self.color = SingleColor(self.color) @@ -434,14 +539,14 @@ def __post_init__(self) -> None: g, u = self.gauge.split(" ") except Exception: raise Exception( - f"Cable {self.name} gauge={self.gauge} - " + f"Cable {self.designator} gauge={self.gauge} - " "Gauge must be a number, or number and unit separated by a space" ) self.gauge = g if self.gauge_unit is not None: print( - f"Warning: Cable {self.name} gauge_unit={self.gauge_unit} " + f"Warning: Cable {self.designator} gauge_unit={self.gauge_unit} " f"is ignored because its gauge contains {u}" ) if u.upper() == "AWG": @@ -461,18 +566,18 @@ def __post_init__(self) -> None: L = float(L) except Exception: raise Exception( - f"Cable {self.name} length={self.length} - " + f"Cable {self.designator} length={self.length} - " "Length must be a number, or number and unit separated by a space" ) self.length = L if self.length_unit is not None: print( - f"Warning: Cable {self.name} length_unit={self.length_unit} is ignored " + f"Warning: Cable {self.designator} length_unit={self.length_unit} is ignored " f"because its length contains {u}" ) self.length_unit = u elif not any(isinstance(self.length, t) for t in [int, float]): - raise Exception(f"Cable {self.name} length has a non-numeric value") + raise Exception(f"Cable {self.designator} length has a non-numeric value") elif self.length_unit is None: self.length_unit = "m" @@ -530,7 +635,7 @@ def __post_init__(self) -> None: id=wire_index + 1, # TODO: wire_id label=wire_label, color=MultiColor(wire_color), - parent=self.name, + parent=self.designator, ) ) @@ -545,7 +650,7 @@ def __post_init__(self) -> None: color=MultiColor(self.shield) if isinstance(self.shield, str) else MultiColor(None), - parent=self.name, + parent=self.designator, ) ) @@ -563,16 +668,19 @@ def __post_init__(self) -> None: def get_wire_by_id(self, id): wire = [wire for wire in self.wire_objects if wire.id == id] if len(wire) == 0: - raise Exception(f"Wire ID {id} not found in {self.name}") + raise Exception(f"Wire ID {id} not found in {self.designator}") if len(wire) > 1: - raise Exception(f"Wire ID {id} found more than once in {self.name}") + raise Exception(f"Wire ID {id} found more than once in {self.designator}") return wire[0] - def connect( - self, from_pin_obj: [PinClass], via_wire_id: str, to_pin_obj: [PinClass] + def _connect( + self, + from_pin_obj: [PinClass], + via_wire_id: str, + to_pin_obj: [PinClass], ) -> None: via_wire_obj = self.get_wire_by_id(via_wire_id) - self.connections.append(Connection(from_pin_obj, via_wire_obj, to_pin_obj)) + self._connections.append(Connection(from_pin_obj, via_wire_obj, to_pin_obj)) def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float: if not qty_multiplier: diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 9d46fbc1..abde2e96 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -1,12 +1,15 @@ # -*- coding: utf-8 -*- -from dataclasses import dataclass +from collections import defaultdict +from dataclasses import dataclass, field from pathlib import Path +from typing import List from graphviz import Graph import wireviz.wv_colors from wireviz.DataClasses import ( + AdditionalComponent, Arrow, ArrowWeight, Cable, @@ -19,7 +22,6 @@ Tweak, ) from wireviz.svgembed import embed_svg_images_file -from wireviz.wv_bom import bom_list, generate_bom from wireviz.wv_gv_html import ( apply_dot_tweaks, calculate_node_bgcolor, @@ -39,19 +41,29 @@ class Harness: metadata: Metadata options: Options tweak: Tweak + additional_bom_items: List[AdditionalComponent] = field(default_factory=list) def __post_init__(self): self.connectors = {} self.cables = {} self.mates = [] - self._bom = [] # Internal Cache for generated bom + self._bom = defaultdict(dict) self.additional_bom_items = [] - def add_connector(self, name: str, *args, **kwargs) -> None: - self.connectors[name] = Connector(name, *args, **kwargs) + def add_connector(self, designator: str, *args, **kwargs) -> None: + conn = Connector(designator=designator, *args, **kwargs) + self.connectors[designator] = conn + self._add_to_internal_bom(conn) - def add_cable(self, name: str, *args, **kwargs) -> None: - self.cables[name] = Cable(name, *args, **kwargs) + def add_cable(self, designator: str, *args, **kwargs) -> None: + cbl = Cable(designator=designator, *args, **kwargs) + self.cables[designator] = cbl + self._add_to_internal_bom(cbl) + + def add_additional_bom_item(self, item: dict) -> None: + new_item = AdditionalComponent(**item) + self.additional_bom_items.append(new_item) + self._add_to_internal_bom(new_item) def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None: from_con = self.connectors[from_name] @@ -68,8 +80,65 @@ def add_mate_component(self, from_name, to_name, arrow_str) -> None: arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) self.mates.append(MateComponent(from_name, to_name, arrow)) - def add_bom_item(self, item: dict) -> None: - self.additional_bom_items.append(item) + def _add_to_internal_bom(self, item): + if item.ignore_in_bom: + return + + def _add(hash, designator=None, qty=1, category=None): + # generate entry + bom_entry = self._bom[hash] + # initialize missing fields + if not "qty" in bom_entry: + bom_entry["qty"] = 0 + if not "designators" in bom_entry: + bom_entry["designators"] = set() + # update fields + bom_entry["qty"] += qty + if designator: + if isinstance(designator, str): + bom_entry["designators"].add(designator) + else: + bom_entry["designators"].update(designator) + bom_entry["category"] = category + + if isinstance(item, Connector): + _add(item.bom_hash, designator=item.designator, category="connector") + for comp in item.additional_components: + if comp.ignore_in_bom: + continue + _add( + comp.bom_hash, + designator=item.designator, + qty=comp.qty, + category="connector/additional", + ) + elif isinstance(item, Cable): + _bom_hash = item.bom_hash + if isinstance(_bom_hash, list): + _cat = "bundle" + for subhash in _bom_hash: + _add(subhash, designator=item.designator, category=_cat) + else: + _cat = "cable" + _add(item.bom_hash, designator=item.designator, category=_cat) + for comp in item.additional_components: + if comp.ignore_in_bom: + continue + _add( + comp.bom_hash, + designator=item.designator, + qty=comp.qty, + category=f"{_cat}/additional", + ) + elif isinstance(item, AdditionalComponent): # additional component + _add( + item.bom_hash, + designator=item.designators, + qty=item.qty, + category="additional", + ) + else: + raise Exception(f"Unknown type of item:\n{item}") def connect( self, @@ -145,7 +214,7 @@ def connect( else: to_pin_obj = None - self.cables[via_name].connect(from_pin_obj, via_wire, to_pin_obj) + self.cables[via_name]._connect(from_pin_obj, via_wire, to_pin_obj) if from_name in self.connectors: self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) if to_name in self.connectors: @@ -160,7 +229,7 @@ def create_graph(self) -> Graph: gv_html = gv_node_component(connector) bgcolor = calculate_node_bgcolor(connector, self.options) dot.node( - connector.name, + connector.designator, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", @@ -192,7 +261,7 @@ def create_graph(self) -> Graph: bgcolor = calculate_node_bgcolor(cable, self.options) style = "filled,dashed" if cable.category == "bundle" else "filled" dot.node( - cable.name, + cable.designator, label=f"<\n{gv_html}\n>", bgcolor=bgcolor, shape="box", @@ -200,7 +269,7 @@ def create_graph(self) -> Graph: ) # generate wire edges between component nodes and cable nodes - for connection in cable.connections: + for connection in cable._connections: color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection) dot.attr("edge", color=color) if not (l1, l2) == (None, None): @@ -268,7 +337,8 @@ def output( if "gv" in fmt: graph.save(filename=f"{filename}.gv") # BOM output - bomlist = bom_list(self.bom()) + # bomlist = bom_list(self.bom()) + bomlist = [[]] if "tsv" in fmt: open_file_write(f"{filename}.bom.tsv").write(tuplelist2tsv(bomlist)) if "csv" in fmt: @@ -288,7 +358,7 @@ def output( elif "svg" in fmt: Path(f"{filename}.tmp.svg").replace(f"{filename}.svg") - def bom(self): - if not self._bom: - self._bom = generate_bom(self) - return self._bom + # def bom(self): + # if not self._bom: + # self._bom = generate_bom(self) + # return self._bom diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 9754886c..4478f99c 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -168,7 +168,7 @@ def resolve_designator(inp, separator): ) designator = ( f"{AUTOGENERATED_PREFIX}" - "{template}_{autogenerated_designators[template]}" + f"{template}_{autogenerated_designators[template]}" ) # check if redefining existing component to different template if designator in designators_and_templates: @@ -288,7 +288,7 @@ def alternate_type(): # flip between connector and cable/arrow # generate new connector instance from template check_type(designator, template, "connector") harness.add_connector( - name=designator, **template_connectors[template] + designator=designator, **template_connectors[template] ) elif designator in harness.cables: # existing cable instance @@ -296,7 +296,9 @@ def alternate_type(): # flip between connector and cable/arrow elif template in template_cables.keys(): # generate new cable instance from template check_type(designator, template, "cable/arrow") - harness.add_cable(name=designator, **template_cables[template]) + harness.add_cable( + designator=designator, **template_cables[template] + ) elif is_arrow(designator): check_type(designator, template, "cable/arrow") @@ -366,7 +368,7 @@ def alternate_type(): # flip between connector and cable/arrow if "additional_bom_items" in yaml_data: for line in yaml_data["additional_bom_items"]: - harness.add_bom_item(line) + harness.add_additional_bom_item(line) if output_formats: harness.output(filename=output_file, fmt=output_formats, view=False) diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index 4e075a3c..f8a0c3b3 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -1,277 +1,55 @@ # -*- coding: utf-8 -*- -from dataclasses import asdict -from itertools import groupby -from typing import Any, Dict, List, Optional, Tuple, Union - -from wireviz.DataClasses import AdditionalComponent, Cable, Connector -from wireviz.wv_gv_html import html_line_breaks -from wireviz.wv_helper import clean_whitespace, pn_info_string - -BOM_COLUMNS_ALWAYS = ("id", "description", "qty", "unit", "designators") -BOM_COLUMNS_OPTIONAL = ("pn", "manufacturer", "mpn", "supplier", "spn") -BOM_COLUMNS_IN_KEY = ("description", "unit") + BOM_COLUMNS_OPTIONAL - -HEADER_PN = "P/N" -HEADER_MPN = "MPN" -HEADER_SPN = "SPN" - -BOMKey = Tuple[str, ...] -BOMColumn = str # = Literal[*BOM_COLUMNS_ALWAYS, *BOM_COLUMNS_OPTIONAL] -BOMEntry = Dict[BOMColumn, Union[str, int, float, List[str], None]] - - -def optional_fields(part: Union[Connector, Cable, AdditionalComponent]) -> BOMEntry: - """Return part field values for the optional BOM columns as a dict.""" - part = asdict(part) - return {field: part.get(field) for field in BOM_COLUMNS_OPTIONAL} - - -def get_additional_component_table( - harness: "Harness", component: Union[Connector, Cable] -) -> List[str]: - """Return a list of diagram node table row strings with additional components.""" - rows = [] - if component.additional_components: - rows.append(["Additional components"]) - for part in component.additional_components: - common_args = { - "qty": part.qty * component.get_qty_multiplier(part.qty_multiplier), - "unit": part.unit, - "bgcolor": part.bgcolor, - } - if harness.options.mini_bom_mode: - id = get_bom_index( - harness.bom(), - bom_entry_key({**asdict(part), "description": part.description}), - ) - rows.append( - component_table_entry( - f"#{id} ({part.type.rstrip()})", **common_args - ) - ) - else: - rows.append( - component_table_entry( - part.description, **common_args, **optional_fields(part) - ) - ) - return rows - - -def get_additional_component_bom(component: Union[Connector, Cable]) -> List[BOMEntry]: - """Return a list of BOM entries with additional components.""" - bom_entries = [] - for part in component.additional_components: - bom_entries.append( - { - "description": part.description, - "qty": part.qty * component.get_qty_multiplier(part.qty_multiplier), - "unit": part.unit, - "designators": component.name if component.show_name else None, - **optional_fields(part), - } - ) - return bom_entries - - -def bom_entry_key(entry: BOMEntry) -> BOMKey: - """Return a tuple of string values from the dict that must be equal to join BOM entries.""" - if "key" not in entry: - entry["key"] = tuple( - clean_whitespace(make_str(entry.get(c))) for c in BOM_COLUMNS_IN_KEY - ) - return entry["key"] - - -def generate_bom(harness: "Harness") -> List[BOMEntry]: - """Return a list of BOM entries generated from the harness.""" - from wireviz.Harness import Harness # Local import to avoid circular imports - - bom_entries = [] - # connectors - for connector in harness.connectors.values(): - if not connector.ignore_in_bom: - description = ( - "Connector" - + (f", {connector.type}" if connector.type else "") - + (f", {connector.subtype}" if connector.subtype else "") - + (f", {connector.pincount} pins" if connector.show_pincount else "") - + ( - f", xxx" # {translate_color(connector.color, harness.options.color_mode)} - if connector.color - else "" - ) - ) - bom_entries.append( - { - "description": description, - "designators": connector.name if connector.show_name else None, - **optional_fields(connector), - } - ) - - # add connectors aditional components to bom - bom_entries.extend(get_additional_component_bom(connector)) - - # cables - # TODO: If category can have other non-empty values than 'bundle', maybe it should be part of description? - for cable in harness.cables.values(): - if not cable.ignore_in_bom: - if cable.category != "bundle": - # process cable as a single entity - description = ( - "Cable" - + (f", {cable.type}" if cable.type else "") - + (f", {cable.wirecount}") - + ( - f" x {cable.gauge} {cable.gauge_unit}" - if cable.gauge - else " wires" - ) - + (" shielded" if cable.shield else "") - + ( - f", xxx" # {translate_color(cable.color, harness.options.color_mode)} - if cable.color - else "" - ) - ) - bom_entries.append( - { - "description": description, - "qty": cable.length, - "unit": cable.length_unit, - "designators": cable.name if cable.show_name else None, - **optional_fields(cable), - } - ) - else: - # add each wire from the bundle to the bom - for index, color in enumerate(cable.colors): - description = ( - "Wire" - + (f", {cable.type}" if cable.type else "") - + (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "") - + ( - f", xxx" # {translate_color(color, harness.options.color_mode)} - if color - else "" - ) - ) - bom_entries.append( - { - "description": description, - "qty": cable.length, - "unit": cable.length_unit, - "designators": cable.name if cable.show_name else None, - **{ - k: index_if_list(v, index) - for k, v in optional_fields(cable).items() - }, - } - ) - - # add cable/bundles aditional components to bom - bom_entries.extend(get_additional_component_bom(cable)) - - # add harness aditional components to bom directly, as they both are List[BOMEntry] - bom_entries.extend(harness.additional_bom_items) - - # remove line breaks if present and cleanup any resulting whitespace issues - bom_entries = [ - {k: clean_whitespace(v) for k, v in entry.items()} for entry in bom_entries +from collections import namedtuple +from dataclasses import dataclass +from enum import Enum +from typing import List, Optional, Union + +BOM_HASH_FIELDS = "description unit partnumbers" +BomHash = namedtuple("BomHash", BOM_HASH_FIELDS) +BomHashList = namedtuple("BomHashList", BOM_HASH_FIELDS) + +BomCategory = Enum( + "BomEntry", "CONNECTOR CABLE WIRE ADDITIONAL_INSIDE ADDITIONAL_OUTSIDE" +) + +PartNumberInfo = namedtuple("PartNumberInfo", "pn manufacturer mpn supplier spn") + +PART_NUMBER_HEADERS = PartNumberInfo( + pn="P/N", manufacturer=None, mpn="MPN", supplier=None, spn="SPN" +) + + +@dataclass +class BomEntry: + hash: BomHash # includes description, part number info, + description: str + qty: Union[int, float] + unit: str + designators: List[str] + _category: BomCategory # for sorting + + +def partnumbers_to_list(partnumbers: PartNumberInfo) -> List[str]: + cell_contents = [ + pn_info_string(PART_NUMBER_HEADERS.pn, None, partnumbers.pn), + pn_info_string( + PART_NUMBER_HEADERS.mpn, partnumbers.manufacturer, partnumbers.mpn + ), + pn_info_string(PART_NUMBER_HEADERS.spn, partnumbers.supplier, partnumbers.spn), ] - - # deduplicate bom - bom = [] - for _, group in groupby(sorted(bom_entries, key=bom_entry_key), key=bom_entry_key): - group_entries = list(group) - designators = sum( - (make_list(entry.get("designators")) for entry in group_entries), [] - ) - total_qty = sum(entry.get("qty", 1) for entry in group_entries) - bom.append( - { - **group_entries[0], - "qty": round(total_qty, 3), - "designators": sorted(set(designators)), - } - ) - - # add an incrementing id to each bom entry - return [{**entry, "id": index} for index, entry in enumerate(bom, 1)] - - -def get_bom_index(bom: List[BOMEntry], target: BOMKey) -> int: - """Return id of BOM entry or raise exception if not found.""" - for entry in bom: - if bom_entry_key(entry) == target: - return entry["id"] - raise Exception("Internal error: No BOM entry found matching: " + "|".join(target)) - - -def bom_list(bom: List[BOMEntry]) -> List[List[str]]: - """Return list of BOM rows as lists of column strings with headings in top row.""" - keys = list(BOM_COLUMNS_ALWAYS) # Always include this fixed set of BOM columns. - for fieldname in BOM_COLUMNS_OPTIONAL: - # Include only those optional BOM columns that are in use. - if any(entry.get(fieldname) for entry in bom): - keys.append(fieldname) - # Custom mapping from internal name to BOM column headers. - # Headers not specified here are generated by capitilising the internal name. - bom_headings = { - "pn": HEADER_PN, - "mpn": HEADER_MPN, - "spn": HEADER_SPN, - } - return [ - [bom_headings.get(k, k.capitalize()) for k in keys] - ] + [ # Create header row with key names - [make_str(entry.get(k)) for k in keys] for entry in bom - ] # Create string list for each entry row - - -def component_table_entry( - type: str, - qty: Union[int, float], - unit: Optional[str] = None, - bgcolor: Optional[str] = None, - pn: Optional[str] = None, - manufacturer: Optional[str] = None, - mpn: Optional[str] = None, - supplier: Optional[str] = None, - spn: Optional[str] = None, -) -> str: - """Return a diagram node table row string with an additional component.""" - part_number_list = [ - pn_info_string(HEADER_PN, None, pn), - pn_info_string(HEADER_MPN, manufacturer, mpn), - pn_info_string(HEADER_SPN, supplier, spn), - ] - output = ( - f"{qty}" - + (f" {unit}" if unit else "") - + f" x {type}" - + ("
" if any(part_number_list) else "") - + (", ".join([pn for pn in part_number_list if pn])) - ) - # format the above output as left aligned text in a single visible cell - # indent is set to two to match the indent in the generated html table - return f""" - -
{html_line_breaks(output)}
""" - - -def index_if_list(value: Any, index: int) -> Any: - """Return the value indexed if it is a list, or simply the value otherwise.""" - return value[index] if isinstance(value, list) else value - - -def make_list(value: Any) -> list: - """Return value if a list, empty list if None, or single element list otherwise.""" - return value if isinstance(value, list) else [] if value is None else [value] - - -def make_str(value: Any) -> str: - """Return comma separated elements if a list, empty string if None, or value as a string otherwise.""" - return ", ".join(str(element) for element in make_list(value)) + if any(cell_contents): + return [html_line_breaks(cell) for cell in cell_contents] + else: + return None + + +def pn_info_string( + header: str, name: Optional[str], number: Optional[str] +) -> Optional[str]: + """Return the company name and/or the part number in one single string or None otherwise.""" + number = str(number).strip() if number is not None else "" + if name or number: + return f'{name if name else header}{": " + number if number else ""}' + else: + return None diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 3c0f693d..5c6bee64 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -14,16 +14,14 @@ MateComponent, MatePin, Options, + PartNumberInfo, ShieldClass, WireClass, ) -from wireviz.wv_helper import pn_info_string, remove_links +from wireviz.wv_bom import partnumbers_to_list +from wireviz.wv_helper import remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later -HEADER_PN = "P/N" -HEADER_MPN = "MPN" -HEADER_SPN = "SPN" - def gv_node_component(component: Component) -> Table: # If no wires connected (except maybe loop wires)? @@ -33,12 +31,12 @@ def gv_node_component(component: Component) -> Table: # generate all rows to be shown in the node if component.show_name: - str_name = f"{remove_links(component.name)}" + str_name = f"{remove_links(component.designator)}" line_name = colored_cell(str_name, component.bgcolor_title) else: line_name = None - line_pn = part_number_str_list(component) + line_pn = partnumbers_to_list(component.partnumbers) is_simple_connector = ( isinstance(component, Connector) and component.style == "simple" @@ -204,8 +202,8 @@ def gv_connector_loops(connector: Connector) -> List: else: raise Exception("No side for loops") for loop in connector.loops: - head = f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}" - tail = f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}" + head = f"{connector.designator}:p{loop[0]}{loop_side}:{loop_dir}" + tail = f"{connector.designator}:p{loop[1]}{loop_side}:{loop_dir}" loop_edges.append((head, tail)) return loop_edges @@ -230,7 +228,7 @@ def gv_conductor_table(cable) -> Table: wireinfo.append(wire.label) ins, outs = [], [] - for conn in cable.connections: + for conn in cable._connections: if conn.via.id == wire.id: if conn.from_ is not None: ins.append(str(conn.from_)) @@ -407,18 +405,6 @@ def colored_cell(contents, bgcolor) -> Td: return Td(contents, bgcolor=bgcolor.html) -def part_number_str_list(component: Component) -> List[str]: - cell_contents = [ - pn_info_string(HEADER_PN, None, component.pn), - pn_info_string(HEADER_MPN, component.manufacturer, component.mpn), - pn_info_string(HEADER_SPN, component.supplier, component.spn), - ] - if any(cell_contents): - return [html_line_breaks(cell) for cell in cell_contents] - else: - return None - - def colorbar_cell(color) -> Td: return Td("", bgcolor=color.html, width=4) diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index fdc1e7a3..f86dfa39 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -176,14 +176,3 @@ def smart_file_resolve(filename: str, possible_paths: (str, List[str])) -> Path: f"{filename} was not found in any of the following locations: \n" + "\n".join([str(x) for x in possible_paths]) ) - - -def pn_info_string( - header: str, name: Optional[str], number: Optional[str] -) -> Optional[str]: - """Return the company name and/or the part number in one single string or None otherwise.""" - number = str(number).strip() if number is not None else "" - if name or number: - return f'{name if name else header}{": " + number if number else ""}' - else: - return None From 8ae4dc37a2a48000d616d93962565ddbb877fce7 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 19:36:23 +0200 Subject: [PATCH 040/111] Clean up --- src/wireviz/DataClasses.py | 3 --- src/wireviz/wv_gv_html.py | 1 - 2 files changed, 4 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 848c3bce..26c68b11 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -305,9 +305,6 @@ class Connector(TopLevelGraphicalComponent): @property def is_autogenerated(self): - import pudb - - pudb.set_trace() return self.designator.startswith(AUTOGENERATED_PREFIX) @property diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 5c6bee64..ba5dcf1a 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -255,7 +255,6 @@ def gv_conductor_table(cable) -> Table: def gv_wire_cell(wire: Union[WireClass, ShieldClass]) -> Td: - # import pudb; pudb.set_trace() if wire.color: color_list = ["#000000"] + wire.color.html_padded_list + ["#000000"] else: From a4f6c6ad7a3aa11c836bba461138fb7a04d9c909 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 20:25:28 +0200 Subject: [PATCH 041/111] Include nested additional components in BOM --- src/wireviz/Harness.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index abde2e96..feb312f9 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -54,11 +54,15 @@ def add_connector(self, designator: str, *args, **kwargs) -> None: conn = Connector(designator=designator, *args, **kwargs) self.connectors[designator] = conn self._add_to_internal_bom(conn) + for addcom in conn.additional_components: + self._add_to_internal_bom(addcom) def add_cable(self, designator: str, *args, **kwargs) -> None: cbl = Cable(designator=designator, *args, **kwargs) self.cables[designator] = cbl self._add_to_internal_bom(cbl) + for addcom in cbl.additional_components: + self._add_to_internal_bom(addcom) def add_additional_bom_item(self, item: dict) -> None: new_item = AdditionalComponent(**item) From b60db7902bbae0bf03fba7ae2001b7c9dfe077d4 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 20:25:42 +0200 Subject: [PATCH 042/111] do not add autogenerated designators to BOM --- src/wireviz/Harness.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index feb312f9..dcb4efd1 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -9,6 +9,7 @@ import wireviz.wv_colors from wireviz.DataClasses import ( + AUTOGENERATED_PREFIX, AdditionalComponent, Arrow, ArrowWeight, @@ -98,10 +99,10 @@ def _add(hash, designator=None, qty=1, category=None): bom_entry["designators"] = set() # update fields bom_entry["qty"] += qty - if designator: + if designator and not designator.startswith(AUTOGENERATED_PREFIX): if isinstance(designator, str): bom_entry["designators"].add(designator) - else: + else: # list bom_entry["designators"].update(designator) bom_entry["category"] = category From 5c180011886658d875a35cb4c007ed4ced1da994 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 20:58:52 +0200 Subject: [PATCH 043/111] Improve BOM generation (TODO: wires from a bundle) --- src/wireviz/DataClasses.py | 15 ++++++++------- src/wireviz/Harness.py | 31 ++++++++++++++++--------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 26c68b11..14404373 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -14,7 +14,7 @@ SingleColor, get_color_by_colorcode_index, ) -from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv +from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv, remove_links # Each type alias have their legal values described in comments # - validation might be implemented in the future @@ -213,9 +213,10 @@ class Component: bom_id: Optional[str] = None # to be filled after harness is built def fill_partnumbers(self): - self.partnumbers = PartNumberInfo( - self.pn, self.manufacturer, self.mpn, self.supplier, self.spn - ) + partnos = [self.pn, self.manufacturer, self.mpn, self.supplier, self.spn] + partnos = [remove_links(entry) for entry in partnos] + partnos = tuple(partnos) + self.partnumbers = PartNumberInfo(*partnos) @property def bom_hash(self) -> BomHash: @@ -263,8 +264,8 @@ def __post_init__(self): @property def description(self) -> str: - s = self.type.rstrip() + f", {self.subtype.rstrip()}" if self.subtype else "" - return s + substrs = [self.type, self.subtype if self.subtype else ""] + return ", ".join(substrs) @dataclass @@ -313,7 +314,7 @@ def description(self) -> str: "Connector", self.type, self.subtype, - self.pincount if self.show_pincount else None, + f"{self.pincount} pins" if self.show_pincount else None, str(self.color) if self.color else None, ] return ", ".join([str(s) for s in substrs if s is not None and s != ""]) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index dcb4efd1..d619a1c7 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -14,6 +14,7 @@ Arrow, ArrowWeight, Cable, + Component, Connector, MateComponent, MatePin, @@ -55,15 +56,11 @@ def add_connector(self, designator: str, *args, **kwargs) -> None: conn = Connector(designator=designator, *args, **kwargs) self.connectors[designator] = conn self._add_to_internal_bom(conn) - for addcom in conn.additional_components: - self._add_to_internal_bom(addcom) def add_cable(self, designator: str, *args, **kwargs) -> None: cbl = Cable(designator=designator, *args, **kwargs) self.cables[designator] = cbl self._add_to_internal_bom(cbl) - for addcom in cbl.additional_components: - self._add_to_internal_bom(addcom) def add_additional_bom_item(self, item: dict) -> None: new_item = AdditionalComponent(**item) @@ -85,7 +82,7 @@ def add_mate_component(self, from_name, to_name, arrow_str) -> None: arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) self.mates.append(MateComponent(from_name, to_name, arrow)) - def _add_to_internal_bom(self, item): + def _add_to_internal_bom(self, item: Component): if item.ignore_in_bom: return @@ -99,11 +96,15 @@ def _add(hash, designator=None, qty=1, category=None): bom_entry["designators"] = set() # update fields bom_entry["qty"] += qty - if designator and not designator.startswith(AUTOGENERATED_PREFIX): - if isinstance(designator, str): - bom_entry["designators"].add(designator) - else: # list - bom_entry["designators"].update(designator) + if designator is None: + designator_list = [] + elif isinstance(designator, list): + designator_list = designator + else: + designator_list = [designator] + for des in designator_list: + if des and not des.startswith(AUTOGENERATED_PREFIX): + bom_entry["designators"].add(des) bom_entry["category"] = category if isinstance(item, Connector): @@ -119,13 +120,13 @@ def _add(hash, designator=None, qty=1, category=None): ) elif isinstance(item, Cable): _bom_hash = item.bom_hash - if isinstance(_bom_hash, list): - _cat = "bundle" - for subhash in _bom_hash: - _add(subhash, designator=item.designator, category=_cat) + if item.category == "bundle": + _cat = "wire" + for wire in item.wire_objects: + _add(None, qty=item.length+.001, designator=item.designator, category="wire DUMMY") else: _cat = "cable" - _add(item.bom_hash, designator=item.designator, category=_cat) + _add(item.bom_hash, qty=item.length, designator=item.designator, category="cable") for comp in item.additional_components: if comp.ignore_in_bom: continue From fe016d63ce15d948b8ff435b7e4fdde01c35885b Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:07:30 +0200 Subject: [PATCH 044/111] Prepare `harness.populate_bom()` --- src/wireviz/DataClasses.py | 7 ++++++- src/wireviz/Harness.py | 34 ++++++++++++++++++++++++++-------- src/wireviz/wireviz.py | 2 ++ src/wireviz/wv_bom.py | 2 ++ src/wireviz/wv_gv_html.py | 6 +----- src/wireviz/wv_helper.py | 4 ++++ src/wireviz/wv_html.py | 2 +- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 14404373..cce7148a 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -253,7 +253,7 @@ def _force_list(inp): class AdditionalComponent(Component): qty: float = 1 unit: Optional[str] = None - qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None + qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = 1 designators: Optional[str] = None # used for components definedi in the # additional_bom_items section within another component bgcolor: SingleColor = None # ^ same here @@ -262,6 +262,10 @@ def __post_init__(self): super().fill_partnumbers() self.bgcolor = SingleColor(self.bgcolor) + @property + def qty_final(self): + return 999 + @property def description(self) -> str: substrs = [self.type, self.subtype if self.subtype else ""] @@ -428,6 +432,7 @@ def activate_pin(self, pin: Pin, side: Side) -> None: self.ports_right = True def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> int: + # TODO!!! how and when to compute final qty for additional components??? if not qty_multiplier: return 1 elif qty_multiplier == "pincount": diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index d619a1c7..1d722e79 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -55,17 +55,17 @@ def __post_init__(self): def add_connector(self, designator: str, *args, **kwargs) -> None: conn = Connector(designator=designator, *args, **kwargs) self.connectors[designator] = conn - self._add_to_internal_bom(conn) + # self._add_to_internal_bom(conn) def add_cable(self, designator: str, *args, **kwargs) -> None: cbl = Cable(designator=designator, *args, **kwargs) self.cables[designator] = cbl - self._add_to_internal_bom(cbl) + # self._add_to_internal_bom(cbl) def add_additional_bom_item(self, item: dict) -> None: new_item = AdditionalComponent(**item) self.additional_bom_items.append(new_item) - self._add_to_internal_bom(new_item) + # self._add_to_internal_bom(new_item) def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None: from_con = self.connectors[from_name] @@ -115,7 +115,7 @@ def _add(hash, designator=None, qty=1, category=None): _add( comp.bom_hash, designator=item.designator, - qty=comp.qty, + qty=comp.qty_final, category="connector/additional", ) elif isinstance(item, Cable): @@ -123,29 +123,47 @@ def _add(hash, designator=None, qty=1, category=None): if item.category == "bundle": _cat = "wire" for wire in item.wire_objects: - _add(None, qty=item.length+.001, designator=item.designator, category="wire DUMMY") + _add( + None, + qty=item.length + 0.001, + designator=item.designator, + category="wire DUMMY", + ) else: _cat = "cable" - _add(item.bom_hash, qty=item.length, designator=item.designator, category="cable") + _add( + item.bom_hash, + qty=item.length, + designator=item.designator, + category="cable", + ) for comp in item.additional_components: if comp.ignore_in_bom: continue _add( comp.bom_hash, designator=item.designator, - qty=comp.qty, + qty=comp.qty_final, category=f"{_cat}/additional", ) elif isinstance(item, AdditionalComponent): # additional component _add( item.bom_hash, designator=item.designators, - qty=item.qty, + qty=item.qty_final, category="additional", ) else: raise Exception(f"Unknown type of item:\n{item}") + def populate_bom(self): + pass + # raise Exception( + # "Implement BOM population after all connections have been made, " + # " so that additional component qty's can be computed correctly " + # "(factoring in number of connected pins/wires/...)" + # ) + def connect( self, from_name: str, diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 4478f99c..2c6ca77c 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -370,6 +370,8 @@ def alternate_type(): # flip between connector and cable/arrow for line in yaml_data["additional_bom_items"]: harness.add_additional_bom_item(line) + harness.populate_bom() + if output_formats: harness.output(filename=output_file, fmt=output_formats, view=False) diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index f8a0c3b3..9cc0fbed 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -5,6 +5,8 @@ from enum import Enum from typing import List, Optional, Union +from wireviz.wv_helper import html_line_breaks + BOM_HASH_FIELDS = "description unit partnumbers" BomHash = namedtuple("BomHash", BOM_HASH_FIELDS) BomHashList = namedtuple("BomHashList", BOM_HASH_FIELDS) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index ba5dcf1a..160e412e 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -19,7 +19,7 @@ WireClass, ) from wireviz.wv_bom import partnumbers_to_list -from wireviz.wv_helper import remove_links +from wireviz.wv_helper import html_line_breaks, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -454,10 +454,6 @@ def html_size_attr_dict(image): return attr_dict -def html_line_breaks(inp): - return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp - - def set_dot_basics(dot, options): dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") dot.body.append(f"// {APP_URL}\n") diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index f86dfa39..f1b49938 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -100,6 +100,10 @@ def tuplelist2tsv(inp, header=None): return output +def html_line_breaks(inp): + return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp + + def remove_links(inp): return ( re.sub(r"<[aA] [^>]*>([^<]*)", r"\1", inp) diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index fb70d1b8..16a5d585 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -6,9 +6,9 @@ from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz.DataClasses import Metadata, Options -from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_helper import ( flatten2d, + html_line_breaks, open_file_read, open_file_write, smart_file_resolve, From 5c4c6d831efce521fd47c97bd4d1e2b7d6b4e7a8 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:08:57 +0200 Subject: [PATCH 045/111] Change `description` to `type` in additional BOM item YAML --- tutorial/tutorial08.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/tutorial08.yml b/tutorial/tutorial08.yml index 1e5e4f20..84d53067 100644 --- a/tutorial/tutorial08.yml +++ b/tutorial/tutorial08.yml @@ -75,7 +75,7 @@ connections: additional_bom_items: - # define an additional item to add to the bill of materials (does not appear in graph) - description: Label, pinout information + type: Label, pinout information qty: 2 designators: - X2 From f2bc5d79f2b0b6327511d0078033dce789e6ae8d Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:13:46 +0200 Subject: [PATCH 046/111] Define CLI epilog str in single statement --- src/wireviz/wv_cli.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/wireviz/wv_cli.py b/src/wireviz/wv_cli.py index c10600f9..07aac12a 100644 --- a/src/wireviz/wv_cli.py +++ b/src/wireviz/wv_cli.py @@ -23,9 +23,11 @@ "t": "tsv", } -epilog = "The -f or --format option accepts a string containing one or more of the " -epilog += "following characters to specify which file types to output:\n" -epilog += ", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()]) +epilog = ( + "The -f or --format option accepts a string containing one or more of the " + "following characters to specify which file types to output:\n" + f", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()]) +) @click.command(epilog=epilog, no_args_is_help=True) @@ -74,7 +76,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version): """ Parses the provided FILE and generates the specified outputs. """ - print() + print() # blank line before execution print(f"{APP_NAME} {__version__}") if version: return # print version number only and exit @@ -145,7 +147,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version): image_paths=list(image_paths), ) - print() + print() # blank line after execution if __name__ == "__main__": From 7111a3375f1edc16c2a37f0bc05fb1f8a2e426a2 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:47:47 +0200 Subject: [PATCH 047/111] Deprecate Python 3.7, add Python 3.10 --- .github/workflows/main.yml | 2 +- setup.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 301ac18a..d539aa2e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,7 +8,7 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [3.7, 3.8] + python-version: ["3.8", "3.10"] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} diff --git a/setup.py b/setup.py index 8cdd4864..6ce50131 100644 --- a/setup.py +++ b/setup.py @@ -37,8 +37,9 @@ "Development Status :: 4 - Beta", "Environment :: Console", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Topic :: Utilities", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", ], From fb91be402a17ea69e6bf5b9489007031e6d94781 Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:41:24 +0200 Subject: [PATCH 048/111] Rename modules, adjust imports, move `build_examples.py` --- .github/workflows/main.yml | 4 +- src/wireviz/svgembed.py | 52 ---- src/wireviz/{ => tools}/build_examples.py | 7 +- src/wireviz/wireviz.py | 20 +- src/wireviz/wv_bom.py | 2 +- src/wireviz/wv_cli.py | 5 +- .../{DataClasses.py => wv_dataclasses.py} | 2 +- src/wireviz/{wv_gv_html.py => wv_graphviz.py} | 8 +- src/wireviz/{Harness.py => wv_harness.py} | 9 +- src/wireviz/wv_html.py | 241 +++++++++--------- src/wireviz/wv_output.py | 168 ++++++++++++ src/wireviz/wv_table_util.py | 125 --------- src/wireviz/{wv_helper.py => wv_utils.py} | 0 13 files changed, 315 insertions(+), 328 deletions(-) delete mode 100644 src/wireviz/svgembed.py rename src/wireviz/{ => tools}/build_examples.py (96%) rename src/wireviz/{DataClasses.py => wv_dataclasses.py} (99%) rename src/wireviz/{wv_gv_html.py => wv_graphviz.py} (99%) rename src/wireviz/{Harness.py => wv_harness.py} (98%) create mode 100644 src/wireviz/wv_output.py delete mode 100644 src/wireviz/wv_table_util.py rename src/wireviz/{wv_helper.py => wv_utils.py} (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d539aa2e..fe576b0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,11 +22,11 @@ jobs: python -m pip install --upgrade pip pip install . - name: Create Examples - run: PYTHONPATH=$(pwd)/src:$PYTHONPATH cd src/wireviz/ && python build_examples.py + run: PYTHONPATH=$(pwd)/src:$PYTHONPATH && python src/wireviz/tools/build_examples.py - name: Upload examples, demos, and tutorials uses: actions/upload-artifact@v2 with: name: examples-and-tutorials path: | examples/ - tutorial/ \ No newline at end of file + tutorial/ diff --git a/src/wireviz/svgembed.py b/src/wireviz/svgembed.py deleted file mode 100644 index ab6b9f1e..00000000 --- a/src/wireviz/svgembed.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import re -from pathlib import Path -from typing import Union - -mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"} - - -def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str: - images_b64 = {} # cache of base64-encoded images - - def image_tag(pre: str, url: str, post: str) -> str: - return f'' - - def replace(match: re.Match) -> str: - imgurl = match["URL"] - if not imgurl in images_b64: # only encode/cache every unique URL once - imgurl_abs = (Path(base_path) / imgurl).resolve() - image = imgurl_abs.read_bytes() - images_b64[imgurl] = base64.b64encode(image).decode("utf-8") - return image_tag( - match["PRE"] or "", - f"data:image/{get_mime_subtype(imgurl)};base64, {images_b64[imgurl]}", - match["POST"] or "", - ) - - pattern = re.compile( - image_tag(r"(?P
 [^>]*?)?", r'(?P[^"]*?)', r"(?P [^>]*?)?"),
-        re.IGNORECASE,
-    )
-    return pattern.sub(replace, svg_in)
-
-
-def get_mime_subtype(filename: Union[str, Path]) -> str:
-    mime_subtype = Path(filename).suffix.lstrip(".").lower()
-    if mime_subtype in mime_subtype_replacements:
-        mime_subtype = mime_subtype_replacements[mime_subtype]
-    return mime_subtype
-
-
-def embed_svg_images_file(
-    filename_in: Union[str, Path], overwrite: bool = True
-) -> None:
-    filename_in = Path(filename_in).resolve()
-    filename_out = filename_in.with_suffix(".b64.svg")
-    filename_out.write_text(
-        embed_svg_images(filename_in.read_text(), filename_in.parent)
-    )
-    if overwrite:
-        filename_out.replace(filename_in)
diff --git a/src/wireviz/build_examples.py b/src/wireviz/tools/build_examples.py
similarity index 96%
rename from src/wireviz/build_examples.py
rename to src/wireviz/tools/build_examples.py
index e54d0f5c..5ce9fe42 100755
--- a/src/wireviz/build_examples.py
+++ b/src/wireviz/tools/build_examples.py
@@ -7,13 +7,12 @@
 from pathlib import Path
 
 script_path = Path(__file__).absolute()
-
-sys.path.insert(0, str(script_path.parent.parent))  # to find wireviz module
-from wv_helper import open_file_append, open_file_read, open_file_write
+sys.path.insert(0, str(script_path.parent.parent.parent))  # to find wireviz module
 
 from wireviz import APP_NAME, __version__, wireviz
+from wireviz.wv_utils import open_file_append, open_file_read, open_file_write
 
-dir = script_path.parent.parent.parent
+dir = script_path.parent.parent.parent.parent
 readme = "readme.md"
 groups = {
     "examples": {
diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py
index 2c6ca77c..4dd9b091 100755
--- a/src/wireviz/wireviz.py
+++ b/src/wireviz/wireviz.py
@@ -10,9 +10,9 @@
 if __name__ == "__main__":
     sys.path.insert(0, str(Path(__file__).parent.parent))  # add src/wireviz to PATH
 
-from wireviz.DataClasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
-from wireviz.Harness import Harness
-from wireviz.wv_helper import (
+from wireviz.wv_dataclasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
+from wireviz.wv_harness import Harness
+from wireviz.wv_utils import (
     expand,
     get_single_key_and_value,
     is_arrow,
@@ -396,20 +396,12 @@ def alternate_type():  # flip between connector and cable/arrow
 def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> (Dict, Path):
     # determine whether inp is a file path, a YAML string, or a Dict
     if not isinstance(inp, Dict):  # received a str or a Path
-        try:
+        if isinstance(inp, Path) or (isinstance(inp, str) and not "\n" in inp):
             yaml_path = Path(inp).expanduser().resolve(strict=True)
-            # if no FileNotFoundError exception happens, get file contents
             yaml_str = open_file_read(yaml_path).read()
-        except (FileNotFoundError, OSError) as e:
-            # if inp is a long YAML string, Pathlib will raise OSError: [errno.ENAMETOOLONG]
-            # when trying to expand and resolve it as a path.
-            # Catch this error, but raise any others
-            from errno import ENAMETOOLONG
-            if type(e) is OSError and e.errno != ENAMETOOLONG:
-                raise e
-            # file does not exist; assume inp is a YAML string
-            yaml_str = inp
+        else:
             yaml_path = None
+            yaml_str = inp
         yaml_data = yaml.safe_load(yaml_str)
     else:
         # received a Dict, use as-is
diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py
index 9cc0fbed..0cb7a3ea 100644
--- a/src/wireviz/wv_bom.py
+++ b/src/wireviz/wv_bom.py
@@ -5,7 +5,7 @@
 from enum import Enum
 from typing import List, Optional, Union
 
-from wireviz.wv_helper import html_line_breaks
+from wireviz.wv_utils import html_line_breaks
 
 BOM_HASH_FIELDS = "description unit partnumbers"
 BomHash = namedtuple("BomHash", BOM_HASH_FIELDS)
diff --git a/src/wireviz/wv_cli.py b/src/wireviz/wv_cli.py
index 07aac12a..eb0f33c7 100644
--- a/src/wireviz/wv_cli.py
+++ b/src/wireviz/wv_cli.py
@@ -11,7 +11,7 @@
 
 import wireviz.wireviz as wv
 from wireviz import APP_NAME, __version__
-from wireviz.wv_helper import open_file_read
+from wireviz.wv_utils import open_file_read
 
 format_codes = {
     "c": "csv",
@@ -23,10 +23,11 @@
     "t": "tsv",
 }
 
+
 epilog = (
     "The -f or --format option accepts a string containing one or more of the "
     "following characters to specify which file types to output:\n"
-    f", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()])
+    + f", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()])
 )
 
 
diff --git a/src/wireviz/DataClasses.py b/src/wireviz/wv_dataclasses.py
similarity index 99%
rename from src/wireviz/DataClasses.py
rename to src/wireviz/wv_dataclasses.py
index cce7148a..6a79e263 100644
--- a/src/wireviz/DataClasses.py
+++ b/src/wireviz/wv_dataclasses.py
@@ -14,7 +14,7 @@
     SingleColor,
     get_color_by_colorcode_index,
 )
-from wireviz.wv_helper import aspect_ratio, awg_equiv, mm2_equiv, remove_links
+from wireviz.wv_utils import aspect_ratio, awg_equiv, mm2_equiv, remove_links
 
 # Each type alias have their legal values described in comments
 # - validation might be implemented in the future
diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_graphviz.py
similarity index 99%
rename from src/wireviz/wv_gv_html.py
rename to src/wireviz/wv_graphviz.py
index 160e412e..93ff237b 100644
--- a/src/wireviz/wv_gv_html.py
+++ b/src/wireviz/wv_graphviz.py
@@ -5,7 +5,8 @@
 from typing import Any, List, Union
 
 from wireviz import APP_NAME, APP_URL, __version__
-from wireviz.DataClasses import (
+from wireviz.wv_bom import partnumbers_to_list
+from wireviz.wv_dataclasses import (
     ArrowDirection,
     ArrowWeight,
     Cable,
@@ -18,9 +19,8 @@
     ShieldClass,
     WireClass,
 )
-from wireviz.wv_bom import partnumbers_to_list
-from wireviz.wv_helper import html_line_breaks, remove_links
-from wireviz.wv_table_util import *  # TODO: explicitly import each needed tag later
+from wireviz.wv_html import Img, Table, Td, Tr
+from wireviz.wv_utils import html_line_breaks, remove_links
 
 
 def gv_node_component(component: Component) -> Table:
diff --git a/src/wireviz/Harness.py b/src/wireviz/wv_harness.py
similarity index 98%
rename from src/wireviz/Harness.py
rename to src/wireviz/wv_harness.py
index 1d722e79..7c4143e6 100644
--- a/src/wireviz/Harness.py
+++ b/src/wireviz/wv_harness.py
@@ -8,7 +8,7 @@
 from graphviz import Graph
 
 import wireviz.wv_colors
-from wireviz.DataClasses import (
+from wireviz.wv_dataclasses import (
     AUTOGENERATED_PREFIX,
     AdditionalComponent,
     Arrow,
@@ -23,8 +23,7 @@
     Side,
     Tweak,
 )
-from wireviz.svgembed import embed_svg_images_file
-from wireviz.wv_gv_html import (
+from wireviz.wv_graphviz import (
     apply_dot_tweaks,
     calculate_node_bgcolor,
     gv_connector_loops,
@@ -34,8 +33,8 @@
     parse_arrow_str,
     set_dot_basics,
 )
-from wireviz.wv_helper import open_file_write, tuplelist2tsv
-from wireviz.wv_html import generate_html_output
+from wireviz.wv_output import embed_svg_images_file, generate_html_output
+from wireviz.wv_utils import open_file_write, tuplelist2tsv
 
 
 @dataclass
diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py
index 16a5d585..1c4b750e 100644
--- a/src/wireviz/wv_html.py
+++ b/src/wireviz/wv_html.py
@@ -1,120 +1,125 @@
 # -*- coding: utf-8 -*-
 
-import re
-from pathlib import Path
-from typing import Dict, List, Union
-
-from wireviz import APP_NAME, APP_URL, __version__, wv_colors
-from wireviz.DataClasses import Metadata, Options
-from wireviz.wv_helper import (
-    flatten2d,
-    html_line_breaks,
-    open_file_read,
-    open_file_write,
-    smart_file_resolve,
-)
-
-
-def generate_html_output(
-    filename: Union[str, Path],
-    bom_list: List[List[str]],
-    metadata: Metadata,
-    options: Options,
-):
-
-    # load HTML template
-    templatename = metadata.get("template", {}).get("name")
-    if templatename:
-        # if relative path to template was provided,
-        # check directory of YAML file first, fall back to built-in template directory
-        templatefile = smart_file_resolve(
-            f"{templatename}.html",
-            [Path(filename).parent, Path(__file__).parent / "templates"],
-        )
-    else:
-        # fall back to built-in simple template if no template was provided
-        templatefile = Path(__file__).parent / "templates/simple.html"
-
-    html = open_file_read(templatefile).read()
-
-    # embed SVG diagram
-    with open_file_read(f"{filename}.tmp.svg") as file:
-        svgdata = re.sub(
-            "^<[?]xml [^?>]*[?]>[^<]*]*>",
-            "",
-            file.read(),
-            1,
-        )
-
-    # generate BOM table
-    bom = flatten2d(bom_list)
-
-    # generate BOM header (may be at the top or bottom of the table)
-    bom_header_html = "  
{item}
{item}
\n' + bom_header_html + "".join(bom_contents) + "
\n" - ) - bom_html_reversed = ( - '\n' - + "".join(list(reversed(bom_contents))) - + bom_header_html - + "
\n" - ) - - # prepare simple replacements - replacements = { - "": f"{APP_NAME} {__version__} - {APP_URL}", - "": options.fontname, - "": options.bgcolor.html, - "": svgdata, - "": bom_html, - "": bom_html_reversed, - "": "1", # TODO: handle multi-page documents - "": "1", # TODO: handle multi-page documents - } - - # prepare metadata replacements - if metadata: - for item, contents in metadata.items(): - if isinstance(contents, (str, int, float)): - replacements[f""] = html_line_breaks(str(contents)) - elif isinstance(contents, Dict): # useful for authors, revisions - for index, (category, entry) in enumerate(contents.items()): - if isinstance(entry, Dict): - replacements[f""] = str(category) - for entry_key, entry_value in entry.items(): - replacements[ - f"" - ] = html_line_breaks(str(entry_value)) - - replacements['"sheetsize_default"'] = '"{}"'.format( - metadata.get("template", {}).get("sheetsize", "") - ) - # include quotes so no replacement happens within