comparison src/org/nwoca/ssdt/tools/html2wiki/ReplaceTransformer.java @ 11:8f23347884c0

Deal with double dashes surrounded by words. ReplaceTransformer can now replace specific group.
author smith@nwoca.org
date Fri, 28 Jan 2011 13:57:25 -0500
parents 22ed6d93442c
children
comparison
equal deleted inserted replaced
10:2fb5084b1564 11:8f23347884c0
4 4
5 class ReplaceTransformer implements Transformer { 5 class ReplaceTransformer implements Transformer {
6 6
7 private Pattern replace; 7 private Pattern replace;
8 private String replacement; 8 private String replacement;
9 9 private int replaceGroup;
10
11 /**
12 * ReplaceTransform to replace the entire regex.
13 *
14 * @param regex
15 * @param replacement
16 */
10 public ReplaceTransformer(String regex, String replacement) { 17 public ReplaceTransformer(String regex, String replacement) {
18 this(regex,replacement,0);
19 }
20 /**
21 * ReplaceTransform to replace a specific group in the Regex.
22 *
23 * @param regex
24 * @param replacement
25 * @param replaceGroup group to replace
26 */
27
28 public ReplaceTransformer(String regex, String replacement, int replaceGroup) {
11 replace = Pattern.compile(regex); 29 replace = Pattern.compile(regex);
12 this.replacement = replacement; 30 this.replacement = replacement;
13 31 this.replaceGroup = replaceGroup;
14 } 32 }
33
15 public void apply(StringBuffer buffer) { 34 public void apply(StringBuffer buffer) {
16 Matcher matcher = replace.matcher(buffer); 35 Matcher matcher = replace.matcher(buffer);
17 36
18 boolean first = true; 37 int start = 0;
19 while (matcher.find(first ? 0 : matcher.start() + replacement.length())) { 38 while (matcher.find(start)) {
20 buffer.replace(matcher.start(),matcher.end(),replacement); 39 if (replaceGroup == 0) {
21 first = false; 40 buffer.replace(matcher.start(),matcher.end(),replacement);
41 start = matcher.start() + replacement.length();
42 } else {
43 String t = "";
44 for (int i = 1; i < matcher.groupCount() + 1 ; i++) {
45 if (i != replaceGroup) {
46 t += matcher.group(i);
47 } else {
48 t += replacement;
49 }
50 }
51 buffer.replace(matcher.start(),matcher.end(),t);
52 start = matcher.start() + t.length();
53 }
22 } 54 }
23 } 55 }
24 56
25 public String toString() { 57 public String toString() {
26 return "Replace: " + replace.pattern() + " with " +replacement; 58 return "Replace: " + replace.pattern() + " with " +replacement;