home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.io; public abstract class CharToByteDBCS_ASCII extends CharToByteConverter { private char highHalfZoneCode; private byte[] outputByte = new byte[2]; protected short[] index1; protected String index2; protected String index2a; protected int mask1; protected int mask2; protected int shift; public int flush(byte[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException { if (this.highHalfZoneCode != 0) { this.reset(); super.badInputLength = 0; throw new MalformedInputException(); } else { this.reset(); return 0; } } public int convert(char[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws UnknownCharacterException, MalformedInputException, ConversionBufferFullException { super.byteOff = var5; int var8; for(super.charOff = var2; super.charOff < var3; super.charOff += var8) { char var7; if (this.highHalfZoneCode == 0) { var7 = var1[super.charOff]; var8 = 1; } else { var7 = this.highHalfZoneCode; var8 = 0; this.highHalfZoneCode = 0; } if (var7 >= '\ud800' && var7 <= '\udbff') { if (super.charOff + var8 >= var3) { this.highHalfZoneCode = var7; super.charOff += var8; break; } var7 = var1[super.charOff + var8]; if (var7 < '\udc00' || var7 > '\udfff') { super.badInputLength = 1; throw new MalformedInputException(); } if (!super.subMode) { super.badInputLength = 2; throw new UnknownCharacterException(); } if (super.subBytes.length == 1) { this.outputByte[0] = 0; this.outputByte[1] = super.subBytes[0]; } else { this.outputByte[0] = super.subBytes[0]; this.outputByte[1] = super.subBytes[1]; } ++var8; } else { if (var7 >= '\udc00' && var7 <= '\udfff') { super.badInputLength = 1; throw new MalformedInputException(); } int var9 = this.index1[(var7 & this.mask1) >> this.shift] + (var7 & this.mask2); char var10; if (var9 < 15000) { var10 = this.index2.charAt(var9); } else { var10 = this.index2a.charAt(var9 - 15000); } this.outputByte[0] = (byte)((var10 & '\uff00') >> 8); this.outputByte[1] = (byte)(var10 & 255); } if (this.outputByte[0] == 0 && this.outputByte[1] == 0 && var7 != 0) { if (!super.subMode) { super.badInputLength = 1; throw new UnknownCharacterException(); } if (super.subBytes.length == 1) { this.outputByte[0] = 0; this.outputByte[1] = super.subBytes[0]; } else { this.outputByte[0] = super.subBytes[0]; this.outputByte[1] = super.subBytes[1]; } } byte var11; if (this.outputByte[0] == 0) { var11 = 1; } else { var11 = 2; } if (super.byteOff + var11 > var6) { throw new ConversionBufferFullException(); } if (var11 == 1) { var4[super.byteOff++] = this.outputByte[1]; } else { var4[super.byteOff++] = this.outputByte[0]; var4[super.byteOff++] = this.outputByte[1]; } } return super.byteOff - var5; } public void reset() { super.charOff = super.byteOff = 0; this.highHalfZoneCode = 0; } public int getMaxBytesPerChar() { return 2; } public boolean canConvert(char var1) { int var2 = this.index1[(var1 & this.mask1) >> this.shift] + (var1 & this.mask2); char var3; if (var2 < 15000) { var3 = this.index2.charAt(var2); } else { var3 = this.index2a.charAt(var2 - 15000); } if (var3 != 0) { return true; } else { return var1 == 0; } } }