// Source string char was not in contraction table.
// Unless it is a discontiguous contraction, we are done
int miss = ch;
- if(UTF16.isLeadSurrogate(ch)) { // in order to do the proper detection, we
- // need to see if we're dealing with a supplementary
- miss = UCharacterProperty.getRawSupplementary(ch, (char) nextChar());
- }
+ // ticket 8484 - porting changes from C for 6101
+ // We test whether the next two char are surrogate pairs.
+ // This test is done if the iterator is not in the end.
+ // If there is no surrogate pair, the iterator
+ // goes back one if needed.
+ if(UTF16.isLeadSurrogate(ch) && !isEnd()) {
+ char surrNextChar = (char)nextChar();
+ if (UTF16.isTrailSurrogate(surrNextChar)) {
+ miss = UCharacterProperty.getRawSupplementary(ch, surrNextChar);
+ } else {
+ previousChar();
+ }
+ }
int sCC;
if (maxCC == 0 || (sCC = getCombiningClass(miss)) == 0
|| sCC > maxCC || (allSame != 0 && sCC == maxCC) ||
}
}
+ // Fixing the infinite loop for surrogates
+ public void Test8484()
+ {
+ String s = "\u9FE1\uCEF3\u2798\uAAB6\uDA7C";
+ Collator coll = Collator.getInstance();
+ CollationKey collKey = coll.getCollationKey(s);
+ logln("Pass: " + collKey.toString() + " generated OK.");
+ }
+
public void TestBengaliSortKey() throws Exception {
char rules[] = { 0x26, 0x9fa, 0x3c, 0x98c, 0x3c, 0x9e1, 0x3c, 0x98f, 0x3c, 0x990, 0x3c, 0x993,
0x3c, 0x994, 0x3c, 0x9bc, 0x3c, 0x982, 0x3c, 0x983, 0x3c, 0x981, 0x3c, 0x9b0, 0x3c,