2 *******************************************************************************
3 * Copyright (C) 2006-2008, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 package com.ibm.icu.charset;
9 interface UConverterConstants {
11 static final short UNSIGNED_BYTE_MASK = 0xff;
12 static final int UNSIGNED_SHORT_MASK = 0xffff;
13 static final long UNSIGNED_INT_MASK = 0xffffffffL;
15 static final int U_IS_BIG_ENDIAN = 0;
18 * Useful constant for the maximum size of the whole locale ID
19 * (including the terminating NULL).
21 static final int ULOC_FULLNAME_CAPACITY = 56;
24 * This value is intended for sentinel values for APIs that
25 * (take or) return single code points (UChar32).
26 * It is outside of the Unicode code point range 0..0x10ffff.
28 * For example, a "done" or "error" value in a new API
29 * could be indicated with U_SENTINEL.
31 * ICU APIs designed before ICU 2.4 usually define service-specific "done"
32 * values, mostly 0xffff.
33 * Those may need to be distinguished from
34 * actual U+ffff text contents by calling functions like
35 * CharacterIterator::hasNext() or UnicodeString::length().
37 static final int U_SENTINEL = -1;
43 * Character that separates converter names from options and options from each other.
44 * @see CharsetICU#forNameICU(String)
46 static final byte OPTION_SEP_CHAR = ',';
48 /** Maximum length of a converter name including the terminating NULL */
49 static final int MAX_CONVERTER_NAME_LENGTH = 60;
50 /** Maximum length of a converter name including path and terminating NULL */
51 static final int MAX_FULL_FILE_NAME_LENGTH = (600+MAX_CONVERTER_NAME_LENGTH);
53 /** Shift in for EBDCDIC_STATEFUL and iso2022 states */
54 static final int SI = 0x0F;
55 /** Shift out for EBDCDIC_STATEFUL and iso2022 states */
56 static final int SO = 0x0E;
61 /* size of the overflow buffers in UConverter, enough for escaping callbacks */
62 //#define ERROR_BUFFER_LENGTH 32
63 static final int ERROR_BUFFER_LENGTH = 32;
65 /* at most 4 bytes per substitution character (part of .cnv file format! see UConverterStaticData) */
66 static final int MAX_SUBCHAR_LEN = 4;
68 /* at most 8 bytes per character in toUBytes[] (UTF-8 uses up to 6) */
69 static final int MAX_CHAR_LEN = 8;
71 /* converter options bits */
72 static final int OPTION_VERSION = 0xf;
73 static final int OPTION_SWAP_LFNL = 0x10;
74 static final int OPTION_MAC = 0x20; //agljport:comment added for Mac ISCII encodings
76 static final String OPTION_SWAP_LFNL_STRING = ",swaplfnl";
78 /** values for the unicodeMask */
79 static final int HAS_SUPPLEMENTARY = 1;
80 static final int HAS_SURROGATES = 2;
84 /* this is used in fromUnicode DBCS tables as an "unassigned" marker */
85 static final int missingCharMarker = 0xFFFF;
90 static interface UConverterResetChoice {
91 static final int RESET_BOTH = 0;
92 static final int RESET_TO_UNICODE = RESET_BOTH + 1;
93 static final int RESET_FROM_UNICODE = RESET_TO_UNICODE + 1;
98 * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff).
100 static final int U16_MAX_LENGTH = 2;
105 * FROM_U, TO_U context options for sub callback
107 static byte[] SUB_STOP_ON_ILLEGAL = {'i'};
110 * FROM_U, TO_U context options for skip callback
112 static byte[] SKIP_STOP_ON_ILLEGAL = {'i'};
115 * The process condition code to be used with the callbacks.
116 * Codes which are greater than IRREGULAR should be
117 * passed on to any chained callbacks.
119 static interface UConverterCallbackReason {
120 static final int UNASSIGNED = 0; /**< The code point is unassigned.
121 The error code U_INVALID_CHAR_FOUND will be set. */
122 static final int ILLEGAL = 1; /**< The code point is illegal. For example,
123 \\x81\\x2E is illegal in SJIS because \\x2E
124 is not a valid trail byte for the \\x81
126 Also, starting with Unicode 3.0.1, non-shortest byte sequences
127 in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061)
128 are also illegal, not just irregular.
129 The error code U_ILLEGAL_CHAR_FOUND will be set. */
130 static final int IRREGULAR = 2; /**< The codepoint is not a regular sequence in
131 the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF
132 are irregular UTF-8 byte sequences for single surrogate
134 The error code U_INVALID_CHAR_FOUND will be set. */
135 static final int RESET = 3; /**< The callback is called with this reason when a
136 'reset' has occured. Callback should reset all
138 static final int CLOSE = 4; /**< Called when the converter is closed. The
139 callback should release any allocated memory.*/
140 static final int CLONE = 5; /**< Called when safeClone() is called on the
141 converter. the pointer available as the
142 'context' is an alias to the original converters'
143 context pointer. If the context must be owned
144 by the new converter, the callback must clone
145 the data and call setFromUCallback
146 (or setToUCallback) with the correct pointer.
152 static final String DATA_TYPE = "cnv";
153 static final int CNV_DATA_BUFFER_SIZE = 25000;
154 static final int SIZE_OF_UCONVERTER_SHARED_DATA = 100;
156 static final int MAXIMUM_UCS2 = 0x0000FFFF;
157 static final int MAXIMUM_UTF = 0x0010FFFF;
158 //static final int MAXIMUM_UCS4 = 0x7FFFFFFF;
159 static final int HALF_SHIFT = 10;
160 static final int HALF_BASE = 0x0010000;
161 static final int HALF_MASK = 0x3FF;
162 static final int SURROGATE_HIGH_START = 0xD800;
163 static final int SURROGATE_HIGH_END = 0xDBFF;
164 static final int SURROGATE_LOW_START = 0xDC00;
165 static final int SURROGATE_LOW_END = 0xDFFF;
167 /* -SURROGATE_LOW_START + HALF_BASE */
168 static final int SURROGATE_LOW_BASE = 9216;