]> git.scottworley.com Git - paperdoorknob/commitdiff
Border around icon + author data that extends between chunks
authorScott Worley <scottworley@scottworley.com>
Thu, 21 Dec 2023 11:18:41 +0000 (03:18 -0800)
committerScott Worley <scottworley@scottworley.com>
Thu, 21 Dec 2023 11:18:41 +0000 (03:18 -0800)
glowfic.py
paperdoorknob.py
paperdoorknob_test.py

index eb34c1b39df37a5b712d022d5d454196db1aabd5..76a9a840738259f4f925bf68ece537d794872711 100644 (file)
@@ -81,9 +81,9 @@ def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk:
                  content)
 
 
                  content)
 
 
-def renderIcon(icon_path: str | None, image_size: float) -> bytes:
-    return b'\\includegraphics[width=%fmm,height=%fmm,keepaspectratio]{%s}' % (
-        image_size, image_size, icon_path.encode('UTF-8')) if icon_path else b''
+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
 
 
 class Layout(ABC):
 
 
 class Layout(ABC):
@@ -99,7 +99,7 @@ class ContentOnlyLayout(Layout):
         self._texifier = texifier
 
     def renderChunk(self, chunk: Chunk) -> bytes:
         self._texifier = texifier
 
     def renderChunk(self, chunk: Chunk) -> bytes:
-        return self._texifier.texify(chunk.content)
+        return self._texifier.texify(chunk.content) + b'\n'
 
 
 class BelowIconLayout(Layout):
 
 
 class BelowIconLayout(Layout):
@@ -109,19 +109,34 @@ class BelowIconLayout(Layout):
         self._image_size = image_size
 
     def renderChunk(self, chunk: Chunk) -> bytes:
         self._image_size = image_size
 
     def renderChunk(self, chunk: Chunk) -> bytes:
-        return b'''\\begin{wrapstuff}[l,abovesep=-1\\ht\\strutbox]
-\\oalign{
-%s\\cr
-%s\\cr
-%s\\cr
-%s\\cr
-}\\end{wrapstuff}
-
+        meta = [
+            renderIcon(chunk.icon, self._image_size),
+            chunk.character,
+            chunk.screen_name,
+            chunk.author,
+        ]
+
+        return b'''\\wrapstuffclear
+\\begin{wrapstuff}[l]
+\\fbox{
+\\begin{varwidth}{0.5\\textwidth}
+  \\smash{\\parbox[t][0pt]{0pt}{
+    \\setlength{\\fboxrule}{0.2pt}
+    \\setlength{\\fboxsep}{0pt}
+    \\vspace{-3.4pt}
+    \\fbox{\\hspace{107mm}}
+  }\\\\*}
+  \\vspace{-1em}
+\\begin{center}
 %s
 %s
+\\end{center}
+\\end{varwidth}
+}
+\\end{wrapstuff}
+
+\\strut
 
 
+%s
 ''' % (
 ''' % (
-            renderIcon(chunk.icon, self._image_size),
-            chunk.character.encode('UTF-8') if chunk.character else b'',
-            chunk.screen_name.encode('UTF-8') if chunk.screen_name else b'',
-            chunk.author.encode('UTF-8') if chunk.author else b'',
+            b'\\\\*'.join(x.encode('UTF-8') for x in meta if x is not None),
             self._texifier.texify(chunk.content))
             self._texifier.texify(chunk.content))
index f2a81d2247b898f7450f2e9d037e976db3821762..5e5747c90e5c6483754e23d2a2d51014f656a312 100644 (file)
@@ -19,6 +19,7 @@ def parse(content: bytes) -> BeautifulSoup:
 def process(spec: Spec) -> None:
     spec.texout.write(b'''\\documentclass{article}
 \\usepackage{graphicx}
 def process(spec: Spec) -> None:
     spec.texout.write(b'''\\documentclass{article}
 \\usepackage{graphicx}
+\\usepackage{varwidth}
 \\usepackage{wrapstuff}
 ''')
     if spec.geometry is not None:
 \\usepackage{wrapstuff}
 ''')
     if spec.geometry is not None:
@@ -27,16 +28,7 @@ def process(spec: Spec) -> None:
                           b']{geometry}\n')
     spec.texout.write(b'\\begin{document}\n')
     html = parse(spec.htmlfilter(spec.fetcher.fetch(spec.url)))
                           b']{geometry}\n')
     spec.texout.write(b'\\begin{document}\n')
     html = parse(spec.htmlfilter(spec.fetcher.fetch(spec.url)))
-    first = True
     for r in chunkDOMs(html):
     for r in chunkDOMs(html):
-        if first:
-            first = False
-        else:
-            # h/t https://tex.stackexchange.com/questions/309856
-            spec.texout.write(b'''
-\\wrapstuffclear\\vspace{-.5\\ht\\strutbox}\\noindent\\hrulefill
-
-''')
         spec.domfilter(r)
         chunk = makeChunk(r, spec.images)
         spec.texout.write(spec.layout.renderChunk(chunk))
         spec.domfilter(r)
         chunk = makeChunk(r, spec.images)
         spec.texout.write(spec.layout.renderChunk(chunk))
index a89e8bb37c98d6f1df4c0bc22097c9069dbc3fd6..4711fcdfb01f021d8f833a79e9d1496a1b25ff3c 100644 (file)
@@ -47,18 +47,16 @@ class BaseTestProcess(ABC):
         paperdoorknob.process(spec)
         assert buf.getvalue() == b'''\\documentclass{article}
 \\usepackage{graphicx}
         paperdoorknob.process(spec)
         assert buf.getvalue() == b'''\\documentclass{article}
 \\usepackage{graphicx}
+\\usepackage{varwidth}
 \\usepackage{wrapstuff}
 \\usepackage[margin=20mm]{geometry}
 \\begin{document}
 This is glowfic
 
 \\usepackage{wrapstuff}
 \\usepackage[margin=20mm]{geometry}
 \\begin{document}
 This is glowfic
 
-\\wrapstuffclear\\vspace{-.5\\ht\\strutbox}\\noindent\\hrulefill
-
 You \\emph{sure}?
 
 You \\emph{sure}?
 
-\\wrapstuffclear\\vspace{-.5\\ht\\strutbox}\\noindent\\hrulefill
-
 Pretty sure.
 Pretty sure.
+
 \\end{document}
 '''
 
 \\end{document}
 '''