From c741ed92778812beef7ea57cb073745b28ec046a Mon Sep 17 00:00:00 2001 From: Qrius Date: Thu, 24 Apr 2025 10:02:41 +0200 Subject: Fix inconsistencies with expansion of text strings and the array macros --- src/skaldpress/main.py | 4 ++-- src/smp/builtins.py | 15 ++++++++++----- src/smp/macro_processor.py | 2 +- tests/smp/array_push_2 | 2 +- tests/smp/array_push_3 | 4 ++-- tests/smp/array_push_4 | 9 +++++++++ 6 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 tests/smp/array_push_4 diff --git a/src/skaldpress/main.py b/src/skaldpress/main.py index b0b1784..7d95a12 100644 --- a/src/skaldpress/main.py +++ b/src/skaldpress/main.py @@ -15,7 +15,7 @@ from skaldpress.filelist import ( ) from smp.builtins import ( _smp_builtin_read, - smp_builtin_add_metadata, + _smp_builtin_add_metadata, ) import skaldpress.macros from time import perf_counter @@ -38,7 +38,7 @@ def macro_processor_initialize(metadata, old_macro_processor, additional_state=N macro_processor._import_symbols( skaldpress.macros, macro_processor.macros, function_prefix="sp_" ) - smp_builtin_add_metadata(macro_processor, metadata, overwrite=False) + _smp_builtin_add_metadata(macro_processor, metadata, overwrite=False) if additional_state: for key, value in additional_state.items(): macro_processor.define_macro(key, value) diff --git a/src/smp/builtins.py b/src/smp/builtins.py index f06df4e..30ebbdc 100644 --- a/src/smp/builtins.py +++ b/src/smp/builtins.py @@ -68,7 +68,9 @@ def smp_builtin_ifneq(macro_processor, a, b, iftrue, iffalse=None): return "" -def smp_builtin_add_metadata(macro_processor, metadata: dict[str, Any], overwrite=True): +def _smp_builtin_add_metadata( + macro_processor, metadata: dict[str, Any], overwrite=True +): """ Not added to macro_processor as macro """ @@ -100,7 +102,7 @@ def smp_builtin_parse_leading_yaml(macro_processor, content): Not added to macro_processor as macro """ metadata, content = extract_parse_yaml_metadata(content) - smp_builtin_add_metadata(macro_processor, metadata, overwrite=True) + _smp_builtin_add_metadata(macro_processor, metadata, overwrite=True) return content @@ -126,8 +128,11 @@ def smp_builtin_array_push(macro_processor, array_name, *values): raise Exception(f"{array_name} is not a macro") if not isinstance(macro_processor.macros[array_name], list): raise Exception(f"{array_name} is not a array") - for value in values: - macro_processor.macros[array_name].append(value) + values = [macro_processor.process_input(x) for x in values] + if len(values) > 1: + macro_processor.macros[array_name].append(values) + else: + macro_processor.macros[array_name].append(values[0]) return "" @@ -213,7 +218,7 @@ def _smp_builtin_read(macro_processor, filename, template_content=None, inline=F metadata = {} if 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) + _smp_builtin_add_metadata(macro_processor, metadata, overwrite=True) extension = os.path.splitext(filename)[1][1:] or "" if not inline: diff --git a/src/smp/macro_processor.py b/src/smp/macro_processor.py index 77641e7..0e62494 100644 --- a/src/smp/macro_processor.py +++ b/src/smp/macro_processor.py @@ -162,7 +162,7 @@ class MacroProcessor: expanded = macro for i, arg in enumerate(args): placeholder = f"${i}" - expanded = macro.replace(placeholder, arg) + expanded = expanded.replace(placeholder, arg) res = self.process_input(expanded) return res diff --git a/tests/smp/array_push_2 b/tests/smp/array_push_2 index 3b4d652..be2e080 100644 --- a/tests/smp/array_push_2 +++ b/tests/smp/array_push_2 @@ -2,4 +2,4 @@ define_array(arr)DNL array_push(arr, test, tast, toast)DNL array_size(arr) --- -3 +1 diff --git a/tests/smp/array_push_3 b/tests/smp/array_push_3 index 60417b4..2872d73 100644 --- a/tests/smp/array_push_3 +++ b/tests/smp/array_push_3 @@ -4,5 +4,5 @@ array_size(arr) array_push(arr, test, tast, toast)DNL array_size(arr) --- -3 -6 +1 +2 diff --git a/tests/smp/array_push_4 b/tests/smp/array_push_4 new file mode 100644 index 0000000..b875c7f --- /dev/null +++ b/tests/smp/array_push_4 @@ -0,0 +1,9 @@ +define_array(A)DNL +array_push(A, a, b, c)DNL +array_push(A, d, e, f)DNL +define(ITEM, %"$0$1$2 +"%)DNL +array_each(A, ITEM) +--- +abc +def -- cgit v1.2.3