diff -r 64f7ee2f31dd -r 2f6d68f22eae jdk/src/share/classes/sun/io/ByteToCharISCII91.java --- a/jdk/src/share/classes/sun/io/ByteToCharISCII91.java Mon Aug 29 14:27:21 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,233 +0,0 @@ -/* - * Copyright (c) 1999, 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; - -import sun.nio.cs.ext.ISCII91; - -/* - * Copyright (c) 1998 International Business Machines. - * All Rights Reserved. - * - * Author : Sunanda Bera, C. Thirumalesh - * Last Modified : 23,November,1998 - * - * Purpose : Defines class ByteToCharISCII91. - * - * - * Revision History - * ======== ======= - * - * Date By Description - * ---- -- ----------- - * - * - */ - -/** - * Converter class. Converts between Unicode encoding and ISCII91 encoding. - * ISCII91 is the character encoding as defined in Indian Standard document - * IS 13194:1991 ( Indian Script Code for Information Interchange ). - * - * @see sun.io.ByteToCharConverter - */ -public class ByteToCharISCII91 extends ByteToCharConverter { - - private static final char[] directMapTable = ISCII91.getDirectMapTable(); - - private static final char NUKTA_CHAR = '\u093c'; - private static final char HALANT_CHAR = '\u094d'; - private static final char ZWNJ_CHAR = '\u200c'; - private static final char ZWJ_CHAR = '\u200d'; - private static final char INVALID_CHAR = '\uffff'; - - private char contextChar = INVALID_CHAR; - private boolean needFlushing = false; - -/** - * Converts ISCII91 characters to Unicode. - * @see sun.io.ByteToCharConverter#convert - */ - public int convert(byte input[], int inStart, int inEnd, - char output[], int outStart, int outEnd) - throws ConversionBufferFullException, UnknownCharacterException { - /*Rules: - * 1)ATR,EXT,following character to be replaced with '\ufffd' - * 2)Halant + Halant => '\u094d' (Virama) + '\u200c'(ZWNJ) - * 3)Halant + Nukta => '\u094d' (Virama) + '\u200d'(ZWJ) - */ - charOff = outStart; - byteOff = inStart; - while (byteOff < inEnd) { - if (charOff >= outEnd) { - throw new ConversionBufferFullException(); - } - int index = input[byteOff++]; - index = ( index < 0 )? ( index + 255 ):index; - char currentChar = directMapTable[index]; - - // if the contextChar is either ATR || EXT set the output to '\ufffd' - if(contextChar == '\ufffd') { - output[charOff++] = '\ufffd'; - contextChar = INVALID_CHAR; - needFlushing = false; - continue; - } - - switch(currentChar) { - case '\u0901': - case '\u0907': - case '\u0908': - case '\u090b': - case '\u093f': - case '\u0940': - case '\u0943': - case '\u0964': - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - contextChar = currentChar; - needFlushing = true; - continue; - case NUKTA_CHAR: - switch(contextChar) { - case '\u0901': - output[charOff] = '\u0950'; - break; - case '\u0907': - output[charOff] = '\u090c'; - break; - case '\u0908': - output[charOff] = '\u0961'; - break; - case '\u090b': - output[charOff] = '\u0960'; - break; - case '\u093f': - output[charOff] = '\u0962'; - break; - case '\u0940': - output[charOff] = '\u0963'; - break; - case '\u0943': - output[charOff] = '\u0944'; - break; - case '\u0964': - output[charOff] = '\u093d'; - break; - case HALANT_CHAR: - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - output[charOff] = ZWJ_CHAR; - break; - default: - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - output[charOff] = NUKTA_CHAR; - } - break; - case HALANT_CHAR: - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - if(contextChar == HALANT_CHAR) { - output[charOff] = ZWNJ_CHAR; - break; - } - output[charOff] = HALANT_CHAR; - break; - case INVALID_CHAR: - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - if(subMode) { - output[charOff] = subChars[0]; - break; - } else { - contextChar = INVALID_CHAR; - throw new UnknownCharacterException(); - } - default: - if(needFlushing) { - output[charOff++] = contextChar; - contextChar = currentChar; - continue; - } - output[charOff] = currentChar; - break; - }//end switch - - contextChar = currentChar; - needFlushing = false; - charOff++; - }//end while - return charOff - outStart; - } //convert() - -/** - * @see sun.io.ByteToCharConverter#flush - */ - public int flush( char[] output, int outStart, int outEnd ) - throws MalformedInputException, ConversionBufferFullException - { - int charsWritten = 0; - //if the last char was not flushed, flush it! - if(needFlushing) { - output[outStart] = contextChar; - charsWritten = 1; - } - contextChar = INVALID_CHAR; - needFlushing = false; - byteOff = charOff = 0; - return charsWritten; - }//flush() -/** - * Returns the character set id for the conversion. - */ - public String getCharacterEncoding() - { - return "ISCII91"; - }//getCharacterEncoding() -/** - * @see sun.io.ByteToCharConverter#reset - */ - public void reset() - { - byteOff = charOff = 0; - }//reset() - -}//end of class definition