| Current Path : /lib/python3/dist-packages/reportbug/ |
| Current File : //lib/python3/dist-packages/reportbug/hiermatch.py |
# hiermatch - Doing match on a list of string or a hierarchy.
# Written by Chris Lawrence <lawrencc@debian.org>
# Copyright (C) 1999-2008 Chris Lawrence
# Copyright (C) 2008-2021 Sandro Tosi <morph@debian.org>
import re
from . import exceptions
def egrep_list(strlist, pattern_str, subindex=None):
"""Use the pattern_str to find any match in a list of strings."""
"""Return: a list of index for the matches into the origin list."""
if strlist is None:
return None
try:
pat = re.compile(pattern_str, re.I | re.M)
except:
raise exceptions.InvalidRegex
resultlist = []
if subindex is None:
subindex = list(range(len(strlist)))
for i in subindex:
if pat.search(strlist[i]):
resultlist.append(i)
return resultlist
def egrep_hierarchy(hier, pattern_str, subhier=None, nth=1):
"""Grep the nth item of a hierarchy [(x, [a, b]),...]."""
"""Return a subhier like [[n, m],[],...], n, m string index."""
resulthier = []
for i in range(len(hier)):
if subhier:
if subhier[i]: # Only if have something to match.
resultlist = egrep_list(hier[i][nth], pattern_str, subhier[i])
else:
resultlist = []
else:
resultlist = egrep_list(hier[i][nth], pattern_str)
resulthier.append(resultlist)
return resulthier
def matched_hierarchy(hier, pattern_str):
"""Actually create a new hierarchy from a pattern matching."""
mhier = []
result = egrep_hierarchy(hier, pattern_str)
for i in range(len(result)):
if result[i]:
item = [hier[i][1][y] for y in result[i]]
mhier.append((hier[i][0], item))
return mhier
# vim:ts=8:sw=4:expandtab: