]> git.scottworley.com Git - paperdoorknob/commitdiff
`beside` layout
authorScott Worley <scottworley@scottworley.com>
Sun, 24 Dec 2023 06:02:35 +0000 (22:02 -0800)
committerScott Worley <scottworley@scottworley.com>
Sun, 24 Dec 2023 06:02:35 +0000 (22:02 -0800)
args.py
glowfic.py

diff --git a/args.py b/args.py
index e952c45040c77f503e7ec8cd2990540b87f3dbd0..8f77a887547b403d311ee0939a5a423b168aa88a 100644 (file)
--- a/args.py
+++ b/args.py
@@ -15,7 +15,7 @@ from xdg_base_dirs import xdg_cache_home
 
 from domfilter import ApplyDOMFilters, DOMFilters
 from fetch import CachingFetcher
 
 from domfilter import ApplyDOMFilters, DOMFilters
 from fetch import CachingFetcher
-from glowfic import BelowIconLayout
+from glowfic import BesideIconLayout, BelowIconLayout, Layout
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
 from images import DiskImageStore
 from spec import Spec
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
 from images import DiskImageStore
 from spec import Spec
@@ -48,6 +48,11 @@ See https://faculty.bard.edu/bloch/geometry.pdf for details
         '--image_size',
         help='How large the icon images are, in mm',
         default=20)
         '--image_size',
         help='How large the icon images are, in mm',
         default=20)
+    parser.add_argument(
+        '--layout',
+        default='below',
+        help='Whether to put character and author information `beside` or `below` the icon ' +
+             '(default: below)')
     parser.add_argument(
         '--out',
         help='The filename stem at which to write output ' +
     parser.add_argument(
         '--out',
         help='The filename stem at which to write output ' +
@@ -68,6 +73,13 @@ See https://faculty.bard.edu/bloch/geometry.pdf for details
 def spec_from_commandline_args() -> Iterator[Spec]:
     args = _command_line_parser().parse_args()
     texifier = PandocTexifier(args.pandoc or 'pandoc')
 def spec_from_commandline_args() -> Iterator[Spec]:
     args = _command_line_parser().parse_args()
     texifier = PandocTexifier(args.pandoc or 'pandoc')
+    layout: Layout
+    if args.layout == 'below':
+        layout = BelowIconLayout(texifier, args.image_size)
+    elif args.layout == 'beside':
+        layout = BesideIconLayout(texifier, args.image_size)
+    else:
+        raise ValueError(f'Unknown layout: {args.layout}')
     with CachingFetcher(args.cache_path, args.timeout) as fetcher:
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
     with CachingFetcher(args.cache_path, args.timeout) as fetcher:
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
@@ -76,6 +88,6 @@ def spec_from_commandline_args() -> Iterator[Spec]:
                 DiskImageStore(args.out + '_images', fetcher),
                 lambda x: ApplyHTMLFilters(args.htmlfilters, x),
                 lambda x: ApplyDOMFilters(args.domfilters, x),
                 DiskImageStore(args.out + '_images', fetcher),
                 lambda x: ApplyHTMLFilters(args.htmlfilters, x),
                 lambda x: ApplyDOMFilters(args.domfilters, x),
-                BelowIconLayout(texifier, args.image_size),
+                layout,
                 args.geometry,
                 texout)
                 args.geometry,
                 texout)
index eadc40ab9cb8ccdba5c94db453e809ffa24964a6..d1966cae628267177b08789aaf8714c81c01f6d3 100644 (file)
@@ -140,3 +140,38 @@ class BelowIconLayout(Layout):
 ''' % (
             b'\\\\*'.join(x.encode('UTF-8') for x in meta if x is not None),
             self._texifier.texify(chunk.content))
 ''' % (
             b'\\\\*'.join(x.encode('UTF-8') for x in meta if x is not None),
             self._texifier.texify(chunk.content))
+
+
+class BesideIconLayout(Layout):
+
+    def __init__(self, texifier: Texifier, image_size: float) -> None:
+        self._texifier = texifier
+        self._image_size = image_size
+
+    def renderChunk(self, chunk: Chunk) -> bytes:
+        icon = renderIcon(chunk.icon, self._image_size)
+        meta = [
+            chunk.character,
+            chunk.screen_name,
+            chunk.author,
+        ]
+
+        # Why is \textwidth not the width of the text?
+        # Why is the width of the text .765\textwidth?
+        return b'''\\noindent\\fbox{
+%s
+\\parbox[b]{.765\\textwidth}{
+\\begin{center}
+%s
+\\end{center}
+}
+}\\\\*
+\\vspace{-0.75em}\\\\*
+\\noindent %s
+
+\\strut
+
+''' % (
+            icon.encode('UTF-8') if icon else b'',
+            b'\\\\*'.join(x.encode('UTF-8') for x in meta if x is not None),
+            self._texifier.texify(chunk.content))