From 69b236ee8d2c8c5af32664ea636f5f6f46bb29ff Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Tue, 14 Aug 2012 21:05:48 -0400 Subject: [PATCH] Handle template parameter key dependents more intelligently. --- mwparserfromhell/nodes/template.py | 15 +++++++++++++-- mwparserfromhell/parser/builder.py | 6 +++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/mwparserfromhell/nodes/template.py b/mwparserfromhell/nodes/template.py index 772a89a..29a2a16 100644 --- a/mwparserfromhell/nodes/template.py +++ b/mwparserfromhell/nodes/template.py @@ -143,10 +143,21 @@ class Template(Node): if showkey is None: try: - int(unicode(name)) - showkey = False # DEPENDENTS? + int_name = int(unicode(name)) except ValueError: showkey = True + else: + int_keys = set() + for param in self.params: + try: + int_keys.add(int(unicode(param.name))) + except ValueError: + pass + expected = min(set(range(1, len(int_keys) + 2)) - int_keys) + if expected == int_name: + showkey = False + else: + showkey = True if not showkey: self._surface_escape(value, "=") if not force_nonconformity: diff --git a/mwparserfromhell/parser/builder.py b/mwparserfromhell/parser/builder.py index ef81083..c4a0055 100644 --- a/mwparserfromhell/parser/builder.py +++ b/mwparserfromhell/parser/builder.py @@ -20,8 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import re - from . import tokens from ..nodes import Heading, HTMLEntity, Tag, Template, Text from ..nodes.extras import Attribute, Parameter @@ -78,9 +76,11 @@ class Builder(object): name = self._pop() default = self._wrap(unicode(min(int_key_range - int_keys))) param = self._handle_parameter(default) - if re.match(r"[1-9][0-9]*$", param.name.strip()): + try: int_keys.add(int(unicode(param.name))) int_key_range.add(len(int_keys) + 1) + except ValueError: + pass params.append(param) elif isinstance(token, tokens.TemplateClose): if not params: