• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.unicode.cldr.unittest;
2 
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
7 
8 import com.ibm.icu.impl.Row;
9 import com.ibm.icu.impl.Row.R2;
10 import com.ibm.icu.text.Transform;
11 
12 public class RegexTransform implements Transform<String, String> {
13 
14     public enum Processing {
15         FIRST_MATCH, ONE_PASS, RECURSIVE
16     }
17 
18     private final Processing processing;
19     private final List<Row.R2<Matcher, String>> entries = new ArrayList<Row.R2<Matcher, String>>();
20 
transform(String source)21     public String transform(String source) {
22         main: while (true) {
23             for (R2<Matcher, String> entry : entries) {
24                 Matcher matcher = entry.get0();
25                 if (matcher.reset(source).find()) {
26                     String replacement = entry.get1();
27                     source = matcher.replaceAll(replacement);
28                     switch (processing) {
29                     case RECURSIVE:
30                         continue main;
31                     case FIRST_MATCH:
32                         break main;
33                     case ONE_PASS: // fall through and continue;
34                     }
35                 }
36             }
37             break;
38         }
39         return source;
40     }
41 
RegexTransform(Processing processing)42     public RegexTransform(Processing processing) {
43         this.processing = processing;
44     }
45 
add(String pattern, String replacement)46     public RegexTransform add(String pattern, String replacement) {
47         entries.add(Row.of(
48             Pattern.compile(pattern, Pattern.COMMENTS).matcher(""),
49             replacement));
50         return this;
51     }
52 }