From 24e866347ec2355c35e0e39e317946b9b833d2ed Mon Sep 17 00:00:00 2001
From: Scott Worley <scottworley@scottworley.com>
Date: Fri, 29 Dec 2023 11:46:36 -0800
Subject: [PATCH] Support strikethrough

---
 domfilter.py      |  7 +++++++
 domfilter_test.py | 12 ++++++++++++
 paperdoorknob.py  |  1 +
 3 files changed, 20 insertions(+)

diff --git a/domfilter.py b/domfilter.py
index 22f96a1..e1095f0 100644
--- a/domfilter.py
+++ b/domfilter.py
@@ -10,9 +10,16 @@ from typing import Any, Callable, List, Tuple
 from bs4.element import Tag
 
 
+def _changeTag(tag: Tag, new_name: str) -> Tag:
+    tag.name = new_name
+    return tag
+
+
 DOMFilters: List[Tuple[str, Callable[[Tag], Any]]] = [
     ("NoEdit", lambda x: [eb.decompose() for eb in x.find_all("div", class_="post-edit-box")]),
     ("NoFooter", lambda x: [foot.decompose() for foot in x.find_all("div", class_="post-footer")]),
+    ("Strike", lambda x: [_changeTag(span, 's')
+                          for span in x.find_all("span", style="text-decoration: line-through;")]),
 ]
 
 
diff --git a/domfilter_test.py b/domfilter_test.py
index c3c8ee2..8daca20 100644
--- a/domfilter_test.py
+++ b/domfilter_test.py
@@ -21,6 +21,11 @@ class TestDOMFilters(unittest.TestCase):
               This is glowfic
               <div class="post-footer">This is the footer</div>
             </div>''', 'html.parser')
+        self._strike = BeautifulSoup(b'''
+            <div class="post-content">
+              <p><span style="text-decoration: line-through;">Abandon hope and endure.</span></p>
+              <p>No. Win.</p>
+            </div>''', 'html.parser')
 
     def testStripFooters(self) -> None:
         ApplyDOMFilters("NoFooter", self._html)
@@ -37,6 +42,13 @@ class TestDOMFilters(unittest.TestCase):
         self.assertEqual(list(self._html.stripped_strings),
                          ["This is glowfic"])
 
+    def testStrike(self) -> None:
+        ApplyDOMFilters('Strike', self._strike)
+        s = self._strike.find_all('s')
+        self.assertEqual(len(s), 1)
+        self.assertEqual(list(s[0].stripped_strings),
+                         ['Abandon hope and endure.'])
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/paperdoorknob.py b/paperdoorknob.py
index b364f4d..0da6d97 100644
--- a/paperdoorknob.py
+++ b/paperdoorknob.py
@@ -21,6 +21,7 @@ def process(spec: Spec) -> None:
 \\usepackage{booktabs}
 \\usepackage{graphicx}
 \\usepackage{longtable}
+\\usepackage{soul}
 \\usepackage{varwidth}
 \\usepackage{wrapstuff}
 ''')
-- 
2.47.2