From 1c2a1da83b853d7cdd2c69faeae8168d473dcb93 Mon Sep 17 00:00:00 2001 From: Markus Scherer Date: Thu, 9 Feb 2017 00:12:54 +0000 Subject: [PATCH] ICU-12410 move/re-port case folding, support Edits X-SVN-Rev: 39651 --- .../src/com/ibm/icu/impl/CaseMapImpl.java | 20 +++++++++++++ .../core/src/com/ibm/icu/lang/UCharacter.java | 30 +++++++------------ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/CaseMapImpl.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/CaseMapImpl.java index f5822c85ef0..c8cfadb5baf 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/CaseMapImpl.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/CaseMapImpl.java @@ -338,6 +338,26 @@ public final class CaseMapImpl { } } + public static A fold(int options, + CharSequence src, A dest, Edits edits) { + try { + if (edits != null) { + edits.reset(); + } + int length = src.length(); + for (int i = 0; i < length;) { + int c = Character.codePointAt(src, i); + int cpLength = Character.charCount(c); + i += cpLength; + c = UCaseProps.INSTANCE.toFullFolding(c, dest, options); + appendResult(c, dest, cpLength, options, edits); + } + return dest; + } catch (IOException e) { + throw new ICUUncheckedIOException(e); + } + } + private static final class GreekUpper { // Data bits. private static final int UPPER_MASK = 0x3ff; diff --git a/icu4j/main/classes/core/src/com/ibm/icu/lang/UCharacter.java b/icu4j/main/classes/core/src/com/ibm/icu/lang/UCharacter.java index ff6d7a5daac..7b2af3061c8 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/lang/UCharacter.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/lang/UCharacter.java @@ -5351,27 +5351,19 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection * @stable ICU 2.6 */ public static final String foldCase(String str, int options) { - StringBuilder result = new StringBuilder(str.length()); - int c, i, length; - - length = str.length(); - for(i=0; i