119 return ((props & $$maskIdentifierInfo) == $$valueUnicodeStart); 120 } 121 122 boolean isUnicodeIdentifierPart(int ch) { 123 int props = getProperties(ch); 124 return ((props & $$maskUnicodePart) != 0); 125 } 126 127 boolean isIdentifierIgnorable(int ch) { 128 int props = getProperties(ch); 129 return ((props & $$maskIdentifierInfo) == $$valueIgnorable); 130 } 131 132 int toLowerCase(int ch) { 133 int mapChar = ch; 134 int val = getProperties(ch); 135 136 if ((val & $$maskLowerCase) != 0) { 137 if ((val & $$maskCaseOffset) == $$maskCaseOffset) { 138 switch(ch) { 139 // map the offset overflow chars 140 case 0x0130 : mapChar = 0x0069; break; 141 case 0x2126 : mapChar = 0x03C9; break; 142 case 0x212A : mapChar = 0x006B; break; 143 case 0x212B : mapChar = 0x00E5; break; 144 // map the titlecase chars with both a 1:M uppercase map 145 // and a lowercase map 146 case 0x1F88 : mapChar = 0x1F80; break; 147 case 0x1F89 : mapChar = 0x1F81; break; 148 case 0x1F8A : mapChar = 0x1F82; break; 149 case 0x1F8B : mapChar = 0x1F83; break; 150 case 0x1F8C : mapChar = 0x1F84; break; 151 case 0x1F8D : mapChar = 0x1F85; break; 152 case 0x1F8E : mapChar = 0x1F86; break; 153 case 0x1F8F : mapChar = 0x1F87; break; 154 case 0x1F98 : mapChar = 0x1F90; break; 155 case 0x1F99 : mapChar = 0x1F91; break; 156 case 0x1F9A : mapChar = 0x1F92; break; 157 case 0x1F9B : mapChar = 0x1F93; break; 158 case 0x1F9C : mapChar = 0x1F94; break; 159 case 0x1F9D : mapChar = 0x1F95; break; 160 case 0x1F9E : mapChar = 0x1F96; break; 161 case 0x1F9F : mapChar = 0x1F97; break; 162 case 0x1FA8 : mapChar = 0x1FA0; break; 163 case 0x1FA9 : mapChar = 0x1FA1; break; 164 case 0x1FAA : mapChar = 0x1FA2; break; 165 case 0x1FAB : mapChar = 0x1FA3; break; 166 case 0x1FAC : mapChar = 0x1FA4; break; 167 case 0x1FAD : mapChar = 0x1FA5; break; 168 case 0x1FAE : mapChar = 0x1FA6; break; 169 case 0x1FAF : mapChar = 0x1FA7; break; 170 case 0x1FBC : mapChar = 0x1FB3; break; 171 case 0x1FCC : mapChar = 0x1FC3; break; 172 case 0x1FFC : mapChar = 0x1FF3; break; 173 174 case 0x023A : mapChar = 0x2C65; break; 175 case 0x023E : mapChar = 0x2C66; break; 176 case 0x10A0 : mapChar = 0x2D00; break; 177 case 0x10A1 : mapChar = 0x2D01; break; 178 case 0x10A2 : mapChar = 0x2D02; break; 179 case 0x10A3 : mapChar = 0x2D03; break; 180 case 0x10A4 : mapChar = 0x2D04; break; 181 case 0x10A5 : mapChar = 0x2D05; break; 182 case 0x10A6 : mapChar = 0x2D06; break; 183 case 0x10A7 : mapChar = 0x2D07; break; 184 case 0x10A8 : mapChar = 0x2D08; break; 185 case 0x10A9 : mapChar = 0x2D09; break; 186 case 0x10AA : mapChar = 0x2D0A; break; 187 case 0x10AB : mapChar = 0x2D0B; break; 188 case 0x10AC : mapChar = 0x2D0C; break; 189 case 0x10AD : mapChar = 0x2D0D; break; 190 case 0x10AE : mapChar = 0x2D0E; break; 191 case 0x10AF : mapChar = 0x2D0F; break; 192 case 0x10B0 : mapChar = 0x2D10; break; 193 case 0x10B1 : mapChar = 0x2D11; break; 194 case 0x10B2 : mapChar = 0x2D12; break; 195 case 0x10B3 : mapChar = 0x2D13; break; 196 case 0x10B4 : mapChar = 0x2D14; break; 197 case 0x10B5 : mapChar = 0x2D15; break; 198 case 0x10B6 : mapChar = 0x2D16; break; 199 case 0x10B7 : mapChar = 0x2D17; break; 200 case 0x10B8 : mapChar = 0x2D18; break; 201 case 0x10B9 : mapChar = 0x2D19; break; 202 case 0x10BA : mapChar = 0x2D1A; break; 203 case 0x10BB : mapChar = 0x2D1B; break; 204 case 0x10BC : mapChar = 0x2D1C; break; 205 case 0x10BD : mapChar = 0x2D1D; break; 206 case 0x10BE : mapChar = 0x2D1E; break; 207 case 0x10BF : mapChar = 0x2D1F; break; 208 case 0x10C0 : mapChar = 0x2D20; break; 209 case 0x10C1 : mapChar = 0x2D21; break; 210 case 0x10C2 : mapChar = 0x2D22; break; 211 case 0x10C3 : mapChar = 0x2D23; break; 212 case 0x10C4 : mapChar = 0x2D24; break; 213 case 0x10C5 : mapChar = 0x2D25; break; 214 case 0x10C7 : mapChar = 0x2D27; break; 215 case 0x10CD : mapChar = 0x2D2D; break; 216 case 0x1E9E : mapChar = 0x00DF; break; 217 case 0x2C62 : mapChar = 0x026B; break; 218 case 0x2C63 : mapChar = 0x1D7D; break; 219 case 0x2C64 : mapChar = 0x027D; break; 220 case 0x2C6D : mapChar = 0x0251; break; 221 case 0x2C6E : mapChar = 0x0271; break; 222 case 0x2C6F : mapChar = 0x0250; break; 223 case 0x2C70 : mapChar = 0x0252; break; 224 case 0x2C7E : mapChar = 0x023F; break; 225 case 0x2C7F : mapChar = 0x0240; break; 226 case 0xA77D : mapChar = 0x1D79; break; 227 case 0xA78D : mapChar = 0x0265; break; 228 case 0xA7AA : mapChar = 0x0266; break; 229 case 0xA7AB : mapChar = 0x025C; break; 230 case 0xA7AC : mapChar = 0x0261; break; 231 case 0xA7AD : mapChar = 0x026C; break; 232 case 0xA7B0 : mapChar = 0x029E; break; 233 case 0xA7B1 : mapChar = 0x0287; break; 234 // default mapChar is already set, so no 235 // need to redo it here. 236 // default : mapChar = ch; 237 } 238 } 239 else { 240 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 241 mapChar = ch + offset; 242 } 243 } 244 return mapChar; 245 } 246 247 int toUpperCase(int ch) { 248 int mapChar = ch; 249 int val = getProperties(ch); 250 251 if ((val & $$maskUpperCase) != 0) { 252 if ((val & $$maskCaseOffset) == $$maskCaseOffset) { 253 switch(ch) { 254 // map chars with overflow offsets 255 case 0x00B5 : mapChar = 0x039C; break; 256 case 0x017F : mapChar = 0x0053; break; 257 case 0x1FBE : mapChar = 0x0399; break; 258 // map char that have both a 1:1 and 1:M map 259 case 0x1F80 : mapChar = 0x1F88; break; 260 case 0x1F81 : mapChar = 0x1F89; break; 261 case 0x1F82 : mapChar = 0x1F8A; break; 262 case 0x1F83 : mapChar = 0x1F8B; break; 263 case 0x1F84 : mapChar = 0x1F8C; break; 264 case 0x1F85 : mapChar = 0x1F8D; break; 265 case 0x1F86 : mapChar = 0x1F8E; break; 266 case 0x1F87 : mapChar = 0x1F8F; break; 267 case 0x1F90 : mapChar = 0x1F98; break; 268 case 0x1F91 : mapChar = 0x1F99; break; 269 case 0x1F92 : mapChar = 0x1F9A; break; 270 case 0x1F93 : mapChar = 0x1F9B; break; 271 case 0x1F94 : mapChar = 0x1F9C; break; 272 case 0x1F95 : mapChar = 0x1F9D; break; 273 case 0x1F96 : mapChar = 0x1F9E; break; 274 case 0x1F97 : mapChar = 0x1F9F; break; 275 case 0x1FA0 : mapChar = 0x1FA8; break; 276 case 0x1FA1 : mapChar = 0x1FA9; break; 277 case 0x1FA2 : mapChar = 0x1FAA; break; 278 case 0x1FA3 : mapChar = 0x1FAB; break; 279 case 0x1FA4 : mapChar = 0x1FAC; break; 280 case 0x1FA5 : mapChar = 0x1FAD; break; 281 case 0x1FA6 : mapChar = 0x1FAE; break; 282 case 0x1FA7 : mapChar = 0x1FAF; break; 283 case 0x1FB3 : mapChar = 0x1FBC; break; 284 case 0x1FC3 : mapChar = 0x1FCC; break; 285 case 0x1FF3 : mapChar = 0x1FFC; break; 286 287 case 0x023F : mapChar = 0x2C7E; break; 288 case 0x0240 : mapChar = 0x2C7F; break; 289 case 0x0250 : mapChar = 0x2C6F; break; 290 case 0x0251 : mapChar = 0x2C6D; break; 291 case 0x0252 : mapChar = 0x2C70; break; 292 case 0x025C : mapChar = 0xA7AB; break; 293 case 0x0261 : mapChar = 0xA7AC; break; 294 case 0x0265 : mapChar = 0xA78D; break; 295 case 0x0266 : mapChar = 0xA7AA; break; 296 case 0x026B : mapChar = 0x2C62; break; 297 case 0x026C : mapChar = 0xA7AD; break; 298 case 0x0271 : mapChar = 0x2C6E; break; 299 case 0x0287 : mapChar = 0xA7B1; break; 300 case 0x029E : mapChar = 0xA7B0; break; 301 case 0x027D : mapChar = 0x2C64; break; 302 case 0x1D79 : mapChar = 0xA77D; break; 303 case 0x1D7D : mapChar = 0x2C63; break; 304 case 0x2C65 : mapChar = 0x023A; break; 305 case 0x2C66 : mapChar = 0x023E; break; 306 case 0x2D00 : mapChar = 0x10A0; break; 307 case 0x2D01 : mapChar = 0x10A1; break; 308 case 0x2D02 : mapChar = 0x10A2; break; 309 case 0x2D03 : mapChar = 0x10A3; break; 310 case 0x2D04 : mapChar = 0x10A4; break; 311 case 0x2D05 : mapChar = 0x10A5; break; 312 case 0x2D06 : mapChar = 0x10A6; break; 313 case 0x2D07 : mapChar = 0x10A7; break; 314 case 0x2D08 : mapChar = 0x10A8; break; 315 case 0x2D09 : mapChar = 0x10A9; break; 316 case 0x2D0A : mapChar = 0x10AA; break; 317 case 0x2D0B : mapChar = 0x10AB; break; 318 case 0x2D0C : mapChar = 0x10AC; break; 319 case 0x2D0D : mapChar = 0x10AD; break; 320 case 0x2D0E : mapChar = 0x10AE; break; 321 case 0x2D0F : mapChar = 0x10AF; break; 322 case 0x2D10 : mapChar = 0x10B0; break; 323 case 0x2D11 : mapChar = 0x10B1; break; 324 case 0x2D12 : mapChar = 0x10B2; break; 325 case 0x2D13 : mapChar = 0x10B3; break; 326 case 0x2D14 : mapChar = 0x10B4; break; 327 case 0x2D15 : mapChar = 0x10B5; break; 328 case 0x2D16 : mapChar = 0x10B6; break; 329 case 0x2D17 : mapChar = 0x10B7; break; 330 case 0x2D18 : mapChar = 0x10B8; break; 331 case 0x2D19 : mapChar = 0x10B9; break; 332 case 0x2D1A : mapChar = 0x10BA; break; 333 case 0x2D1B : mapChar = 0x10BB; break; 334 case 0x2D1C : mapChar = 0x10BC; break; 335 case 0x2D1D : mapChar = 0x10BD; break; 336 case 0x2D1E : mapChar = 0x10BE; break; 337 case 0x2D1F : mapChar = 0x10BF; break; 338 case 0x2D20 : mapChar = 0x10C0; break; 339 case 0x2D21 : mapChar = 0x10C1; break; 340 case 0x2D22 : mapChar = 0x10C2; break; 341 case 0x2D23 : mapChar = 0x10C3; break; 342 case 0x2D24 : mapChar = 0x10C4; break; 343 case 0x2D25 : mapChar = 0x10C5; break; 344 case 0x2D27 : mapChar = 0x10C7; break; 345 case 0x2D2D : mapChar = 0x10CD; break; 346 // ch must have a 1:M case mapping, but we 347 // can't handle it here. Return ch. 348 // since mapChar is already set, no need 349 // to redo it here. 350 //default : mapChar = ch; 351 } 352 } 353 else { 354 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 355 mapChar = ch - offset; 356 } 357 } 358 return mapChar; 359 } 360 361 int toTitleCase(int ch) { 362 int mapChar = ch; 363 int val = getProperties(ch); 364 365 if ((val & $$maskTitleCase) != 0) { 403 } 404 return (value < radix) ? value : -1; 405 } 406 407 int getNumericValue(int ch) { 408 int val = getProperties(ch); 409 int retval = -1; 410 411 switch (val & $$maskNumericType) { 412 default: // cannot occur 413 case ($$valueNotNumeric): // not numeric 414 retval = -1; 415 break; 416 case ($$valueDigit): // simple numeric 417 retval = ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit; 418 break; 419 case ($$valueStrangeNumeric) : // "strange" numeric 420 switch (ch) { 421 case 0x0BF1: retval = 100; break; // TAMIL NUMBER ONE HUNDRED 422 case 0x0BF2: retval = 1000; break; // TAMIL NUMBER ONE THOUSAND 423 case 0x1375: retval = 40; break; // ETHIOPIC NUMBER FORTY 424 case 0x1376: retval = 50; break; // ETHIOPIC NUMBER FIFTY 425 case 0x1377: retval = 60; break; // ETHIOPIC NUMBER SIXTY 426 case 0x1378: retval = 70; break; // ETHIOPIC NUMBER SEVENTY 427 case 0x1379: retval = 80; break; // ETHIOPIC NUMBER EIGHTY 428 case 0x137A: retval = 90; break; // ETHIOPIC NUMBER NINETY 429 case 0x137B: retval = 100; break; // ETHIOPIC NUMBER HUNDRED 430 case 0x137C: retval = 10000; break; // ETHIOPIC NUMBER TEN THOUSAND 431 case 0x215F: retval = 1; break; // FRACTION NUMERATOR ONE 432 case 0x216C: retval = 50; break; // ROMAN NUMERAL FIFTY 433 case 0x216D: retval = 100; break; // ROMAN NUMERAL ONE HUNDRED 434 case 0x216E: retval = 500; break; // ROMAN NUMERAL FIVE HUNDRED 435 case 0x216F: retval = 1000; break; // ROMAN NUMERAL ONE THOUSAND 436 case 0x217C: retval = 50; break; // SMALL ROMAN NUMERAL FIFTY 437 case 0x217D: retval = 100; break; // SMALL ROMAN NUMERAL ONE HUNDRED 438 case 0x217E: retval = 500; break; // SMALL ROMAN NUMERAL FIVE HUNDRED 439 case 0x217F: retval = 1000; break; // SMALL ROMAN NUMERAL ONE THOUSAND 440 case 0x2180: retval = 1000; break; // ROMAN NUMERAL ONE THOUSAND C D 441 case 0x2181: retval = 5000; break; // ROMAN NUMERAL FIVE THOUSAND 442 case 0x2182: retval = 10000; break; // ROMAN NUMERAL TEN THOUSAND 443 444 case 0x324B: retval = 40; break; 445 case 0x324C: retval = 50; break; 446 case 0x324D: retval = 60; break; 447 case 0x324E: retval = 70; break; 448 case 0x324F: retval = 80; break; 449 case 0x325C: retval = 32; break; 450 451 case 0x325D: retval = 33; break; // CIRCLED NUMBER THIRTY THREE 452 case 0x325E: retval = 34; break; // CIRCLED NUMBER THIRTY FOUR 453 case 0x325F: retval = 35; break; // CIRCLED NUMBER THIRTY FIVE 454 case 0x32B1: retval = 36; break; // CIRCLED NUMBER THIRTY SIX 455 case 0x32B2: retval = 37; break; // CIRCLED NUMBER THIRTY SEVEN 456 case 0x32B3: retval = 38; break; // CIRCLED NUMBER THIRTY EIGHT 457 case 0x32B4: retval = 39; break; // CIRCLED NUMBER THIRTY NINE 458 case 0x32B5: retval = 40; break; // CIRCLED NUMBER FORTY 459 case 0x32B6: retval = 41; break; // CIRCLED NUMBER FORTY ONE 460 case 0x32B7: retval = 42; break; // CIRCLED NUMBER FORTY TWO 461 case 0x32B8: retval = 43; break; // CIRCLED NUMBER FORTY THREE 462 case 0x32B9: retval = 44; break; // CIRCLED NUMBER FORTY FOUR 463 case 0x32BA: retval = 45; break; // CIRCLED NUMBER FORTY FIVE 464 case 0x32BB: retval = 46; break; // CIRCLED NUMBER FORTY SIX 465 case 0x32BC: retval = 47; break; // CIRCLED NUMBER FORTY SEVEN 466 case 0x32BD: retval = 48; break; // CIRCLED NUMBER FORTY EIGHT 467 case 0x32BE: retval = 49; break; // CIRCLED NUMBER FORTY NINE 468 case 0x32BF: retval = 50; break; // CIRCLED NUMBER FIFTY 469 470 case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED 471 case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND 472 case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM 473 case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND 474 case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND 475 476 default: retval = -2; break; 477 } 478 break; 479 case ($$valueJavaSupradecimal): // Java supradecimal 480 retval = (ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit) + 10; 481 break; 482 } 483 return retval; 484 } 485 486 boolean isWhitespace(int ch) { 487 int props = getProperties(ch); 488 return ((props & $$maskIdentifierInfo) == $$valueJavaWhitespace); 489 } 490 491 byte getDirectionality(int ch) { 492 int val = getProperties(ch); 493 byte directionality = (byte)((val & $$maskBidi) >> $$shiftBidi); 494 if (directionality == 0xF ) { 495 switch(ch) { 536 } 537 return directionality; 538 } 539 540 boolean isMirrored(int ch) { 541 int props = getProperties(ch); 542 return ((props & $$maskMirrored) != 0); 543 } 544 545 int toUpperCaseEx(int ch) { 546 int mapChar = ch; 547 int val = getProperties(ch); 548 549 if ((val & $$maskUpperCase) != 0) { 550 if ((val & $$maskCaseOffset) != $$maskCaseOffset) { 551 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 552 mapChar = ch - offset; 553 } 554 else { 555 switch(ch) { 556 // map overflow characters 557 case 0x00B5 : mapChar = 0x039C; break; 558 case 0x017F : mapChar = 0x0053; break; 559 case 0x1FBE : mapChar = 0x0399; break; 560 561 case 0x023F : mapChar = 0x2C7E; break; 562 case 0x0240 : mapChar = 0x2C7F; break; 563 case 0x0250 : mapChar = 0x2C6F; break; 564 case 0x0251 : mapChar = 0x2C6D; break; 565 case 0x0252 : mapChar = 0x2C70; break; 566 case 0x025C : mapChar = 0xA7AB; break; 567 case 0x0261 : mapChar = 0xA7AC; break; 568 case 0x0265 : mapChar = 0xA78D; break; 569 case 0x0266 : mapChar = 0xA7AA; break; 570 case 0x026B : mapChar = 0x2C62; break; 571 case 0x026C : mapChar = 0xA7AD; break; 572 case 0x0271 : mapChar = 0x2C6E; break; 573 case 0x027D : mapChar = 0x2C64; break; 574 case 0x0287 : mapChar = 0xA7B1; break; 575 case 0x029E : mapChar = 0xA7B0; break; 576 case 0x1D79 : mapChar = 0xA77D; break; 577 case 0x1D7D : mapChar = 0x2C63; break; 578 case 0x2C65 : mapChar = 0x023A; break; 579 case 0x2C66 : mapChar = 0x023E; break; 580 case 0x2D00 : mapChar = 0x10A0; break; 581 case 0x2D01 : mapChar = 0x10A1; break; 582 case 0x2D02 : mapChar = 0x10A2; break; 583 case 0x2D03 : mapChar = 0x10A3; break; 584 case 0x2D04 : mapChar = 0x10A4; break; 585 case 0x2D05 : mapChar = 0x10A5; break; 586 case 0x2D06 : mapChar = 0x10A6; break; 587 case 0x2D07 : mapChar = 0x10A7; break; 588 case 0x2D08 : mapChar = 0x10A8; break; 589 case 0x2D09 : mapChar = 0x10A9; break; 590 case 0x2D0A : mapChar = 0x10AA; break; 591 case 0x2D0B : mapChar = 0x10AB; break; 592 case 0x2D0C : mapChar = 0x10AC; break; 593 case 0x2D0D : mapChar = 0x10AD; break; 594 case 0x2D0E : mapChar = 0x10AE; break; 595 case 0x2D0F : mapChar = 0x10AF; break; 596 case 0x2D10 : mapChar = 0x10B0; break; 597 case 0x2D11 : mapChar = 0x10B1; break; 598 case 0x2D12 : mapChar = 0x10B2; break; 599 case 0x2D13 : mapChar = 0x10B3; break; 600 case 0x2D14 : mapChar = 0x10B4; break; 601 case 0x2D15 : mapChar = 0x10B5; break; 602 case 0x2D16 : mapChar = 0x10B6; break; 603 case 0x2D17 : mapChar = 0x10B7; break; 604 case 0x2D18 : mapChar = 0x10B8; break; 605 case 0x2D19 : mapChar = 0x10B9; break; 606 case 0x2D1A : mapChar = 0x10BA; break; 607 case 0x2D1B : mapChar = 0x10BB; break; 608 case 0x2D1C : mapChar = 0x10BC; break; 609 case 0x2D1D : mapChar = 0x10BD; break; 610 case 0x2D1E : mapChar = 0x10BE; break; 611 case 0x2D1F : mapChar = 0x10BF; break; 612 case 0x2D20 : mapChar = 0x10C0; break; 613 case 0x2D21 : mapChar = 0x10C1; break; 614 case 0x2D22 : mapChar = 0x10C2; break; 615 case 0x2D23 : mapChar = 0x10C3; break; 616 case 0x2D24 : mapChar = 0x10C4; break; 617 case 0x2D25 : mapChar = 0x10C5; break; 618 case 0x2D27 : mapChar = 0x10C7; break; 619 case 0x2D2D : mapChar = 0x10CD; break; 620 default : mapChar = Character.ERROR; break; 621 } 622 } 623 } 624 return mapChar; 625 } 626 627 char[] toUpperCaseCharArray(int ch) { 628 char[] upperMap = {(char)ch}; 629 int location = findInCharMap(ch); 630 if (location != -1) { 631 upperMap = charMap[location][1]; 632 } 633 return upperMap; 634 } 635 636 637 /** 638 * Finds the character in the uppercase mapping table. 639 * | 119 return ((props & $$maskIdentifierInfo) == $$valueUnicodeStart); 120 } 121 122 boolean isUnicodeIdentifierPart(int ch) { 123 int props = getProperties(ch); 124 return ((props & $$maskUnicodePart) != 0); 125 } 126 127 boolean isIdentifierIgnorable(int ch) { 128 int props = getProperties(ch); 129 return ((props & $$maskIdentifierInfo) == $$valueIgnorable); 130 } 131 132 int toLowerCase(int ch) { 133 int mapChar = ch; 134 int val = getProperties(ch); 135 136 if ((val & $$maskLowerCase) != 0) { 137 if ((val & $$maskCaseOffset) == $$maskCaseOffset) { 138 switch(ch) { 139 case 0x0130: mapChar = 0x0069; break; 140 case 0x023A: mapChar = 0x2C65; break; 141 case 0x023E: mapChar = 0x2C66; break; 142 case 0x10A0: mapChar = 0x2D00; break; 143 case 0x10A1: mapChar = 0x2D01; break; 144 case 0x10A2: mapChar = 0x2D02; break; 145 case 0x10A3: mapChar = 0x2D03; break; 146 case 0x10A4: mapChar = 0x2D04; break; 147 case 0x10A5: mapChar = 0x2D05; break; 148 case 0x10A6: mapChar = 0x2D06; break; 149 case 0x10A7: mapChar = 0x2D07; break; 150 case 0x10A8: mapChar = 0x2D08; break; 151 case 0x10A9: mapChar = 0x2D09; break; 152 case 0x10AA: mapChar = 0x2D0A; break; 153 case 0x10AB: mapChar = 0x2D0B; break; 154 case 0x10AC: mapChar = 0x2D0C; break; 155 case 0x10AD: mapChar = 0x2D0D; break; 156 case 0x10AE: mapChar = 0x2D0E; break; 157 case 0x10AF: mapChar = 0x2D0F; break; 158 case 0x10B0: mapChar = 0x2D10; break; 159 case 0x10B1: mapChar = 0x2D11; break; 160 case 0x10B2: mapChar = 0x2D12; break; 161 case 0x10B3: mapChar = 0x2D13; break; 162 case 0x10B4: mapChar = 0x2D14; break; 163 case 0x10B5: mapChar = 0x2D15; break; 164 case 0x10B6: mapChar = 0x2D16; break; 165 case 0x10B7: mapChar = 0x2D17; break; 166 case 0x10B8: mapChar = 0x2D18; break; 167 case 0x10B9: mapChar = 0x2D19; break; 168 case 0x10BA: mapChar = 0x2D1A; break; 169 case 0x10BB: mapChar = 0x2D1B; break; 170 case 0x10BC: mapChar = 0x2D1C; break; 171 case 0x10BD: mapChar = 0x2D1D; break; 172 case 0x10BE: mapChar = 0x2D1E; break; 173 case 0x10BF: mapChar = 0x2D1F; break; 174 case 0x10C0: mapChar = 0x2D20; break; 175 case 0x10C1: mapChar = 0x2D21; break; 176 case 0x10C2: mapChar = 0x2D22; break; 177 case 0x10C3: mapChar = 0x2D23; break; 178 case 0x10C4: mapChar = 0x2D24; break; 179 case 0x10C5: mapChar = 0x2D25; break; 180 case 0x10C7: mapChar = 0x2D27; break; 181 case 0x10CD: mapChar = 0x2D2D; break; 182 case 0x13A0: mapChar = 0xAB70; break; 183 case 0x13A1: mapChar = 0xAB71; break; 184 case 0x13A2: mapChar = 0xAB72; break; 185 case 0x13A3: mapChar = 0xAB73; break; 186 case 0x13A4: mapChar = 0xAB74; break; 187 case 0x13A5: mapChar = 0xAB75; break; 188 case 0x13A6: mapChar = 0xAB76; break; 189 case 0x13A7: mapChar = 0xAB77; break; 190 case 0x13A8: mapChar = 0xAB78; break; 191 case 0x13A9: mapChar = 0xAB79; break; 192 case 0x13AA: mapChar = 0xAB7A; break; 193 case 0x13AB: mapChar = 0xAB7B; break; 194 case 0x13AC: mapChar = 0xAB7C; break; 195 case 0x13AD: mapChar = 0xAB7D; break; 196 case 0x13AE: mapChar = 0xAB7E; break; 197 case 0x13AF: mapChar = 0xAB7F; break; 198 case 0x13B0: mapChar = 0xAB80; break; 199 case 0x13B1: mapChar = 0xAB81; break; 200 case 0x13B2: mapChar = 0xAB82; break; 201 case 0x13B3: mapChar = 0xAB83; break; 202 case 0x13B4: mapChar = 0xAB84; break; 203 case 0x13B5: mapChar = 0xAB85; break; 204 case 0x13B6: mapChar = 0xAB86; break; 205 case 0x13B7: mapChar = 0xAB87; break; 206 case 0x13B8: mapChar = 0xAB88; break; 207 case 0x13B9: mapChar = 0xAB89; break; 208 case 0x13BA: mapChar = 0xAB8A; break; 209 case 0x13BB: mapChar = 0xAB8B; break; 210 case 0x13BC: mapChar = 0xAB8C; break; 211 case 0x13BD: mapChar = 0xAB8D; break; 212 case 0x13BE: mapChar = 0xAB8E; break; 213 case 0x13BF: mapChar = 0xAB8F; break; 214 case 0x13C0: mapChar = 0xAB90; break; 215 case 0x13C1: mapChar = 0xAB91; break; 216 case 0x13C2: mapChar = 0xAB92; break; 217 case 0x13C3: mapChar = 0xAB93; break; 218 case 0x13C4: mapChar = 0xAB94; break; 219 case 0x13C5: mapChar = 0xAB95; break; 220 case 0x13C6: mapChar = 0xAB96; break; 221 case 0x13C7: mapChar = 0xAB97; break; 222 case 0x13C8: mapChar = 0xAB98; break; 223 case 0x13C9: mapChar = 0xAB99; break; 224 case 0x13CA: mapChar = 0xAB9A; break; 225 case 0x13CB: mapChar = 0xAB9B; break; 226 case 0x13CC: mapChar = 0xAB9C; break; 227 case 0x13CD: mapChar = 0xAB9D; break; 228 case 0x13CE: mapChar = 0xAB9E; break; 229 case 0x13CF: mapChar = 0xAB9F; break; 230 case 0x13D0: mapChar = 0xABA0; break; 231 case 0x13D1: mapChar = 0xABA1; break; 232 case 0x13D2: mapChar = 0xABA2; break; 233 case 0x13D3: mapChar = 0xABA3; break; 234 case 0x13D4: mapChar = 0xABA4; break; 235 case 0x13D5: mapChar = 0xABA5; break; 236 case 0x13D6: mapChar = 0xABA6; break; 237 case 0x13D7: mapChar = 0xABA7; break; 238 case 0x13D8: mapChar = 0xABA8; break; 239 case 0x13D9: mapChar = 0xABA9; break; 240 case 0x13DA: mapChar = 0xABAA; break; 241 case 0x13DB: mapChar = 0xABAB; break; 242 case 0x13DC: mapChar = 0xABAC; break; 243 case 0x13DD: mapChar = 0xABAD; break; 244 case 0x13DE: mapChar = 0xABAE; break; 245 case 0x13DF: mapChar = 0xABAF; break; 246 case 0x13E0: mapChar = 0xABB0; break; 247 case 0x13E1: mapChar = 0xABB1; break; 248 case 0x13E2: mapChar = 0xABB2; break; 249 case 0x13E3: mapChar = 0xABB3; break; 250 case 0x13E4: mapChar = 0xABB4; break; 251 case 0x13E5: mapChar = 0xABB5; break; 252 case 0x13E6: mapChar = 0xABB6; break; 253 case 0x13E7: mapChar = 0xABB7; break; 254 case 0x13E8: mapChar = 0xABB8; break; 255 case 0x13E9: mapChar = 0xABB9; break; 256 case 0x13EA: mapChar = 0xABBA; break; 257 case 0x13EB: mapChar = 0xABBB; break; 258 case 0x13EC: mapChar = 0xABBC; break; 259 case 0x13ED: mapChar = 0xABBD; break; 260 case 0x13EE: mapChar = 0xABBE; break; 261 case 0x13EF: mapChar = 0xABBF; break; 262 case 0x1E9E: mapChar = 0x00DF; break; 263 case 0x1F88: mapChar = 0x1F80; break; 264 case 0x1F89: mapChar = 0x1F81; break; 265 case 0x1F8A: mapChar = 0x1F82; break; 266 case 0x1F8B: mapChar = 0x1F83; break; 267 case 0x1F8C: mapChar = 0x1F84; break; 268 case 0x1F8D: mapChar = 0x1F85; break; 269 case 0x1F8E: mapChar = 0x1F86; break; 270 case 0x1F8F: mapChar = 0x1F87; break; 271 case 0x1F98: mapChar = 0x1F90; break; 272 case 0x1F99: mapChar = 0x1F91; break; 273 case 0x1F9A: mapChar = 0x1F92; break; 274 case 0x1F9B: mapChar = 0x1F93; break; 275 case 0x1F9C: mapChar = 0x1F94; break; 276 case 0x1F9D: mapChar = 0x1F95; break; 277 case 0x1F9E: mapChar = 0x1F96; break; 278 case 0x1F9F: mapChar = 0x1F97; break; 279 case 0x1FA8: mapChar = 0x1FA0; break; 280 case 0x1FA9: mapChar = 0x1FA1; break; 281 case 0x1FAA: mapChar = 0x1FA2; break; 282 case 0x1FAB: mapChar = 0x1FA3; break; 283 case 0x1FAC: mapChar = 0x1FA4; break; 284 case 0x1FAD: mapChar = 0x1FA5; break; 285 case 0x1FAE: mapChar = 0x1FA6; break; 286 case 0x1FAF: mapChar = 0x1FA7; break; 287 case 0x1FBC: mapChar = 0x1FB3; break; 288 case 0x1FCC: mapChar = 0x1FC3; break; 289 case 0x1FFC: mapChar = 0x1FF3; break; 290 case 0x2126: mapChar = 0x03C9; break; 291 case 0x212A: mapChar = 0x006B; break; 292 case 0x212B: mapChar = 0x00E5; break; 293 case 0x2C62: mapChar = 0x026B; break; 294 case 0x2C63: mapChar = 0x1D7D; break; 295 case 0x2C64: mapChar = 0x027D; break; 296 case 0x2C6D: mapChar = 0x0251; break; 297 case 0x2C6E: mapChar = 0x0271; break; 298 case 0x2C6F: mapChar = 0x0250; break; 299 case 0x2C70: mapChar = 0x0252; break; 300 case 0x2C7E: mapChar = 0x023F; break; 301 case 0x2C7F: mapChar = 0x0240; break; 302 case 0xA77D: mapChar = 0x1D79; break; 303 case 0xA78D: mapChar = 0x0265; break; 304 case 0xA7AA: mapChar = 0x0266; break; 305 case 0xA7AB: mapChar = 0x025C; break; 306 case 0xA7AC: mapChar = 0x0261; break; 307 case 0xA7AD: mapChar = 0x026C; break; 308 case 0xA7B0: mapChar = 0x029E; break; 309 case 0xA7B1: mapChar = 0x0287; break; 310 case 0xA7B2: mapChar = 0x029D; break; 311 case 0xA7B3: mapChar = 0xAB53; break; 312 // default mapChar is already set, so no 313 // need to redo it here. 314 // default : mapChar = ch; 315 } 316 } 317 else { 318 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 319 mapChar = ch + offset; 320 } 321 } 322 return mapChar; 323 } 324 325 int toUpperCase(int ch) { 326 int mapChar = ch; 327 int val = getProperties(ch); 328 329 if ((val & $$maskUpperCase) != 0) { 330 if ((val & $$maskCaseOffset) == $$maskCaseOffset) { 331 switch(ch) { 332 case 0x017F: mapChar = 0x0053; break; 333 case 0x023F: mapChar = 0x2C7E; break; 334 case 0x0240: mapChar = 0x2C7F; break; 335 case 0x0250: mapChar = 0x2C6F; break; 336 case 0x0251: mapChar = 0x2C6D; break; 337 case 0x0252: mapChar = 0x2C70; break; 338 case 0x025C: mapChar = 0xA7AB; break; 339 case 0x0261: mapChar = 0xA7AC; break; 340 case 0x0265: mapChar = 0xA78D; break; 341 case 0x0266: mapChar = 0xA7AA; break; 342 case 0x026B: mapChar = 0x2C62; break; 343 case 0x026C: mapChar = 0xA7AD; break; 344 case 0x0271: mapChar = 0x2C6E; break; 345 case 0x027D: mapChar = 0x2C64; break; 346 case 0x0287: mapChar = 0xA7B1; break; 347 case 0x029D: mapChar = 0xA7B2; break; 348 case 0x029E: mapChar = 0xA7B0; break; 349 case 0x1D79: mapChar = 0xA77D; break; 350 case 0x1D7D: mapChar = 0x2C63; break; 351 case 0x1F80: mapChar = 0x1F88; break; 352 case 0x1F81: mapChar = 0x1F89; break; 353 case 0x1F82: mapChar = 0x1F8A; break; 354 case 0x1F83: mapChar = 0x1F8B; break; 355 case 0x1F84: mapChar = 0x1F8C; break; 356 case 0x1F85: mapChar = 0x1F8D; break; 357 case 0x1F86: mapChar = 0x1F8E; break; 358 case 0x1F87: mapChar = 0x1F8F; break; 359 case 0x1F90: mapChar = 0x1F98; break; 360 case 0x1F91: mapChar = 0x1F99; break; 361 case 0x1F92: mapChar = 0x1F9A; break; 362 case 0x1F93: mapChar = 0x1F9B; break; 363 case 0x1F94: mapChar = 0x1F9C; break; 364 case 0x1F95: mapChar = 0x1F9D; break; 365 case 0x1F96: mapChar = 0x1F9E; break; 366 case 0x1F97: mapChar = 0x1F9F; break; 367 case 0x1FA0: mapChar = 0x1FA8; break; 368 case 0x1FA1: mapChar = 0x1FA9; break; 369 case 0x1FA2: mapChar = 0x1FAA; break; 370 case 0x1FA3: mapChar = 0x1FAB; break; 371 case 0x1FA4: mapChar = 0x1FAC; break; 372 case 0x1FA5: mapChar = 0x1FAD; break; 373 case 0x1FA6: mapChar = 0x1FAE; break; 374 case 0x1FA7: mapChar = 0x1FAF; break; 375 case 0x1FB3: mapChar = 0x1FBC; break; 376 case 0x1FBE: mapChar = 0x0399; break; 377 case 0x1FC3: mapChar = 0x1FCC; break; 378 case 0x1FF3: mapChar = 0x1FFC; break; 379 case 0x2C65: mapChar = 0x023A; break; 380 case 0x2C66: mapChar = 0x023E; break; 381 case 0x2D00: mapChar = 0x10A0; break; 382 case 0x2D01: mapChar = 0x10A1; break; 383 case 0x2D02: mapChar = 0x10A2; break; 384 case 0x2D03: mapChar = 0x10A3; break; 385 case 0x2D04: mapChar = 0x10A4; break; 386 case 0x2D05: mapChar = 0x10A5; break; 387 case 0x2D06: mapChar = 0x10A6; break; 388 case 0x2D07: mapChar = 0x10A7; break; 389 case 0x2D08: mapChar = 0x10A8; break; 390 case 0x2D09: mapChar = 0x10A9; break; 391 case 0x2D0A: mapChar = 0x10AA; break; 392 case 0x2D0B: mapChar = 0x10AB; break; 393 case 0x2D0C: mapChar = 0x10AC; break; 394 case 0x2D0D: mapChar = 0x10AD; break; 395 case 0x2D0E: mapChar = 0x10AE; break; 396 case 0x2D0F: mapChar = 0x10AF; break; 397 case 0x2D10: mapChar = 0x10B0; break; 398 case 0x2D11: mapChar = 0x10B1; break; 399 case 0x2D12: mapChar = 0x10B2; break; 400 case 0x2D13: mapChar = 0x10B3; break; 401 case 0x2D14: mapChar = 0x10B4; break; 402 case 0x2D15: mapChar = 0x10B5; break; 403 case 0x2D16: mapChar = 0x10B6; break; 404 case 0x2D17: mapChar = 0x10B7; break; 405 case 0x2D18: mapChar = 0x10B8; break; 406 case 0x2D19: mapChar = 0x10B9; break; 407 case 0x2D1A: mapChar = 0x10BA; break; 408 case 0x2D1B: mapChar = 0x10BB; break; 409 case 0x2D1C: mapChar = 0x10BC; break; 410 case 0x2D1D: mapChar = 0x10BD; break; 411 case 0x2D1E: mapChar = 0x10BE; break; 412 case 0x2D1F: mapChar = 0x10BF; break; 413 case 0x2D20: mapChar = 0x10C0; break; 414 case 0x2D21: mapChar = 0x10C1; break; 415 case 0x2D22: mapChar = 0x10C2; break; 416 case 0x2D23: mapChar = 0x10C3; break; 417 case 0x2D24: mapChar = 0x10C4; break; 418 case 0x2D25: mapChar = 0x10C5; break; 419 case 0x2D27: mapChar = 0x10C7; break; 420 case 0x2D2D: mapChar = 0x10CD; break; 421 case 0xAB53: mapChar = 0xA7B3; break; 422 case 0xAB70: mapChar = 0x13A0; break; 423 case 0xAB71: mapChar = 0x13A1; break; 424 case 0xAB72: mapChar = 0x13A2; break; 425 case 0xAB73: mapChar = 0x13A3; break; 426 case 0xAB74: mapChar = 0x13A4; break; 427 case 0xAB75: mapChar = 0x13A5; break; 428 case 0xAB76: mapChar = 0x13A6; break; 429 case 0xAB77: mapChar = 0x13A7; break; 430 case 0xAB78: mapChar = 0x13A8; break; 431 case 0xAB79: mapChar = 0x13A9; break; 432 case 0xAB7A: mapChar = 0x13AA; break; 433 case 0xAB7B: mapChar = 0x13AB; break; 434 case 0xAB7C: mapChar = 0x13AC; break; 435 case 0xAB7D: mapChar = 0x13AD; break; 436 case 0xAB7E: mapChar = 0x13AE; break; 437 case 0xAB7F: mapChar = 0x13AF; break; 438 case 0xAB80: mapChar = 0x13B0; break; 439 case 0xAB81: mapChar = 0x13B1; break; 440 case 0xAB82: mapChar = 0x13B2; break; 441 case 0xAB83: mapChar = 0x13B3; break; 442 case 0xAB84: mapChar = 0x13B4; break; 443 case 0xAB85: mapChar = 0x13B5; break; 444 case 0xAB86: mapChar = 0x13B6; break; 445 case 0xAB87: mapChar = 0x13B7; break; 446 case 0xAB88: mapChar = 0x13B8; break; 447 case 0xAB89: mapChar = 0x13B9; break; 448 case 0xAB8A: mapChar = 0x13BA; break; 449 case 0xAB8B: mapChar = 0x13BB; break; 450 case 0xAB8C: mapChar = 0x13BC; break; 451 case 0xAB8D: mapChar = 0x13BD; break; 452 case 0xAB8E: mapChar = 0x13BE; break; 453 case 0xAB8F: mapChar = 0x13BF; break; 454 case 0xAB90: mapChar = 0x13C0; break; 455 case 0xAB91: mapChar = 0x13C1; break; 456 case 0xAB92: mapChar = 0x13C2; break; 457 case 0xAB93: mapChar = 0x13C3; break; 458 case 0xAB94: mapChar = 0x13C4; break; 459 case 0xAB95: mapChar = 0x13C5; break; 460 case 0xAB96: mapChar = 0x13C6; break; 461 case 0xAB97: mapChar = 0x13C7; break; 462 case 0xAB98: mapChar = 0x13C8; break; 463 case 0xAB99: mapChar = 0x13C9; break; 464 case 0xAB9A: mapChar = 0x13CA; break; 465 case 0xAB9B: mapChar = 0x13CB; break; 466 case 0xAB9C: mapChar = 0x13CC; break; 467 case 0xAB9D: mapChar = 0x13CD; break; 468 case 0xAB9E: mapChar = 0x13CE; break; 469 case 0xAB9F: mapChar = 0x13CF; break; 470 case 0xABA0: mapChar = 0x13D0; break; 471 case 0xABA1: mapChar = 0x13D1; break; 472 case 0xABA2: mapChar = 0x13D2; break; 473 case 0xABA3: mapChar = 0x13D3; break; 474 case 0xABA4: mapChar = 0x13D4; break; 475 case 0xABA5: mapChar = 0x13D5; break; 476 case 0xABA6: mapChar = 0x13D6; break; 477 case 0xABA7: mapChar = 0x13D7; break; 478 case 0xABA8: mapChar = 0x13D8; break; 479 case 0xABA9: mapChar = 0x13D9; break; 480 case 0xABAA: mapChar = 0x13DA; break; 481 case 0xABAB: mapChar = 0x13DB; break; 482 case 0xABAC: mapChar = 0x13DC; break; 483 case 0xABAD: mapChar = 0x13DD; break; 484 case 0xABAE: mapChar = 0x13DE; break; 485 case 0xABAF: mapChar = 0x13DF; break; 486 case 0xABB0: mapChar = 0x13E0; break; 487 case 0xABB1: mapChar = 0x13E1; break; 488 case 0xABB2: mapChar = 0x13E2; break; 489 case 0xABB3: mapChar = 0x13E3; break; 490 case 0xABB4: mapChar = 0x13E4; break; 491 case 0xABB5: mapChar = 0x13E5; break; 492 case 0xABB6: mapChar = 0x13E6; break; 493 case 0xABB7: mapChar = 0x13E7; break; 494 case 0xABB8: mapChar = 0x13E8; break; 495 case 0xABB9: mapChar = 0x13E9; break; 496 case 0xABBA: mapChar = 0x13EA; break; 497 case 0xABBB: mapChar = 0x13EB; break; 498 case 0xABBC: mapChar = 0x13EC; break; 499 case 0xABBD: mapChar = 0x13ED; break; 500 case 0xABBE: mapChar = 0x13EE; break; 501 case 0xABBF: mapChar = 0x13EF; break; 502 // ch must have a 1:M case mapping, but we 503 // can't handle it here. Return ch. 504 // since mapChar is already set, no need 505 // to redo it here. 506 //default : mapChar = ch; 507 } 508 } 509 else { 510 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 511 mapChar = ch - offset; 512 } 513 } 514 return mapChar; 515 } 516 517 int toTitleCase(int ch) { 518 int mapChar = ch; 519 int val = getProperties(ch); 520 521 if ((val & $$maskTitleCase) != 0) { 559 } 560 return (value < radix) ? value : -1; 561 } 562 563 int getNumericValue(int ch) { 564 int val = getProperties(ch); 565 int retval = -1; 566 567 switch (val & $$maskNumericType) { 568 default: // cannot occur 569 case ($$valueNotNumeric): // not numeric 570 retval = -1; 571 break; 572 case ($$valueDigit): // simple numeric 573 retval = ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit; 574 break; 575 case ($$valueStrangeNumeric) : // "strange" numeric 576 switch (ch) { 577 case 0x0BF1: retval = 100; break; // TAMIL NUMBER ONE HUNDRED 578 case 0x0BF2: retval = 1000; break; // TAMIL NUMBER ONE THOUSAND 579 case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED 580 case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND 581 case 0x1375: retval = 40; break; // ETHIOPIC NUMBER FORTY 582 case 0x1376: retval = 50; break; // ETHIOPIC NUMBER FIFTY 583 case 0x1377: retval = 60; break; // ETHIOPIC NUMBER SIXTY 584 case 0x1378: retval = 70; break; // ETHIOPIC NUMBER SEVENTY 585 case 0x1379: retval = 80; break; // ETHIOPIC NUMBER EIGHTY 586 case 0x137A: retval = 90; break; // ETHIOPIC NUMBER NINETY 587 case 0x137B: retval = 100; break; // ETHIOPIC NUMBER HUNDRED 588 case 0x137C: retval = 10000; break; // ETHIOPIC NUMBER TEN THOUSAND 589 case 0x215F: retval = 1; break; // FRACTION NUMERATOR ONE 590 case 0x216C: retval = 50; break; // ROMAN NUMERAL FIFTY 591 case 0x216D: retval = 100; break; // ROMAN NUMERAL ONE HUNDRED 592 case 0x216E: retval = 500; break; // ROMAN NUMERAL FIVE HUNDRED 593 case 0x216F: retval = 1000; break; // ROMAN NUMERAL ONE THOUSAND 594 case 0x217C: retval = 50; break; // SMALL ROMAN NUMERAL FIFTY 595 case 0x217D: retval = 100; break; // SMALL ROMAN NUMERAL ONE HUNDRED 596 case 0x217E: retval = 500; break; // SMALL ROMAN NUMERAL FIVE HUNDRED 597 case 0x217F: retval = 1000; break; // SMALL ROMAN NUMERAL ONE THOUSAND 598 case 0x2180: retval = 1000; break; // ROMAN NUMERAL ONE THOUSAND C D 599 case 0x2181: retval = 5000; break; // ROMAN NUMERAL FIVE THOUSAND 600 case 0x2182: retval = 10000; break; // ROMAN NUMERAL TEN THOUSAND 601 case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM 602 case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND 603 case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND 604 case 0x324B: retval = 40; break; // CIRCLED NUMBER FORTY ON BLACK SQUARE 605 case 0x324C: retval = 50; break; // CIRCLED NUMBER FIFTY ON BLACK SQUARE 606 case 0x324D: retval = 60; break; // CIRCLED NUMBER SIXTY ON BLACK SQUARE 607 case 0x324E: retval = 70; break; // CIRCLED NUMBER SEVENTY ON BLACK SQUARE 608 case 0x324F: retval = 80; break; // CIRCLED NUMBER EIGHTY ON BLACK SQUARE 609 case 0x325C: retval = 32; break; // CIRCLED NUMBER THIRTY TWO 610 case 0x325D: retval = 33; break; // CIRCLED NUMBER THIRTY THREE 611 case 0x325E: retval = 34; break; // CIRCLED NUMBER THIRTY FOUR 612 case 0x325F: retval = 35; break; // CIRCLED NUMBER THIRTY FIVE 613 case 0x32B1: retval = 36; break; // CIRCLED NUMBER THIRTY SIX 614 case 0x32B2: retval = 37; break; // CIRCLED NUMBER THIRTY SEVEN 615 case 0x32B3: retval = 38; break; // CIRCLED NUMBER THIRTY EIGHT 616 case 0x32B4: retval = 39; break; // CIRCLED NUMBER THIRTY NINE 617 case 0x32B5: retval = 40; break; // CIRCLED NUMBER FORTY 618 case 0x32B6: retval = 41; break; // CIRCLED NUMBER FORTY ONE 619 case 0x32B7: retval = 42; break; // CIRCLED NUMBER FORTY TWO 620 case 0x32B8: retval = 43; break; // CIRCLED NUMBER FORTY THREE 621 case 0x32B9: retval = 44; break; // CIRCLED NUMBER FORTY FOUR 622 case 0x32BA: retval = 45; break; // CIRCLED NUMBER FORTY FIVE 623 case 0x32BB: retval = 46; break; // CIRCLED NUMBER FORTY SIX 624 case 0x32BC: retval = 47; break; // CIRCLED NUMBER FORTY SEVEN 625 case 0x32BD: retval = 48; break; // CIRCLED NUMBER FORTY EIGHT 626 case 0x32BE: retval = 49; break; // CIRCLED NUMBER FORTY NINE 627 case 0x32BF: retval = 50; break; // CIRCLED NUMBER FIFTY 628 default: retval = -2; break; 629 } 630 break; 631 case ($$valueJavaSupradecimal): // Java supradecimal 632 retval = (ch + ((val & $$maskDigitOffset) >> $$shiftDigitOffset) & $$maskDigit) + 10; 633 break; 634 } 635 return retval; 636 } 637 638 boolean isWhitespace(int ch) { 639 int props = getProperties(ch); 640 return ((props & $$maskIdentifierInfo) == $$valueJavaWhitespace); 641 } 642 643 byte getDirectionality(int ch) { 644 int val = getProperties(ch); 645 byte directionality = (byte)((val & $$maskBidi) >> $$shiftBidi); 646 if (directionality == 0xF ) { 647 switch(ch) { 688 } 689 return directionality; 690 } 691 692 boolean isMirrored(int ch) { 693 int props = getProperties(ch); 694 return ((props & $$maskMirrored) != 0); 695 } 696 697 int toUpperCaseEx(int ch) { 698 int mapChar = ch; 699 int val = getProperties(ch); 700 701 if ((val & $$maskUpperCase) != 0) { 702 if ((val & $$maskCaseOffset) != $$maskCaseOffset) { 703 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset); 704 mapChar = ch - offset; 705 } 706 else { 707 switch(ch) { 708 case 0x017F: mapChar = 0x0053; break; 709 case 0x023F: mapChar = 0x2C7E; break; 710 case 0x0240: mapChar = 0x2C7F; break; 711 case 0x0250: mapChar = 0x2C6F; break; 712 case 0x0251: mapChar = 0x2C6D; break; 713 case 0x0252: mapChar = 0x2C70; break; 714 case 0x025C: mapChar = 0xA7AB; break; 715 case 0x0261: mapChar = 0xA7AC; break; 716 case 0x0265: mapChar = 0xA78D; break; 717 case 0x0266: mapChar = 0xA7AA; break; 718 case 0x026B: mapChar = 0x2C62; break; 719 case 0x026C: mapChar = 0xA7AD; break; 720 case 0x0271: mapChar = 0x2C6E; break; 721 case 0x027D: mapChar = 0x2C64; break; 722 case 0x0287: mapChar = 0xA7B1; break; 723 case 0x029D: mapChar = 0xA7B2; break; 724 case 0x029E: mapChar = 0xA7B0; break; 725 case 0x1D79: mapChar = 0xA77D; break; 726 case 0x1D7D: mapChar = 0x2C63; break; 727 case 0x1FBE: mapChar = 0x0399; break; 728 case 0x2C65: mapChar = 0x023A; break; 729 case 0x2C66: mapChar = 0x023E; break; 730 case 0x2D00: mapChar = 0x10A0; break; 731 case 0x2D01: mapChar = 0x10A1; break; 732 case 0x2D02: mapChar = 0x10A2; break; 733 case 0x2D03: mapChar = 0x10A3; break; 734 case 0x2D04: mapChar = 0x10A4; break; 735 case 0x2D05: mapChar = 0x10A5; break; 736 case 0x2D06: mapChar = 0x10A6; break; 737 case 0x2D07: mapChar = 0x10A7; break; 738 case 0x2D08: mapChar = 0x10A8; break; 739 case 0x2D09: mapChar = 0x10A9; break; 740 case 0x2D0A: mapChar = 0x10AA; break; 741 case 0x2D0B: mapChar = 0x10AB; break; 742 case 0x2D0C: mapChar = 0x10AC; break; 743 case 0x2D0D: mapChar = 0x10AD; break; 744 case 0x2D0E: mapChar = 0x10AE; break; 745 case 0x2D0F: mapChar = 0x10AF; break; 746 case 0x2D10: mapChar = 0x10B0; break; 747 case 0x2D11: mapChar = 0x10B1; break; 748 case 0x2D12: mapChar = 0x10B2; break; 749 case 0x2D13: mapChar = 0x10B3; break; 750 case 0x2D14: mapChar = 0x10B4; break; 751 case 0x2D15: mapChar = 0x10B5; break; 752 case 0x2D16: mapChar = 0x10B6; break; 753 case 0x2D17: mapChar = 0x10B7; break; 754 case 0x2D18: mapChar = 0x10B8; break; 755 case 0x2D19: mapChar = 0x10B9; break; 756 case 0x2D1A: mapChar = 0x10BA; break; 757 case 0x2D1B: mapChar = 0x10BB; break; 758 case 0x2D1C: mapChar = 0x10BC; break; 759 case 0x2D1D: mapChar = 0x10BD; break; 760 case 0x2D1E: mapChar = 0x10BE; break; 761 case 0x2D1F: mapChar = 0x10BF; break; 762 case 0x2D20: mapChar = 0x10C0; break; 763 case 0x2D21: mapChar = 0x10C1; break; 764 case 0x2D22: mapChar = 0x10C2; break; 765 case 0x2D23: mapChar = 0x10C3; break; 766 case 0x2D24: mapChar = 0x10C4; break; 767 case 0x2D25: mapChar = 0x10C5; break; 768 case 0x2D27: mapChar = 0x10C7; break; 769 case 0x2D2D: mapChar = 0x10CD; break; 770 case 0xAB53: mapChar = 0xA7B3; break; 771 case 0xAB70: mapChar = 0x13A0; break; 772 case 0xAB71: mapChar = 0x13A1; break; 773 case 0xAB72: mapChar = 0x13A2; break; 774 case 0xAB73: mapChar = 0x13A3; break; 775 case 0xAB74: mapChar = 0x13A4; break; 776 case 0xAB75: mapChar = 0x13A5; break; 777 case 0xAB76: mapChar = 0x13A6; break; 778 case 0xAB77: mapChar = 0x13A7; break; 779 case 0xAB78: mapChar = 0x13A8; break; 780 case 0xAB79: mapChar = 0x13A9; break; 781 case 0xAB7A: mapChar = 0x13AA; break; 782 case 0xAB7B: mapChar = 0x13AB; break; 783 case 0xAB7C: mapChar = 0x13AC; break; 784 case 0xAB7D: mapChar = 0x13AD; break; 785 case 0xAB7E: mapChar = 0x13AE; break; 786 case 0xAB7F: mapChar = 0x13AF; break; 787 case 0xAB80: mapChar = 0x13B0; break; 788 case 0xAB81: mapChar = 0x13B1; break; 789 case 0xAB82: mapChar = 0x13B2; break; 790 case 0xAB83: mapChar = 0x13B3; break; 791 case 0xAB84: mapChar = 0x13B4; break; 792 case 0xAB85: mapChar = 0x13B5; break; 793 case 0xAB86: mapChar = 0x13B6; break; 794 case 0xAB87: mapChar = 0x13B7; break; 795 case 0xAB88: mapChar = 0x13B8; break; 796 case 0xAB89: mapChar = 0x13B9; break; 797 case 0xAB8A: mapChar = 0x13BA; break; 798 case 0xAB8B: mapChar = 0x13BB; break; 799 case 0xAB8C: mapChar = 0x13BC; break; 800 case 0xAB8D: mapChar = 0x13BD; break; 801 case 0xAB8E: mapChar = 0x13BE; break; 802 case 0xAB8F: mapChar = 0x13BF; break; 803 case 0xAB90: mapChar = 0x13C0; break; 804 case 0xAB91: mapChar = 0x13C1; break; 805 case 0xAB92: mapChar = 0x13C2; break; 806 case 0xAB93: mapChar = 0x13C3; break; 807 case 0xAB94: mapChar = 0x13C4; break; 808 case 0xAB95: mapChar = 0x13C5; break; 809 case 0xAB96: mapChar = 0x13C6; break; 810 case 0xAB97: mapChar = 0x13C7; break; 811 case 0xAB98: mapChar = 0x13C8; break; 812 case 0xAB99: mapChar = 0x13C9; break; 813 case 0xAB9A: mapChar = 0x13CA; break; 814 case 0xAB9B: mapChar = 0x13CB; break; 815 case 0xAB9C: mapChar = 0x13CC; break; 816 case 0xAB9D: mapChar = 0x13CD; break; 817 case 0xAB9E: mapChar = 0x13CE; break; 818 case 0xAB9F: mapChar = 0x13CF; break; 819 case 0xABA0: mapChar = 0x13D0; break; 820 case 0xABA1: mapChar = 0x13D1; break; 821 case 0xABA2: mapChar = 0x13D2; break; 822 case 0xABA3: mapChar = 0x13D3; break; 823 case 0xABA4: mapChar = 0x13D4; break; 824 case 0xABA5: mapChar = 0x13D5; break; 825 case 0xABA6: mapChar = 0x13D6; break; 826 case 0xABA7: mapChar = 0x13D7; break; 827 case 0xABA8: mapChar = 0x13D8; break; 828 case 0xABA9: mapChar = 0x13D9; break; 829 case 0xABAA: mapChar = 0x13DA; break; 830 case 0xABAB: mapChar = 0x13DB; break; 831 case 0xABAC: mapChar = 0x13DC; break; 832 case 0xABAD: mapChar = 0x13DD; break; 833 case 0xABAE: mapChar = 0x13DE; break; 834 case 0xABAF: mapChar = 0x13DF; break; 835 case 0xABB0: mapChar = 0x13E0; break; 836 case 0xABB1: mapChar = 0x13E1; break; 837 case 0xABB2: mapChar = 0x13E2; break; 838 case 0xABB3: mapChar = 0x13E3; break; 839 case 0xABB4: mapChar = 0x13E4; break; 840 case 0xABB5: mapChar = 0x13E5; break; 841 case 0xABB6: mapChar = 0x13E6; break; 842 case 0xABB7: mapChar = 0x13E7; break; 843 case 0xABB8: mapChar = 0x13E8; break; 844 case 0xABB9: mapChar = 0x13E9; break; 845 case 0xABBA: mapChar = 0x13EA; break; 846 case 0xABBB: mapChar = 0x13EB; break; 847 case 0xABBC: mapChar = 0x13EC; break; 848 case 0xABBD: mapChar = 0x13ED; break; 849 case 0xABBE: mapChar = 0x13EE; break; 850 case 0xABBF: mapChar = 0x13EF; break; 851 default : mapChar = Character.ERROR; break; 852 } 853 } 854 } 855 return mapChar; 856 } 857 858 char[] toUpperCaseCharArray(int ch) { 859 char[] upperMap = {(char)ch}; 860 int location = findInCharMap(ch); 861 if (location != -1) { 862 upperMap = charMap[location][1]; 863 } 864 return upperMap; 865 } 866 867 868 /** 869 * Finds the character in the uppercase mapping table. 870 * |