mirror of https://github.com/morpheus65535/bazarr
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
Groups markers (...), [...] and {...}
|
||
|
"""
|
||
|
from rebulk import Rebulk
|
||
|
|
||
|
|
||
|
def groups(config):
|
||
|
"""
|
||
|
Builder for rebulk object.
|
||
|
|
||
|
:param config: rule configuration
|
||
|
:type config: dict
|
||
|
:return: Created Rebulk object
|
||
|
:rtype: Rebulk
|
||
|
"""
|
||
|
rebulk = Rebulk()
|
||
|
rebulk.defaults(name="group", marker=True)
|
||
|
|
||
|
starting = config['starting']
|
||
|
ending = config['ending']
|
||
|
|
||
|
def mark_groups(input_string):
|
||
|
"""
|
||
|
Functional pattern to mark groups (...), [...] and {...}.
|
||
|
|
||
|
:param input_string:
|
||
|
:return:
|
||
|
"""
|
||
|
openings = ([], [], [])
|
||
|
i = 0
|
||
|
|
||
|
ret = []
|
||
|
for char in input_string:
|
||
|
start_type = starting.find(char)
|
||
|
if start_type > -1:
|
||
|
openings[start_type].append(i)
|
||
|
|
||
|
i += 1
|
||
|
|
||
|
end_type = ending.find(char)
|
||
|
if end_type > -1:
|
||
|
try:
|
||
|
start_index = openings[end_type].pop()
|
||
|
ret.append((start_index, i))
|
||
|
except IndexError:
|
||
|
pass
|
||
|
return ret
|
||
|
|
||
|
rebulk.functional(mark_groups)
|
||
|
return rebulk
|