jdk/src/share/classes/sun/io/ByteToCharISO2022CN.java
changeset 10372 2f6d68f22eae
parent 10321 64f7ee2f31dd
parent 10371 7da2112e4236
child 10373 d4c5e59b82f8
--- a/jdk/src/share/classes/sun/io/ByteToCharISO2022CN.java	Mon Aug 29 14:27:21 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.io;
-
-/**
- * @author Tom Zhou
- */
-public class ByteToCharISO2022CN extends ByteToCharConverter
-{
-    private String SODesignator[];
-    private String SS2Designator[] = null;
-    private String SS3Designator[] = null;
-    private ByteToCharConverter SOConverter[];
-    private ByteToCharConverter SS2Converter[] = null;
-    private ByteToCharConverter SS3Converter[] = null;
-
-    private static final byte ISO_ESC = 0x1b;
-    private static final byte ISO_SI = 0x0f;
-    private static final byte ISO_SO = 0x0e;
-    private static final byte ISO_SS2_7 = 0x4e;
-    private static final byte ISO_SS3_7 = 0x4f;
-    private static final byte MSB = (byte)0x80;
-    private static final char REPLACE_CHAR = '\uFFFD';
-    private static final byte maximumDesignatorLength = 3;
-
-    private static final byte SOFlag = 0;
-    private static final byte SS2Flag = 1;
-    private static final byte SS3Flag = 2;
-    private static final byte G0 = 0;
-    private static final byte G1 = 1;
-
-    private ByteToCharConverter tmpConverter[];
-
-    private int curSODes, curSS2Des, curSS3Des;
-    private boolean shiftout;
-
-    private byte remainByte[] = new byte[10];
-    private int remainIndex = -1;
-    private byte state, firstByte;
-
-    public void reset()
-    {
-        int i = 0;
-
-        shiftout = false;
-        state = G0;
-        firstByte = 0;
-
-        curSODes = 0;
-        curSS2Des = 0;
-        curSS3Des = 0;
-
-        charOff = byteOff = 0;
-        remainIndex = -1;
-
-        for(i = 0; i < remainByte.length; i++)
-            remainByte[i] = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        int i;
-        if (state != G0) {
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    private byte[] savetyGetSrc(byte[] input, int inOff, int inEnd, int nbytes)
-    {
-        int i;
-        byte tmp[];
-
-        if(inOff <= (inEnd-nbytes+1))
-            tmp = new byte[nbytes];
-        else
-            tmp = new byte[inEnd-inOff];
-
-        for(i = 0; i < tmp.length; i++)
-            tmp[i] = input[inOff+i];
-        return tmp;
-    }
-
-    private char getUnicode(byte byte1, byte byte2, byte shiftFlag)
-    {
-        byte1 |= MSB;
-        byte2 |= MSB;
-        char[] tmpChar = new char[1];
-
-        switch(shiftFlag) {
-        case SOFlag:
-            try {
-                byte[] tmpByte = {byte1,byte2};
-                SOConverter[curSODes].convert(tmpByte, 0, 2, tmpChar, 0, 1);
-            }
-            catch (Exception e) {}
-            break;
-        case SS2Flag:
-            try {
-                byte[] tmpByte = {(byte)0x8e, (byte)0xa2, byte1, byte2};
-                SS2Converter[curSS2Des].convert(tmpByte, 0, 4, tmpChar, 0, 1);
-            }
-            catch (Exception e){}
-            break;
-        case SS3Flag:
-            try {
-                byte[] tmpByte = {(byte)0x8e, (byte)0xa3, byte1,byte2};
-                SS3Converter[curSS3Des].convert(tmpByte, 0, 4, tmpChar, 0, 1);
-            }
-            catch (Exception e){}
-            break;
-        default:
-            tmpChar[0] = REPLACE_CHAR;
-        }
-        return tmpChar[0];
-    }
-
-    public final int convert(byte[] input, int inOff, int inEnd,
-                             char[] output, int outOff, int outEnd)
-                             throws ConversionBufferFullException,
-                                    MalformedInputException
-    {
-        int i;
-        int DesignatorLength = 0;
-        charOff  =  outOff;
-        byteOff  =  inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            // If we don't have room for the output, throw an exception
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-            if(remainIndex < 0) {
-                remainByte[0] = input[byteOff];
-                remainIndex = 0;
-                byteOff++;
-            }
-            switch (remainByte[0]) {
-            case ISO_SO:
-                shiftout = true;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-            case ISO_SI:
-                shiftout = false;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-             case ISO_ESC:
-                byte tmp[] = savetyGetSrc(input, byteOff, inEnd,
-                               (maximumDesignatorLength-remainIndex));
-                System.arraycopy(tmp, 0, remainByte, remainIndex+1, tmp.length);
-
-                remainIndex += tmp.length;
-                byteOff += tmp.length;
-                if(tmp.length<(maximumDesignatorLength-remainIndex))
-                    break;
-                String tmpString = new String(remainByte, 1, remainIndex);
-                for (i = 0; i < SODesignator.length; i++) {
-                    if(tmpString.indexOf(SODesignator[i]) == 0) {
-                        curSODes = i;
-                        DesignatorLength = SODesignator[i].length();
-                        break;
-                    }
-                }
-
-                if (DesignatorLength == 0) { // designator not recognized
-                   badInputLength = tmp.length;
-                   throw new MalformedInputException();
-                }
-
-                if (i == SODesignator.length) {
-                    for (i = 0; i < SS2Designator.length; i++) {
-                        if(tmpString.indexOf(SS2Designator[i]) == 0) {
-                            curSS2Des = i;
-                            DesignatorLength = SS2Designator[i].length();
-                            break;
-                        }
-                    }
-                    if(i == SS2Designator.length) {
-                        for(i = 0; i < SS3Designator.length; i++) {
-                            if (tmpString.indexOf(SS3Designator[i]) == 0) {
-                                curSS3Des = i;
-                                DesignatorLength = SS3Designator[i].length();
-                                break;
-                            }
-                        }
-                        if (i == SS3Designator.length) {
-                            switch(remainByte[1]) {
-                            case ISO_SS2_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS2Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            case ISO_SS3_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS3Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            default:
-                                DesignatorLength = 0;
-                            }
-                        }
-                    }
-                }
-                if (remainIndex > DesignatorLength) {
-                    for(i = 0; i < remainIndex-DesignatorLength; i++)
-                        remainByte[i] = remainByte[DesignatorLength+1+i];
-                    remainIndex = i-1;
-                } else {
-                    remainIndex = -1;
-                }
-                break;
-            default:
-                if (!shiftout) {
-                    output[charOff] = (char)remainByte[0];
-                    charOff++;
-                } else {
-                    switch (state) {
-                    case G0:
-                        firstByte = remainByte[0];
-                        state = G1;
-                        break;
-                    case G1:
-                        output[charOff] = getUnicode(firstByte, remainByte[0],
-                                                  SOFlag);
-                        charOff++;
-                        state = G0;
-                        break;
-                    }
-                }
-                if (remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-            }
-        }
-        return charOff - outOff;
-    }
-
-    public ByteToCharISO2022CN()
-    {
-        SODesignator = new String[3];
-        SODesignator[0] = "$A";
-        SODesignator[1] = "$)A";
-        SODesignator[2] = "$)G";
-        SS2Designator = new String[1];
-        SS2Designator[0] = "$*H";
-        SS3Designator = new String[1];
-        SS3Designator[0] = "$+I";
-
-        SOConverter = new ByteToCharConverter[3];
-        SS2Converter = new ByteToCharConverter[1];
-        SS3Converter = new ByteToCharConverter[1];
-
-        try {
-            SOConverter[0] = SOConverter[1]
-                        = ByteToCharConverter.getConverter("GB2312");
-            SOConverter[2] = SS2Converter[0] = SS3Converter[0]
-                        = ByteToCharConverter.getConverter("CNS11643");
-        } catch (Exception e) {};
-    }
-
-    // Return the character set id
-    public String getCharacterEncoding()
-    {
-        return "ISO2022CN";
-    }
-}