-
-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy pathgroup_builder.py
57 lines (44 loc) · 1.51 KB
/
group_builder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from __future__ import annotations
from typing import List
from cucumber_expressions.group import Group
class GroupBuilder:
def __init__(self):
self._group_builders: List[GroupBuilder] = []
self._capturing = True
self._source: str = ""
self._end_index = None
self._children: List[GroupBuilder] = []
def add(self, group_builder: GroupBuilder):
self._group_builders.append(group_builder)
def build(self, match, group_indices, group_name_map: dict) -> Group:
group_index = next(group_indices)
group_name = group_name_map.get(group_index, None)
children = [
gb.build(match, group_indices, group_name_map)
for gb in self._group_builders
]
return Group(
name=group_name,
value=match.group(group_index),
start=match.regs[group_index][0],
end=match.regs[group_index][1],
children=children,
)
def move_children_to(self, group_builder: GroupBuilder) -> None:
for child in self._group_builders:
group_builder.add(child)
@property
def capturing(self):
return self._capturing
@capturing.setter
def capturing(self, value: bool):
self._capturing = value
@property
def children(self) -> list[GroupBuilder]:
return self._group_builders
@property
def source(self) -> str:
return self._source
@source.setter
def source(self, source: str):
self._source = source