def _compile(self, reverse, fuzzy):
index = self.info.named_lists_used[self.set_key]
items = self.info.kwargs[self.name]
case_flags = self.case_flags
if not items:
return []
encoding = self.info.flags & _ALL_ENCODINGS
fold_flags = encoding | case_flags
if fuzzy:
choices = [self._folded(fold_flags, i) for i in items]
# Sort from longest to shortest.
choices.sort(key=lambda s: (-len(s), s))
branches = []
for string in choices:
branches.append(Sequence([Character(c, case_flags=case_flags)
for c in string]))
if len(branches) > 1:
branch = Branch(branches)
else:
branch = branches[0]
branch = branch.optimise(self.info,
reverse).pack_characters(self.info)
return branch.compile(reverse, fuzzy)
else:
min_len = min(len(i) for i in items)
max_len = max(len(self._folded(fold_flags, i)) for i in items)
return [(self._opcode[case_flags, reverse], index, min_len,
max_len)]
评论列表
文章目录