From d72193385f1dbda9d9a09c474d8d056e71eca8e3 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Sun, 11 Jul 2010 21:56:40 +0400 Subject: [PATCH] support for sequences of number markers --- .../template/zencoding/ZenCodingUtil.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/template/zencoding/ZenCodingUtil.java b/xml/impl/src/com/intellij/codeInsight/template/zencoding/ZenCodingUtil.java index 7bbb4e0c1514..391bdf91461f 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/zencoding/ZenCodingUtil.java +++ b/xml/impl/src/com/intellij/codeInsight/template/zencoding/ZenCodingUtil.java @@ -21,10 +21,39 @@ import com.intellij.openapi.util.Pair; * @author Eugene.Kudelevsky */ public class ZenCodingUtil { - static final String NUMBER_IN_ITERATION_PLACE_HOLDER = "$"; + private static final char NUMBER_IN_ITERATION_PLACE_HOLDER = '$'; + + private ZenCodingUtil() { + } + + private static String replaceNumberMarkersBy(String s, String by) { + StringBuilder builder = new StringBuilder(s.length()); + int j = -1; + for (int i = 0, n = s.length(); i <= n; i++) { + char c = i < n ? s.charAt(i) : 0; + if (c == NUMBER_IN_ITERATION_PLACE_HOLDER) { + if (j == -1) { + j = i; + } + } + else { + if (j != -1) { + for (int k = 0, m = i - j - by.length(); k < m; k++) { + builder.append('0'); + } + builder.append(by); + j = -1; + } + if (i < n) { + builder.append(c); + } + } + } + return builder.toString(); + } public static String getValue(Pair pair, int numberInIteration) { - String s = pair.second.replace(NUMBER_IN_ITERATION_PLACE_HOLDER, Integer.toString(numberInIteration + 1)); + String s = replaceNumberMarkersBy(pair.second, Integer.toString(numberInIteration + 1)); return s.replace("\"", """); } }