1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2013 Index Data
3 * See the file LICENSE for details.
8 * \brief UTF-16 string utilities for ICU
16 #include <yaz/xmalloc.h>
18 #include <yaz/icu_I18N.h>
27 #include <unicode/ustring.h> /* some more string fcns*/
28 #include <unicode/uchar.h> /* char names */
30 struct icu_buf_utf16 *icu_buf_utf16_create(size_t capacity)
32 struct icu_buf_utf16 *buf16
33 = (struct icu_buf_utf16 *) xmalloc(sizeof(struct icu_buf_utf16));
36 buf16->utf16_cap = capacity;
39 buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity);
40 buf16->utf16[0] = (UChar) 0;
47 struct icu_buf_utf16 *icu_buf_utf16_clear(struct icu_buf_utf16 *buf16)
52 buf16->utf16[0] = (UChar) 0;
58 struct icu_buf_utf16 *icu_buf_utf16_resize(struct icu_buf_utf16 *buf16,
66 if (0 == buf16->utf16)
67 buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity);
70 = (UChar *) xrealloc(buf16->utf16, sizeof(UChar) * capacity);
77 buf16->utf16_cap = capacity;
82 struct icu_buf_utf16 *icu_buf_utf16_copy(struct icu_buf_utf16 *dest16,
83 const struct icu_buf_utf16 *src16)
85 if (!dest16 || !src16 || dest16 == src16)
88 if (dest16->utf16_cap < src16->utf16_len)
89 icu_buf_utf16_resize(dest16, src16->utf16_len * 2);
91 u_strncpy(dest16->utf16, src16->utf16, src16->utf16_len);
92 dest16->utf16_len = src16->utf16_len;
98 struct icu_buf_utf16 *icu_buf_utf16_append(struct icu_buf_utf16 *dest16,
99 const struct icu_buf_utf16 *src16)
107 if (dest16->utf16_cap <= src16->utf16_len + dest16->utf16_len)
108 icu_buf_utf16_resize(dest16, dest16->utf16_len + src16->utf16_len * 2);
110 u_strncpy(dest16->utf16 + dest16->utf16_len,
111 src16->utf16, src16->utf16_len);
112 dest16->utf16_len += src16->utf16_len;
118 void icu_buf_utf16_destroy(struct icu_buf_utf16 *buf16)
125 void icu_buf_utf16_log(const char *lead, struct icu_buf_utf16 *src16)
129 struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0);
130 UErrorCode status = U_ZERO_ERROR;
131 icu_utf16_to_utf8(dst8, src16, &status);
132 yaz_log(YLOG_LOG, "%s=%s", lead, dst8->utf8);
133 icu_buf_utf8_destroy(dst8);
137 yaz_log(YLOG_LOG, "%s=NULL", lead);
141 #endif /* YAZ_HAVE_ICU */
146 * c-file-style: "Stroustrup"
147 * indent-tabs-mode: nil
149 * vim: shiftwidth=4 tabstop=8 expandtab