Conversion of 4-byte UTF-8 sequences.
Christina Brien <[email protected]> Thu, 24 Apr 2014 18:51:21 +0100
| Newsgroups | gmane.comp.internationalization.fribidi |
|---|---|
| Message-ID | <[email protected]> |
Hi fribidi_utf8_to_unicode() doesn’t currently support 4-byte UTF-8 sequences (although the converse, fribidi_unicode_to_utf8(), does). Here is a patch to fix this. Christina Brien Cisco Systems _______________________________________________ fribidi mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/fribidi
fribidi-utf8.diff
(application/octet-stream, 1013 B)
# HG changeset patch # User Christina Brien <[email protected]> # Date 1398360400 -3600 # Thu Apr 24 18:26:40 2014 +0100 # Node ID bed052a538c971d0f4f2ca03d65e3bc0d1392fe8 # Parent 58c380f8b560ad84a821638175996b3f51095dae Support 4-byte UTF-8 sequences. diff -r 58c380f8b560 -r bed052a538c9 charset/fribidi-char-sets-utf8.c --- a/charset/fribidi-char-sets-utf8.c Mon Apr 14 12:15:01 2014 +0100 +++ b/charset/fribidi-char-sets-utf8.c Thu Apr 24 18:26:40 2014 +0100 @@ -65,13 +65,22 @@ *us++ = ((*s & 0x1f) << 6) + (*(s + 1) & 0x3f); s += 2; } - else /* 3 byte */ + else if (ch <= 0xef) /* 3 byte */ { *us++ = ((int) (*s & 0x0f) << 12) + ((*(s + 1) & 0x3f) << 6) + (*(s + 2) & 0x3f); s += 3; } + else /* 4 byte */ + { + *us++ = + ((int) (*s & 0x07) << 18) + + ((*(s + 1) & 0x3f) << 12) + + ((*(s + 2) & 0x3f) << 6) + + ((*(s + 3) & 0x3f) << 0); + s += 4; + } length++; } return (length);