From 0e5d3f9b982e83fe0b66af95a300c25b3ae1ddf1 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Wed, 19 Feb 2014 14:32:39 +0000 Subject: [PATCH] Evas textblock: Fixed a few word start/end issues. Fixed issues with valgrind complaints at the end of the textblock, and Fixed wrong jumping with some special cases like "a a a a "." This fixes T995. --- src/lib/evas/canvas/evas_object_textblock.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 33402f63ec..4297014838 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -7262,16 +7262,20 @@ evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur) if (!cur) return EINA_FALSE; TB_NULL_CHECK(cur->node, EINA_FALSE); + size_t len = eina_ustrbuf_length_get(cur->node->unicode); + text = eina_ustrbuf_string_get(cur->node->unicode); { const char *lang = ""; /* FIXME: get lang */ - size_t len = eina_ustrbuf_length_get(cur->node->unicode); breaks = malloc(len); set_wordbreaks_utf32((const utf32_t *) text, len, lang, breaks); } - for (i = cur->pos; BREAK_AFTER(i); i--) + if ((cur->pos > 0) && (cur->pos == len)) + cur->pos--; + + for (i = cur->pos ; _is_white(text[i]) && BREAK_AFTER(i) ; i--) { if (i == 0) break; } @@ -7300,16 +7304,20 @@ evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur) if (!cur) return EINA_FALSE; TB_NULL_CHECK(cur->node, EINA_FALSE); + size_t len = eina_ustrbuf_length_get(cur->node->unicode); + text = eina_ustrbuf_string_get(cur->node->unicode); { const char *lang = ""; /* FIXME: get lang */ - size_t len = eina_ustrbuf_length_get(cur->node->unicode); breaks = malloc(len); set_wordbreaks_utf32((const utf32_t *) text, len, lang, breaks); } - for (i = cur->pos; (text[i]) && (BREAK_AFTER(i)); i++); + if (cur->pos == len) + return EINA_TRUE; + + for (i = cur->pos; text[i] && _is_white(text[i]) && (BREAK_AFTER(i)) ; i++); for ( ; text[i] ; i++) {