tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0e5d3f9b982e83fe0b66af95a300c25b3ae1ddf1

commit 0e5d3f9b982e83fe0b66af95a300c25b3ae1ddf1
Author: Tom Hacohen <[email protected]>
Date:   Wed Feb 19 14:32:39 2014 +0000

    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 33402f6..4297014 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++)
      {

-- 


Reply via email to