|
17 | 17 | MatePin,
|
18 | 18 | Metadata,
|
19 | 19 | Options,
|
20 |
| - Tweak, |
21 | 20 | Side,
|
| 21 | + Tweak, |
22 | 22 | )
|
23 | 23 | from wireviz.svgembed import embed_svg_images_file
|
24 | 24 | from wireviz.wv_bom import (
|
|
29 | 29 | component_table_entry,
|
30 | 30 | generate_bom,
|
31 | 31 | get_additional_component_table,
|
| 32 | + make_list, |
32 | 33 | pn_info_string,
|
33 | 34 | )
|
34 | 35 | from wireviz.wv_colors import get_color_hex, translate_color
|
@@ -78,12 +79,42 @@ def __post_init__(self):
|
78 | 79 | self._bom = [] # Internal Cache for generated bom
|
79 | 80 | self.additional_bom_items = []
|
80 | 81 |
|
| 82 | + def extend_tweak(self, node: Union[Connector, Cable]) -> None: |
| 83 | + """Extend self.tweak with node.tweak after replacing placeholders.""" |
| 84 | + if node.tweak: |
| 85 | + ph = node.tweak.placeholder |
| 86 | + # An empty string is a legal value to avoid the global placeholder |
| 87 | + if ph is None: # This must therefore be a test for None! |
| 88 | + ph = self.tweak.placeholder # Use the global placeholder |
| 89 | + # Create function rph() to replace any placeholder with node name |
| 90 | + rph = (lambda s: s.replace(ph, node.name)) if ph else lambda s: s |
| 91 | + n_override = node.tweak.override or {} |
| 92 | + s_override = self.tweak.override or {} |
| 93 | + for id, n_dict in n_override.items(): |
| 94 | + id = rph(id) |
| 95 | + s_dict = s_override.get(id, {}) |
| 96 | + for k, v in n_dict.items(): |
| 97 | + k, v = rph(k), rph(v) |
| 98 | + if k in s_dict and v != s_dict[k]: |
| 99 | + raise ValueError( |
| 100 | + f"{node.name}.tweak.override.{id}.{k} conflicts with another" |
| 101 | + ) |
| 102 | + s_dict[k] = v |
| 103 | + s_override[id] = s_dict or None # Will never be None? |
| 104 | + self.tweak.override = s_override or None |
| 105 | + self.tweak.append = ( |
| 106 | + make_list(self.tweak.append) |
| 107 | + + [rph(v) for v in make_list(node.tweak.append)] |
| 108 | + ) or None |
| 109 | + |
81 | 110 | def add_connector(self, name: str, *args, **kwargs) -> None:
|
82 | 111 | check_old(f"Connector '{name}'", OLD_CONNECTOR_ATTR, kwargs)
|
83 | 112 | self.connectors[name] = Connector(name, *args, **kwargs)
|
| 113 | + self.extend_tweak(self.connectors[name]) |
84 | 114 |
|
85 | 115 | def add_cable(self, name: str, *args, **kwargs) -> None:
|
86 | 116 | self.cables[name] = Cable(name, *args, **kwargs)
|
| 117 | + self.extend_tweak(self.cables[name]) |
87 | 118 |
|
88 | 119 | def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_type) -> None:
|
89 | 120 | self.mates.append(MatePin(from_name, from_pin, to_name, to_pin, arrow_type))
|
|
0 commit comments