pike.git/
src/
stralloc.c
Branch:
Tag:
Non-build tags
All tags
No tags
2011-04-22
2011-04-22 16:32:18 by Henrik Grubbström (Grubba) <grubba@grubba.org>
357a524823022621f8e8ba9c76b6dad3425960c1 (
29
lines) (+
29
/-
0
)
[
Show
|
Annotate
]
Branch:
7.9
Moved feed_unistr() to string_builder_utf16_strcat().
2551:
s->s->str[s->s->len << s->s->size_shift] = 0; }
+
/* Append a NUL-terminated UTF16 string possibly containing surrogates. */
+
PMOD_EXPORT void string_builder_utf16_strcat(struct string_builder *s,
+
const p_wchar1 *utf16str)
+
{
+
p_wchar1 uc;
+
while ((uc = *(utf16str++))) {
+
if ((uc & 0xf800) == 0xd800) {
+
/* Surrogate. */
+
p_wchar2 wchar = uc & 0x03ff;
+
if (!(uc & 0x0400)) {
+
/* High order 10 bits. */
+
wchar <<= 10;
+
}
+
uc = *(utf16str++);
+
if (uc & 0x0400) {
+
/* Low order 10 bits. */
+
wchar |= (uc & 0x3ff);
+
} else {
+
/* High order 10 bits. */
+
wchar |= (uc & 0x3ff) << 10;
+
}
+
string_builder_putchar(s, wchar + 0x00010000);
+
} else {
+
string_builder_putchar(s, uc);
+
}
+
}
+
}
+
PMOD_EXPORT void string_builder_strcat(struct string_builder *s, char *str) { string_builder_binary_strcat(s,str,strlen(str));