• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2 *******************************************************************************
3 * Copyright (C) 1996-2006, International Business Machines Corporation and    *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 *
7 *******************************************************************************
8 */
9 
10 package com.ibm.icu4jni.charset;
11 
12 import java.nio.charset.Charset;
13 import java.nio.charset.CharsetDecoder;
14 import java.nio.charset.CharsetEncoder;
15 import java.nio.charset.CodingErrorAction;
16 
17 public final class NativeConverter {
18     /**
19      * Converts an array of bytes containing characters in an external
20      * encoding into an array of Unicode characters.  This  method allows
21      * buffer-by-buffer conversion of a data stream.  The state of the
22      * conversion is saved between calls.  Among other things,
23      * this means multibyte input sequences can be split between calls.
24      * If a call to results in an error, the conversion may be
25      * continued by calling this method again with suitably modified parameters.
26      * All conversions should be finished with a call to the flush method.
27      *
28      * @param converterHandle Address of converter object created by C code
29      * @param input byte array containing text to be converted.
30      * @param inEnd stop conversion at this offset in input array (exclusive).
31      * @param output character array to receive conversion result.
32      * @param outEnd stop writing to output array at this offset (exclusive).
33      * @param data integer array containing the following data
34      *        data[0] = inputOffset
35      *        data[1] = outputOffset
36      * @return int error code returned by ICU
37      * @internal ICU 2.4
38      */
decode(long converterHandle, byte[] input, int inEnd, char[] output, int outEnd, int[] data, boolean flush)39     public static native int decode(long converterHandle, byte[] input, int inEnd,
40             char[] output, int outEnd, int[] data, boolean flush);
41 
42     /**
43      * Converts an array of Unicode chars to an array of bytes in an external encoding.
44      * This  method allows a buffer by buffer conversion of a data stream.  The state of the
45      * conversion is saved between calls to convert.  Among other things,
46      * this means multibyte input sequences can be split between calls.
47      * If a call results in an error, the conversion may be
48      * continued by calling this method again with suitably modified parameters.
49      * All conversions should be finished with a call to the flush method.
50      *
51      * @param converterHandle Address of converter object created by C code
52      * @param input char array containing text to be converted.
53      * @param inEnd stop conversion at this offset in input array (exclusive).
54      * @param output byte array to receive conversion result.
55      * @param outEnd stop writing to output array at this offset (exclusive).
56      * @param data integer array containing the following data
57      *        data[0] = inputOffset
58      *        data[1] = outputOffset
59      * @return int error code returned by ICU
60      * @internal ICU 2.4
61      */
encode(long converterHandle, char[] input, int inEnd, byte[] output, int outEnd, int[] data, boolean flush)62     public static native int encode(long converterHandle, char[] input, int inEnd,
63             byte[] output, int outEnd, int[] data, boolean flush);
64 
65     /**
66      * Writes any remaining output to the output buffer and resets the
67      * converter to its initial state.
68      *
69      * @param converterHandle Address of converter object created by C code
70      * @param output byte array to receive flushed output.
71      * @param outEnd stop writing to output array at this offset (exclusive).
72      * @return int error code returned by ICU
73      * @param data integer array containing the following data
74      *        data[0] = inputOffset
75      *        data[1] = outputOffset
76      * @internal ICU 2.4
77      */
flushCharToByte(long converterHandle, byte[] output, int outEnd, int[] data)78     public static native int flushCharToByte(long converterHandle, byte[] output, int outEnd, int[] data);
79 
80     /**
81      * Writes any remaining output to the output buffer and resets the
82      * converter to its initial state.
83      *
84      * @param converterHandle Address of converter object created by the native code
85      * @param output char array to receive flushed output.
86      * @param outEnd stop writing to output array at this offset (exclusive).
87      * @return int error code returned by ICU
88      * @param data integer array containing the following data
89      *        data[0] = inputOffset
90      *        data[1] = outputOffset
91      * @internal ICU 2.4
92      */
flushByteToChar(long converterHandle, char[] output, int outEnd, int[] data)93     public static native int flushByteToChar(long converterHandle, char[] output,  int outEnd, int[] data);
94 
openConverter(String encoding)95     public static native long openConverter(String encoding);
closeConverter(long converterHandle)96     public static native void closeConverter(long converterHandle);
97 
resetByteToChar(long converterHandle)98     public static native void resetByteToChar(long converterHandle);
resetCharToByte(long converterHandle)99     public static native void resetCharToByte(long converterHandle);
100 
getSubstitutionBytes(long converterHandle)101     public static native byte[] getSubstitutionBytes(long converterHandle);
102 
getMaxBytesPerChar(long converterHandle)103     public static native int getMaxBytesPerChar(long converterHandle);
getMinBytesPerChar(long converterHandle)104     public static native int getMinBytesPerChar(long converterHandle);
getAveBytesPerChar(long converterHandle)105     public static native float getAveBytesPerChar(long converterHandle);
getAveCharsPerByte(long converterHandle)106     public static native float getAveCharsPerByte(long converterHandle);
107 
contains(String converterName1, String converterName2)108     public static native boolean contains(String converterName1, String converterName2);
109 
canEncode(long converterHandle, int codeUnit)110     public static native boolean canEncode(long converterHandle, int codeUnit);
111 
getAvailableCharsetNames()112     public static native String[] getAvailableCharsetNames();
charsetForName(String charsetName)113     public static native Charset charsetForName(String charsetName);
114 
115     // Translates from Java's enum to the magic numbers #defined in "NativeConverter.cpp".
translateCodingErrorAction(CodingErrorAction action)116     private static int translateCodingErrorAction(CodingErrorAction action) {
117         if (action == CodingErrorAction.REPORT) {
118             return 0;
119         } else if (action == CodingErrorAction.IGNORE) {
120             return 1;
121         } else if (action == CodingErrorAction.REPLACE) {
122             return 2;
123         } else {
124             throw new AssertionError(); // Someone changed the enum.
125         }
126     }
127 
setCallbackDecode(long converterHandle, CharsetDecoder decoder)128     public static int setCallbackDecode(long converterHandle, CharsetDecoder decoder) {
129         return setCallbackDecode(converterHandle,
130                 translateCodingErrorAction(decoder.malformedInputAction()),
131                 translateCodingErrorAction(decoder.unmappableCharacterAction()),
132                 decoder.replacement().toCharArray());
133     }
setCallbackDecode(long converterHandle, int onMalformedInput, int onUnmappableInput, char[] subChars)134     private static native int setCallbackDecode(long converterHandle, int onMalformedInput, int onUnmappableInput, char[] subChars);
135 
setCallbackEncode(long converterHandle, CharsetEncoder encoder)136     public static int setCallbackEncode(long converterHandle, CharsetEncoder encoder) {
137         return setCallbackEncode(converterHandle,
138                 translateCodingErrorAction(encoder.malformedInputAction()),
139                 translateCodingErrorAction(encoder.unmappableCharacterAction()),
140                 encoder.replacement());
141     }
setCallbackEncode(long converterHandle, int onMalformedInput, int onUnmappableInput, byte[] subBytes)142     private static native int setCallbackEncode(long converterHandle, int onMalformedInput, int onUnmappableInput, byte[] subBytes);
143 }
144