r"""see :meth:`NodeFilter.name`
| 810 | |
| 811 | |
| 812 | class NodeFilterName(NodeFilter): |
| 813 | r"""see :meth:`NodeFilter.name`""" |
| 814 | |
| 815 | _re = None |
| 816 | |
| 817 | def __init__(self, node_iter, pattern, ignorecase): |
| 818 | super().__init__(node_iter) |
| 819 | self.pattern = pattern |
| 820 | self._re = self.make_re(pattern, ignorecase) |
| 821 | |
| 822 | @classmethod |
| 823 | def make_re(cls, pattern, ignorecase=True): |
| 824 | assert isinstance(pattern, str), "bad pattern: {!r}".format(pattern) |
| 825 | assert isinstance(ignorecase, bool) |
| 826 | flags = 0 |
| 827 | if ignorecase: |
| 828 | flags |= re.IGNORECASE |
| 829 | return re.compile(fnmatch.translate(pattern), flags=flags) |
| 830 | |
| 831 | def __iter__(self): |
| 832 | for i in self._iter: |
| 833 | if self.pattern == i.name or self._re.match(i.name): |
| 834 | yield i |