aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQrius <[email protected]>2025-04-24 12:02:21 +0200
committerQrius <[email protected]>2025-04-24 12:03:56 +0200
commite959972105686988f9c46d152f34f658192229fd (patch)
treee3858ddd6fd5f49eafc8dbe2bcd2217aee8864cb
parentc741ed92778812beef7ea57cb073745b28ec046a (diff)
downloadskaldpress-e959972105686988f9c46d152f34f658192229fd.tar.gz
skaldpress-e959972105686988f9c46d152f34f658192229fd.zip
Improve smp entrypoint with additional options
-rw-r--r--src/skaldpress/main.py25
-rw-r--r--src/smp/__init__.py38
-rw-r--r--src/smp/builtins.py16
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