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
'--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 ' +
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(
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)
''' % (
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))