From 01ca56fdcedb37127250a771a01152e0817701d5 Mon Sep 17 00:00:00 2001 From: Florian Festi Date: Sat, 15 Jun 2019 20:04:09 +0200 Subject: [PATCH] Support all different section syntaxes (sx, sy, ...) side by side --- boxes/__init__.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/boxes/__init__.py b/boxes/__init__.py index 0b3d691..0f9afb2 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -147,19 +147,28 @@ def argparseSections(s): :param s: string to parse """ - m = re.match(r"(\d+(\.\d+)?)/(\d+)", s) - if m: - n = int(m.group(3)) - return [float(m.group(1)) / n] * n - m = re.match(r"(\d+(\.\d+)?)\*(\d+)", s) - if m: - n = int(m.group(3)) - return [float(m.group(1))] * n + + result = [] + + s = re.split(r"\s|:", s) + try: - return [float(part) for part in s.split(":")] + for part in s: + m = re.match(r"^(\d+(\.\d+)?)/(\d+)$", part) + if m: + n = int(m.group(3)) + result.extend([float(m.group(1)) / n] * n) + continue + m = re.match(r"^(\d+(\.\d+)?)\*(\d+)$", part) + if m: + n = int(m.group(3)) + result.extend([float(m.group(1))] * n) + continue + result.append(float(part)) except ValueError: raise argparse.ArgumentTypeError("Don't understand sections string") + return result class ArgparseEdgeType: """argparse type to select from a set of edge types"""