summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Færøy <ahf@0x90.dk>2014-06-18 22:53:01 +0200
committerAlexander Færøy <ahf@0x90.dk>2014-06-18 22:53:01 +0200
commit8c08eef87a6642b8cf7b7a23a0bc15cd3c896033 (patch)
tree63fe9cd019e5673d24c98de93e1a4890b35ecb80
parent3212ef2bdb7011bd0c5a62ff2eced5a1d9e19a46 (diff)
parentfc4a4d24718f92542e4c606d3f3ff2cf81e8f5e3 (diff)
downloadirssi-8c08eef87a6642b8cf7b7a23a0bc15cd3c896033.zip
Merge pull request #12 from ailin-nemui/no-split-utf8
no split utf8 from the bug tracker
-rw-r--r--src/fe-common/core/utf8.h1
-rw-r--r--src/fe-text/textbuffer.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/src/fe-common/core/utf8.h b/src/fe-common/core/utf8.h
index 163f1717..3c15dc7d 100644
--- a/src/fe-common/core/utf8.h
+++ b/src/fe-common/core/utf8.h
@@ -12,5 +12,6 @@
int mk_wcwidth(unichar c);
#define unichar_isprint(c) (((c) & ~0x80) >= 32)
+#define is_utf8_leading(c) (((c) & 0xc0) != 0x80)
#endif
diff --git a/src/fe-text/textbuffer.c b/src/fe-text/textbuffer.c
index 0ba7d16e..69f5969c 100644
--- a/src/fe-text/textbuffer.c
+++ b/src/fe-text/textbuffer.c
@@ -23,6 +23,7 @@
#include "module.h"
#include "misc.h"
#include "formats.h"
+#include "utf8.h"
#include "textbuffer.h"
@@ -154,6 +155,17 @@ static void text_chunk_append(TEXT_BUFFER_REC *buffer,
chunk = buffer->cur_text;
while (chunk->pos + len >= TEXT_CHUNK_USABLE_SIZE) {
left = TEXT_CHUNK_USABLE_SIZE - chunk->pos;
+
+ /* don't split utf-8 character. (assume we can split non-utf8 anywhere.) */
+ if (left < len && !is_utf8_leading(data[left])) {
+ int i;
+ for (i = 1; i < 4 && left >= i; i++)
+ if (is_utf8_leading(data[left - i])) {
+ left -= i;
+ break;
+ }
+ }
+
if (left > 0 && data[left-1] == 0)
left--; /* don't split the commands */