diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index cf25a8c..85389a3 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -357,7 +357,7 @@ class Harness: elif mate.shape[-1] == '>': dir = 'forward' else: - dir = 'none' # should not happen? + dir = 'none' # should not happen if isinstance(mate, MatePin): color = '#000000' diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 9701771..55d543d 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -6,6 +6,7 @@ import os from pathlib import Path import sys from typing import Any, Tuple +import re import yaml @@ -14,7 +15,7 @@ if __name__ == '__main__': from wireviz import __version__ from wireviz.Harness import Harness -from wireviz.wv_helper import expand, open_file_read +from wireviz.wv_helper import expand, open_file_read, isarrow def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, str, Tuple[str]) = None) -> Any: @@ -97,8 +98,6 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st designators_and_templates[designator] = template return (template, designator) - arrows = ['<--','<->','-->','<==','<=>','==>'] - connection_sets = yaml_data['connections'] for connection_set in connection_sets: print('') @@ -186,7 +185,7 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st print(' ', designator, 'is a new cable instance of type', template) harness.add_cable(name = designator, **template_cables[template]) - elif designator in arrows: + elif isarrow(designator): print(f' {template} is an arrow') else: @@ -221,7 +220,7 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st to_pin = connection_set[index_entry][index_item+1][to_name] print(' > connect ', from_name, from_pin, via_name, via_pin, to_name, to_pin) harness.connect(from_name, from_pin, via_name, via_pin, to_name, to_pin) - elif designator in arrows: + elif isarrow(designator): print(f' - {designator} is an arrow') if index_item == 0: # list startess with an arrow raise Exception('An arrow cannot be at the start of a connection set') @@ -240,8 +239,6 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st elif '=' in designator and index_entry == 0: # mate two connectors as a whole print(f' Mate {from_name} {designator} {to_name} ({index_entry})') harness.add_mate_component(from_name, to_name, designator) - elif '=' in designator: # mate connectors as a whole - pass if "additional_bom_items" in yaml_data: diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index ffc4bd8..49ba8fe 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -106,6 +106,17 @@ def open_file_write(filename): def open_file_append(filename): return open(filename, 'a', encoding='UTF-8') +def isarrow(inp): + """ + Matches strings of one or multiple `-` or `=` (TODO: but not mixed) + optionally starting with `<` and/or ending with `>`. + + Examples: + <-, --, ->, <-> + <==, ==, ==>, <=> + """ + return bool(re.match(r"^?$", inp)) + def aspect_ratio(image_src): try: from PIL import Image