From 4f540338e8c38751dcee2fc2808f532ae68c7387 Mon Sep 17 00:00:00 2001 From: "E. Seiver" <5547078+eseiver@users.noreply.github.com> Date: Sat, 13 Jan 2024 01:23:50 -0800 Subject: [PATCH] +after param to Template.add also updates docstring --- src/mwparserfromhell/nodes/template.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mwparserfromhell/nodes/template.py b/src/mwparserfromhell/nodes/template.py index f8fc30e..75c929f 100644 --- a/src/mwparserfromhell/nodes/template.py +++ b/src/mwparserfromhell/nodes/template.py @@ -237,7 +237,8 @@ class Template(Node): def __getitem__(self, name): return self.get(name) - def add(self, name, value, showkey=None, before=None, preserve_spacing=True): + def add(self, name, value, showkey=None, before=None, after=None, + preserve_spacing=True): """Add a parameter to the template with a given *name* and *value*. *name* and *value* can be anything parsable by @@ -259,6 +260,13 @@ class Template(Node): occurrence. If *before* is not in the template, :exc:`ValueError` is raised. The argument is ignored if *name* is an existing parameter. + If *after* is given (either a :class:`.Parameter` object or a name), + then we will place the parameter immediately after this one. If *after* + is a name and exists multiple times in the template, we will place it + after the last occurrence. If *after* is not in the template, + :exc:`ValueError` is raised. The argument is ignored if *name* is an + existing parameter or if a value is passed to *before*. + If *preserve_spacing* is ``True``, we will try to preserve whitespace conventions around the parameter, whether it is new or we are updating an existing value. It is disabled for parameters with hidden keys, @@ -312,6 +320,10 @@ class Template(Node): if not isinstance(before, Parameter): before = self.get(before) self.params.insert(self.params.index(before), param) + elif after: + if not isinstance(after, Parameter): + after = self.get(after) + self.params.insert(self.params.index(after)+1, param) else: self.params.append(param) return param