/* */ package com.ibm.icu.text;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public final class UnicodeCompressor
/* */ implements SCSU
/* */ {
/* 193 */ private static boolean[] sSingleTagTable = { false, true, true, true, true, true, true, true, true, false, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false };
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 227 */ private static boolean[] sUnicodeTagTable = { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false };
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 265 */ private int fCurrentWindow = 0;
/* */
/* */
/* 268 */ private int[] fOffsets = new int[8];
/* */
/* */
/* 271 */ private int fMode = 0;
/* */
/* */
/* 274 */ private int[] fIndexCount = new int['Ā'];
/* */
/* */
/* 277 */ private int[] fTimeStamps = new int[8];
/* */
/* */
/* 280 */ private int fTimeStamp = 0;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public UnicodeCompressor()
/* */ {
/* 291 */ reset();
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static byte[] compress(String buffer)
/* */ {
/* 303 */ return compress(buffer.toCharArray(), 0, buffer.length());
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public static byte[] compress(char[] buffer, int start, int limit)
/* */ {
/* 319 */ UnicodeCompressor comp = new UnicodeCompressor();
/* */
/* */
/* */
/* */
/* */
/* */
/* 326 */ int len = Math.max(4, 3 * (limit - start) + 1);
/* 327 */ byte[] temp = new byte[len];
/* */
/* 329 */ int byteCount = comp.compress(buffer, start, limit, null, temp, 0, len);
/* */
/* */
/* 332 */ byte[] result = new byte[byteCount];
/* 333 */ System.arraycopy(temp, 0, result, 0, byteCount);
/* 334 */ return result;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public int compress(char[] charBuffer, int charBufferStart, int charBufferLimit, int[] charsRead, byte[] byteBuffer, int byteBufferStart, int byteBufferLimit)
/* */ {
/* 365 */ int bytePos = byteBufferStart;
/* */
/* */
/* 368 */ int ucPos = charBufferStart;
/* */
/* */
/* 371 */ int curUC = -1;
/* */
/* */
/* 374 */ int curIndex = -1;
/* */
/* */
/* 377 */ int nextUC = -1;
/* 378 */ int forwardUC = -1;
/* */
/* */
/* 381 */ int whichWindow = 0;
/* */
/* */
/* 384 */ int hiByte = 0;
/* 385 */ int loByte = 0;
/* */
/* */
/* */
/* 389 */ if ((byteBuffer.length < 4) || (byteBufferLimit - byteBufferStart < 4)) {
/* 390 */ throw new IllegalArgumentException("byteBuffer.length < 4");
/* */ }
/* */
/* 393 */ while ((ucPos < charBufferLimit) && (bytePos < byteBufferLimit))
/* 394 */ switch (this.fMode)
/* */ {
/* */ case 0:
/* */ case 1:
/* 398 */ while ((ucPos < charBufferLimit) && (bytePos < byteBufferLimit))
/* */ {
/* 400 */ curUC = charBuffer[(ucPos++)];
/* */
/* */
/* 403 */ if (ucPos < charBufferLimit) {
/* 404 */ nextUC = charBuffer[ucPos];
/* */ } else {
/* 406 */ nextUC = -1;
/* */ }
/* */
/* */
/* 410 */ if (curUC < 128) {
/* 411 */ loByte = curUC & 0xFF;
/* */
/* */
/* */
/* */
/* 416 */ if (sSingleTagTable[loByte] != 0)
/* */ {
/* */
/* */
/* 420 */ if (bytePos + 1 >= byteBufferLimit) {
/* 421 */ ucPos--;
/* */
/* */ break label1668;
/* */ }
/* 425 */ byteBuffer[(bytePos++)] = 1;
/* */ }
/* */
/* 428 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* */
/* */
/* */
/* */ }
/* 434 */ else if (inDynamicWindow(curUC, this.fCurrentWindow)) {
/* 435 */ byteBuffer[(bytePos++)] = ((byte)(curUC - this.fOffsets[this.fCurrentWindow] + 128));
/* */
/* */
/* */
/* */
/* */
/* */ }
/* 442 */ else if (!isCompressible(curUC))
/* */ {
/* 444 */ if ((nextUC != -1) && (isCompressible(nextUC)))
/* */ {
/* */
/* */
/* */
/* 449 */ if (bytePos + 2 >= byteBufferLimit) {
/* 450 */ ucPos--;
/* */ break label1668; }
/* 452 */ byteBuffer[(bytePos++)] = 14;
/* 453 */ byteBuffer[(bytePos++)] = ((byte)(curUC >>> 8));
/* 454 */ byteBuffer[(bytePos++)] = ((byte)(curUC & 0xFF));
/* */
/* */ }
/* */ else
/* */ {
/* */
/* 460 */ if (bytePos + 3 >= byteBufferLimit) {
/* 461 */ ucPos--;
/* */ break label1668; }
/* 463 */ byteBuffer[(bytePos++)] = 15;
/* */
/* 465 */ hiByte = curUC >>> 8;
/* 466 */ loByte = curUC & 0xFF;
/* */
/* 468 */ if (sUnicodeTagTable[hiByte] != 0)
/* */ {
/* 470 */ byteBuffer[(bytePos++)] = -16;
/* */ }
/* 472 */ byteBuffer[(bytePos++)] = ((byte)hiByte);
/* 473 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* 475 */ this.fMode = 1;
/* */
/* */
/* */ }
/* */
/* */
/* */
/* */ }
/* 483 */ else if ((whichWindow = findDynamicWindow(curUC)) != -1)
/* */ {
/* */
/* 486 */ if (ucPos + 1 < charBufferLimit) {
/* 487 */ forwardUC = charBuffer[(ucPos + 1)];
/* */ } else {
/* 489 */ forwardUC = -1;
/* */ }
/* */
/* */
/* */
/* 494 */ if ((inDynamicWindow(nextUC, whichWindow)) && (inDynamicWindow(forwardUC, whichWindow)))
/* */ {
/* */
/* */
/* */
/* 499 */ if (bytePos + 1 >= byteBufferLimit) {
/* 500 */ ucPos--;
/* */ break label1668; }
/* 502 */ byteBuffer[(bytePos++)] = ((byte)(16 + whichWindow));
/* 503 */ byteBuffer[(bytePos++)] = ((byte)(curUC - this.fOffsets[whichWindow] + 128));
/* */
/* */
/* 506 */ this.fTimeStamps[whichWindow] = (++this.fTimeStamp);
/* 507 */ this.fCurrentWindow = whichWindow;
/* */
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* */
/* 516 */ if (bytePos + 1 >= byteBufferLimit) {
/* 517 */ ucPos--;
/* */ break label1668; }
/* 519 */ byteBuffer[(bytePos++)] = ((byte)(1 + whichWindow));
/* 520 */ byteBuffer[(bytePos++)] = ((byte)(curUC - this.fOffsets[whichWindow] + 128));
/* */
/* */
/* */
/* */ }
/* */
/* */
/* */
/* */
/* */ }
/* 530 */ else if (((whichWindow = findStaticWindow(curUC)) != -1) && (!inStaticWindow(nextUC, whichWindow)))
/* */ {
/* */
/* */
/* */
/* */
/* 536 */ if (bytePos + 1 >= byteBufferLimit) {
/* 537 */ ucPos--;
/* */ break label1668; }
/* 539 */ byteBuffer[(bytePos++)] = ((byte)(1 + whichWindow));
/* 540 */ byteBuffer[(bytePos++)] = ((byte)(curUC - sOffsets[whichWindow]));
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* */
/* 548 */ curIndex = makeIndex(curUC);
/* 549 */ this.fIndexCount[curIndex] += 1;
/* */
/* */
/* 552 */ if (ucPos + 1 < charBufferLimit) {
/* 553 */ forwardUC = charBuffer[(ucPos + 1)];
/* */ } else {
/* 555 */ forwardUC = -1;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* 563 */ if ((this.fIndexCount[curIndex] > 1) || ((curIndex == makeIndex(nextUC)) && (curIndex == makeIndex(forwardUC))))
/* */ {
/* */
/* */
/* */
/* */
/* 569 */ if (bytePos + 2 >= byteBufferLimit) {
/* 570 */ ucPos--;
/* */ break label1668;
/* */ }
/* 573 */ whichWindow = getLRDefinedWindow();
/* */
/* 575 */ byteBuffer[(bytePos++)] = ((byte)(24 + whichWindow));
/* 576 */ byteBuffer[(bytePos++)] = ((byte)curIndex);
/* 577 */ byteBuffer[(bytePos++)] = ((byte)(curUC - sOffsetTable[curIndex] + 128));
/* */
/* */
/* */
/* 581 */ this.fOffsets[whichWindow] = sOffsetTable[curIndex];
/* 582 */ this.fCurrentWindow = whichWindow;
/* 583 */ this.fTimeStamps[whichWindow] = (++this.fTimeStamp);
/* */
/* */
/* */
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* */
/* */
/* */
/* 596 */ if (bytePos + 3 >= byteBufferLimit) {
/* 597 */ ucPos--;
/* */ break label1668; }
/* 599 */ byteBuffer[(bytePos++)] = 15;
/* */
/* 601 */ hiByte = curUC >>> 8;
/* 602 */ loByte = curUC & 0xFF;
/* */
/* 604 */ if (sUnicodeTagTable[hiByte] != 0)
/* */ {
/* 606 */ byteBuffer[(bytePos++)] = -16;
/* */ }
/* 608 */ byteBuffer[(bytePos++)] = ((byte)hiByte);
/* 609 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* 611 */ this.fMode = 1;
/* 612 */ break;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 621 */ while ((ucPos < charBufferLimit) && (bytePos < byteBufferLimit))
/* */ {
/* 623 */ curUC = charBuffer[(ucPos++)];
/* */
/* */
/* 626 */ if (ucPos < charBufferLimit) {
/* 627 */ nextUC = charBuffer[ucPos];
/* */ } else {
/* 629 */ nextUC = -1;
/* */ }
/* */
/* */
/* 633 */ if ((!isCompressible(curUC)) || ((nextUC != -1) && (!isCompressible(nextUC))))
/* */ {
/* */
/* */
/* 637 */ if (bytePos + 2 >= byteBufferLimit) {
/* 638 */ ucPos--;
/* */ break label1668; }
/* 640 */ hiByte = curUC >>> 8;
/* 641 */ loByte = curUC & 0xFF;
/* */
/* 643 */ if (sUnicodeTagTable[hiByte] != 0)
/* */ {
/* 645 */ byteBuffer[(bytePos++)] = -16;
/* */ }
/* 647 */ byteBuffer[(bytePos++)] = ((byte)hiByte);
/* 648 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* */
/* */
/* */ }
/* 653 */ else if (curUC < 128) {
/* 654 */ loByte = curUC & 0xFF;
/* */
/* */
/* */
/* */
/* 659 */ if ((nextUC != -1) && (nextUC < 128) && (sSingleTagTable[loByte] == 0))
/* */ {
/* */
/* */
/* */
/* 664 */ if (bytePos + 1 >= byteBufferLimit) {
/* 665 */ ucPos--;
/* */ break label1668;
/* */ }
/* 668 */ whichWindow = this.fCurrentWindow;
/* 669 */ byteBuffer[(bytePos++)] = ((byte)(224 + whichWindow));
/* 670 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* */
/* 673 */ this.fTimeStamps[whichWindow] = (++this.fTimeStamp);
/* 674 */ this.fMode = 0;
/* 675 */ break;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 685 */ if (bytePos + 1 >= byteBufferLimit) {
/* 686 */ ucPos--;
/* */
/* */ break label1668;
/* */ }
/* */
/* 691 */ byteBuffer[(bytePos++)] = 0;
/* 692 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* */
/* */
/* */ }
/* 697 */ else if ((whichWindow = findDynamicWindow(curUC)) != -1)
/* */ {
/* */
/* */
/* */
/* 702 */ if (inDynamicWindow(nextUC, whichWindow))
/* */ {
/* */
/* */
/* 706 */ if (bytePos + 1 >= byteBufferLimit) {
/* 707 */ ucPos--;
/* */ break label1668; }
/* 709 */ byteBuffer[(bytePos++)] = ((byte)(224 + whichWindow));
/* 710 */ byteBuffer[(bytePos++)] = ((byte)(curUC - this.fOffsets[whichWindow] + 128));
/* */
/* */
/* */
/* 714 */ this.fTimeStamps[whichWindow] = (++this.fTimeStamp);
/* 715 */ this.fCurrentWindow = whichWindow;
/* 716 */ this.fMode = 0;
/* 717 */ break;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 726 */ if (bytePos + 2 >= byteBufferLimit) {
/* 727 */ ucPos--;
/* */ break label1668; }
/* 729 */ hiByte = curUC >>> 8;
/* 730 */ loByte = curUC & 0xFF;
/* */
/* 732 */ if (sUnicodeTagTable[hiByte] != 0)
/* */ {
/* 734 */ byteBuffer[(bytePos++)] = -16;
/* */ }
/* 736 */ byteBuffer[(bytePos++)] = ((byte)hiByte);
/* 737 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* 744 */ curIndex = makeIndex(curUC);
/* 745 */ this.fIndexCount[curIndex] += 1;
/* */
/* */
/* 748 */ if (ucPos + 1 < charBufferLimit) {
/* 749 */ forwardUC = charBuffer[(ucPos + 1)];
/* */ } else {
/* 751 */ forwardUC = -1;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 760 */ if ((this.fIndexCount[curIndex] > 1) || ((curIndex == makeIndex(nextUC)) && (curIndex == makeIndex(forwardUC))))
/* */ {
/* */
/* */
/* */
/* */
/* */
/* 767 */ if (bytePos + 2 >= byteBufferLimit) {
/* 768 */ ucPos--;
/* */ break label1668;
/* */ }
/* 771 */ whichWindow = getLRDefinedWindow();
/* */
/* 773 */ byteBuffer[(bytePos++)] = ((byte)(232 + whichWindow));
/* 774 */ byteBuffer[(bytePos++)] = ((byte)curIndex);
/* 775 */ byteBuffer[(bytePos++)] = ((byte)(curUC - sOffsetTable[curIndex] + 128));
/* */
/* */
/* */
/* 779 */ this.fOffsets[whichWindow] = sOffsetTable[curIndex];
/* 780 */ this.fCurrentWindow = whichWindow;
/* 781 */ this.fTimeStamps[whichWindow] = (++this.fTimeStamp);
/* 782 */ this.fMode = 0;
/* 783 */ break;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 793 */ if (bytePos + 2 >= byteBufferLimit) {
/* 794 */ ucPos--;
/* */ break label1668; }
/* 796 */ hiByte = curUC >>> 8;
/* 797 */ loByte = curUC & 0xFF;
/* */
/* 799 */ if (sUnicodeTagTable[hiByte] != 0)
/* */ {
/* 801 */ byteBuffer[(bytePos++)] = -16;
/* */ }
/* 803 */ byteBuffer[(bytePos++)] = ((byte)hiByte);
/* 804 */ byteBuffer[(bytePos++)] = ((byte)loByte);
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */ label1668:
/* 812 */ if (charsRead != null) {
/* 813 */ charsRead[0] = (ucPos - charBufferStart);
/* */ }
/* */
/* 816 */ return bytePos - byteBufferStart;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public void reset()
/* */ {
/* 828 */ this.fOffsets[0] = 128;
/* 829 */ this.fOffsets[1] = 192;
/* 830 */ this.fOffsets[2] = 1024;
/* 831 */ this.fOffsets[3] = 1536;
/* 832 */ this.fOffsets[4] = 2304;
/* 833 */ this.fOffsets[5] = 12352;
/* 834 */ this.fOffsets[6] = 12448;
/* 835 */ this.fOffsets[7] = 65280;
/* */
/* */
/* */
/* 839 */ for (int i = 0; i < 8; i++) {
/* 840 */ this.fTimeStamps[i] = 0;
/* */ }
/* */
/* */
/* 844 */ for (i = 0; i <= 255; i++) {
/* 845 */ this.fIndexCount[i] = 0;
/* */ }
/* */
/* 848 */ this.fTimeStamp = 0;
/* 849 */ this.fCurrentWindow = 0;
/* 850 */ this.fMode = 0;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static int makeIndex(int c)
/* */ {
/* 867 */ if ((c >= 192) && (c < 320))
/* 868 */ return 249;
/* 869 */ if ((c >= 592) && (c < 720))
/* 870 */ return 250;
/* 871 */ if ((c >= 880) && (c < 1008))
/* 872 */ return 251;
/* 873 */ if ((c >= 1328) && (c < 1424))
/* 874 */ return 252;
/* 875 */ if ((c >= 12352) && (c < 12448))
/* 876 */ return 253;
/* 877 */ if ((c >= 12448) && (c < 12576))
/* 878 */ return 254;
/* 879 */ if ((c >= 65376) && (c < 65439)) {
/* 880 */ return 255;
/* */ }
/* */
/* 883 */ if ((c >= 128) && (c < 13312))
/* 884 */ return c / 128 & 0xFF;
/* 885 */ if ((c >= 57344) && (c <= 65535)) {
/* 886 */ return (c - 44032) / 128 & 0xFF;
/* */ }
/* */
/* */
/* 890 */ return 0;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private boolean inDynamicWindow(int c, int whichWindow)
/* */ {
/* 908 */ return (c >= this.fOffsets[whichWindow]) && (c < this.fOffsets[whichWindow] + 128);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static boolean inStaticWindow(int c, int whichWindow)
/* */ {
/* 922 */ return (c >= sOffsets[whichWindow]) && (c < sOffsets[whichWindow] + 128);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static boolean isCompressible(int c)
/* */ {
/* 937 */ return (c < 13312) || (c >= 57344);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int findDynamicWindow(int c)
/* */ {
/* 954 */ for (int i = 7; i >= 0; i--) {
/* 955 */ if (inDynamicWindow(c, i)) {
/* 956 */ this.fTimeStamps[i] += 1;
/* 957 */ return i;
/* */ }
/* */ }
/* */
/* 961 */ return -1;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static int findStaticWindow(int c)
/* */ {
/* 974 */ for (int i = 7; i >= 0; i--) {
/* 975 */ if (inStaticWindow(c, i)) {
/* 976 */ return i;
/* */ }
/* */ }
/* */
/* 980 */ return -1;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int getLRDefinedWindow()
/* */ {
/* 990 */ int leastRU = Integer.MAX_VALUE;
/* 991 */ int whichWindow = -1;
/* */
/* */
/* */
/* */
/* 996 */ for (int i = 7; i >= 0; i--) {
/* 997 */ if (this.fTimeStamps[i] < leastRU) {
/* 998 */ leastRU = this.fTimeStamps[i];
/* 999 */ whichWindow = i;
/* */ }
/* */ }
/* */
/* 1003 */ return whichWindow;
/* */ }
/* */ }
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\text\UnicodeCompressor.class
* Java compiler version: 5 (49.0)
* JD-Core Version: 0.7.1
*/