From 23dabdf5c5133e06fbc44763225cda1ab72e668e Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Thu, 21 Dec 2023 03:18:41 -0800 Subject: [PATCH] Border around icon + author data that extends between chunks --- glowfic.py | 47 ++++++++++++++++++++++++++++--------------- paperdoorknob.py | 10 +-------- paperdoorknob_test.py | 6 ++---- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/glowfic.py b/glowfic.py index eb34c1b..76a9a84 100644 --- a/glowfic.py +++ b/glowfic.py @@ -81,9 +81,9 @@ def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk: 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): @@ -99,7 +99,7 @@ class ContentOnlyLayout(Layout): 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): @@ -109,19 +109,34 @@ class BelowIconLayout(Layout): 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 +\\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)) diff --git a/paperdoorknob.py b/paperdoorknob.py index f2a81d2..5e5747c 100644 --- a/paperdoorknob.py +++ b/paperdoorknob.py @@ -19,6 +19,7 @@ def parse(content: bytes) -> BeautifulSoup: def process(spec: Spec) -> None: spec.texout.write(b'''\\documentclass{article} \\usepackage{graphicx} +\\usepackage{varwidth} \\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))) - first = True 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)) diff --git a/paperdoorknob_test.py b/paperdoorknob_test.py index a89e8bb..4711fcd 100644 --- a/paperdoorknob_test.py +++ b/paperdoorknob_test.py @@ -47,18 +47,16 @@ class BaseTestProcess(ABC): paperdoorknob.process(spec) assert buf.getvalue() == b'''\\documentclass{article} \\usepackage{graphicx} +\\usepackage{varwidth} \\usepackage{wrapstuff} \\usepackage[margin=20mm]{geometry} \\begin{document} This is glowfic -\\wrapstuffclear\\vspace{-.5\\ht\\strutbox}\\noindent\\hrulefill - You \\emph{sure}? -\\wrapstuffclear\\vspace{-.5\\ht\\strutbox}\\noindent\\hrulefill - Pretty sure. + \\end{document} ''' -- 2.44.1