diff options
author | Qrius <[email protected]> | 2025-04-24 12:02:21 +0200 |
---|---|---|
committer | Qrius <[email protected]> | 2025-04-24 12:03:56 +0200 |
commit | e959972105686988f9c46d152f34f658192229fd (patch) | |
tree | e3858ddd6fd5f49eafc8dbe2bcd2217aee8864cb /src | |
parent | c741ed92778812beef7ea57cb073745b28ec046a (diff) | |
download | skaldpress-e959972105686988f9c46d152f34f658192229fd.tar.gz skaldpress-e959972105686988f9c46d152f34f658192229fd.zip |
Improve smp entrypoint with additional options
Diffstat (limited to 'src')
-rw-r--r-- | src/skaldpress/main.py | 25 | ||||
-rw-r--r-- | src/smp/__init__.py | 38 | ||||
-rw-r--r-- | src/smp/builtins.py | 16 |
3 files changed, 47 insertions, 32 deletions
diff --git a/src/skaldpress/main.py b/src/skaldpress/main.py index 7d95a12..07c6555 100644 --- a/src/skaldpress/main.py +++ b/src/skaldpress/main.py @@ -138,6 +138,19 @@ def check_trailing_slash(arg): return arg +def parse_keyval_args(args): + definitions = {} + for val in args: + if "=" not in val: + raise ValueError(f"metadata must be KEY=VAL (got {repr(val)})") + key, val = map(str.strip, val.split("=", 1)) + if "," in val: + definitions[key] = [x for x in val.split(",") if x != ""] + else: + definitions[key] = val + return definitions + + def main(): comma_arg = partial(str.split, sep=",") parser = ArgumentParser() @@ -191,17 +204,7 @@ def main(): type=comma_arg, ) args = parser.parse_args() - - metadata = {} - for val in args.metadata: - if "=" not in val: - raise ValueError("metadata must be KEY=VAL (got {repr(val)})") - key, val = map(str.strip, val.split("=", 1)) - if "," in val: - metadata[key] = [x for x in val.split(",") if x != ""] - else: - metadata[key] = val - args.metadata = metadata + args.metadata = parse_keyval_args(args.metadata) now = perf_counter() filelist_dest = make_filelist_iter( diff --git a/src/smp/__init__.py b/src/smp/__init__.py index 4cfc534..5358c29 100644 --- a/src/smp/__init__.py +++ b/src/smp/__init__.py @@ -7,7 +7,7 @@ __all__ = [ ] -def repl(): +def repl(macro_processor): print("=Skaldpress Macro Processor (REPL)") # print(" type \"quit\" to exit"); print("NOT IMPLEMENTED") @@ -15,12 +15,10 @@ def repl(): # as well as the readline library -def read_stdin(): +def read_stdin(macro_processor): import sys data = sys.stdin.read() - macro_processor_state = smp.macro_processor.MacroProcessorState() - macro_processor = macro_processor_state.macro_processor() macro_processor._enter_file_frame("[stdin]", 0, None) res = macro_processor.process_input(data, file="[stdin]") print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", file=sys.stderr) @@ -28,23 +26,35 @@ def read_stdin(): def main(): + import argparse import sys + from skaldpress.main import parse_keyval_args + + parser = argparse.ArgumentParser(description="Process some arguments.") + parser.add_argument( + "-D", nargs="+", metavar="key=value", default=[], action="extend" + ) + parser.add_argument( + "file", nargs="?", default=None, help='Input file or "-" for stdin' + ) + args = parser.parse_args() + args.D = parse_keyval_args(args.D) - if not sys.stdin.isatty(): - read_stdin() - sys.exit(0) + macro_processor_state = smp.macro_processor.MacroProcessorState() + macro_processor = macro_processor_state.macro_processor() + + for key, value in args.D.items(): + macro_processor.define_macro(key, value) - if len(sys.argv) > 1 and sys.argv[1] == "-": - read_stdin() + if not sys.stdin.isatty() or (args.file == "-"): + read_stdin(macro_processor) sys.exit(0) - if len(sys.argv) == 1: - repl() + if args.file is None: + repl(macro_processor) sys.exit(0) - macro_processor_state = smp.macro_processor.MacroProcessorState() - macro_processor = macro_processor_state.macro_processor() - res = smp.builtins._smp_builtin_read(macro_processor, sys.argv[1]) + res = smp.builtins._smp_builtin_read(macro_processor, args.file) print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", file=sys.stderr) print(res) diff --git a/src/smp/builtins.py b/src/smp/builtins.py index 30ebbdc..424aa53 100644 --- a/src/smp/builtins.py +++ b/src/smp/builtins.py @@ -197,9 +197,6 @@ def _smp_builtin_template_content(): macro_processor._enter_file_frame(f"[part]{filename}", 0, "") res = macro_processor.process_input(content, file=filename) - if extension == "md": - res = smp_builtin_html_from_markdown(macro_processor, res) - macro_processor._pop_file_frame() return res @@ -210,13 +207,21 @@ def smp_builtin_template(macro_processor, template, content): return _smp_builtin_read(macro_processor, template, template_content=content) +def smp_builtin_iftruthy(content): + if isinstance(content, str) and content.lower() in ["true", "yes"]: + return True + if isinstance(content, bool): + return content + return False + + def _smp_builtin_read(macro_processor, filename, template_content=None, inline=False): macro_processor._enter_file_frame(filename, 0, template_content) with open(filename, "r") as f: file_content = f.read() metadata = {} - if macro_processor._get_macro_with_prefix("parse_file_yaml"): + if smp_builtin_iftruthy(macro_processor._get_macro_with_prefix("parse_file_yaml")): metadata, file_content = extract_parse_yaml_metadata(file_content) _smp_builtin_add_metadata(macro_processor, metadata, overwrite=True) @@ -246,9 +251,6 @@ def _smp_builtin_read(macro_processor, filename, template_content=None, inline=F content = macro_processor.process_input(file_content, file=filename) - if extension == "md": - content = smp_builtin_html_from_markdown(macro_processor, content) - return content |