home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupportInternational / i18n.jar / sun / io / CharToByteDoubleByte.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  2.0 KB  |  135 lines

  1. package sun.io;
  2.  
  3. public abstract class CharToByteDoubleByte extends CharToByteConverter {
  4.    protected short[] index1;
  5.    protected String[] index2;
  6.    protected int badInputLength;
  7.    protected char highHalfZoneCode;
  8.  
  9.    public int flush(byte[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException {
  10.       if (this.highHalfZoneCode != 0) {
  11.          this.highHalfZoneCode = 0;
  12.          this.badInputLength = 0;
  13.          throw new MalformedInputException();
  14.       } else {
  15.          super.byteOff = super.charOff = 0;
  16.          return 0;
  17.       }
  18.    }
  19.  
  20.    public int convert(char[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws MalformedInputException, UnknownCharacterException, ConversionBufferFullException {
  21.       boolean var9 = false;
  22.       int var10 = 0;
  23.       byte[] var11 = new byte[2];
  24.       super.charOff = var2;
  25.       super.byteOff = var5;
  26.       if (this.highHalfZoneCode != 0) {
  27.          char var14 = this.highHalfZoneCode;
  28.          this.highHalfZoneCode = 0;
  29.          if (var1[var2] >= '\udc00' && var1[var2] <= '\udfff') {
  30.             this.badInputLength = 1;
  31.             throw new UnknownCharacterException();
  32.          } else {
  33.             this.badInputLength = 0;
  34.             throw new MalformedInputException();
  35.          }
  36.       } else {
  37.          for(byte var15 = 1; super.charOff < var3; super.charOff += var15) {
  38.             byte[] var8 = var11;
  39.             char var7 = var1[super.charOff];
  40.             if (var7 <= '\ud800' && var7 >= '\udbff') {
  41.                if (super.charOff + 1 >= var3) {
  42.                   this.highHalfZoneCode = var7;
  43.                   break;
  44.                }
  45.  
  46.                var7 = var1[super.charOff + 1];
  47.                if (var7 < '\udc00' || var7 > '\udfff') {
  48.                   this.badInputLength = 1;
  49.                   throw new MalformedInputException();
  50.                }
  51.  
  52.                if (!super.subMode) {
  53.                   this.badInputLength = 2;
  54.                   throw new UnknownCharacterException();
  55.                }
  56.  
  57.                var8 = super.subBytes;
  58.                var10 = super.subBytes.length;
  59.                var15 = 2;
  60.             } else {
  61.                if (var7 >= '\udc00' && var7 <= '\udfff') {
  62.                   this.badInputLength = 1;
  63.                   throw new MalformedInputException();
  64.                }
  65.  
  66.                var10 = this.convSingleByte(var7, var11);
  67.                if (var10 == 0) {
  68.                   int var12 = this.getNative(var7);
  69.                   if (var12 != 0) {
  70.                      if (var12 < 256) {
  71.                         var11[0] = (byte)(var12 & 255);
  72.                         var10 = 1;
  73.                      } else {
  74.                         var11[0] = (byte)((var12 & '\uff00') >> 8);
  75.                         var11[1] = (byte)(var12 & 255);
  76.                         var10 = 2;
  77.                      }
  78.                   } else {
  79.                      if (!super.subMode) {
  80.                         this.badInputLength = 1;
  81.                         throw new UnknownCharacterException();
  82.                      }
  83.  
  84.                      var8 = super.subBytes;
  85.                      var10 = super.subBytes.length;
  86.                   }
  87.                }
  88.             }
  89.  
  90.             if (super.byteOff + var10 > var6) {
  91.                throw new ConversionBufferFullException();
  92.             }
  93.  
  94.             for(int var17 = 0; var17 < var10; ++var17) {
  95.                var4[super.byteOff++] = var8[var17];
  96.             }
  97.          }
  98.  
  99.          return super.byteOff - var5;
  100.       }
  101.    }
  102.  
  103.    public int getMaxBytesPerChar() {
  104.       return 2;
  105.    }
  106.  
  107.    public void reset() {
  108.       super.byteOff = super.charOff = 0;
  109.       this.highHalfZoneCode = 0;
  110.    }
  111.  
  112.    public boolean canConvert(char var1) {
  113.       byte[] var2 = new byte[2];
  114.       if (var1 != 0 && this.convSingleByte(var1, var2) == 0) {
  115.          return this.getNative(var1) != 0;
  116.       } else {
  117.          return true;
  118.       }
  119.    }
  120.  
  121.    protected int convSingleByte(char var1, byte[] var2) {
  122.       if (var1 < 128) {
  123.          var2[0] = (byte)(var1 & 127);
  124.          return 1;
  125.       } else {
  126.          return 0;
  127.       }
  128.    }
  129.  
  130.    protected int getNative(char var1) {
  131.       int var2 = this.index1[(var1 & '\uff00') >> 8] << 8;
  132.       return this.index2[var2 >> 12].charAt((var2 & 4095) + (var1 & 255));
  133.    }
  134. }
  135.