From 6dae336522950ce9aaec17c8e743709371e6f598 Mon Sep 17 00:00:00 2001 From: Mark Holmquist Date: Mon, 22 Apr 2013 13:42:01 -0700 Subject: [PATCH] Make template removal work properly --- .../modifications/TemplateRemoveModifier.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 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 4cc6bc84f..25b37dab5 100644 --- a/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java +++ b/commons/src/main/java/org/wikimedia/commons/modifications/TemplateRemoveModifier.java @@ -46,14 +46,27 @@ public class TemplateRemoveModifier extends PageModifier { int braceCount = 1; int startIndex = matcher.start(); int curIndex = matcher.end(); + Matcher openMatch = PATTERN_TEMPLATE_OPEN.matcher(pageContents); + Matcher closeMatch = PATTERN_TEMPLATE_CLOSE.matcher(pageContents); + while(curIndex < pageContents.length()) { - if(PATTERN_TEMPLATE_OPEN.matcher(pageContents).find(curIndex)) { + boolean openFound = openMatch.find(curIndex); + boolean closeFound = closeMatch.find(curIndex); + + if(openFound && (!closeFound || openMatch.start() < closeMatch.start())) { braceCount++; - } else if(PATTERN_TEMPLATE_CLOSE.matcher(pageContents).find(curIndex)) { + curIndex = openMatch.end(); + } else if (closeFound) { braceCount--; + curIndex = closeMatch.end(); + } else if (braceCount > 0) { + // The template never closes, so...remove nothing + curIndex = startIndex; + break; } - curIndex++; - if(braceCount == 0) { + + if (braceCount == 0) { + // The braces have all been closed! break; } }