home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.io; public class ByteToCharISO2022JP extends ByteToCharJIS0208 { private static final int ASCII = 0; private static final int JISX0201_1976 = 1; private static final int JISX0208_1978 = 2; private static final int JISX0208_1983 = 3; private static final int JISX0201_1976_KANA = 4; private static final int SHIFTOUT = 5; private int currentState = 0; private int savedSize = 0; private byte[] savedBytes = new byte[2]; public int flush(char[] var1, int var2, int var3) throws MalformedInputException { if (this.savedSize != 0) { this.savedSize = 0; this.currentState = 0; super.badInputLength = 0; throw new MalformedInputException(); } else { super.byteOff = super.charOff = 0; return 0; } } public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws UnknownCharacterException, MalformedInputException, ConversionBufferFullException { int var7 = 0; int var8 = 0; char var9 = '�'; int var10 = super.byteOff = var2; if (this.savedSize != 0) { if (this.savedBytes[0] == 27) { if (this.savedSize == 2 && this.savedBytes[1] == 40 && var1[0] != 66 && var1[0] != 74 && var1[0] != 73 && this.savedBytes[1] == 36 && var1[0] != 64 && var1[0] != 66 || this.savedSize == 1 && var1[0] != 40 && var1[0] != 36) { super.badInputLength = 0; throw new MalformedInputException(); } if (var3 - var2 == 1 && this.savedSize == 1 && this.savedBytes[0] == 27) { this.savedSize = 2; this.savedBytes[1] = var1[0]; ++super.byteOff; return 0; } } byte[] var11 = new byte[var3 - var2 + this.savedSize]; for(int var12 = 0; var12 < this.savedSize; ++var12) { var11[var12] = this.savedBytes[var12]; } System.arraycopy(var1, var2, var11, this.savedSize, var3 - var2); super.byteOff -= this.savedSize; var1 = var11; var2 = 0; var3 = var11.length; this.savedSize = 0; } super.charOff = var5; var10 = var2; while(var10 < var3) { boolean var14 = false; if (super.charOff >= var6) { throw new ConversionBufferFullException(); } int var19 = var1[var10] & 255; var8 = 1; if ((var19 & -128) != 0) { super.badInputLength = 1; throw new MalformedInputException(); } while(var19 == 27 || var19 == 14 || var19 == 15) { if (var19 == 27) { if (var10 + var8 + 1 >= var3) { if (var10 + var8 >= var3) { this.savedSize = 1; this.savedBytes[0] = (byte)var19; } else { this.savedSize = 2; this.savedBytes[0] = (byte)var19; this.savedBytes[1] = var1[var10 + var8]; ++var8; } break; } else { int var20 = var1[var10 + var8] & 255; ++var8; if ((var20 & -128) != 0) { super.badInputLength = 2; throw new MalformedInputException(); } if (var20 == 40) { int var13 = var1[var10 + var8] & 255; ++var8; if (var13 == 66) { this.currentState = 0; } else if (var13 == 74) { this.currentState = 1; } else { if (var13 != 73) { super.badInputLength = 3; throw new MalformedInputException(); } this.currentState = 4; } } else { if (var20 != 36) { super.badInputLength = 2; throw new MalformedInputException(); } int var22 = var1[var10 + var8] & 255; ++var8; if ((var22 & -128) != 0) { super.badInputLength = 3; throw new MalformedInputException(); } if (var22 == 64) { this.currentState = 2; } else { if (var22 != 66) { super.badInputLength = 3; throw new MalformedInputException(); } this.currentState = 3; } } if (var10 + var8 < var3) { var19 = var1[var10 + var8]; ++var8; } else { var14 = true; break; } } } else if (var19 == 14) { var7 = this.currentState; this.currentState = 5; if (var10 + var8 < var3) { var19 = var1[var10 + var8]; ++var8; if ((var19 & -128) != 0) { super.badInputLength = 1; throw new MalformedInputException(); } } else { var14 = true; break; } } else if (var19 == 15) { this.currentState = var7; if (var10 + var8 < var3) { var19 = var1[var10 + var8]; ++var8; if ((var19 & -128) != 0) { super.badInputLength = 1; throw new MalformedInputException(); } } else { var14 = true; break; } } } if (!var14 && this.savedSize == 0) { var14 = false; label144: switch (this.currentState) { case 0: var9 = (char)(var19 & 255); break; case 1: switch (var19) { case 92: var9 = 165; break label144; case 126: var9 = 8254; break label144; default: var9 = (char)var19; break label144; } case 2: case 3: if (var10 + var8 >= var3) { this.savedSize = 1; this.savedBytes[0] = (byte)var19; } else { int var21 = var1[var10 + var8] & 255; ++var8; if ((var21 & -128) != 0) { super.badInputLength = 1; throw new MalformedInputException(); } if (var19 == 33 && var21 == 64) { var9 = '\'; } else { try { var9 = ((ByteToCharDoubleByte)this).getUnicode(var19, var21); } catch (ArrayIndexOutOfBoundsException var15) { var9 = '�'; } } } break; case 4: case 5: if (var19 > 96) { super.badInputLength = 1; throw new MalformedInputException(); } var9 = (char)(var19 + '`'); } if (this.savedSize == 0) { if (var9 == '�') { if (!super.subMode) { super.badInputLength = var8; throw new UnknownCharacterException(); } var9 = super.subChars[0]; } var10 += var8; super.byteOff += var8; var4[super.charOff++] = var9; continue; } super.byteOff += var8; break; } super.byteOff += var8; break; } return super.charOff - var5; } public void reset() { super.byteOff = super.charOff = 0; this.currentState = 0; this.savedSize = 0; } public String getCharacterEncoding() { return "ISO2022JP"; } }