]> git.scottworley.com Git - paperdoorknob/blobdiff - glowfic.py
Strip links from meta fields
[paperdoorknob] / glowfic.py
index a700995bf93f6950d2b63a403ee57c4f757c0d9a..8561cd756236bc1c5bf37c2b913ac91fad0b6a77 100644 (file)
@@ -74,33 +74,48 @@ def chunkDOMs(html: BeautifulSoup) -> Iterable[Tag]:
 def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk:
 
     def getIcon() -> str | None:
 def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk:
 
     def getIcon() -> str | None:
-        icon_div = chunk_dom.find_next('div', class_='post-icon')
+        icon_div = chunk_dom.findChild('div', class_='post-icon')
         if icon_div is None:
             return None
         if icon_div is None:
             return None
-        icon_img = icon_div.find_next('img')
+        assert isinstance(icon_div, Tag)
+        icon_img = icon_div.findChild('img')
         if icon_img is None:
             return None
         assert isinstance(icon_img, Tag)
         return image_store.get_image(icon_img.attrs['src'])
 
     def getByClass(css_class: str) -> Tag | None:
         if icon_img is None:
             return None
         assert isinstance(icon_img, Tag)
         return image_store.get_image(icon_img.attrs['src'])
 
     def getByClass(css_class: str) -> Tag | None:
-        tag = chunk_dom.find_next('div', class_=css_class)
+        tag = chunk_dom.findChild('div', class_=css_class)
         assert tag is None or isinstance(tag, Tag)
         return tag
 
         assert tag is None or isinstance(tag, Tag)
         return tag
 
-    content = chunk_dom.find_next('div', class_='post-content')
+    def stripHREF(tag: Tag) -> None:
+        for c in tag.findChildren("a"):
+            if "href" in c.attrs:
+                del c.attrs["href"]
+
+    def getMeta(css_class: str) -> Tag | None:
+        tag = getByClass(css_class)
+        if tag is None:
+            return None
+        stripHREF(tag)
+        return tag
+
+    content = chunk_dom.findChild('div', class_='post-content')
     assert isinstance(content, Tag)
 
     return Chunk(getIcon(),
     assert isinstance(content, Tag)
 
     return Chunk(getIcon(),
-                 getByClass('post-character'),
-                 getByClass('post-screenname'),
-                 getByClass('post-author'),
+                 getMeta('post-character'),
+                 getMeta('post-screenname'),
+                 getMeta('post-author'),
                  content)
 
 
                  content)
 
 
-def renderIcon(icon_path: str | None, image_size: float) -> str | None:
-    params = f'width={image_size}mm,height={image_size}mm,keepaspectratio'
-    return f'\\includegraphics[{params}]{{{icon_path}}}' if icon_path else None
+def renderIcon(icon_path: str | None, image_size: float) -> bytes | None:
+    if icon_path is None:
+        return None
+    return b'\\includegraphics[width=%fmm,height=%fmm,keepaspectratio]{%s}' % (
+        image_size, image_size, icon_path.encode('UTF-8'))
 
 
 class Layout(ABC):
 
 
 class Layout(ABC):
@@ -127,7 +142,7 @@ class BelowIconLayout(Layout):
 
     def renderChunk(self, chunk: Chunk) -> bytes:
         icon = renderIcon(chunk.icon, self._image_size)
 
     def renderChunk(self, chunk: Chunk) -> bytes:
         icon = renderIcon(chunk.icon, self._image_size)
-        meta = [icon.encode('UTF-8')] if icon else []
+        meta = [icon] if icon else []
         meta += [self._texifier.texify(x)
                  for x in [chunk.character, chunk.screen_name, chunk.author]
                  if x is not None]
         meta += [self._texifier.texify(x)
                  for x in [chunk.character, chunk.screen_name, chunk.author]
                  if x is not None]
@@ -188,6 +203,6 @@ class BesideIconLayout(Layout):
 \\strut
 
 ''' % (
 \\strut
 
 ''' % (
-            icon.encode('UTF-8') if icon else b'',
+            icon if icon else b'',
             b'\\\\*'.join(self._texifier.texify(x) for x in meta if x is not None),
             self._texifier.texify(chunk.content))
             b'\\\\*'.join(self._texifier.texify(x) for x in meta if x is not None),
             self._texifier.texify(chunk.content))