From 91e0f8cff27e4876db0b9226b5d00b638feed665 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Thu, 11 Apr 2013 00:19:09 +0530 Subject: [PATCH] Make template remover more robust marktraceur pointed out that my previous code will fail at {{echo|{}} which is, unsurprisingly, valid wikitext --- .../commons/modifications/TemplateRemoveModifier.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java b/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java index dc554bd35..4cc6bc84f 100644 --- a/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java +++ b/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java @@ -12,6 +12,10 @@ public class TemplateRemoveModifier extends PageModifier { public static final String PARAM_TEMPLATE_NAME = "template"; + public static final Pattern PATTERN_TEMPLATE_OPEN = Pattern.compile("\\{\\{"); + public static final Pattern PATTERN_TEMPLATE_CLOSE = Pattern.compile("\\}\\}"); + + public TemplateRemoveModifier(String templateName) { super(MODIFIER_NAME); try { @@ -39,13 +43,13 @@ public class TemplateRemoveModifier extends PageModifier { Matcher matcher = templateStartPattern.matcher(pageContents); while(matcher.find()) { - int braceCount = 2; + int braceCount = 1; int startIndex = matcher.start(); int curIndex = matcher.end(); while(curIndex < pageContents.length()) { - if(pageContents.charAt(curIndex) == '{') { + if(PATTERN_TEMPLATE_OPEN.matcher(pageContents).find(curIndex)) { braceCount++; - } else if(pageContents.charAt(curIndex) == '}') { + } else if(PATTERN_TEMPLATE_CLOSE.matcher(pageContents).find(curIndex)) { braceCount--; } curIndex++;