6def convertRegionsExpressionToArray(expression, min_value=0, max_value=1279):
7 if not expression
or str(expression).
strip() ==
"":
8 raise ValueError("No region expression provided.")
9
10
11 if isinstance(expression, (list, tuple)):
12 result = [int(x) for x in expression if min_value <= int(x) <= max_value]
13 if not result:
14 raise ValueError("No valid regions after filtering by range.")
15 return result
16
17
18 if isinstance(expression, str):
19 expression_stripped = expression.strip()
20 if expression_stripped.startswith('[') and expression_stripped.endswith(']'):
21 try:
22
23 list_content = expression_stripped[1:-1].
strip()
24 if list_content:
25 values = [int(x.strip()) for x in list_content.split(',')]
26 if all(min_value <= x <= max_value for x in values):
27 return values
28 else:
29 out_of_range = [x for x in values if x < min_value or x > max_value]
30 raise ValueError(f"Values out of range [{min_value}-{max_value}]: {out_of_range}")
31 else:
32 raise ValueError("Empty list provided.")
33 except ValueError:
34 raise ValueError(f"Invalid list format: {expression}")
35
36
37 if str(expression).isdigit():
38 num = int(expression)
39 if min_value <= num <= max_value:
40 return [num]
41 else:
42 raise ValueError(f"Invalid choise: {expression}. Number out of range [{min_value}-{max_value}].")
43
44
45 numbers =
set(range(min_value, max_value + 1))
46
49
50 print(f
"Initial expression: {str(expression)}")
51 if isinstance(expression, tuple) or isinstance(expression, list):
52 expression =
",".join(
map(str, expression))
53
54
55 if expression.strip() == "*":
56 return list(range(min_value, max_value + 1))
57
58 parts = expression.split(",")
59 print(f
"Parts after split: {parts}")
60 for part in parts:
61 part = part.strip()
62
63
64
65 if part.startswith("!"):
66 exclude_set.update(parse_range_or_wildcard(part[1:], min_value, max_value))
67 else:
68 include_set.update(parse_range_or_wildcard(part, min_value, max_value))
69
70
71 result = include_set if include_set else numbers
72 result -= exclude_set
73
74
75 result = {num for num in result if min_value <= num <= max_value}
76
77 if not result:
78 raise ValueError(f"No valid regions after applying expression: {expression}")
79
80 return list(sorted(result))
81
void print(char *figname, TCanvas *c1)