1 /*
2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
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 // default mapChar is already set, so no
230 // need to redo it here.
231 // default : mapChar = ch;
232 }
233 }
234 else {
235 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset);
236 mapChar = ch + offset;
237 }
238 }
239 return mapChar;
240 }
241
242 int toUpperCase(int ch) {
243 int mapChar = ch;
244 int val = getProperties(ch);
245
246 if ((val & $$maskUpperCase) != 0) {
247 if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
248 switch(ch) {
267 case 0x1F95 : mapChar = 0x1F9D; break;
268 case 0x1F96 : mapChar = 0x1F9E; break;
269 case 0x1F97 : mapChar = 0x1F9F; break;
270 case 0x1FA0 : mapChar = 0x1FA8; break;
271 case 0x1FA1 : mapChar = 0x1FA9; break;
272 case 0x1FA2 : mapChar = 0x1FAA; break;
273 case 0x1FA3 : mapChar = 0x1FAB; break;
274 case 0x1FA4 : mapChar = 0x1FAC; break;
275 case 0x1FA5 : mapChar = 0x1FAD; break;
276 case 0x1FA6 : mapChar = 0x1FAE; break;
277 case 0x1FA7 : mapChar = 0x1FAF; break;
278 case 0x1FB3 : mapChar = 0x1FBC; break;
279 case 0x1FC3 : mapChar = 0x1FCC; break;
280 case 0x1FF3 : mapChar = 0x1FFC; break;
281
282 case 0x023F : mapChar = 0x2C7E; break;
283 case 0x0240 : mapChar = 0x2C7F; break;
284 case 0x0250 : mapChar = 0x2C6F; break;
285 case 0x0251 : mapChar = 0x2C6D; break;
286 case 0x0252 : mapChar = 0x2C70; break;
287 case 0x0265 : mapChar = 0xA78D; break;
288 case 0x0266 : mapChar = 0xA7AA; break;
289 case 0x026B : mapChar = 0x2C62; break;
290 case 0x0271 : mapChar = 0x2C6E; break;
291 case 0x027D : mapChar = 0x2C64; break;
292 case 0x1D79 : mapChar = 0xA77D; break;
293 case 0x1D7D : mapChar = 0x2C63; break;
294 case 0x2C65 : mapChar = 0x023A; break;
295 case 0x2C66 : mapChar = 0x023E; break;
296 case 0x2D00 : mapChar = 0x10A0; break;
297 case 0x2D01 : mapChar = 0x10A1; break;
298 case 0x2D02 : mapChar = 0x10A2; break;
299 case 0x2D03 : mapChar = 0x10A3; break;
300 case 0x2D04 : mapChar = 0x10A4; break;
301 case 0x2D05 : mapChar = 0x10A5; break;
302 case 0x2D06 : mapChar = 0x10A6; break;
303 case 0x2D07 : mapChar = 0x10A7; break;
304 case 0x2D08 : mapChar = 0x10A8; break;
305 case 0x2D09 : mapChar = 0x10A9; break;
306 case 0x2D0A : mapChar = 0x10AA; break;
307 case 0x2D0B : mapChar = 0x10AB; break;
308 case 0x2D0C : mapChar = 0x10AC; break;
309 case 0x2D0D : mapChar = 0x10AD; break;
310 case 0x2D0E : mapChar = 0x10AE; break;
486 case 0x202A :
487 // This is the only char with LRE
488 directionality = Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING;
489 break;
490 case 0x202B :
491 // This is the only char with RLE
492 directionality = Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING;
493 break;
494 case 0x202C :
495 // This is the only char with PDF
496 directionality = Character.DIRECTIONALITY_POP_DIRECTIONAL_FORMAT;
497 break;
498 case 0x202D :
499 // This is the only char with LRO
500 directionality = Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE;
501 break;
502 case 0x202E :
503 // This is the only char with RLO
504 directionality = Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE;
505 break;
506 default :
507 directionality = Character.DIRECTIONALITY_UNDEFINED;
508 break;
509 }
510 }
511 return directionality;
512 }
513
514 boolean isMirrored(int ch) {
515 int props = getProperties(ch);
516 return ((props & $$maskMirrored) != 0);
517 }
518
519 int toUpperCaseEx(int ch) {
520 int mapChar = ch;
521 int val = getProperties(ch);
522
523 if ((val & $$maskUpperCase) != 0) {
524 if ((val & $$maskCaseOffset) != $$maskCaseOffset) {
525 int offset = val << $$shiftCaseOffsetSign >> ($$shiftCaseOffsetSign+$$shiftCaseOffset);
526 mapChar = ch - offset;
527 }
528 else {
529 switch(ch) {
530 // map overflow characters
531 case 0x00B5 : mapChar = 0x039C; break;
532 case 0x017F : mapChar = 0x0053; break;
533 case 0x1FBE : mapChar = 0x0399; break;
534
535 case 0x023F : mapChar = 0x2C7E; break;
536 case 0x0240 : mapChar = 0x2C7F; break;
537 case 0x0250 : mapChar = 0x2C6F; break;
538 case 0x0251 : mapChar = 0x2C6D; break;
539 case 0x0252 : mapChar = 0x2C70; break;
540 case 0x0265 : mapChar = 0xA78D; break;
541 case 0x0266 : mapChar = 0xA7AA; break;
542 case 0x026B : mapChar = 0x2C62; break;
543 case 0x0271 : mapChar = 0x2C6E; break;
544 case 0x027D : mapChar = 0x2C64; break;
545 case 0x1D79 : mapChar = 0xA77D; break;
546 case 0x1D7D : mapChar = 0x2C63; break;
547 case 0x2C65 : mapChar = 0x023A; break;
548 case 0x2C66 : mapChar = 0x023E; break;
549 case 0x2D00 : mapChar = 0x10A0; break;
550 case 0x2D01 : mapChar = 0x10A1; break;
551 case 0x2D02 : mapChar = 0x10A2; break;
552 case 0x2D03 : mapChar = 0x10A3; break;
553 case 0x2D04 : mapChar = 0x10A4; break;
554 case 0x2D05 : mapChar = 0x10A5; break;
555 case 0x2D06 : mapChar = 0x10A6; break;
556 case 0x2D07 : mapChar = 0x10A7; break;
557 case 0x2D08 : mapChar = 0x10A8; break;
558 case 0x2D09 : mapChar = 0x10A9; break;
559 case 0x2D0A : mapChar = 0x10AA; break;
560 case 0x2D0B : mapChar = 0x10AB; break;
561 case 0x2D0C : mapChar = 0x10AC; break;
562 case 0x2D0D : mapChar = 0x10AD; break;
563 case 0x2D0E : mapChar = 0x10AE; break;
564 case 0x2D0F : mapChar = 0x10AF; break;
|
1 /*
2 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
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) {
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;
496 case 0x202A :
497 // This is the only char with LRE
498 directionality = Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING;
499 break;
500 case 0x202B :
501 // This is the only char with RLE
502 directionality = Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING;
503 break;
504 case 0x202C :
505 // This is the only char with PDF
506 directionality = Character.DIRECTIONALITY_POP_DIRECTIONAL_FORMAT;
507 break;
508 case 0x202D :
509 // This is the only char with LRO
510 directionality = Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE;
511 break;
512 case 0x202E :
513 // This is the only char with RLO
514 directionality = Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE;
515 break;
516 case 0x2066 :
517 // This is the only char with LRI
518 directionality = Character.DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE;
519 break;
520 case 0x2067 :
521 // This is the only char with RLI
522 directionality = Character.DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE;
523 break;
524 case 0x2068 :
525 // This is the only char with FSI
526 directionality = Character.DIRECTIONALITY_FIRST_STRONG_ISOLATE;
527 break;
528 case 0x2069 :
529 // This is the only char with PDI
530 directionality = Character.DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE;
531 break;
532 default :
533 directionality = Character.DIRECTIONALITY_UNDEFINED;
534 break;
535 }
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;
|