src/java.base/share/classes/java/lang/StringLatin1.java
changeset 57701 90688c5ff482
parent 55260 cc0f117f4405
child 58679 9c3209ff7550
equal deleted inserted replaced
57700:def8e77a3ad1 57701:90688c5ff482
   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;
   608     public static int lastIndexOfNonWhitespace(byte[] value) {
   608     public static int lastIndexOfNonWhitespace(byte[] value) {
   609         int length = value.length;
   609         int length = value.length;
   610         int right = length;
   610         int right = length;
   611         while (0 < right) {
   611         while (0 < right) {
   612             char ch = getChar(value, right - 1);
   612             char ch = getChar(value, right - 1);
   613             if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) {
   613             if (ch != ' ' && ch != '\t' && !CharacterDataLatin1.instance.isWhitespace(ch)) {
   614                 break;
   614                 break;
   615             }
   615             }
   616             right--;
   616             right--;
   617         }
   617         }
   618         return right;
   618         return right;