175 int lim = Math.min(len1, len2); |
175 int lim = Math.min(len1, len2); |
176 for (int k = 0; k < lim; k++) { |
176 for (int k = 0; k < lim; k++) { |
177 char c1 = getChar(value, k); |
177 char c1 = getChar(value, k); |
178 char c2 = StringUTF16.getChar(other, k); |
178 char c2 = StringUTF16.getChar(other, k); |
179 if (c1 != c2) { |
179 if (c1 != c2) { |
180 c1 = Character.toUpperCase(c1); |
180 c1 = (char) CharacterDataLatin1.instance.toUpperCase(c1); |
181 c2 = Character.toUpperCase(c2); |
181 c2 = Character.toUpperCase(c2); |
182 if (c1 != c2) { |
182 if (c1 != c2) { |
183 c1 = Character.toLowerCase(c1); |
183 c1 = Character.toLowerCase(c1); |
184 c2 = Character.toLowerCase(c2); |
184 c2 = Character.toLowerCase(c2); |
185 if (c1 != c2) { |
185 if (c1 != c2) { |
389 char c1 = (char)(value[toffset++] & 0xff); |
389 char c1 = (char)(value[toffset++] & 0xff); |
390 char c2 = (char)(other[ooffset++] & 0xff); |
390 char c2 = (char)(other[ooffset++] & 0xff); |
391 if (c1 == c2) { |
391 if (c1 == c2) { |
392 continue; |
392 continue; |
393 } |
393 } |
394 char u1 = Character.toUpperCase(c1); |
394 int u1 = CharacterDataLatin1.instance.toUpperCase(c1); |
395 char u2 = Character.toUpperCase(c2); |
395 int u2 = CharacterDataLatin1.instance.toUpperCase(c2); |
396 if (u1 == u2) { |
396 if (u1 == u2) { |
397 continue; |
397 continue; |
398 } |
398 } |
399 if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { |
399 if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { |
400 continue; |
400 continue; |
411 char c1 = (char)(value[toffset++] & 0xff); |
411 char c1 = (char)(value[toffset++] & 0xff); |
412 char c2 = StringUTF16.getChar(other, ooffset++); |
412 char c2 = StringUTF16.getChar(other, ooffset++); |
413 if (c1 == c2) { |
413 if (c1 == c2) { |
414 continue; |
414 continue; |
415 } |
415 } |
416 char u1 = Character.toUpperCase(c1); |
416 char u1 = (char) CharacterDataLatin1.instance.toUpperCase(c1); |
417 char u2 = Character.toUpperCase(c2); |
417 char u2 = Character.toUpperCase(c2); |
418 if (u1 == u2) { |
418 if (u1 == u2) { |
419 continue; |
419 continue; |
420 } |
420 } |
421 if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { |
421 if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { |
433 int first; |
433 int first; |
434 final int len = value.length; |
434 final int len = value.length; |
435 // Now check if there are any characters that need to be changed, or are surrogate |
435 // Now check if there are any characters that need to be changed, or are surrogate |
436 for (first = 0 ; first < len; first++) { |
436 for (first = 0 ; first < len; first++) { |
437 int cp = value[first] & 0xff; |
437 int cp = value[first] & 0xff; |
438 if (cp != Character.toLowerCase(cp)) { // no need to check Character.ERROR |
438 if (cp != CharacterDataLatin1.instance.toLowerCase(cp)) { // no need to check Character.ERROR |
439 break; |
439 break; |
440 } |
440 } |
441 } |
441 } |
442 if (first == len) |
442 if (first == len) |
443 return str; |
443 return str; |
448 byte[] result = new byte[len]; |
448 byte[] result = new byte[len]; |
449 System.arraycopy(value, 0, result, 0, first); // Just copy the first few |
449 System.arraycopy(value, 0, result, 0, first); // Just copy the first few |
450 // lowerCase characters. |
450 // lowerCase characters. |
451 for (int i = first; i < len; i++) { |
451 for (int i = first; i < len; i++) { |
452 int cp = value[i] & 0xff; |
452 int cp = value[i] & 0xff; |
453 cp = Character.toLowerCase(cp); |
453 cp = CharacterDataLatin1.instance.toLowerCase(cp); |
454 if (!canEncode(cp)) { // not a latin1 character |
454 if (!canEncode(cp)) { // not a latin1 character |
455 return toLowerCaseEx(str, value, first, locale, false); |
455 return toLowerCaseEx(str, value, first, locale, false); |
456 } |
456 } |
457 result[i] = (byte)cp; |
457 result[i] = (byte)cp; |
458 } |
458 } |
472 int lowerChar; |
472 int lowerChar; |
473 char[] lowerCharArray; |
473 char[] lowerCharArray; |
474 if (localeDependent) { |
474 if (localeDependent) { |
475 lowerChar = ConditionalSpecialCasing.toLowerCaseEx(str, i, locale); |
475 lowerChar = ConditionalSpecialCasing.toLowerCaseEx(str, i, locale); |
476 } else { |
476 } else { |
477 lowerChar = Character.toLowerCase(srcChar); |
477 lowerChar = CharacterDataLatin1.instance.toLowerCase(srcChar); |
478 } |
478 } |
479 if (Character.isBmpCodePoint(lowerChar)) { // Character.ERROR is not a bmp |
479 if (Character.isBmpCodePoint(lowerChar)) { // Character.ERROR is not a bmp |
480 StringUTF16.putChar(result, resultOffset++, lowerChar); |
480 StringUTF16.putChar(result, resultOffset++, lowerChar); |
481 } else { |
481 } else { |
482 if (lowerChar == Character.ERROR) { |
482 if (lowerChar == Character.ERROR) { |
507 final int len = value.length; |
507 final int len = value.length; |
508 |
508 |
509 // Now check if there are any characters that need to be changed, or are surrogate |
509 // Now check if there are any characters that need to be changed, or are surrogate |
510 for (first = 0 ; first < len; first++ ) { |
510 for (first = 0 ; first < len; first++ ) { |
511 int cp = value[first] & 0xff; |
511 int cp = value[first] & 0xff; |
512 if (cp != Character.toUpperCaseEx(cp)) { // no need to check Character.ERROR |
512 if (cp != CharacterDataLatin1.instance.toUpperCaseEx(cp)) { // no need to check Character.ERROR |
513 break; |
513 break; |
514 } |
514 } |
515 } |
515 } |
516 if (first == len) { |
516 if (first == len) { |
517 return str; |
517 return str; |
523 byte[] result = new byte[len]; |
523 byte[] result = new byte[len]; |
524 System.arraycopy(value, 0, result, 0, first); // Just copy the first few |
524 System.arraycopy(value, 0, result, 0, first); // Just copy the first few |
525 // upperCase characters. |
525 // upperCase characters. |
526 for (int i = first; i < len; i++) { |
526 for (int i = first; i < len; i++) { |
527 int cp = value[i] & 0xff; |
527 int cp = value[i] & 0xff; |
528 cp = Character.toUpperCaseEx(cp); |
528 cp = CharacterDataLatin1.instance.toUpperCaseEx(cp); |
529 if (!canEncode(cp)) { // not a latin1 character |
529 if (!canEncode(cp)) { // not a latin1 character |
530 return toUpperCaseEx(str, value, first, locale, false); |
530 return toUpperCaseEx(str, value, first, locale, false); |
531 } |
531 } |
532 result[i] = (byte)cp; |
532 result[i] = (byte)cp; |
533 } |
533 } |
547 int upperChar; |
547 int upperChar; |
548 char[] upperCharArray; |
548 char[] upperCharArray; |
549 if (localeDependent) { |
549 if (localeDependent) { |
550 upperChar = ConditionalSpecialCasing.toUpperCaseEx(str, i, locale); |
550 upperChar = ConditionalSpecialCasing.toUpperCaseEx(str, i, locale); |
551 } else { |
551 } else { |
552 upperChar = Character.toUpperCaseEx(srcChar); |
552 upperChar = CharacterDataLatin1.instance.toUpperCaseEx(srcChar); |
553 } |
553 } |
554 if (Character.isBmpCodePoint(upperChar)) { |
554 if (Character.isBmpCodePoint(upperChar)) { |
555 StringUTF16.putChar(result, resultOffset++, upperChar); |
555 StringUTF16.putChar(result, resultOffset++, upperChar); |
556 } else { |
556 } else { |
557 if (upperChar == Character.ERROR) { |
557 if (upperChar == Character.ERROR) { |
558 if (localeDependent) { |
558 if (localeDependent) { |
559 upperCharArray = |
559 upperCharArray = |
560 ConditionalSpecialCasing.toUpperCaseCharArray(str, i, locale); |
560 ConditionalSpecialCasing.toUpperCaseCharArray(str, i, locale); |
561 } else { |
561 } else { |
562 upperCharArray = Character.toUpperCaseCharArray(srcChar); |
562 upperCharArray = CharacterDataLatin1.instance.toUpperCaseCharArray(srcChar); |
563 } |
563 } |
564 } else { |
564 } else { |
565 upperCharArray = Character.toChars(upperChar); |
565 upperCharArray = Character.toChars(upperChar); |
566 } |
566 } |
567 /* Grow result if needed */ |
567 /* Grow result if needed */ |
595 public static int indexOfNonWhitespace(byte[] value) { |
595 public static int indexOfNonWhitespace(byte[] value) { |
596 int length = value.length; |
596 int length = value.length; |
597 int left = 0; |
597 int left = 0; |
598 while (left < length) { |
598 while (left < length) { |
599 char ch = getChar(value, left); |
599 char ch = getChar(value, left); |
600 if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { |
600 if (ch != ' ' && ch != '\t' && !CharacterDataLatin1.instance.isWhitespace(ch)) { |
601 break; |
601 break; |
602 } |
602 } |
603 left++; |
603 left++; |
604 } |
604 } |
605 return left; |
605 return left; |