diff --git a/README.md b/README.md index afd77eb..808d15a 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ dependencies { | `range(from:to)` | match text at specified position | | `ranges(ranges)` | match all texts at specified positions | | `between(startText:endText)` | match text between two texts | +| `pattern(Pattern...)` | match all occurrences with object Pattern | +| `pattern(String...)` | match all occurrences with string pattern | #### Step 2: Apply style(s) diff --git a/library/src/main/java/com/jaychang/st/SimpleText.java b/library/src/main/java/com/jaychang/st/SimpleText.java index 756a832..be6e7bf 100644 --- a/library/src/main/java/com/jaychang/st/SimpleText.java +++ b/library/src/main/java/com/jaychang/st/SimpleText.java @@ -70,6 +70,23 @@ public SimpleText all(String target) { return this; } + public SimpleText pattern(String... patterns) { + Pattern[] listPattern = new Pattern[patterns.length]; + for (int patternPosition = 0; patternPosition < patterns.length; patternPosition++) { + listPattern[patternPosition] = Pattern.compile(patterns[patternPosition]); + } + return this.pattern(listPattern); + } + + public SimpleText pattern(Pattern... patterns) { + rangeList.clear(); + for (Pattern pattern : patterns) { + List ranges = Utils.ranges(toString(), pattern); + rangeList.addAll(ranges); + } + return this; + } + public SimpleText all() { rangeList.clear(); Range range = Range.create(0, toString().length()); @@ -135,7 +152,7 @@ public SimpleText italic() { } return this; } - + public SimpleText normal() { for (Range range : rangeList) { setSpan(new StyleSpan(Typeface.NORMAL), range.from, range.to, SPAN_MODE); diff --git a/library/src/main/java/com/jaychang/st/Utils.java b/library/src/main/java/com/jaychang/st/Utils.java index d9e1991..b3fb394 100644 --- a/library/src/main/java/com/jaychang/st/Utils.java +++ b/library/src/main/java/com/jaychang/st/Utils.java @@ -35,13 +35,17 @@ static List indexesOf(String src, String target) { return positions; } - static List ranges(String src, String pattern) { - List ranges = new ArrayList<>(); - Matcher matcher = Pattern.compile(pattern).matcher(src); - while (matcher.find()) { - Range range = Range.create(matcher.start(), matcher.end()); - ranges.add(range); + static List ranges(String src, String pattern) { + return ranges(src, Pattern.compile(pattern)); + } + + static List ranges(String src, Pattern pattern) { + List ranges = new ArrayList<>(); + Matcher matcher = pattern.matcher(src); + while (matcher.find()) { + Range range = Range.create(matcher.start(), matcher.end()); + ranges.add(range); + } + return ranges; } - return ranges; - } }