From 24f221827aaee31cb19cc73ab2d5d97f7a32c906 Mon Sep 17 00:00:00 2001 From: corwinmacmillan <45026089+corwinmacmillan@users.noreply.github.com> Date: Wed, 22 Oct 2025 18:17:11 -0400 Subject: [PATCH] Arbitrary keys bug? (#457) --- rendercv/renderer/templater.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/rendercv/renderer/templater.py b/rendercv/renderer/templater.py index 413a8783..07d5b6ee 100644 --- a/rendercv/renderer/templater.py +++ b/rendercv/renderer/templater.py @@ -220,7 +220,8 @@ class TypstFile(TemplatedFile): section_title=section.title, ) else: - placeholder_value = getattr(entry, placeholder_key, None) + arbitrary_keys = getattr(entry, "model_extra", None) + placeholder_value = arbitrary_keys.get(lowercase_placeholder_key, None) if isinstance(arbitrary_keys, dict) else None placeholders[placeholder_key] = ( placeholder_value if placeholder_value != "None" else None @@ -788,11 +789,13 @@ def replace_placeholders_with_actual_values( The string with actual values. """ for placeholder, value in placeholders.items(): - if value: - text = text.replace(placeholder, str(value)) + # Use regex only for whole-word placeholders like DATE, NAME, etc. + if re.fullmatch(r"\w+", placeholder): # e.g., "DATE", "NAME" + pattern = rf"\b{placeholder}\b" + text = re.sub(pattern, str(value or ""), text) else: - text = text.replace(placeholder, "") - + # Fall back to literal replacement if placeholder is not a word (e.g., "{name}") + text = text.replace(placeholder, str(value or "")) return text