1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)**********************************************************************
3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Copyright (C) 1999-2009, International Business Machines
4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Corporation and others.  All Rights Reserved.
5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)**********************************************************************
6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   ucnv_err.h:
9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * \file
13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * \brief C UConverter predefined error callbacks
14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  <h2>Error Behaviour Functions</h2>
16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Defines some error behaviour functions called by ucnv_{from,to}Unicode
17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  These are provided as part of ICU and many are stable, but they
18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  can also be considered only as an example of what can be done with
19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  callbacks.  You may of course write your own.
20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  If you want to write your own, you may also find the functions from
22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  ucnv_cb.h useful when writing your own callbacks.
23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  These functions, although public, should NEVER be called directly.
25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  They should be used as parameters to the ucnv_setFromUCallback
26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  and ucnv_setToUCallback functions, to set the behaviour of a converter
27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  when it encounters ILLEGAL/UNMAPPED/INVALID sequences.
28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  usage example:  'STOP' doesn't need any context, but newContext
30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    could be set to something other than 'NULL' if needed. The available
31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    contexts in this header can modify the default behavior of the callback.
32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  \code
34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UErrorCode err = U_ZERO_ERROR;
35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UConverter *myConverter = ucnv_open("ibm-949", &err);
36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  const void *oldContext;
37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UConverterFromUCallback oldAction;
38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  if (U_SUCCESS(err))
41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  {
42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      ucnv_setFromUCallBack(myConverter,
43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       UCNV_FROM_U_CALLBACK_STOP,
44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       NULL,
45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &oldAction,
46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &oldContext,
47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &status);
48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  }
49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  \endcode
50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  The code above tells "myConverter" to stop when it encounters an
52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from
53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Unicode -> Codepage. The behavior from Codepage to Unicode is not changed,
54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  and ucnv_setToUCallBack would need to be called in order to change
55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  that behavior too.
56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Here is an example with a context:
58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  \code
60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UErrorCode err = U_ZERO_ERROR;
61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UConverter *myConverter = ucnv_open("ibm-949", &err);
62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  const void *oldContext;
63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  UConverterFromUCallback oldAction;
64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  if (U_SUCCESS(err))
67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  {
68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      ucnv_setToUCallBack(myConverter,
69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       UCNV_TO_U_CALLBACK_SUBSTITUTE,
70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       UCNV_SUB_STOP_ON_ILLEGAL,
71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &oldAction,
72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &oldContext,
73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                       &status);
74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  }
75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  \endcode
76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  The code above tells "myConverter" to stop when it encounters an
78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from
79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Codepage -> Unicode. Any unmapped and legal characters will be
80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  substituted to be the default substitution character.
81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifndef UCNV_ERR_H
84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ERR_H
85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h"
87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_CONVERSION
89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** Forward declaring the UConverter structure. @stable ICU 2.0 */
91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)struct UConverter;
92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** @stable ICU 2.0 */
94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct UConverter UConverter;
95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U, TO_U context options for sub callback
98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_SUB_STOP_ON_ILLEGAL "i"
101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U, TO_U context options for skip callback
104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_SKIP_STOP_ON_ILLEGAL "i"
107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to ICU (%UXXXX)
110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_ICU       NULL
113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to JAVA (\\uXXXX)
115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_JAVA      "J"
118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to C (\\uXXXX \\UXXXXXXXX)
120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TO_U_CALLBACK_ESCAPE option to escape the character value accoding to C (\\xXXXX)
121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_C         "C"
124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape \htmlonly(&amp;#DDDD;)\endhtmlonly
126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Decimal escape \htmlonly(&amp;#DDDD;)\endhtmlonly
127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_XML_DEC   "D"
130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape \htmlonly(&amp;#xXXXX;)\endhtmlonly
132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Hex escape \htmlonly(&amp;#xXXXX;)\endhtmlonly
133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_XML_HEX   "X"
136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to Unicode (U+XXXXX)
138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_UNICODE   "U"
141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to CSS2 conventions (\\HH..H<space>, that is,
144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * a backslash, 1..6 hex digits, and a space)
145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.0
146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define UCNV_ESCAPE_CSS2   "S"
148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The process condition code to be used with the callbacks.
151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Codes which are greater than UCNV_IRREGULAR should be
152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * passed on to any chained callbacks.
153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef enum {
156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_UNASSIGNED = 0,  /**< The code point is unassigned.
157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             The error code U_INVALID_CHAR_FOUND will be set. */
158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_ILLEGAL = 1,     /**< The code point is illegal. For example,
159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             \\x81\\x2E is illegal in SJIS because \\x2E
160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             is not a valid trail byte for the \\x81
161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             lead byte.
162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             Also, starting with Unicode 3.0.1, non-shortest byte sequences
163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061)
164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             are also illegal, not just irregular.
165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             The error code U_ILLEGAL_CHAR_FOUND will be set. */
166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_IRREGULAR = 2,   /**< The codepoint is not a regular sequence in
167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF
168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             are irregular UTF-8 byte sequences for single surrogate
169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             code points.
170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             The error code U_INVALID_CHAR_FOUND will be set. */
171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_RESET = 3,       /**< The callback is called with this reason when a
172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             'reset' has occured. Callback should reset all
173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             state. */
174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_CLOSE = 4,        /**< Called when the converter is closed. The
175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             callback should release any allocated memory.*/
176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UCNV_CLONE = 5         /**< Called when ucnv_safeClone() is called on the
177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              converter. the pointer available as the
178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              'context' is an alias to the original converters'
179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              context pointer. If the context must be owned
180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              by the new converter, the callback must clone
181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              the data and call ucnv_setFromUCallback
182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              (or setToUCallback) with the correct pointer.
183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                              @stable ICU 2.2
184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                           */
185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} UConverterCallbackReason;
186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The structure for the fromUnicode callback function parameter.
190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct {
193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uint16_t size;              /**< The size of this struct. @stable ICU 2.0 */
194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UBool flush;                /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0    */
195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UConverter *converter;      /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0  */
196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const UChar *source;        /**< Pointer to the source source buffer. @stable ICU 2.0    */
197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const UChar *sourceLimit;   /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0    */
198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char *target;               /**< Pointer to the target buffer. @stable ICU 2.0    */
199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *targetLimit;    /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0     */
200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t *offsets;           /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0  */
201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} UConverterFromUnicodeArgs;
202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The structure for the toUnicode callback function parameter.
206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct {
209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uint16_t size;              /**< The size of this struct   @stable ICU 2.0 */
210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UBool flush;                /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0   */
211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UConverter *converter;      /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */
212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *source;         /**< Pointer to the source source buffer. @stable ICU 2.0    */
213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *sourceLimit;    /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0    */
214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar *target;              /**< Pointer to the target buffer. @stable ICU 2.0    */
215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const UChar *targetLimit;   /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0     */
216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t *offsets;           /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0  */
217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} UConverterToUnicodeArgs;
218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This From Unicode callback STOPS at the ILLEGAL_SEQUENCE,
223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * returning the error code back to the caller immediately.
224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context Pointer to the callback's private data
226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param fromUArgs Information about the conversion in progress
227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err This should always be set to a failure status prior to calling.
232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP (
235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterFromUnicodeArgs *fromUArgs,
237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const UChar* codeUnits,
238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UChar32 codePoint,
240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This To Unicode callback STOPS at the ILLEGAL_SEQUENCE,
248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * returning the error code back to the caller immediately.
249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context Pointer to the callback's private data
251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param toUArgs Information about the conversion in progress
252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err This should always be set to a failure status prior to calling.
256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterToUnicodeArgs *toUArgs,
261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const char* codeUnits,
262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This From Unicode callback skips any ILLEGAL_SEQUENCE, or
269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * skips only UNASSINGED_SEQUENCE depending on the context parameter
270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * simply ignoring those characters.
271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context  The function currently recognizes the callback options:
273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                      returning the error code back to the caller immediately.
275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 NULL: Skips any ILLEGAL_SEQUENCE
276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param fromUArgs Information about the conversion in progress
277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP (
286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterFromUnicodeArgs *fromUArgs,
288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const UChar* codeUnits,
289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UChar32 codePoint,
291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This From Unicode callback will Substitute the ILLEGAL SEQUENCE, or
297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * UNASSIGNED_SEQUENCE depending on context parameter, with the
298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * current substitution string for the converter. This is the default
299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * callback.
300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context The function currently recognizes the callback options:
302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                      returning the error code back to the caller immediately.
304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 NULL: Substitutes any ILLEGAL_SEQUENCE
305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param fromUArgs Information about the conversion in progress
306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see ucnv_setSubstChars
313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterFromUnicodeArgs *fromUArgs,
318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const UChar* codeUnits,
319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UChar32 codePoint,
321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This From Unicode callback will Substitute the ILLEGAL SEQUENCE with the
327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * hexadecimal representation of the illegal codepoints
328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context The function currently recognizes the callback options:
330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <ul>
331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <li>UCNV_ESCAPE_ICU: Substitues the  ILLEGAL SEQUENCE with the hexadecimal
332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          representation in the format  %UXXXX, e.g. "%uFFFE%u00AC%uC8FE").
333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          In the Event the converter doesn't support the characters {%,U}[A-F][0-9],
334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          it will  substitute  the illegal sequence with the substitution characters.
335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          %UD84D%UDC56</li>
337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <li>UCNV_ESCAPE_JAVA: Substitues the  ILLEGAL SEQUENCE with the hexadecimal
338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          representation in the format  \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE").
339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          In the Event the converter doesn't support the characters {\,u}[A-F][0-9],
340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          it will  substitute  the illegal sequence with the substitution characters.
341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          \\uD84D\\uDC56</li>
343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <li>UCNV_ESCAPE_C: Substitues the  ILLEGAL SEQUENCE with the hexadecimal
344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          representation in the format  \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE").
345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9],
346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          it will  substitute  the illegal sequence with the substitution characters.
347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          \\U00023456</li>
349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <li>UCNV_ESCAPE_XML_DEC: Substitues the  ILLEGAL SEQUENCE with the decimal
350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          representation in the format \htmlonly&amp;#DDDDDDDD;, e.g. "&amp;#65534;&amp;#172;&amp;#51454;")\endhtmlonly.
351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          In the Event the converter doesn't support the characters {&amp;,#}[0-9],
352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          it will  substitute  the illegal sequence with the substitution characters.
353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          &amp;#144470; and Zero padding is ignored.</li>
355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        <li>UCNV_ESCAPE_XML_HEX:Substitues the  ILLEGAL SEQUENCE with the decimal
356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          representation in the format \htmlonly&amp;#xXXXX; e.g. "&amp;#xFFFE;&amp;#x00AC;&amp;#xC8FE;")\endhtmlonly.
357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          In the Event the converter doesn't support the characters {&,#,x}[0-9],
358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          it will  substitute  the illegal sequence with the substitution characters.
359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          Note that  codeUnit(32bit int eg: unit of a surrogate pair) is represented as
360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *          \htmlonly&amp;#x23456;\endhtmlonly</li>
361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *        </ul>
362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param fromUArgs Information about the conversion in progress
363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence
364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint.
366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterFromUnicodeArgs *fromUArgs,
374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const UChar* codeUnits,
375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UChar32 codePoint,
377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This To Unicode callback skips any ILLEGAL_SEQUENCE, or
384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * skips only UNASSINGED_SEQUENCE depending on the context parameter
385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * simply ignoring those characters.
386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context  The function currently recognizes the callback options:
388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                      returning the error code back to the caller immediately.
390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 NULL: Skips any ILLEGAL_SEQUENCE
391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param toUArgs Information about the conversion in progress
392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP (
400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterToUnicodeArgs *toUArgs,
402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const char* codeUnits,
403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This To Unicode callback will Substitute the ILLEGAL SEQUENCE,or
410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * UNASSIGNED_SEQUENCE depending on context parameter,  with the
411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Unicode substitution character, U+FFFD.
412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context  The function currently recognizes the callback options:
414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE,
415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                      returning the error code back to the caller immediately.
416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 NULL: Substitutes any ILLEGAL_SEQUENCE
417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param toUArgs Information about the conversion in progress
418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE (
426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterToUnicodeArgs *toUArgs,
428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const char* codeUnits,
429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * DO NOT CALL THIS FUNCTION DIRECTLY!
435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This To Unicode callback will Substitute the ILLEGAL SEQUENCE with the
436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * hexadecimal representation of the illegal bytes
437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  (in the format  %XNN, e.g. "%XFF%X0A%XC8%X03").
438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param context This function currently recognizes the callback options:
440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      UCNV_ESCAPE_ICU, UCNV_ESCAPE_JAVA, UCNV_ESCAPE_C, UCNV_ESCAPE_XML_DEC,
441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      UCNV_ESCAPE_XML_HEX and UCNV_ESCAPE_UNICODE.
442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param toUArgs Information about the conversion in progress
443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param codeUnits Points to 'length' bytes of the concerned codepage sequence
444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length Size (in bytes) of the concerned codepage sequence
445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param reason Defines the reason the callback was invoked
446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param err Return value will be set to success if the callback was handled,
447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      otherwise this value will be set to a failure status.
448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 2.0
449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE (
452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const void *context,
453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterToUnicodeArgs *toUArgs,
454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  const char* codeUnits,
455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  int32_t length,
456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UConverterCallbackReason reason,
457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  UErrorCode * err);
458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*UCNV_ERR_H*/
464