tweak: remove support

This commit is contained in:
Laurier Loiselle 2023-01-30 16:33:28 -05:00
parent 8a21201c86
commit 8343f62f41
No known key found for this signature in database
GPG Key ID: 345920CC72089A3F
5 changed files with 2 additions and 114 deletions

View File

@ -37,8 +37,6 @@ options: # dictionary of common attributes for the whole harness
<str> : <value> # optional harness attributes (see below)
...
tweak: # optional tweaking of .gv output
...
```
## Connector attributes
@ -422,31 +420,6 @@ Alternatively items can be added to just the BOM by putting them in the section
spn: <str> # supplier part number
```
## GraphViz tweaking (experimental)
```yaml
# Optional tweaking of the .gv output.
# This feature is experimental and might change
# or be removed in future versions.
override: # dict of .gv entries to override
# Each entry is identified by its leading string
# in lines beginning with a TAB character.
# The leading string might be in "quotes" in
# the .gv output. This leading string must be
# followed by attributes in [square brackets].
# Entries with an attribute containing HTML are
# not supported.
<str>: # leading string of .gv entry
<str> : <str/null> # attribute and its new value
# Any number of attributes can be overridden
# for each entry. Attributes not already existing
# in the entry will be appended to the entry.
# Use null as new value to delete an attribute.
append: <str/list> # string or list of strings to append to the .gv output
```
## Colors
Colors are defined via uppercase, two character strings.
@ -529,7 +502,6 @@ The following attributes accept multiline strings:
- `supplier`
- `spn`
- `image.caption`
- `tweak.append`
### Method 1

View File

@ -7,7 +7,7 @@ from typing import Any, Dict, List, Tuple, Union
import yaml
from wireviz.wv_dataclasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
from wireviz.wv_dataclasses import AUTOGENERATED_PREFIX, Metadata, Options
from wireviz.wv_harness import Harness
from wireviz.wv_utils import (
expand,
@ -97,7 +97,6 @@ def parse(
**{"output_name": output_name},
),
options=Options(**yaml_data.get("options", {})),
tweak=Tweak(**yaml_data.get("tweak", {})),
shared_bom=shared_bom,
)
# others

View File

@ -411,12 +411,6 @@ class Options:
self.bgcolor_bundle = SingleColor(self.bgcolor_bundle) or self.bgcolor_cable
@dataclass
class Tweak:
override: Optional[Dict[Designator, Dict[str, Optional[str]]]] = None
append: Union[str, List[str], None] = None
@dataclass
class Image:
# Attributes of the image object <img>:

View File

@ -145,7 +145,7 @@ def bom_bubble(id) -> Table:
return None
else:
# TODO: activate BOM bubbles
return None
#return None
# size and style of BOM bubble is optimized to be a rounded square,
# big enough to hold any two-digit ID without GraphViz warnings
text = id
@ -522,75 +522,3 @@ def set_dot_basics(dot, options):
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}: "
f"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(
"Harness.create_graph() warning: "
f"{attr} not found in {keyword}!"
)
elif n_subs > 1:
print(
"Harness.create_graph() warning: "
f"{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(
"Harness.create_graph() warning: "
f"{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)

View File

@ -20,10 +20,8 @@ from wireviz.wv_dataclasses import (
Metadata,
Options,
Side,
Tweak,
)
from wireviz.wv_graphviz import (
apply_dot_tweaks,
calculate_node_bgcolor,
gv_connector_loops,
gv_edge_mate,
@ -40,7 +38,6 @@ from wireviz.wv_utils import bom2tsv
class Harness:
metadata: Metadata
options: Options
tweak: Tweak
additional_bom_items: List[Component] = field(default_factory=list)
shared_bom: Dict = field(default_factory=dict)
@ -327,8 +324,6 @@ class Harness:
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