def matches_filters(self, node):
visible = self.visible<EOL>if self.options["<STR_LIT:text>"]:<EOL><INDENT>if isregex(self.options["<STR_LIT:text>"]):<EOL><INDENT>regex = self.options["<STR_LIT:text>"]<EOL><DEDENT>elif self.exact_text is True:<EOL><INDENT>regex = re.compile(r"<STR_LIT>".format(re.escape(self.options["<STR_LIT:text>"])))<EOL><DEDENT>else:<EOL><INDENT>regex = toregex(self.options["<STR_LIT:text>"])<EOL><DEDENT>text = normalize_text(<EOL>node.all_text if visible == "<STR_LIT:all>" else node.visible_text)<EOL>if not regex.search(text):<EOL><INDENT>return False<EOL><DEDENT><DEDENT>if isinstance(self.exact_text, (bytes_, str_)):<EOL><INDENT>regex = re.compile(r"<STR_LIT>".format(re.escape(self.exact_text)))<EOL>text = normalize_text(<EOL>node.all_text if visible == "<STR_LIT:all>" else node.visible_text)<EOL>if not regex.search(text):<EOL><INDENT>return False<EOL><DEDENT><DEDENT>if visible == "<STR_LIT>":<EOL><INDENT>if not node.visible:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>elif visible == "<STR_LIT>":<EOL><INDENT>if node.visible:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>for name, node_filter in iter(self._node_filters.items()):<EOL><INDENT>if name in self.filter_options:<EOL><INDENT>if not node_filter.matches(node, self.filter_options[name]):<EOL><INDENT>return False<EOL><DEDENT><DEDENT>elif node_filter.has_default:<EOL><INDENT>if not node_filter.matches(node, node_filter.default):<EOL><INDENT>return False<EOL><DEDENT><DEDENT><DEDENT>if self.options["<STR_LIT>"] and not self.options["<STR_LIT>"](node):<EOL><INDENT>return False<EOL><DEDENT>return True<EOL>
Returns whether the given node matches all filters.

Args:
    node (Element): The node to evaluate.

Returns:
    bool: Whether the given node matches.