ucnv_cb.h File Reference

C API: UConverter functions to aid the writers of callbacks. More...

`#include "unicode/utypes.h"`
`#include "unicode/ucnv.h"`
`#include "unicode/ucnv_err.h"`

Go to the source code of this file.

## Functions

U_CAPI void | ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, const char *source, int32_t length, int32_t offsetIndex, UErrorCode *err)
| ONLY used by FromU callback functions.
U_CAPI void | ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err)
| ONLY used by FromU callback functions.
U_CAPI void | ucnv_cbFromUWriteUChars (UConverterFromUnicodeArgs *args, const UChar **source, const UChar *sourceLimit, int32_t offsetIndex, UErrorCode *err)
| ONLY used by fromU callback functions.
U_CAPI void | ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, const UChar *source, int32_t length, int32_t offsetIndex, UErrorCode *err)
| ONLY used by ToU callback functions.
U_CAPI void | ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err)
| ONLY used by ToU callback functions.

## Detailed Description

C API: UConverter functions to aid the writers of callbacks.

## Callback API for UConverter

These functions are provided here for the convenience of the callback writer. If you are just looking for callback functions to use, please see ucnv_err.h. DO NOT call these functions directly when you are working with converters, unless your code has been called as a callback via ucnv_setFromUCallback or ucnv_setToUCallback !!

A note about error codes and overflow. Unlike other ICU functions, these functions do not expect the error status to be U_ZERO_ERROR. Callbacks must be much more careful about their error codes. The error codes used here are in/out parameters, which should be passed back in the callback's error parameter.

For example, if you call ucnv_cbfromUWriteBytes to write data out to the output codepage, it may return U_BUFFER_OVERFLOW_ERROR if the data did not fit in the target. But this isn't a failing error, in fact, ucnv_cbfromUWriteBytes may be called AGAIN with the error status still U_BUFFER_OVERFLOW_ERROR to attempt to write further bytes, which will also go into the internal overflow buffers.

Concerning offsets, the 'offset' parameters here are relative to the start of SOURCE. For example, Suppose the string "ABCD" was being converted from Unicode into a codepage which doesn't have a mapping for 'B'. 'A' will be written out correctly, but The FromU Callback will be called on an unassigned character for 'B'. At this point, this is the state of the world: Target: A [..] [points after A] Source: A B [C] D [points to C - B has been consumed] 0 1 2 3 codePoint = "B" [the unassigned codepoint]

Now, suppose a callback wants to write the substitution character '?' to the target. It calls ucnv_cbFromUWriteBytes() to write the ?. It should pass ZERO as the offset, because the offset as far as the callback is concerned is relative to the SOURCE pointer [which points before 'C'.] If the callback goes into the args and consumes 'C' also, it would call FromUWriteBytes with an offset of 1 (and advance the source pointer).

Definition in file ucnv_cb.h.

## Function Documentation

## ucnv_cbFromUWriteBytes()

U_CAPI void ucnv_cbFromUWriteBytes | ( | UConverterFromUnicodeArgs * | args,
|  | const char * | source,
|  | int32_t | length,
|  | int32_t | offsetIndex,
|  | UErrorCode * | err
| ) |  |

ONLY used by FromU callback functions.

Writes out the specified byte output bytes to the target byte buffer or to converter internal buffers.

Parameters

  args | callback fromUnicode arguments
  source | source bytes to write
  length | length of bytes to write
  offsetIndex | the relative offset index from callback.
  err | error status. If `U_BUFFER_OVERFLOW` is returned, then U_BUFFER_OVERFLOW must be returned to the user, because it means that not all data could be written into the target buffer, and some is in the converter error buffer.

See also
  ucnv_cbFromUWriteSub

Stable:
  ICU 2.0

## ucnv_cbFromUWriteSub()

U_CAPI void ucnv_cbFromUWriteSub | ( | UConverterFromUnicodeArgs * | args,
|  | int32_t | offsetIndex,
|  | UErrorCode * | err
| ) |  |

ONLY used by FromU callback functions.

This function will write out the correct substitution character sequence to the target.

Parameters

  args | callback fromUnicode arguments
  offsetIndex | the relative offset index from the current source pointer to be used
  err | error status. If `U_BUFFER_OVERFLOW` is returned, then U_BUFFER_OVERFLOW must be returned to the user, because it means that not all data could be written into the target buffer, and some is in the converter error buffer.

See also
  ucnv_cbFromUWriteBytes

Stable:
  ICU 2.0

## ucnv_cbFromUWriteUChars()

U_CAPI void ucnv_cbFromUWriteUChars | ( | UConverterFromUnicodeArgs * | args,
|  | const UChar ** | source,
|  | const UChar * | sourceLimit,
|  | int32_t | offsetIndex,
|  | UErrorCode * | err
| ) |  |

ONLY used by fromU callback functions.

This function will write out the error character(s) to the target UChar buffer.

Parameters

  args | callback fromUnicode arguments
  source | pointer to pointer to first UChar to write [on exit: 1 after last UChar processed]
  sourceLimit | pointer after last UChar to write
  offsetIndex | the relative offset index from callback which will be set
  err | error status `U_BUFFER_OVERFLOW`

See also
  ucnv_cbToUWriteSub

Stable:
  ICU 2.0

## ucnv_cbToUWriteSub()

U_CAPI void ucnv_cbToUWriteSub | ( | UConverterToUnicodeArgs * | args,
|  | int32_t | offsetIndex,
|  | UErrorCode * | err
| ) |  |

ONLY used by ToU callback functions.

This function will write out the Unicode substitution character (U+FFFD).

Parameters

  args | callback fromUnicode arguments
  offsetIndex | the relative offset index from callback.
  err | error status `U_BUFFER_OVERFLOW`

See also
  ucnv_cbToUWriteUChars

Stable:
  ICU 2.0

## ucnv_cbToUWriteUChars()

U_CAPI void ucnv_cbToUWriteUChars | ( | UConverterToUnicodeArgs * | args,
|  | const UChar * | source,
|  | int32_t | length,
|  | int32_t | offsetIndex,
|  | UErrorCode * | err
| ) |  |

ONLY used by ToU callback functions.

This function will write out the specified characters to the target UChar buffer.

Parameters

  args | callback toUnicode arguments
  source | source string to write
  length | the length of source string
  offsetIndex | the relative offset index which will be written.
  err | error status `U_BUFFER_OVERFLOW`

See also
  ucnv_cbToUWriteSub

Stable:
  ICU 2.0