blob: eefe3d5a3572fbab86b9ff12067400f68cc9e993 [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1996-2006, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
*******************************************************************************
*/
package com.ibm.icu4jni.charset;
import java.nio.charset.Charset;
/**
* Class for accessing the underlying JNI methods
* @internal ICU 2.4
*/
final class NativeConverter {
//Native methods
/**
* Converts an array of bytes containing characters in an external
* encoding into an array of Unicode characters. This method allows
* a buffer by buffer conversion of a data stream. The state of the
* conversion is saved between calls to convert. Among other things,
* this means multibyte input sequences can be split between calls.
* If a call to convert results in an Error, the conversion may be
* continued by calling convert again with suitably modified parameters.
* All conversions should be finished with a call to the flush method.
*
* @param converterHandle Address of converter object created by C code
* @param input byte array containing text to be converted.
* @param inEnd stop conversion at this offset in input array (exclusive).
* @param output character array to receive conversion result.
* @param outEnd stop writing to output array at this offset (exclusive).
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int convertByteToChar( long converterHandle,
byte[] input, int inEnd,
char[] output, int outEnd,
int[] data,
boolean flush);
/**
* Converts an array of bytes containing characters in an external
* encoding into an array of Unicode characters. This method allows
* a buffer by buffer conversion of a data stream. The state of the
* conversion is saved between calls to convert. Among other things,
* this means multibyte input sequences can be split between calls.
* If a call to convert results in an Error, the conversion may be
* continued by calling convert again with suitably modified parameters.
* All conversions should be finished with a call to the flush method.
*
* @param converterHandle Address of converter object created by C code
* @param input byte array containing text to be converted.
* @param inEnd stop conversion at this offset in input array (exclusive).
* @param output character array to receive conversion result.
* @param outEnd stop writing to output array at this offset (exclusive).
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int decode( long converterHandle,
byte[] input, int inEnd,
char[] output, int outEnd,
int[] data,
boolean flush);
/**
* Converts an array of Unicode chars containing characters in an
* external encoding into an array of bytes. This method allows
* a buffer by buffer conversion of a data stream. The state of the
* conversion is saved between calls to convert. Among other things,
* this means multibyte input sequences can be split between calls.
* If a call to convert results in an Error, the conversion may be
* continued by calling convert again with suitably modified parameters.
* All conversions should be finished with a call to the flush method.
*
* @param converterHandle Address of converter object created by C code
* @param input char array containing text to be converted.
* @param inEnd stop conversion at this offset in input array (exclusive).
* @param output byte array to receive conversion result.
* @param outEnd stop writing to output array at this offset (exclusive).
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int convertCharToByte(long converterHandle,
char[] input, int inEnd,
byte[] output, int outEnd,
int[] data,
boolean flush);
/**
* Converts an array of Unicode chars containing characters in an
* external encoding into an array of bytes. This method allows
* a buffer by buffer conversion of a data stream. The state of the
* conversion is saved between calls to convert. Among other things,
* this means multibyte input sequences can be split between calls.
* If a call to convert results in an Error, the conversion may be
* continued by calling convert again with suitably modified parameters.
* All conversions should be finished with a call to the flush method.
*
* @param converterHandle Address of converter object created by C code
* @param input char array containing text to be converted.
* @param inEnd stop conversion at this offset in input array (exclusive).
* @param output byte array to receive conversion result.
* @param outEnd stop writing to output array at this offset (exclusive).
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int encode(long converterHandle,
char[] input, int inEnd,
byte[] output, int outEnd,
int[] data,
boolean flush);
/**
* Writes any remaining output to the output buffer and resets the
* converter to its initial state.
*
* @param converterHandle Address of converter object created by C code
* @param output byte array to receive flushed output.
* @param outEnd stop writing to output array at this offset (exclusive).
* @return int error code returned by ICU
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @internal ICU 2.4
*/
public static final native int flushCharToByte(long converterHandle,
byte[] output,
int outEnd,
int[] data);
/**
* Writes any remaining output to the output buffer and resets the
* converter to its initial state.
*
* @param converterHandle Address of converter object created by the native code
* @param output char array to receive flushed output.
* @param outEnd stop writing to output array at this offset (exclusive).
* @return int error code returned by ICU
* @param data integer array containing the following data
* data[0] = inputOffset
* data[1] = outputOffset
* @internal ICU 2.4
*/
public static final native int flushByteToChar(long converterHandle,
char[] output,
int outEnd,
int[] data);
/**
* Open the converter with the specified encoding
*
* @param converterHandle long array for recieving the adress of converter object
* created by the native code
* @param encoding string representing encoding
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native long openConverter(String encoding);
/**
* Resets the ByteToChar (toUnicode) state of specified converter
*
* @param converterHandle Address of converter object created by the native code
* @internal ICU 2.4
*/
public static final native void resetByteToChar(long converterHandle);
/**
* Resets the CharToByte (fromUnicode) state of specified converter
*
* @param converterHandle Address of converter object created by the native code
* @internal ICU 2.4
*/
public static final native void resetCharToByte(long converterHandle);
/**
* Closes the specified converter and releases the resources
*
* @param converterHandle Address of converter object created by the native code
* @internal ICU 2.4
*/
public static final native void closeConverter(long converterHandle);
/**
* Sets the substitution Unicode chars of the specified converter used
* by encoder
* @param converterHandle Address of converter object created by the native code
* @param subChars array of chars to used for substitution
* @param length length of the array
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int setSubstitutionChars( long converterHandle,
char[] subChars,int length);
/**
* Sets the substitution bytes of the specified converter used by decoder
*
* @param converterHandle Address of converter object created by the native code
* @param subChars array of bytes to used for substitution
* @param length length of the array
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int setSubstitutionBytes( long converterHandle,
byte[] subChars,int length);
/**
* Sets the substitution mode of CharToByte(fromUnicode) for the specified converter
*
* @param converterHandle Address of converter object created by the native code
* @param mode to set the true/false
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int setSubstitutionModeCharToByte(long converterHandle,
boolean mode);
/**
* Sets the substitution mode of CharToByte(fromUnicode) for the specified converter
*
* @param converterHandle Address of converter object created by the native code
* @param mode to set the true/false
* @return int error code returned by ICU
* @internal ICU 3.6
*/
public static final native int setSubstitutionModeByteToChar(long converterHandle,
boolean mode);
/**
* Gets the numnber of invalid bytes in the specified converter object
* for the last error that has occured
*
* @param converterHandle Address of converter object created by the native code
* @param length array of int to recieve length of the array
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int countInvalidBytes(long converterHandle, int[] length);
/**
* Gets the numnber of invalid chars in the specified converter object
* for the last error that has occured
*
* @param converterHandle Address of converter object created by the native code
* @param length array of int to recieve length of the array
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int countInvalidChars(long converterHandle, int[] length);
/**
* Gets the number of bytes needed for converting a char
*
* @param converterHandle Address of converter object created by the native code
* @return number of bytes needed
* @internal ICU 2.4
*/
public static final native int getMaxBytesPerChar(long converterHandle);
/**
* Gets the number of bytes needed for converting a char
*
* @param converterHandle Address of converter object created by the native code
* @return number of bytes needed
* @internal ICU 3.2
*/
public static final native int getMinBytesPerChar(long converterHandle);
/**
* Gets the average numnber of bytes needed for converting a char
*
* @param converterHandle Address of converter object created by the native code
* @return number of bytes needed
* @internal ICU 2.4
*/
public static final native float getAveBytesPerChar(long converterHandle);
/**
* Gets the number of chars needed for converting a byte
*
* @param converterHandle Address of converter object created by the native code
* @return number of bytes needed
* @internal ICU 2.4
*/
public static final native int getMaxCharsPerByte(long converterHandle);
/**
* Gets the average numnber of chars needed for converting a byte
*
* @param converterHandle Address of converter object created by the native code
* @return number of bytes needed
* @internal ICU 2.4
*/
public static final native float getAveCharsPerByte(long converterHandle);
//CSDL: added by Jack
/**
* Determines whether charset1 contains charset2.
*/
public static final native boolean contains(long converterHandle1, long converterHandle2);
public static final native byte[] getSubstitutionBytes(long converterHandle);
/**
* Ascertains if a given Unicode code unit can
* be converted to the target encoding
* @param converterHandle Address of converter object created by the native code
* @param codeUnit the character to be converted
* @return true if a character can be converted
* @internal ICU 2.4
*
*/
public static final native boolean canEncode(long converterHandle,int codeUnit);
/**
* Ascertains if a given a byte sequence can be converted to Unicode
* @param converterHandle Address of converter object created by the native code
* @param bytes the bytes to be converted
* @return true if a character can be converted
* @internal ICU 2.4
*
*/
public static final native boolean canDecode(long converterHandle,byte[] bytes);
/**
* Gets the canonical names of available converters
* @return Object[] names as an object array
* @internal ICU 2.4
*/
public static final native String[] getAvailable();
public static final native Charset charsetForName(String charsetName);
/**
* Gets the number of aliases for a converter name
* @param enc encoding name
* @return number of aliases for the converter
* @internal ICU 2.4
*/
public static final native int countAliases(String enc);
/**
* Gets the aliases associated with the converter name
* @param enc converter name
* @return converter names as elements in an object array
* @internal ICU 2.4
*/
public static final native String[] getAliases(String enc);
/**
* Sets the callback to Unicode for ICU conveter. The default behaviour of ICU callback
* is to call the specified callback function for both illegal and unmapped sequences.
* @param converterHandle Adress of the converter object created by native code
* @param mode call back mode to set. This is either STOP_CALLBACK, SKIP_CALLBACK or SUBSTITUE_CALLBACK
* The converter performs the specified callback when an error occurs
* @param stopOnIllegal If true sets the alerts the converter callback to stop on an illegal sequence
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int setCallbackDecode(long converterHandle, int onMalformedInput, int onUnmappableInput, char[] subChars, int length);
/**
* Sets the callback from Unicode for ICU conveter. The default behaviour of ICU callback
* is to call the specified callback function for both illegal and unmapped sequences.
* @param converterHandle Adress of the converter object created by native code
* @param mode call back mode to set. This is either STOP_CALLBACK, SKIP_CALLBACK or SUBSTITUE_CALLBACK
* The converter performs the specified callback when an error occurs
* @param stopOnIllegal If true sets the alerts the converter callback to stop on an illegal sequence
* @return int error code returned by ICU
* @internal ICU 2.4
*/
public static final native int setCallbackEncode(long converterHandle, int onMalformedInput, int onUnmappableInput, byte[] subBytes, int length);
/**
* Returns a thread safe clone of the converter
* @internal ICU 2.4
*/
public static final native long safeClone(long converterHandle);
/** @internal ICU 2.4 */
public static final int STOP_CALLBACK = 0;//CodingErrorAction.REPORT
/** @internal ICU 2.4 */
public static final int SKIP_CALLBACK = 1;//CodingErrorAction.IGNORE
/** @internal ICU 2.4 */
public static final int SUBSTITUTE_CALLBACK = 2;//CodingErrorAction.REPLACE
}