]> git.scottworley.com Git - paperdoorknob/blobdiff - args.py
Learning TeX: Keep icon image size in TeX
[paperdoorknob] / args.py
diff --git a/args.py b/args.py
index 8f77a887547b403d311ee0939a5a423b168aa88a..45c080a30a7eb34904558d89697f14c6f9d5854d 100644 (file)
--- a/args.py
+++ b/args.py
@@ -8,6 +8,7 @@
 from argparse import ArgumentParser
 from contextlib import contextmanager
 import os.path
 from argparse import ArgumentParser
 from contextlib import contextmanager
 import os.path
+from sys import stderr
 
 from typing import Iterator
 
 
 from typing import Iterator
 
@@ -17,15 +18,20 @@ from domfilter import ApplyDOMFilters, DOMFilters
 from fetch import CachingFetcher
 from glowfic import BesideIconLayout, BelowIconLayout, Layout
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
 from fetch import CachingFetcher
 from glowfic import BesideIconLayout, BelowIconLayout, Layout
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
+from texfilter import ApplyTexFilters, TexFilters
 from images import DiskImageStore
 from spec import Spec
 from texify import PandocTexifier
 
 
 from images import DiskImageStore
 from spec import Spec
 from texify import PandocTexifier
 
 
+def _print_status(msg: str) -> None:
+    print(msg, file=stderr, end='' if msg.endswith('\r') else '\n')
+
+
 def _command_line_parser() -> ArgumentParser:
     parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
     parser.add_argument(
 def _command_line_parser() -> ArgumentParser:
     parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
     parser.add_argument(
-        '--cache_path',
+        '--cache-path',
         metavar='PATH',
         help='Where to keep the http cache (instead of %(default)s)',
         default=os.path.join(xdg_cache_home(), "paperdoorknob"))
         metavar='PATH',
         help='Where to keep the http cache (instead of %(default)s)',
         default=os.path.join(xdg_cache_home(), "paperdoorknob"))
@@ -45,20 +51,28 @@ See https://faculty.bard.edu/bloch/geometry.pdf for details
         help='Which HTML filters to use (default: %(default)s)',
         default=','.join(f[0] for f in HTMLFilters))
     parser.add_argument(
         help='Which HTML filters to use (default: %(default)s)',
         default=','.join(f[0] for f in HTMLFilters))
     parser.add_argument(
-        '--image_size',
+        '--image-size',
         help='How large the icon images are, in mm',
         default=20)
     parser.add_argument(
         '--layout',
         help='How large the icon images are, in mm',
         default=20)
     parser.add_argument(
         '--layout',
-        default='below',
+        default='beside',
         help='Whether to put character and author information `beside` or `below` the icon ' +
         help='Whether to put character and author information `beside` or `below` the icon ' +
-             '(default: below)')
+             '(default: beside)')
     parser.add_argument(
         '--out',
         help='The filename stem at which to write output ' +
              '(eg: "%(default)s" produces %(default)s.tex, %(default)s.pdf, etc.)',
         default='book')
     parser.add_argument('--pandoc', help='Location of the pandoc executable')
     parser.add_argument(
         '--out',
         help='The filename stem at which to write output ' +
              '(eg: "%(default)s" produces %(default)s.tex, %(default)s.pdf, etc.)',
         default='book')
     parser.add_argument('--pandoc', help='Location of the pandoc executable')
+    parser.add_argument(
+        '--quiet',
+        action='store_true',
+        help='Suppress progress messages')
+    parser.add_argument(
+        '--texfilters',
+        help='Which TeX filters to use (default: %(default)s)',
+        default=','.join(f[0] for f in TexFilters))
     parser.add_argument(
         '--timeout',
         help='How long to wait for HTTP requests, in seconds',
     parser.add_argument(
         '--timeout',
         help='How long to wait for HTTP requests, in seconds',
@@ -75,12 +89,13 @@ def spec_from_commandline_args() -> Iterator[Spec]:
     texifier = PandocTexifier(args.pandoc or 'pandoc')
     layout: Layout
     if args.layout == 'below':
     texifier = PandocTexifier(args.pandoc or 'pandoc')
     layout: Layout
     if args.layout == 'below':
-        layout = BelowIconLayout(texifier, args.image_size)
+        layout = BelowIconLayout(texifier)
     elif args.layout == 'beside':
     elif args.layout == 'beside':
-        layout = BesideIconLayout(texifier, args.image_size)
+        layout = BesideIconLayout(texifier)
     else:
         raise ValueError(f'Unknown layout: {args.layout}')
     else:
         raise ValueError(f'Unknown layout: {args.layout}')
-    with CachingFetcher(args.cache_path, args.timeout) as fetcher:
+    log = (lambda _: None) if args.quiet else _print_status
+    with CachingFetcher(args.cache_path, args.timeout, log) as fetcher:
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
                 args.url,
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
                 args.url,
@@ -88,6 +103,9 @@ 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),
+                lambda x: ApplyTexFilters(args.texfilters, x),
+                args.image_size,
                 layout,
                 args.geometry,
                 layout,
                 args.geometry,
-                texout)
+                texout,
+                log)