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));
41 buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity);
42 buf16->utf16[0] = (UChar) 0;
43 buf16->utf16_cap = capacity;
48 struct icu_buf_utf16 * icu_buf_utf16_clear(struct icu_buf_utf16 * buf16)
53 buf16->utf16[0] = (UChar) 0;
59 struct icu_buf_utf16 * icu_buf_utf16_resize(struct icu_buf_utf16 * buf16,
67 if (0 == buf16->utf16)
68 buf16->utf16 = (UChar *) xmalloc(sizeof(UChar) * capacity);
71 = (UChar *) xrealloc(buf16->utf16, sizeof(UChar) * capacity);
79 buf16->utf16_cap = capacity;
84 struct icu_buf_utf16 * icu_buf_utf16_copy(struct icu_buf_utf16 * dest16,
85 const struct icu_buf_utf16 * src16)
87 if (!dest16 || !src16 || dest16 == src16)
90 if (dest16->utf16_cap < src16->utf16_len)
91 icu_buf_utf16_resize(dest16, src16->utf16_len * 2);
93 u_strncpy(dest16->utf16, src16->utf16, src16->utf16_len);
94 dest16->utf16_len = src16->utf16_len;
100 struct icu_buf_utf16 *icu_buf_utf16_append(struct icu_buf_utf16 *dest16,
101 const struct icu_buf_utf16 * src16)
109 if (dest16->utf16_cap <= src16->utf16_len + dest16->utf16_len)
110 icu_buf_utf16_resize(dest16, dest16->utf16_len + src16->utf16_len * 2);
112 u_strncpy(dest16->utf16 + dest16->utf16_len,
113 src16->utf16, src16->utf16_len);
114 dest16->utf16_len += src16->utf16_len;
120 void icu_buf_utf16_destroy(struct icu_buf_utf16 * buf16)
127 void icu_buf_utf16_log(const char *lead, struct icu_buf_utf16 *src16)
131 struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0);
132 UErrorCode status = U_ZERO_ERROR;
133 icu_utf16_to_utf8(dst8, src16, &status);
134 yaz_log(YLOG_LOG, "%s=%s", lead, dst8->utf8);
135 icu_buf_utf8_destroy(dst8);
139 yaz_log(YLOG_LOG, "%s=NULL", lead);
143 #endif /* YAZ_HAVE_ICU */
148 * c-file-style: "Stroustrup"
149 * indent-tabs-mode: nil
151 * vim: shiftwidth=4 tabstop=8 expandtab