mirror of
https://github.com/kovidgoyal/kitty.git
synced 2024-11-14 01:20:31 +03:00
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
#!/usr/bin/env python
|
|
# License: GPLv3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
|
|
|
|
from typing import Iterable, List, Union
|
|
|
|
from . import subseq_matcher
|
|
|
|
|
|
def match(
|
|
input_data: Union[str, bytes, Iterable[Union[str, bytes]]],
|
|
query: str,
|
|
threads: int = 0,
|
|
positions: bool = False,
|
|
level1: str = '/',
|
|
level2: str = '-_0123456789',
|
|
level3: str = '.',
|
|
limit: int = 0,
|
|
mark_before: str = '',
|
|
mark_after: str = '',
|
|
delimiter: str = '\n'
|
|
) -> List[str]:
|
|
if isinstance(input_data, str):
|
|
idata = [x.encode('utf-8') for x in input_data.split(delimiter)]
|
|
elif isinstance(input_data, bytes):
|
|
idata = input_data.split(delimiter.encode('utf-8'))
|
|
else:
|
|
idata = [x.encode('utf-8') if isinstance(x, str) else x for x in input_data]
|
|
query = query.lower()
|
|
level1 = level1.lower()
|
|
level2 = level2.lower()
|
|
level3 = level3.lower()
|
|
data = subseq_matcher.match(
|
|
idata, (level1, level2, level3), query,
|
|
positions, limit, threads,
|
|
mark_before, mark_after, delimiter)
|
|
if data is None:
|
|
return []
|
|
return list(filter(None, data.split(delimiter or '\n')))
|