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