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

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