1 18 19 package org.apache.batik.gvt.flow; 20 21 import java.text.AttributedCharacterIterator ; 22 import java.text.AttributedString ; 23 import java.util.HashSet ; 24 import java.util.Set ; 25 26 import org.apache.batik.gvt.text.GVTAttributedCharacterIterator; 27 28 public class TextLineBreaks { 29 public static final AttributedCharacterIterator.Attribute WORD_LIMIT = 30 new GVTAttributedCharacterIterator.TextAttribute("WORD_LIMIT"); 31 32 public static final AttributedCharacterIterator.Attribute FLOW_PARAGRAPH 33 = GVTAttributedCharacterIterator.TextAttribute.FLOW_PARAGRAPH; 34 35 public static final AttributedCharacterIterator.Attribute FLOW_LINE_BREAK 36 = GVTAttributedCharacterIterator.TextAttribute.FLOW_LINE_BREAK; 37 38 static Set lineBrks = new HashSet (); 39 40 static { 41 lineBrks.add(FLOW_PARAGRAPH); 42 lineBrks.add(FLOW_LINE_BREAK); 43 } 44 45 static int findComplexBreak(AttributedCharacterIterator aci) 47 { 48 int cnt = 0; 49 for(char ch = aci.current(); 50 ch == AttributedCharacterIterator.DONE; 51 ch = aci.next(), cnt++) { 52 53 57 if (getCharCharClass(ch) != CHAR_CLASS_SA) 58 break; 59 } 60 return cnt; 61 } 62 63 public static void findLineBrk(AttributedString as) { 66 AttributedCharacterIterator aci = as.getIterator(); 67 if (aci.getEndIndex() == 0) 68 return; 69 char ch = aci.current(), prevCh = (char)-1; 70 byte cls = getCharCharClass(ch); 71 byte curCls = cls; 72 byte prevCls = cls; 73 byte prevPrevCls = -1; 74 int wordCnt = 0; 75 int wordBegin = aci.getBeginIndex(); 76 int ich = wordBegin+1; 78 int lineEnd = aci.getRunLimit(lineBrks); 79 80 if (cls >= CHAR_CLASS_CM) cls = CHAR_CLASS_AL; 81 82 for (ch = aci.next(); 83 ch != AttributedCharacterIterator.DONE; 84 ich++, prevCh = ch, ch = aci.next(), 85 prevPrevCls = prevCls, prevCls = curCls) { 86 87 if (ich == lineEnd) { 88 as.addAttribute(WORD_LIMIT, new Integer (wordCnt++), 89 wordBegin, ich); 90 wordBegin = ich; 91 92 cls = getCharCharClass(ch); 93 curCls = cls; 94 prevCls = cls; 95 if (cls >= CHAR_CLASS_CM) cls = CHAR_CLASS_AL; 96 97 lineEnd = aci.getRunLimit(lineBrks); 98 continue; 99 } 100 curCls = getCharCharClass(ch); 102 if (curCls == CHAR_CLASS_SP) { 103 continue; 105 } 106 107 if (curCls == CHAR_CLASS_SA) { 109 ich += findComplexBreak(aci); 110 ch = aci.previous(); 111 if (ch != AttributedCharacterIterator.DONE) 112 prevCls = getCharCharClass(ch); 113 ch = aci.next(); 114 if (ch != AttributedCharacterIterator.DONE) 115 curCls = cls = getCharCharClass(ch); 116 continue; 117 } 118 119 if ((ch == CHAR_ZERO_WIDTH_JOINER) || 122 (prevCh == CHAR_ZERO_WIDTH_JOINER)) 123 continue; 125 if (curCls == CHAR_CLASS_CM) { 127 if (prevCls == CHAR_CLASS_SP) { 128 cls = CHAR_CLASS_ID; 129 if (prevPrevCls != -1) { 130 if (brkPairs[prevPrevCls][CHAR_CLASS_ID] == 131 BREAK_ACTION_DIRECT) { 132 as.addAttribute(WORD_LIMIT, new Integer (wordCnt++), 133 wordBegin, ich-1); 134 wordBegin = ich-1; 135 } else { 137 } 139 } 140 } 141 continue; 143 } 144 145 byte brk = brkPairs[cls][curCls]; 147 148 if (brk == BREAK_ACTION_DIRECT) { 149 as.addAttribute(WORD_LIMIT, new Integer (wordCnt++), 150 wordBegin, ich); 151 wordBegin = ich; 152 } else if (brk == BREAK_ACTION_INDIRECT) { 154 if (prevCls == CHAR_CLASS_SP) { 155 as.addAttribute(WORD_LIMIT, new Integer (wordCnt++), 156 wordBegin, ich); 157 wordBegin = ich; 158 } 159 } 163 cls = curCls; 164 } 165 166 as.addAttribute(WORD_LIMIT, new Integer (wordCnt++), 168 wordBegin, ich); 169 wordBegin = ich; 170 172 return; 173 } 174 175 public static byte[] stringToLineBreakClasses(String s) { 176 int len = s.length(); 177 byte[] ret = new byte[len]; 178 for (int i=0; i<len; i++) { 179 ret[i] = getCharCharClass(s.charAt(i)); 180 } 181 return ret; 182 } 183 184 public static byte getCharCharClass(char ch) { 185 if (ch < QUICK_LUT_SIZE) { 186 if (quickLut == null) buildQuickLut(); 187 return quickLut[ch]; 188 } 189 int len = raw_data.length; 190 int l = 0; 191 int r = (len/2)-1; 192 int entry = (l+r)/2; 193 while(l <= r) { 194 char min = raw_data[2*entry]; 195 char max = raw_data[2*entry+1]; 196 if (ch < min) r = entry-1; 197 else if (ch > max) l = entry+1; 198 else break; 199 entry = (l+r)/2; 200 } 201 return raw_classes[entry]; 202 } 203 204 public final static char CHAR_ZERO_WIDTH_JOINER = 0x200D; 205 206 protected final static int QUICK_LUT_SIZE = 256; 207 208 protected static void buildQuickLut() { 209 int entry = 0; 210 quickLut = new byte[QUICK_LUT_SIZE]; 211 int i=0; 212 while (i<QUICK_LUT_SIZE) { 213 int max = raw_data[2*entry+1]; 214 byte cls = raw_classes[entry]; 215 while (i<=max) { 216 quickLut[i] = cls; 217 i++; 218 if (i>=QUICK_LUT_SIZE) break; 219 } 220 entry++; 221 } 222 } 223 224 final public static byte BREAK_ACTION_DIRECT = 0; 226 final public static byte BREAK_ACTION_INDIRECT = 1; 228 final public static byte BREAK_ACTION_PROHIBITED = 2; 230 231 final public static String [] brkStrs = { "DB", "IB", "PB" }; 232 233 final public static byte CHAR_CLASS_OP = 0; 235 final public static byte CHAR_CLASS_CL = 1; 236 final public static byte CHAR_CLASS_QU = 2; 237 final public static byte CHAR_CLASS_GL = 3; 238 final public static byte CHAR_CLASS_NS = 4; 239 final public static byte CHAR_CLASS_EX = 5; 240 final public static byte CHAR_CLASS_SY = 6; 241 final public static byte CHAR_CLASS_IS = 7; 242 final public static byte CHAR_CLASS_PR = 8; 243 final public static byte CHAR_CLASS_PO = 9; 244 final public static byte CHAR_CLASS_NU = 10; 245 final public static byte CHAR_CLASS_AL = 11; 246 final public static byte CHAR_CLASS_ID = 12; 247 final public static byte CHAR_CLASS_IN = 13; 248 final public static byte CHAR_CLASS_HY = 14; 249 final public static byte CHAR_CLASS_BA = 15; 250 final public static byte CHAR_CLASS_BB = 16; 251 final public static byte CHAR_CLASS_B2 = 17; 252 final public static byte CHAR_CLASS_ZW = 18; 253 final public static byte CHAR_CLASS_CM = 19; 254 255 final public static byte CHAR_CLASS_SA = 20; 256 final public static byte CHAR_CLASS_SP = 21; 257 final public static byte CHAR_CLASS_BK = 22; 258 final public static byte CHAR_CLASS_AI = 23; 259 final public static byte CHAR_CLASS_CR = 24; 260 final public static byte CHAR_CLASS_LF = 25; 261 final public static byte CHAR_CLASS_SG = 26; 262 final public static byte CHAR_CLASS_XX = 27; 263 final public static byte CHAR_CLASS_CB = 28; 264 265 final public static String [] clsStrs = { 266 "OP", "CL", "QU", "GL", "NS", "EX", "SY", "IS", "PR", "PO", 267 "NU", "AL", "ID", "IN", "HY", "BA", "BB", "B2", "ZW", "CM", 268 "SA", "SP", "BK", "AI", "CR", "LF", "SG", "XX", "CB" }; 269 270 static byte [][]brkPairs = 271 { { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }, 274 { 0, 2, 1, 1, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 277 { 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1 }, 280 { 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1 }, 283 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 286 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 289 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 292 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 295 { 1, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1 }, 298 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 301 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 1 }, 304 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 2, 1 }, 307 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1 }, 310 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1 }, 313 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 316 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1 }, 319 { 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1 }, 322 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2, 1 }, 325 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1 }, 328 { 0, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 2, 1 }}; 331 332 static byte [] quickLut = null; 333 334 final static char [] raw_data = { 335 0x0000, 0x0008, 336 0x0009, 0x0009, 337 0x000A, 0x000A, 338 0x000B, 0x000B, 339 0x000C, 0x000C, 340 0x000D, 0x000D, 341 0x000E, 0x001F, 342 0x0020, 0x0020, 343 0x0021, 0x0021, 344 0x0022, 0x0022, 345 0x0023, 0x0023, 346 0x0024, 0x0024, 347 0x0025, 0x0025, 348 0x0026, 0x0026, 349 0x0027, 0x0027, 350 0x0028, 0x0028, 351 0x0029, 0x0029, 352 0x002A, 0x002A, 353 0x002B, 0x002B, 354 0x002C, 0x002C, 355 0x002D, 0x002D, 356 0x002E, 0x002E, 357 0x002F, 0x002F, 358 0x0030, 0x0039, 359 0x003A, 0x003B, 360 0x003C, 0x003E, 361 0x003F, 0x003F, 362 0x0040, 0x005A, 363 0x005B, 0x005B, 364 0x005C, 0x005C, 365 0x005D, 0x005D, 366 0x005E, 0x007A, 367 0x007B, 0x007B, 368 0x007C, 0x007C, 369 0x007D, 0x007D, 370 0x007E, 0x007E, 371 0x007F, 0x009F, 372 0x00A0, 0x00A0, 373 0x00A1, 0x00A1, 374 0x00A2, 0x00A2, 375 0x00A3, 0x00A5, 376 0x00A6, 0x00A6, 377 0x00A7, 0x00A8, 378 0x00A9, 0x00A9, 379 0x00AA, 0x00AA, 380 0x00AB, 0x00AB, 381 0x00AC, 0x00AC, 382 0x00AD, 0x00AD, 383 0x00AE, 0x00AF, 384 0x00B0, 0x00B0, 385 0x00B1, 0x00B1, 386 0x00B2, 0x00B3, 387 0x00B4, 0x00B4, 388 0x00B5, 0x00B5, 389 0x00B6, 0x00BA, 390 0x00BB, 0x00BB, 391 0x00BC, 0x00BF, 392 0x00C0, 0x00C5, 393 0x00C6, 0x00C6, 394 0x00C7, 0x00CF, 395 0x00D0, 0x00D0, 396 0x00D1, 0x00D6, 397 0x00D7, 0x00D8, 398 0x00D9, 0x00DD, 399 0x00DE, 0x00E1, 400 0x00E2, 0x00E5, 401 0x00E6, 0x00E6, 402 0x00E7, 0x00E7, 403 0x00E8, 0x00EA, 404 0x00EB, 0x00EB, 405 0x00EC, 0x00ED, 406 0x00EE, 0x00EF, 407 0x00F0, 0x00F0, 408 0x00F1, 0x00F1, 409 0x00F2, 0x00F3, 410 0x00F4, 0x00F6, 411 0x00F7, 0x00FA, 412 0x00FB, 0x00FB, 413 0x00FC, 0x00FC, 414 0x00FD, 0x00FD, 415 0x00FE, 0x00FE, 416 0x00FF, 0x0100, 417 0x0101, 0x0101, 418 0x0102, 0x0110, 419 0x0111, 0x0111, 420 0x0112, 0x0112, 421 0x0113, 0x0113, 422 0x0114, 0x011A, 423 0x011B, 0x011B, 424 0x011C, 0x0125, 425 0x0126, 0x0127, 426 0x0128, 0x012A, 427 0x012B, 0x012B, 428 0x012C, 0x0130, 429 0x0131, 0x0133, 430 0x0134, 0x0137, 431 0x0138, 0x0138, 432 0x0139, 0x013E, 433 0x013F, 0x0142, 434 0x0143, 0x0143, 435 0x0144, 0x0144, 436 0x0145, 0x0147, 437 0x0148, 0x014A, 438 0x014B, 0x014C, 439 0x014D, 0x014D, 440 0x014E, 0x0151, 441 0x0152, 0x0153, 442 0x0154, 0x0165, 443 0x0166, 0x0167, 444 0x0168, 0x016A, 445 0x016B, 0x016B, 446 0x016C, 0x01CD, 447 0x01CE, 0x01CE, 448 0x01CF, 0x01CF, 449 0x01D0, 0x01D0, 450 0x01D1, 0x01D1, 451 0x01D2, 0x01D2, 452 0x01D3, 0x01D3, 453 0x01D4, 0x01D4, 454 0x01D5, 0x01D5, 455 0x01D6, 0x01D6, 456 0x01D7, 0x01D7, 457 0x01D8, 0x01D8, 458 0x01D9, 0x01D9, 459 0x01DA, 0x01DA, 460 0x01DB, 0x01DB, 461 0x01DC, 0x01DC, 462 0x01DD, 0x0250, 463 0x0251, 0x0251, 464 0x0252, 0x0260, 465 0x0261, 0x0261, 466 0x0262, 0x02C6, 467 0x02C7, 0x02C7, 468 0x02C8, 0x02C8, 469 0x02C9, 0x02CB, 470 0x02CC, 0x02CC, 471 0x02CD, 0x02CD, 472 0x02CE, 0x02CF, 473 0x02D0, 0x02D0, 474 0x02D1, 0x02D7, 475 0x02D8, 0x02DB, 476 0x02DC, 0x02DC, 477 0x02DD, 0x02DD, 478 0x02DE, 0x02EE, 479 0x0300, 0x036F, 480 0x0374, 0x0390, 481 0x0391, 0x03A9, 482 0x03AA, 0x03B0, 483 0x03B1, 0x03C1, 484 0x03C2, 0x03C2, 485 0x03C3, 0x03C9, 486 0x03CA, 0x0400, 487 0x0401, 0x0401, 488 0x0402, 0x040F, 489 0x0410, 0x044F, 490 0x0450, 0x0450, 491 0x0451, 0x0451, 492 0x0452, 0x0482, 493 0x0483, 0x0489, 494 0x048A, 0x0587, 495 0x0589, 0x0589, 496 0x058A, 0x058A, 497 0x0591, 0x05BD, 498 0x05BE, 0x05BE, 499 0x05BF, 0x05BF, 500 0x05C0, 0x05C0, 501 0x05C1, 0x05C2, 502 0x05C3, 0x05C3, 503 0x05C4, 0x05C4, 504 0x05D0, 0x064A, 505 0x064B, 0x0655, 506 0x0660, 0x0669, 507 0x066A, 0x066F, 508 0x0670, 0x0670, 509 0x0671, 0x06D5, 510 0x06D6, 0x06E4, 511 0x06E5, 0x06E6, 512 0x06E7, 0x06E8, 513 0x06E9, 0x06E9, 514 0x06EA, 0x06ED, 515 0x06F0, 0x06F9, 516 0x06FA, 0x070D, 517 0x070F, 0x070F, 518 0x0710, 0x0710, 519 0x0711, 0x0711, 520 0x0712, 0x072C, 521 0x0730, 0x074A, 522 0x0780, 0x07A5, 523 0x07A6, 0x07B0, 524 0x07B1, 0x07B1, 525 0x0901, 0x0903, 526 0x0905, 0x0939, 527 0x093C, 0x093C, 528 0x093D, 0x093D, 529 0x093E, 0x094D, 530 0x0950, 0x0950, 531 0x0951, 0x0954, 532 0x0958, 0x0961, 533 0x0962, 0x0963, 534 0x0964, 0x0965, 535 0x0966, 0x096F, 536 0x0970, 0x0970, 537 0x0981, 0x0983, 538 0x0985, 0x09B9, 539 0x09BC, 0x09D7, 540 0x09DC, 0x09E1, 541 0x09E2, 0x09E3, 542 0x09E6, 0x09EF, 543 0x09F0, 0x09F1, 544 0x09F2, 0x09F3, 545 0x09F4, 0x09FA, 546 0x0A02, 0x0A02, 547 0x0A05, 0x0A39, 548 0x0A3C, 0x0A4D, 549 0x0A59, 0x0A5E, 550 0x0A66, 0x0A6F, 551 0x0A70, 0x0A71, 552 0x0A72, 0x0A74, 553 0x0A81, 0x0A83, 554 0x0A85, 0x0AB9, 555 0x0ABC, 0x0ABC, 556 0x0ABD, 0x0ABD, 557 0x0ABE, 0x0ACD, 558 0x0AD0, 0x0AE0, 559 0x0AE6, 0x0AEF, 560 0x0B01, 0x0B03, 561 0x0B05, 0x0B39, 562 0x0B3C, 0x0B3C, 563 0x0B3D, 0x0B3D, 564 0x0B3E, 0x0B57, 565 0x0B5C, 0x0B61, 566 0x0B66, 0x0B6F, 567 0x0B70, 0x0B70, 568 0x0B82, 0x0B82, 569 0x0B83, 0x0BB9, 570 0x0BBE, 0x0BD7, 571 0x0BE7, 0x0BEF, 572 0x0BF0, 0x0BF2, 573 0x0C01, 0x0C03, 574 0x0C05, 0x0C39, 575 0x0C3E, 0x0C56, 576 0x0C60, 0x0C61, 577 0x0C66, 0x0C6F, 578 0x0C82, 0x0C83, 579 0x0C85, 0x0CB9, 580 0x0CBE, 0x0CD6, 581 0x0CDE, 0x0CE1, 582 0x0CE6, 0x0CEF, 583 0x0D02, 0x0D03, 584 0x0D05, 0x0D39, 585 0x0D3E, 0x0D57, 586 0x0D60, 0x0D61, 587 0x0D66, 0x0D6F, 588 0x0D82, 0x0D83, 589 0x0D85, 0x0DC6, 590 0x0DCA, 0x0DF3, 591 0x0DF4, 0x0DF4, 592 0x0E01, 0x0E30, 593 0x0E31, 0x0E31, 594 0x0E32, 0x0E33, 595 0x0E34, 0x0E3A, 596 0x0E3F, 0x0E3F, 597 0x0E40, 0x0E46, 598 0x0E47, 0x0E4E, 599 0x0E4F, 0x0E4F, 600 0x0E50, 0x0E59, 601 0x0E5A, 0x0E5B, 602 0x0E81, 0x0EB0, 603 0x0EB1, 0x0EB1, 604 0x0EB2, 0x0EB3, 605 0x0EB4, 0x0EBC, 606 0x0EBD, 0x0EC6, 607 0x0EC8, 0x0ECD, 608 0x0ED0, 0x0ED9, 609 0x0EDC, 0x0EDD, 610 0x0F00, 0x0F0A, 611 0x0F0B, 0x0F0B, 612 0x0F0C, 0x0F0C, 613 0x0F0D, 0x0F17, 614 0x0F18, 0x0F19, 615 0x0F1A, 0x0F1F, 616 0x0F20, 0x0F29, 617 0x0F2A, 0x0F34, 618 0x0F35, 0x0F35, 619 0x0F36, 0x0F36, 620 0x0F37, 0x0F37, 621 0x0F38, 0x0F38, 622 0x0F39, 0x0F39, 623 0x0F3A, 0x0F3A, 624 0x0F3B, 0x0F3B, 625 0x0F3C, 0x0F3C, 626 0x0F3D, 0x0F3D, 627 0x0F3E, 0x0F3F, 628 0x0F40, 0x0F6A, 629 0x0F71, 0x0F84, 630 0x0F85, 0x0F85, 631 0x0F86, 0x0F87, 632 0x0F88, 0x0F8B, 633 0x0F90, 0x0FBC, 634 0x0FBE, 0x0FC5, 635 0x0FC6, 0x0FC6, 636 0x0FC7, 0x0FCF, 637 0x1000, 0x102A, 638 0x102C, 0x1039, 639 0x1040, 0x1049, 640 0x104A, 0x104F, 641 0x1050, 0x1055, 642 0x1056, 0x1059, 643 0x10A0, 0x10FB, 644 0x1100, 0x115F, 645 0x1160, 0x11F9, 646 0x1200, 0x135A, 647 0x1361, 0x1361, 648 0x1362, 0x1368, 649 0x1369, 0x1371, 650 0x1372, 0x1676, 651 0x1680, 0x1680, 652 0x1681, 0x169A, 653 0x169B, 0x169B, 654 0x169C, 0x169C, 655 0x16A0, 0x1711, 656 0x1712, 0x1714, 657 0x1720, 0x1731, 658 0x1732, 0x1734, 659 0x1735, 0x1751, 660 0x1752, 0x1753, 661 0x1760, 0x1770, 662 0x1772, 0x1773, 663 0x1780, 0x17B3, 664 0x17B4, 0x17D3, 665 0x17D4, 0x17D4, 666 0x17D5, 0x17D5, 667 0x17D6, 0x17DA, 668 0x17DB, 0x17DB, 669 0x17DC, 0x17DC, 670 0x17E0, 0x17E9, 671 0x1800, 0x1805, 672 0x1806, 0x1806, 673 0x1807, 0x180A, 674 0x180B, 0x180E, 675 0x1810, 0x1819, 676 0x1820, 0x18A8, 677 0x18A9, 0x18A9, 678 0x1E00, 0x1FFE, 679 0x2000, 0x2006, 680 0x2007, 0x2007, 681 0x2008, 0x200A, 682 0x200B, 0x200B, 683 0x200C, 0x200F, 684 0x2010, 0x2010, 685 0x2011, 0x2011, 686 0x2012, 0x2013, 687 0x2014, 0x2014, 688 0x2015, 0x2016, 689 0x2017, 0x2017, 690 0x2018, 0x2019, 691 0x201A, 0x201A, 692 0x201B, 0x201D, 693 0x201E, 0x201E, 694 0x201F, 0x201F, 695 0x2020, 0x2021, 696 0x2022, 0x2023, 697 0x2024, 0x2026, 698 0x2027, 0x2027, 699 0x2028, 0x2029, 700 0x202A, 0x202E, 701 0x202F, 0x202F, 702 0x2030, 0x2037, 703 0x2038, 0x2038, 704 0x2039, 0x203A, 705 0x203B, 0x203B, 706 0x203C, 0x203C, 707 0x203D, 0x2043, 708 0x2044, 0x2044, 709 0x2045, 0x2045, 710 0x2046, 0x2046, 711 0x2047, 0x2057, 712 0x205F, 0x205F, 713 0x2060, 0x2060, 714 0x2061, 0x2063, 715 0x206A, 0x206F, 716 0x2070, 0x2071, 717 0x2074, 0x2074, 718 0x2075, 0x207C, 719 0x207D, 0x207D, 720 0x207E, 0x207E, 721 0x207F, 0x207F, 722 0x2080, 0x2080, 723 0x2081, 0x2084, 724 0x2085, 0x208C, 725 0x208D, 0x208D, 726 0x208E, 0x208E, 727 0x20A0, 0x20A6, 728 0x20A7, 0x20A7, 729 0x20A8, 0x20B1, 730 0x20D0, 0x20EA, 731 0x2100, 0x2102, 732 0x2103, 0x2103, 733 0x2104, 0x2104, 734 0x2105, 0x2105, 735 0x2106, 0x2108, 736 0x2109, 0x2109, 737 0x210A, 0x2112, 738 0x2113, 0x2113, 739 0x2114, 0x2115, 740 0x2116, 0x2116, 741 0x2117, 0x2120, 742 0x2121, 0x2122, 743 0x2123, 0x2125, 744 0x2126, 0x2126, 745 0x2127, 0x212A, 746 0x212B, 0x212B, 747 0x212C, 0x213F, 748 0x2140, 0x2140, 749 0x2141, 0x2153, 750 0x2154, 0x2155, 751 0x2156, 0x215A, 752 0x215B, 0x215B, 753 0x215C, 0x215D, 754 0x215E, 0x215E, 755 0x215F, 0x215F, 756 0x2160, 0x216B, 757 0x216C, 0x216F, 758 0x2170, 0x2179, 759 0x217A, 0x2183, 760 0x2190, 0x2199, 761 0x219A, 0x21D1, 762 0x21D2, 0x21D2, 763 0x21D3, 0x21D3, 764 0x21D4, 0x21D4, 765 0x21D5, 0x21FF, 766 0x2200, 0x2200, 767 0x2201, 0x2201, 768 0x2202, 0x2203, 769 0x2204, 0x2206, 770 0x2207, 0x2208, 771 0x2209, 0x220A, 772 0x220B, 0x220B, 773 0x220C, 0x220E, 774 0x220F, 0x220F, 775 0x2210, 0x2210, 776 0x2211, 0x2211, 777 0x2212, 0x2213, 778 0x2214, 0x2214, 779 0x2215, 0x2215, 780 0x2216, 0x2219, 781 0x221A, 0x221A, 782 0x221B, 0x221C, 783 0x221D, 0x2220, 784 0x2221, 0x2222, 785 0x2223, 0x2223, 786 0x2224, 0x2224, 787 0x2225, 0x2225, 788 0x2226, 0x2226, 789 0x2227, 0x222C, 790 0x222D, 0x222D, 791 0x222E, 0x222E, 792 0x222F, 0x2233, 793 0x2234, 0x2237, 794 0x2238, 0x223B, 795 0x223C, 0x223D, 796 0x223E, 0x2247, 797 0x2248, 0x2248, 798 0x2249, 0x224B, 799 0x224C, 0x224C, 800 0x224D, 0x2251, 801 0x2252, 0x2252, 802 0x2253, 0x225F, 803 0x2260, 0x2261, 804 0x2262, 0x2263, 805 0x2264, 0x2267, 806 0x2268, 0x2269, 807 0x226A, 0x226B, 808 0x226C, 0x226D, 809 0x226E, 0x226F, 810 0x2270, 0x2281, 811 0x2282, 0x2283, 812 0x2284, 0x2285, 813 0x2286, 0x2287, 814 0x2288, 0x2294, 815 0x2295, 0x2295, 816 0x2296, 0x2298, 817 0x2299, 0x2299, 818 0x229A, 0x22A4, 819 0x22A5, 0x22A5, 820 0x22A6, 0x22BE, 821 0x22BF, 0x22BF, 822 0x22C0, 0x2311, 823 0x2312, 0x2312, 824 0x2313, 0x2328, 825 0x2329, 0x2329, 826 0x232A, 0x232A, 827 0x232B, 0x23B3, 828 0x23B4, 0x23B4, 829 0x23B5, 0x23B5, 830 0x23B6, 0x23B6, 831 0x23B7, 0x244A, 832 0x2460, 0x24BF, 833 0x24C0, 0x24CF, 834 0x24D0, 0x24E9, 835 0x24EA, 0x24EA, 836 0x24EB, 0x254B, 837 0x254C, 0x254F, 838 0x2550, 0x2574, 839 0x2575, 0x257F, 840 0x2580, 0x258F, 841 0x2590, 0x2591, 842 0x2592, 0x2595, 843 0x2596, 0x259F, 844 0x25A0, 0x25A1, 845 0x25A2, 0x25A2, 846 0x25A3, 0x25A9, 847 0x25AA, 0x25B1, 848 0x25B2, 0x25B3, 849 0x25B4, 0x25B5, 850 0x25B6, 0x25B7, 851 0x25B8, 0x25BB, 852 0x25BC, 0x25BD, 853 0x25BE, 0x25BF, 854 0x25C0, 0x25C1, 855 0x25C2, 0x25C5, 856 0x25C6, 0x25C8, 857 0x25C9, 0x25CA, 858 0x25CB, 0x25CB, 859 0x25CC, 0x25CD, 860 0x25CE, 0x25D1, 861 0x25D2, 0x25E1, 862 0x25E2, 0x25E5, 863 0x25E6, 0x25EE, 864 0x25EF, 0x25EF, 865 0x25F0, 0x2604, 866 0x2605, 0x2606, 867 0x2607, 0x2608, 868 0x2609, 0x2609, 869 0x260A, 0x260D, 870 0x260E, 0x260F, 871 0x2610, 0x2613, 872 0x2616, 0x2617, 873 0x2619, 0x261B, 874 0x261C, 0x261C, 875 0x261D, 0x261D, 876 0x261E, 0x261E, 877 0x261F, 0x263F, 878 0x2640, 0x2640, 879 0x2641, 0x2641, 880 0x2642, 0x2642, 881 0x2643, 0x265F, 882 0x2660, 0x2661, 883 0x2662, 0x2662, 884 0x2663, 0x2665, 885 0x2666, 0x2666, 886 0x2667, 0x266A, 887 0x266B, 0x266B, 888 0x266C, 0x266D, 889 0x266E, 0x266E, 890 0x266F, 0x266F, 891 0x2670, 0x275A, 892 0x275B, 0x275E, 893 0x2761, 0x2761, 894 0x2762, 0x2763, 895 0x2764, 0x2767, 896 0x2768, 0x2768, 897 0x2769, 0x2769, 898 0x276A, 0x276A, 899 0x276B, 0x276B, 900 0x276C, 0x276C, 901 0x276D, 0x276D, 902 0x276E, 0x276E, 903 0x276F, 0x276F, 904 0x2770, 0x2770, 905 0x2771, 0x2771, 906 0x2772, 0x2772, 907 0x2773, 0x2773, 908 0x2774, 0x2774, 909 0x2775, 0x2775, 910 0x2776, 0x27E5, 911 0x27E6, 0x27E6, 912 0x27E7, 0x27E7, 913 0x27E8, 0x27E8, 914 0x27E9, 0x27E9, 915 0x27EA, 0x27EA, 916 0x27EB, 0x27EB, 917 0x27F0, 0x2982, 918 0x2983, 0x2983, 919 0x2984, 0x2984, 920 0x2985, 0x2985, 921 0x2986, 0x2986, 922 0x2987, 0x2987, 923 0x2988, 0x2988, 924 0x2989, 0x2989, 925 0x298A, 0x298A, 926 0x298B, 0x298B, 927 0x298C, 0x298C, 928 0x298D, 0x298D, 929 0x298E, 0x298E, 930 0x298F, 0x298F, 931 0x2990, 0x2990, 932 0x2991, 0x2991, 933 0x2992, 0x2992, 934 0x2993, 0x2993, 935 0x2994, 0x2994, 936 0x2995, 0x2995, 937 0x2996, 0x2996, 938 0x2997, 0x2997, 939 0x2998, 0x2998, 940 0x2999, 0x29D7, 941 0x29D8, 0x29D8, 942 0x29D9, 0x29D9, 943 0x29DA, 0x29DA, 944 0x29DB, 0x29DB, 945 0x29DC, 0x29FB, 946 0x29FC, 0x29FC, 947 0x29FD, 0x29FD, 948 0x29FE, 0x2AFF, 949 0x2E80, 0x3000, 950 0x3001, 0x3002, 951 0x3003, 0x3004, 952 0x3005, 0x3005, 953 0x3006, 0x3007, 954 0x3008, 0x3008, 955 0x3009, 0x3009, 956 0x300A, 0x300A, 957 0x300B, 0x300B, 958 0x300C, 0x300C, 959 0x300D, 0x300D, 960 0x300E, 0x300E, 961 0x300F, 0x300F, 962 0x3010, 0x3010, 963 0x3011, 0x3011, 964 0x3012, 0x3013, 965 0x3014, 0x3014, 966 0x3015, 0x3015, 967 0x3016, 0x3016, 968 0x3017, 0x3017, 969 0x3018, 0x3018, 970 0x3019, 0x3019, 971 0x301A, 0x301A, 972 0x301B, 0x301B, 973 0x301C, 0x301C, 974 0x301D, 0x301D, 975 0x301E, 0x301F, 976 0x3020, 0x3029, 977 0x302A, 0x302F, 978 0x3030, 0x303A, 979 0x303B, 0x303C, 980 0x303D, 0x303F, 981 0x3041, 0x3041, 982 0x3042, 0x3042, 983 0x3043, 0x3043, 984 0x3044, 0x3044, 985 0x3045, 0x3045, 986 0x3046, 0x3046, 987 0x3047, 0x3047, 988 0x3048, 0x3048, 989 0x3049, 0x3049, 990 0x304A, 0x3062, 991 0x3063, 0x3063, 992 0x3064, 0x3082, 993 0x3083, 0x3083, 994 0x3084, 0x3084, 995 0x3085, 0x3085, 996 0x3086, 0x3086, 997 0x3087, 0x3087, 998 0x3088, 0x308D, 999 0x308E, 0x308E, 1000 0x308F, 0x3094, 1001 0x3095, 0x3096, 1002 0x3099, 0x309A, 1003 0x309B, 0x309E, 1004 0x309F, 0x309F, 1005 0x30A0, 0x30A1, 1006 0x30A2, 0x30A2, 1007 0x30A3, 0x30A3, 1008 0x30A4, 0x30A4, 1009 0x30A5, 0x30A5, 1010 0x30A6, 0x30A6, 1011 0x30A7, 0x30A7, 1012 0x30A8, 0x30A8, 1013 0x30A9, 0x30A9, 1014 0x30AA, 0x30C2, 1015 0x30C3, 0x30C3, 1016 0x30C4, 0x30E2, 1017 0x30E3, 0x30E3, 1018 0x30E4, 0x30E4, 1019 0x30E5, 0x30E5, 1020 0x30E6, 0x30E6, 1021 0x30E7, 0x30E7, 1022 0x30E8, 0x30ED, 1023 0x30EE, 0x30EE, 1024 0x30EF, 0x30F4, 1025 0x30F5, 0x30F6, 1026 0x30F7, 0x30FA, 1027 0x30FB, 0x30FB, 1028 0x30FC, 0x30FC, 1029 0x30FD, 0x30FD, 1030 0x30FE, 0x31B7, 1031 0x31F0, 0x31FF, 1032 0x3200, 0xD7A3, 1033 0xD800, 0xDFFF, 1034 0xE000, 0xF8FF, 1035 0xF900, 0xFA6A, 1036 0xFB00, 0xFB1D, 1037 0xFB1E, 0xFB1E, 1038 0xFB1F, 0xFD3D, 1039 0xFD3E, 0xFD3E, 1040 0xFD3F, 0xFD3F, 1041 0xFD50, 0xFDFB, 1042 0xFDFC, 0xFDFC, 1043 0xFE00, 0xFE23, 1044 0xFE30, 0xFE34, 1045 0xFE35, 0xFE35, 1046 0xFE36, 0xFE36, 1047 0xFE37, 0xFE37, 1048 0xFE38, 0xFE38, 1049 0xFE39, 0xFE39, 1050 0xFE3A, 0xFE3A, 1051 0xFE3B, 0xFE3B, 1052 0xFE3C, 0xFE3C, 1053 0xFE3D, 0xFE3D, 1054 0xFE3E, 0xFE3E, 1055 0xFE3F, 0xFE3F, 1056 0xFE40, 0xFE40, 1057 0xFE41, 0xFE41, 1058 0xFE42, 0xFE42, 1059 0xFE43, 0xFE43, 1060 0xFE44, 0xFE44, 1061 0xFE45, 0xFE4F, 1062 0xFE50, 0xFE50, 1063 0xFE51, 0xFE51, 1064 0xFE52, 0xFE52, 1065 0xFE54, 0xFE55, 1066 0xFE56, 0xFE57, 1067 0xFE58, 0xFE58, 1068 0xFE59, 0xFE59, 1069 0xFE5A, 0xFE5A, 1070 0xFE5B, 0xFE5B, 1071 0xFE5C, 0xFE5C, 1072 0xFE5D, 0xFE5D, 1073 0xFE5E, 0xFE5E, 1074 0xFE5F, 0xFE68, 1075 0xFE69, 0xFE69, 1076 0xFE6A, 0xFE6A, 1077 0xFE6B, 0xFE6B, 1078 0xFE70, 0xFEFC, 1079 0xFEFF, 0xFEFF, 1080 0xFF01, 0xFF01, 1081 0xFF02, 0xFF03, 1082 0xFF04, 0xFF04, 1083 0xFF05, 0xFF05, 1084 0xFF06, 0xFF07, 1085 0xFF08, 0xFF08, 1086 0xFF09, 0xFF09, 1087 0xFF0A, 0xFF0B, 1088 0xFF0C, 0xFF0C, 1089 0xFF0D, 0xFF0D, 1090 0xFF0E, 0xFF0E, 1091 0xFF0F, 0xFF19, 1092 0xFF1A, 0xFF1B, 1093 0xFF1C, 0xFF1E, 1094 0xFF1F, 0xFF1F, 1095 0xFF20, 0xFF3A, 1096 0xFF3B, 0xFF3B, 1097 0xFF3C, 0xFF3C, 1098 0xFF3D, 0xFF3D, 1099 0xFF3E, 0xFF5A, 1100 0xFF5B, 0xFF5B, 1101 0xFF5C, 0xFF5C, 1102 0xFF5D, 0xFF5D, 1103 0xFF5E, 0xFF5E, 1104 0xFF5F, 0xFF5F, 1105 0xFF60, 0xFF61, 1106 0xFF62, 0xFF62, 1107 0xFF63, 0xFF64, 1108 0xFF65, 0xFF65, 1109 0xFF66, 0xFF66, 1110 0xFF67, 0xFF70, 1111 0xFF71, 0xFF9D, 1112 0xFF9E, 0xFF9F, 1113 0xFFA0, 0xFFDC, 1114 0xFFE0, 0xFFE0, 1115 0xFFE1, 0xFFE1, 1116 0xFFE2, 0xFFE4, 1117 0xFFE5, 0xFFE6, 1118 0xFFE8, 0xFFEE, 1119 0xFFF9, 0xFFFB, 1120 0xFFFC, 0xFFFC, 1121 0xFFFD, 0xFFFF, 1122 }; 1123 final static byte [] raw_classes = { 1124 CHAR_CLASS_CM, 1125 CHAR_CLASS_BA, 1126 CHAR_CLASS_LF, 1127 CHAR_CLASS_CM, 1128 CHAR_CLASS_BK, 1129 CHAR_CLASS_CR, 1130 CHAR_CLASS_CM, 1131 CHAR_CLASS_SP, 1132 CHAR_CLASS_EX, 1133 CHAR_CLASS_QU, 1134 CHAR_CLASS_AL, 1135 CHAR_CLASS_PR, 1136 CHAR_CLASS_PO, 1137 CHAR_CLASS_AL, 1138 CHAR_CLASS_QU, 1139 CHAR_CLASS_OP, 1140 CHAR_CLASS_CL, 1141 CHAR_CLASS_AL, 1142 CHAR_CLASS_PR, 1143 CHAR_CLASS_IS, 1144 CHAR_CLASS_HY, 1145 CHAR_CLASS_IS, 1146 CHAR_CLASS_SY, 1147 CHAR_CLASS_NU, 1148 CHAR_CLASS_IS, 1149 CHAR_CLASS_AL, 1150 CHAR_CLASS_EX, 1151 CHAR_CLASS_AL, 1152 CHAR_CLASS_OP, 1153 CHAR_CLASS_PR, 1154 CHAR_CLASS_CL, 1155 CHAR_CLASS_AL, 1156 CHAR_CLASS_OP, 1157 CHAR_CLASS_BA, 1158 CHAR_CLASS_CL, 1159 CHAR_CLASS_AL, 1160 CHAR_CLASS_CM, 1161 CHAR_CLASS_GL, 1162 CHAR_CLASS_AI, 1163 CHAR_CLASS_PO, 1164 CHAR_CLASS_PR, 1165 CHAR_CLASS_AL, 1166 CHAR_CLASS_AI, 1167 CHAR_CLASS_AL, 1168 CHAR_CLASS_AI, 1169 CHAR_CLASS_QU, 1170 CHAR_CLASS_AL, 1171 CHAR_CLASS_BA, 1172 CHAR_CLASS_AL, 1173 CHAR_CLASS_PO, 1174 CHAR_CLASS_PR, 1175 CHAR_CLASS_AI, 1176 CHAR_CLASS_BB, 1177 CHAR_CLASS_AL, 1178 CHAR_CLASS_AI, 1179 CHAR_CLASS_QU, 1180 CHAR_CLASS_AI, 1181 CHAR_CLASS_AL, 1182 CHAR_CLASS_AI, 1183 CHAR_CLASS_AL, 1184 CHAR_CLASS_AI, 1185 CHAR_CLASS_AL, 1186 CHAR_CLASS_AI, 1187 CHAR_CLASS_AL, 1188 CHAR_CLASS_AI, 1189 CHAR_CLASS_AL, 1190 CHAR_CLASS_AI, 1191 CHAR_CLASS_AL, 1192 CHAR_CLASS_AI, 1193 CHAR_CLASS_AL, 1194 CHAR_CLASS_AI, 1195 CHAR_CLASS_AL, 1196 CHAR_CLASS_AI, 1197 CHAR_CLASS_AL, 1198 CHAR_CLASS_AI, 1199 CHAR_CLASS_AL, 1200 CHAR_CLASS_AI, 1201 CHAR_CLASS_AL, 1202 CHAR_CLASS_AI, 1203 CHAR_CLASS_AL, 1204 CHAR_CLASS_AI, 1205 CHAR_CLASS_AL, 1206 CHAR_CLASS_AI, 1207 CHAR_CLASS_AL, 1208 CHAR_CLASS_AI, 1209 CHAR_CLASS_AL, 1210 CHAR_CLASS_AI, 1211 CHAR_CLASS_AL, 1212 CHAR_CLASS_AI, 1213 CHAR_CLASS_AL, 1214 CHAR_CLASS_AI, 1215 CHAR_CLASS_AL, 1216 CHAR_CLASS_AI, 1217 CHAR_CLASS_AL, 1218 CHAR_CLASS_AI, 1219 CHAR_CLASS_AL, 1220 CHAR_CLASS_AI, 1221 CHAR_CLASS_AL, 1222 CHAR_CLASS_AI, 1223 CHAR_CLASS_AL, 1224 CHAR_CLASS_AI, 1225 CHAR_CLASS_AL, 1226 CHAR_CLASS_AI, 1227 CHAR_CLASS_AL, 1228 CHAR_CLASS_AI, 1229 CHAR_CLASS_AL, 1230 CHAR_CLASS_AI, 1231 CHAR_CLASS_AL, 1232 CHAR_CLASS_AI, 1233 CHAR_CLASS_AL, 1234 CHAR_CLASS_AI, 1235 CHAR_CLASS_AL, 1236 CHAR_CLASS_AI, 1237 CHAR_CLASS_AL, 1238 CHAR_CLASS_AI, 1239 CHAR_CLASS_AL, 1240 CHAR_CLASS_AI, 1241 CHAR_CLASS_AL, 1242 CHAR_CLASS_AI, 1243 CHAR_CLASS_AL, 1244 CHAR_CLASS_AI, 1245 CHAR_CLASS_AL, 1246 CHAR_CLASS_AI, 1247 CHAR_CLASS_AL, 1248 CHAR_CLASS_AI, 1249 CHAR_CLASS_AL, 1250 CHAR_CLASS_AI, 1251 CHAR_CLASS_AL, 1252 CHAR_CLASS_AI, 1253 CHAR_CLASS_AL, 1254 CHAR_CLASS_AI, 1255 CHAR_CLASS_AL, 1256 CHAR_CLASS_AI, 1257 CHAR_CLASS_BB, 1258 CHAR_CLASS_AI, 1259 CHAR_CLASS_BB, 1260 CHAR_CLASS_AI, 1261 CHAR_CLASS_AL, 1262 CHAR_CLASS_AI, 1263 CHAR_CLASS_AL, 1264 CHAR_CLASS_AI, 1265 CHAR_CLASS_AL, 1266 CHAR_CLASS_AI, 1267 CHAR_CLASS_AL, 1268 CHAR_CLASS_CM, 1269 CHAR_CLASS_AL, 1270 CHAR_CLASS_AI, 1271 CHAR_CLASS_AL, 1272 CHAR_CLASS_AI, 1273 CHAR_CLASS_AL, 1274 CHAR_CLASS_AI, 1275 CHAR_CLASS_AL, 1276 CHAR_CLASS_AI, 1277 CHAR_CLASS_AL, 1278 CHAR_CLASS_AI, 1279 CHAR_CLASS_AL, 1280 CHAR_CLASS_AI, 1281 CHAR_CLASS_AL, 1282 CHAR_CLASS_CM, 1283 CHAR_CLASS_AL, 1284 CHAR_CLASS_IS, 1285 CHAR_CLASS_BA, 1286 CHAR_CLASS_CM, 1287 CHAR_CLASS_AL, 1288 CHAR_CLASS_CM, 1289 CHAR_CLASS_AL, 1290 CHAR_CLASS_CM, 1291 CHAR_CLASS_AL, 1292 CHAR_CLASS_CM, 1293 CHAR_CLASS_AL, 1294 CHAR_CLASS_CM, 1295 CHAR_CLASS_NU, 1296 CHAR_CLASS_AL, 1297 CHAR_CLASS_CM, 1298 CHAR_CLASS_AL, 1299 CHAR_CLASS_CM, 1300 CHAR_CLASS_AL, 1301 CHAR_CLASS_CM, 1302 CHAR_CLASS_AL, 1303 CHAR_CLASS_CM, 1304 CHAR_CLASS_NU, 1305 CHAR_CLASS_AL, 1306 CHAR_CLASS_CM, 1307 CHAR_CLASS_AL, 1308 CHAR_CLASS_CM, 1309 CHAR_CLASS_AL, 1310 CHAR_CLASS_CM, 1311 CHAR_CLASS_AL, 1312 CHAR_CLASS_CM, 1313 CHAR_CLASS_AL, 1314 CHAR_CLASS_CM, 1315 CHAR_CLASS_AL, 1316 CHAR_CLASS_CM, 1317 CHAR_CLASS_AL, 1318 CHAR_CLASS_CM, 1319 CHAR_CLASS_AL, 1320 CHAR_CLASS_CM, 1321 CHAR_CLASS_AL, 1322 CHAR_CLASS_CM, 1323 CHAR_CLASS_AL, 1324 CHAR_CLASS_NU, 1325 CHAR_CLASS_AL, 1326 CHAR_CLASS_CM, 1327 CHAR_CLASS_AL, 1328 CHAR_CLASS_CM, 1329 CHAR_CLASS_AL, 1330 CHAR_CLASS_CM, 1331 CHAR_CLASS_NU, 1332 CHAR_CLASS_AL, 1333 CHAR_CLASS_PR, 1334 CHAR_CLASS_AL, 1335 CHAR_CLASS_CM, 1336 CHAR_CLASS_AL, 1337 CHAR_CLASS_CM, 1338 CHAR_CLASS_AL, 1339 CHAR_CLASS_NU, 1340 CHAR_CLASS_CM, 1341 CHAR_CLASS_AL, 1342 CHAR_CLASS_CM, 1343 CHAR_CLASS_AL, 1344 CHAR_CLASS_CM, 1345 CHAR_CLASS_AL, 1346 CHAR_CLASS_CM, 1347 CHAR_CLASS_AL, 1348 CHAR_CLASS_NU, 1349 CHAR_CLASS_CM, 1350 CHAR_CLASS_AL, 1351 CHAR_CLASS_CM, 1352 CHAR_CLASS_AL, 1353 CHAR_CLASS_CM, 1354 CHAR_CLASS_AL, 1355 CHAR_CLASS_NU, 1356 CHAR_CLASS_AL, 1357 CHAR_CLASS_CM, 1358 CHAR_CLASS_AL, 1359 CHAR_CLASS_CM, 1360 CHAR_CLASS_NU, 1361 CHAR_CLASS_AL, 1362 CHAR_CLASS_CM, 1363 CHAR_CLASS_AL, 1364 CHAR_CLASS_CM, 1365 CHAR_CLASS_AL, 1366 CHAR_CLASS_NU, 1367 CHAR_CLASS_CM, 1368 CHAR_CLASS_AL, 1369 CHAR_CLASS_CM, 1370 CHAR_CLASS_AL, 1371 CHAR_CLASS_NU, 1372 CHAR_CLASS_CM, 1373 CHAR_CLASS_AL, 1374 CHAR_CLASS_CM, 1375 CHAR_CLASS_AL, 1376 CHAR_CLASS_NU, 1377 CHAR_CLASS_CM, 1378 CHAR_CLASS_AL, 1379 CHAR_CLASS_CM, 1380 CHAR_CLASS_AL, 1381 CHAR_CLASS_SA, 1382 CHAR_CLASS_CM, 1383 CHAR_CLASS_SA, 1384 CHAR_CLASS_CM, 1385 CHAR_CLASS_PR, 1386 CHAR_CLASS_SA, 1387 CHAR_CLASS_CM, 1388 CHAR_CLASS_AL, 1389 CHAR_CLASS_NU, 1390 CHAR_CLASS_NS, 1391 CHAR_CLASS_SA, 1392 CHAR_CLASS_CM, 1393 CHAR_CLASS_SA, 1394 CHAR_CLASS_CM, 1395 CHAR_CLASS_SA, 1396 CHAR_CLASS_CM, 1397 CHAR_CLASS_NU, 1398 CHAR_CLASS_SA, 1399 CHAR_CLASS_AL, 1400 CHAR_CLASS_BA, 1401 CHAR_CLASS_GL, 1402 CHAR_CLASS_AL, 1403 CHAR_CLASS_CM, 1404 CHAR_CLASS_AL, 1405 CHAR_CLASS_NU, 1406 CHAR_CLASS_AL, 1407 CHAR_CLASS_CM, 1408 CHAR_CLASS_AL, 1409 CHAR_CLASS_CM, 1410 CHAR_CLASS_AL, 1411 CHAR_CLASS_CM, 1412 CHAR_CLASS_OP, 1413 CHAR_CLASS_CL, 1414 CHAR_CLASS_OP, 1415 CHAR_CLASS_CL, 1416 CHAR_CLASS_CM, 1417 CHAR_CLASS_AL, 1418 CHAR_CLASS_CM, 1419 CHAR_CLASS_AL, 1420 CHAR_CLASS_CM, 1421 CHAR_CLASS_AL, 1422 CHAR_CLASS_CM, 1423 CHAR_CLASS_AL, 1424 CHAR_CLASS_CM, 1425 CHAR_CLASS_AL, 1426 CHAR_CLASS_SA, 1427 CHAR_CLASS_CM, 1428 CHAR_CLASS_NU, 1429 CHAR_CLASS_AL, 1430 CHAR_CLASS_SA, 1431 CHAR_CLASS_CM, 1432 CHAR_CLASS_AL, 1433 CHAR_CLASS_ID, 1434 CHAR_CLASS_CM, 1435 CHAR_CLASS_AL, 1436 CHAR_CLASS_BA, 1437 CHAR_CLASS_AL, 1438 CHAR_CLASS_NU, 1439 CHAR_CLASS_AL, 1440 CHAR_CLASS_BA, 1441 CHAR_CLASS_AL, 1442 CHAR_CLASS_OP, 1443 CHAR_CLASS_CL, 1444 CHAR_CLASS_AL, 1445 CHAR_CLASS_CM, 1446 CHAR_CLASS_AL, 1447 CHAR_CLASS_CM, 1448 CHAR_CLASS_AL, 1449 CHAR_CLASS_CM, 1450 CHAR_CLASS_AL, 1451 CHAR_CLASS_CM, 1452 CHAR_CLASS_SA, 1453 CHAR_CLASS_CM, 1454 CHAR_CLASS_NS, 1455 CHAR_CLASS_BA, 1456 CHAR_CLASS_NS, 1457 CHAR_CLASS_PR, 1458 CHAR_CLASS_AL, 1459 CHAR_CLASS_NU, 1460 CHAR_CLASS_AL, 1461 CHAR_CLASS_BB, 1462 CHAR_CLASS_AL, 1463 CHAR_CLASS_CM, 1464 CHAR_CLASS_NU, 1465 CHAR_CLASS_AL, 1466 CHAR_CLASS_CM, 1467 CHAR_CLASS_AL, 1468 CHAR_CLASS_BA, 1469 CHAR_CLASS_GL, 1470 CHAR_CLASS_BA, 1471 CHAR_CLASS_ZW, 1472 CHAR_CLASS_CM, 1473 CHAR_CLASS_BA, 1474 CHAR_CLASS_GL, 1475 CHAR_CLASS_BA, 1476 CHAR_CLASS_B2, 1477 CHAR_CLASS_AI, 1478 CHAR_CLASS_AL, 1479 CHAR_CLASS_QU, 1480 CHAR_CLASS_OP, 1481 CHAR_CLASS_QU, 1482 CHAR_CLASS_OP, 1483 CHAR_CLASS_QU, 1484 CHAR_CLASS_AI, 1485 CHAR_CLASS_AL, 1486 CHAR_CLASS_IN, 1487 CHAR_CLASS_BA, 1488 CHAR_CLASS_BK, 1489 CHAR_CLASS_CM, 1490 CHAR_CLASS_GL, 1491 CHAR_CLASS_PO, 1492 CHAR_CLASS_AL, 1493 CHAR_CLASS_QU, 1494 CHAR_CLASS_AI, 1495 CHAR_CLASS_NS, 1496 CHAR_CLASS_AL, 1497 CHAR_CLASS_NS, 1498 CHAR_CLASS_OP, 1499 CHAR_CLASS_CL, 1500 CHAR_CLASS_AL, 1501 CHAR_CLASS_BA, 1502 CHAR_CLASS_GL, 1503 CHAR_CLASS_AL, 1504 CHAR_CLASS_CM, 1505 CHAR_CLASS_AL, 1506 CHAR_CLASS_AI, 1507 CHAR_CLASS_AL, 1508 CHAR_CLASS_OP, 1509 CHAR_CLASS_CL, 1510 CHAR_CLASS_AI, 1511 CHAR_CLASS_AL, 1512 CHAR_CLASS_AI, 1513 CHAR_CLASS_AL, 1514 CHAR_CLASS_OP, 1515 CHAR_CLASS_CL, 1516 CHAR_CLASS_PR, 1517 CHAR_CLASS_PO, 1518 CHAR_CLASS_PR, 1519 CHAR_CLASS_CM, 1520 CHAR_CLASS_AL, 1521 CHAR_CLASS_PO, 1522 CHAR_CLASS_AL, 1523 CHAR_CLASS_AI, 1524 CHAR_CLASS_AL, 1525 CHAR_CLASS_PO, 1526 CHAR_CLASS_AL, 1527 CHAR_CLASS_AI, 1528 CHAR_CLASS_AL, 1529 CHAR_CLASS_PR, 1530 CHAR_CLASS_AL, 1531 CHAR_CLASS_AI, 1532 CHAR_CLASS_AL, 1533 CHAR_CLASS_PO, 1534 CHAR_CLASS_AL, 1535 CHAR_CLASS_AI, 1536 CHAR_CLASS_AL, 1537 CHAR_CLASS_AI, 1538 CHAR_CLASS_AL, 1539 CHAR_CLASS_AI, 1540 CHAR_CLASS_AL, 1541 CHAR_CLASS_AI, 1542 CHAR_CLASS_AL, 1543 CHAR_CLASS_AI, 1544 CHAR_CLASS_AL, 1545 CHAR_CLASS_AI, 1546 CHAR_CLASS_AL, 1547 CHAR_CLASS_AI, 1548 CHAR_CLASS_AL, 1549 CHAR_CLASS_AI, 1550 CHAR_CLASS_AL, 1551 CHAR_CLASS_AI, 1552 CHAR_CLASS_AL, 1553 CHAR_CLASS_AI, 1554 CHAR_CLASS_AL, 1555 CHAR_CLASS_AI, 1556 CHAR_CLASS_AL, 1557 CHAR_CLASS_AI, 1558 CHAR_CLASS_AL, 1559 CHAR_CLASS_AI, 1560 CHAR_CLASS_AL, 1561 CHAR_CLASS_AI, 1562 CHAR_CLASS_AL, 1563 CHAR_CLASS_AI, 1564 CHAR_CLASS_AL, 1565 CHAR_CLASS_AI, 1566 CHAR_CLASS_PR, 1567 CHAR_CLASS_AL, 1568 CHAR_CLASS_AI, 1569 CHAR_CLASS_AL, 1570 CHAR_CLASS_AI, 1571 CHAR_CLASS_AL, 1572 CHAR_CLASS_AI, 1573 CHAR_CLASS_AL, 1574 CHAR_CLASS_AI, 1575 CHAR_CLASS_AL, 1576 CHAR_CLASS_AI, 1577 CHAR_CLASS_AL, 1578 CHAR_CLASS_AI, 1579 CHAR_CLASS_AL, 1580 CHAR_CLASS_AI, 1581 CHAR_CLASS_AL, 1582 CHAR_CLASS_AI, 1583 CHAR_CLASS_AL, 1584 CHAR_CLASS_AI, 1585 CHAR_CLASS_AL, 1586 CHAR_CLASS_AI, 1587 CHAR_CLASS_AL, 1588 CHAR_CLASS_AI, 1589 CHAR_CLASS_AL, 1590 CHAR_CLASS_AI, 1591 CHAR_CLASS_AL, 1592 CHAR_CLASS_AI, 1593 CHAR_CLASS_AL, 1594 CHAR_CLASS_AI, 1595 CHAR_CLASS_AL, 1596 CHAR_CLASS_AI, 1597 CHAR_CLASS_AL, 1598 CHAR_CLASS_AI, 1599 CHAR_CLASS_AL, 1600 CHAR_CLASS_AI, 1601 CHAR_CLASS_AL, 1602 CHAR_CLASS_AI, 1603 CHAR_CLASS_AL, 1604 CHAR_CLASS_AI, 1605 CHAR_CLASS_AL, 1606 CHAR_CLASS_AI, 1607 CHAR_CLASS_AL, 1608 CHAR_CLASS_AI, 1609 CHAR_CLASS_AL, 1610 CHAR_CLASS_AI, 1611 CHAR_CLASS_AL, 1612 CHAR_CLASS_AI, 1613 CHAR_CLASS_AL, 1614 CHAR_CLASS_OP, 1615 CHAR_CLASS_CL, 1616 CHAR_CLASS_AL, 1617 CHAR_CLASS_OP, 1618 CHAR_CLASS_CL, 1619 CHAR_CLASS_QU, 1620 CHAR_CLASS_AL, 1621 CHAR_CLASS_AI, 1622 CHAR_CLASS_AL, 1623 CHAR_CLASS_AI, 1624 CHAR_CLASS_AL, 1625 CHAR_CLASS_AI, 1626 CHAR_CLASS_AL, 1627 CHAR_CLASS_AI, 1628 CHAR_CLASS_AL, 1629 CHAR_CLASS_AI, 1630 CHAR_CLASS_AL, 1631 CHAR_CLASS_AI, 1632 CHAR_CLASS_AL, 1633 CHAR_CLASS_AI, 1634 CHAR_CLASS_AL, 1635 CHAR_CLASS_AI, 1636 CHAR_CLASS_AL, 1637 CHAR_CLASS_AI, 1638 CHAR_CLASS_AL, 1639 CHAR_CLASS_AI, 1640 CHAR_CLASS_AL, 1641 CHAR_CLASS_AI, 1642 CHAR_CLASS_AL, 1643 CHAR_CLASS_AI, 1644 CHAR_CLASS_AL, 1645 CHAR_CLASS_AI, 1646 CHAR_CLASS_AL, 1647 CHAR_CLASS_AI, 1648 CHAR_CLASS_AL, 1649 CHAR_CLASS_AI, 1650 CHAR_CLASS_AL, 1651 CHAR_CLASS_AI, 1652 CHAR_CLASS_AL, 1653 CHAR_CLASS_AI, 1654 CHAR_CLASS_AL, 1655 CHAR_CLASS_AI, 1656 CHAR_CLASS_AL, 1657 CHAR_CLASS_AI, 1658 CHAR_CLASS_AL, 1659 CHAR_CLASS_AI, 1660 CHAR_CLASS_AL, 1661 CHAR_CLASS_AI, 1662 CHAR_CLASS_AL, 1663 CHAR_CLASS_AI, 1664 CHAR_CLASS_AL, 1665 CHAR_CLASS_AI, 1666 CHAR_CLASS_AL, 1667 CHAR_CLASS_AI, 1668 CHAR_CLASS_AL, 1669 CHAR_CLASS_AI, 1670 CHAR_CLASS_AL, 1671 CHAR_CLASS_AI, 1672 CHAR_CLASS_AL, 1673 CHAR_CLASS_AI, 1674 CHAR_CLASS_AL, 1675 CHAR_CLASS_AI, 1676 CHAR_CLASS_AL, 1677 CHAR_CLASS_AI, 1678 CHAR_CLASS_AL, 1679 CHAR_CLASS_AI, 1680 CHAR_CLASS_AL, 1681 CHAR_CLASS_QU, 1682 CHAR_CLASS_AL, 1683 CHAR_CLASS_EX, 1684 CHAR_CLASS_AL, 1685 CHAR_CLASS_OP, 1686 CHAR_CLASS_CL, 1687 CHAR_CLASS_OP, 1688 CHAR_CLASS_CL, 1689 CHAR_CLASS_OP, 1690 CHAR_CLASS_CL, 1691 CHAR_CLASS_OP, 1692 CHAR_CLASS_CL, 1693 CHAR_CLASS_OP, 1694 CHAR_CLASS_CL, 1695 CHAR_CLASS_OP, 1696 CHAR_CLASS_CL, 1697 CHAR_CLASS_OP, 1698 CHAR_CLASS_CL, 1699 CHAR_CLASS_AL, 1700 CHAR_CLASS_OP, 1701 CHAR_CLASS_CL, 1702 CHAR_CLASS_OP, 1703 CHAR_CLASS_CL, 1704 CHAR_CLASS_OP, 1705 CHAR_CLASS_CL, 1706 CHAR_CLASS_AL, 1707 CHAR_CLASS_OP, 1708 CHAR_CLASS_CL, 1709 CHAR_CLASS_OP, 1710 CHAR_CLASS_CL, 1711 CHAR_CLASS_OP, 1712 CHAR_CLASS_CL, 1713 CHAR_CLASS_OP, 1714 CHAR_CLASS_CL, 1715 CHAR_CLASS_OP, 1716 CHAR_CLASS_CL, 1717 CHAR_CLASS_OP, 1718 CHAR_CLASS_CL, 1719 CHAR_CLASS_OP, 1720 CHAR_CLASS_CL, 1721 CHAR_CLASS_OP, 1722 CHAR_CLASS_CL, 1723 CHAR_CLASS_OP, 1724 CHAR_CLASS_CL, 1725 CHAR_CLASS_OP, 1726 CHAR_CLASS_CL, 1727 CHAR_CLASS_OP, 1728 CHAR_CLASS_CL, 1729 CHAR_CLASS_AL, 1730 CHAR_CLASS_OP, 1731 CHAR_CLASS_CL, 1732 CHAR_CLASS_OP, 1733 CHAR_CLASS_CL, 1734 CHAR_CLASS_AL, 1735 CHAR_CLASS_OP, 1736 CHAR_CLASS_CL, 1737 CHAR_CLASS_AL, 1738 CHAR_CLASS_ID, 1739 CHAR_CLASS_CL, 1740 CHAR_CLASS_ID, 1741 CHAR_CLASS_NS, 1742 CHAR_CLASS_ID, 1743 CHAR_CLASS_OP, 1744 CHAR_CLASS_CL, 1745 CHAR_CLASS_OP, 1746 CHAR_CLASS_CL, 1747 CHAR_CLASS_OP, 1748 CHAR_CLASS_CL, 1749 CHAR_CLASS_OP, 1750 CHAR_CLASS_CL, 1751 CHAR_CLASS_OP, 1752 CHAR_CLASS_CL, 1753 CHAR_CLASS_ID, 1754 CHAR_CLASS_OP, 1755 CHAR_CLASS_CL, 1756 CHAR_CLASS_OP, 1757 CHAR_CLASS_CL, 1758 CHAR_CLASS_OP, 1759 CHAR_CLASS_CL, 1760 CHAR_CLASS_OP, 1761 CHAR_CLASS_CL, 1762 CHAR_CLASS_NS, 1763 CHAR_CLASS_OP, 1764 CHAR_CLASS_CL, 1765 CHAR_CLASS_ID, 1766 CHAR_CLASS_CM, 1767 CHAR_CLASS_ID, 1768 CHAR_CLASS_NS, 1769 CHAR_CLASS_ID, 1770 CHAR_CLASS_NS, 1771 CHAR_CLASS_ID, 1772 CHAR_CLASS_NS, 1773 CHAR_CLASS_ID, 1774 CHAR_CLASS_NS, 1775 CHAR_CLASS_ID, 1776 CHAR_CLASS_NS, 1777 CHAR_CLASS_ID, 1778 CHAR_CLASS_NS, 1779 CHAR_CLASS_ID, 1780 CHAR_CLASS_NS, 1781 CHAR_CLASS_ID, 1782 CHAR_CLASS_NS, 1783 CHAR_CLASS_ID, 1784 CHAR_CLASS_NS, 1785 CHAR_CLASS_ID, 1786 CHAR_CLASS_NS, 1787 CHAR_CLASS_ID, 1788 CHAR_CLASS_NS, 1789 CHAR_CLASS_ID, 1790 CHAR_CLASS_NS, 1791 CHAR_CLASS_CM, 1792 CHAR_CLASS_NS, 1793 CHAR_CLASS_ID, 1794 CHAR_CLASS_NS, 1795 CHAR_CLASS_ID, 1796 CHAR_CLASS_NS, 1797 CHAR_CLASS_ID, 1798 CHAR_CLASS_NS, 1799 CHAR_CLASS_ID, 1800 CHAR_CLASS_NS, 1801 CHAR_CLASS_ID, 1802 CHAR_CLASS_NS, 1803 CHAR_CLASS_ID, 1804 CHAR_CLASS_NS, 1805 CHAR_CLASS_ID, 1806 CHAR_CLASS_NS, 1807 CHAR_CLASS_ID, 1808 CHAR_CLASS_NS, 1809 CHAR_CLASS_ID, 1810 CHAR_CLASS_NS, 1811 CHAR_CLASS_ID, 1812 CHAR_CLASS_NS, 1813 CHAR_CLASS_ID, 1814 CHAR_CLASS_NS, 1815 CHAR_CLASS_ID, 1816 CHAR_CLASS_NS, 1817 CHAR_CLASS_ID, 1818 CHAR_CLASS_NS, 1819 CHAR_CLASS_ID, 1820 CHAR_CLASS_NS, 1821 CHAR_CLASS_ID, 1822 CHAR_CLASS_SG, 1823 CHAR_CLASS_XX, 1824 CHAR_CLASS_ID, 1825 CHAR_CLASS_AL, 1826 CHAR_CLASS_CM, 1827 CHAR_CLASS_AL, 1828 CHAR_CLASS_OP, 1829 CHAR_CLASS_CL, 1830 CHAR_CLASS_AL, 1831 CHAR_CLASS_PO, 1832 CHAR_CLASS_CM, 1833 CHAR_CLASS_ID, 1834 CHAR_CLASS_OP, 1835 CHAR_CLASS_CL, 1836 CHAR_CLASS_OP, 1837 CHAR_CLASS_CL, 1838 CHAR_CLASS_OP, 1839 CHAR_CLASS_CL, 1840 CHAR_CLASS_OP, 1841 CHAR_CLASS_CL, 1842 CHAR_CLASS_OP, 1843 CHAR_CLASS_CL, 1844 CHAR_CLASS_OP, 1845 CHAR_CLASS_CL, 1846 CHAR_CLASS_OP, 1847 CHAR_CLASS_CL, 1848 CHAR_CLASS_OP, 1849 CHAR_CLASS_CL, 1850 CHAR_CLASS_ID, 1851 CHAR_CLASS_CL, 1852 CHAR_CLASS_ID, 1853 CHAR_CLASS_CL, 1854 CHAR_CLASS_NS, 1855 CHAR_CLASS_EX, 1856 CHAR_CLASS_ID, 1857 CHAR_CLASS_OP, 1858 CHAR_CLASS_CL, 1859 CHAR_CLASS_OP, 1860 CHAR_CLASS_CL, 1861 CHAR_CLASS_OP, 1862 CHAR_CLASS_CL, 1863 CHAR_CLASS_ID, 1864 CHAR_CLASS_PR, 1865 CHAR_CLASS_PO, 1866 CHAR_CLASS_ID, 1867 CHAR_CLASS_AL, 1868 CHAR_CLASS_GL, 1869 CHAR_CLASS_EX, 1870 CHAR_CLASS_ID, 1871 CHAR_CLASS_PR, 1872 CHAR_CLASS_PO, 1873 CHAR_CLASS_ID, 1874 CHAR_CLASS_OP, 1875 CHAR_CLASS_CL, 1876 CHAR_CLASS_ID, 1877 CHAR_CLASS_CL, 1878 CHAR_CLASS_ID, 1879 CHAR_CLASS_CL, 1880 CHAR_CLASS_ID, 1881 CHAR_CLASS_NS, 1882 CHAR_CLASS_ID, 1883 CHAR_CLASS_EX, 1884 CHAR_CLASS_ID, 1885 CHAR_CLASS_OP, 1886 CHAR_CLASS_ID, 1887 CHAR_CLASS_CL, 1888 CHAR_CLASS_ID, 1889 CHAR_CLASS_OP, 1890 CHAR_CLASS_ID, 1891 CHAR_CLASS_CL, 1892 CHAR_CLASS_ID, 1893 CHAR_CLASS_OP, 1894 CHAR_CLASS_CL, 1895 CHAR_CLASS_OP, 1896 CHAR_CLASS_CL, 1897 CHAR_CLASS_NS, 1898 CHAR_CLASS_AL, 1899 CHAR_CLASS_NS, 1900 CHAR_CLASS_AL, 1901 CHAR_CLASS_NS, 1902 CHAR_CLASS_AL, 1903 CHAR_CLASS_PO, 1904 CHAR_CLASS_PR, 1905 CHAR_CLASS_ID, 1906 CHAR_CLASS_PR, 1907 CHAR_CLASS_AL, 1908 CHAR_CLASS_CM, 1909 CHAR_CLASS_CB, 1910 CHAR_CLASS_AI }; 1911} 1912 | Popular Tags |