]> git.scottworley.com Git - paperdoorknob/blame_incremental - domfilter.py
next_thread should be an absolute URL
[paperdoorknob] / domfilter.py
... / ...
CommitLineData
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
8from typing import Any, Callable, List, Tuple
9
10from bs4.element import Tag
11
12
13def _changeTag(tag: Tag, new_name: str) -> Tag:
14 tag.name = new_name
15 return tag
16
17
18DOMFilters: 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
24class DOMFilterError(Exception):
25 pass
26
27
28def 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)