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

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