]> git.scottworley.com Git - paperdoorknob/blob - domfilter.py
Don't uselessly repeat preamble in test
[paperdoorknob] / domfilter.py
1 # paperdoorknob: Print glowfic
2 #
3 # This program is free software: you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License as published by the
5 # Free Software Foundation, version 3.
6
7
8 from typing import Any, Callable, List, Tuple
9
10 from bs4.element import Tag
11
12
13 def _changeTag(tag: Tag, new_name: str) -> Tag:
14 tag.name = new_name
15 return tag
16
17
18 DOMFilters: List[Tuple[str, Callable[[Tag], Any]]] = [
19 ("Strike", lambda x: [_changeTag(span, 's')
20 for span in x.find_all("span", style="text-decoration: line-through;")]),
21 ]
22
23
24 class DOMFilterError(Exception):
25 pass
26
27
28 def ApplyDOMFilters(filter_list: str, tag: Tag) -> None:
29 for filter_name in filter_list.split(','):
30 filters = [f for (name, f) in DOMFilters if name == filter_name]
31 if len(filters) == 0:
32 raise DOMFilterError(f"Unknown DOM filter: {filter_name}")
33 if len(filters) > 1:
34 raise DOMFilterError(
35 f"Multiple DOM filters with the same name!?: {filter_name}")
36 filters[0](tag)