bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=41c7e1c908772bd8f4ec266c661faabeea357ec6

commit 41c7e1c908772bd8f4ec266c661faabeea357ec6
Author: Ali Alzyod <[email protected]>
Date:   Thu Jan 2 07:25:35 2020 +0000

    efl.text.cursor: emit events CANVAS_TEXTBLOCK_CHANGED when insert text 
using efl_text_cursor_markup_insert
    
    efl.text.cursor: emit events CANVAS_TEXTBLOCK_CHANGED when insert text 
using efl_text_cursor_markup_insert
    
    Differential Revision: https://phab.enlightenment.org/D10985
---
 src/lib/evas/canvas/evas_object_textblock.c | 226 ++++++++++++++--------------
 src/tests/evas/evas_test_textblock.c        |   9 +-
 2 files changed, 119 insertions(+), 116 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 2347961759..817008c889 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -8524,7 +8524,7 @@ static void
 _evas_object_textblock_text_markup_prepend(Eo *eo_obj,
       Efl_Text_Cursor_Handle *cur, const char *text)
 {
-   if (!cur) return;
+   if (!cur || !text || !*text) return;
    Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
    evas_object_async_block(obj);
    TB_HEAD();
@@ -8533,140 +8533,138 @@ _evas_object_textblock_text_markup_prepend(Eo *eo_obj,
     * this should be done once, when markup_prepend finished */
    o->pause_change = EINA_TRUE;
 
-   if (text)
-     {
-        char *s, *p;
-        char *tag_start, *tag_end, *esc_start, *esc_end;
-
-        tag_start = tag_end = esc_start = esc_end = NULL;
-        p = (char *)text;
-        s = p;
-        /* This loop goes through all of the mark up text until it finds format
-         * tags, escape sequences or the terminating NULL. When it finds either
-         * of those, it appends the text found up until that point to the 
textblock
-         * proccesses whatever found. It repeats itself until the terminating
-         * NULL is reached. */
-        for (;;)
-          {
-             size_t text_len;
-             /* If we got to the end of string or just finished/started tag
-              * or escape sequence handling. */
-             if ((*p == 0) ||
-                   (tag_end) || (esc_end) ||
-                   (tag_start) || (esc_start))
+   char *s, *p;
+   char *tag_start, *tag_end, *esc_start, *esc_end;
+
+   tag_start = tag_end = esc_start = esc_end = NULL;
+   p = (char *)text;
+   s = p;
+   /* This loop goes through all of the mark up text until it finds format
+    * tags, escape sequences or the terminating NULL. When it finds either
+    * of those, it appends the text found up until that point to the textblock
+    * proccesses whatever found. It repeats itself until the terminating
+    * NULL is reached. */
+   for (;;)
+     {
+        size_t text_len;
+        /* If we got to the end of string or just finished/started tag
+         * or escape sequence handling. */
+        if ((*p == 0) ||
+              (tag_end) || (esc_end) ||
+              (tag_start) || (esc_start))
+          {
+             if (tag_end)
                {
-                  if (tag_end)
-                    {
-                       /* If we reached to a tag ending, analyze the tag */
-                       char *ttag;
-                       size_t ttag_len = tag_end - tag_start;
+                  /* If we reached to a tag ending, analyze the tag */
+                  char *ttag;
+                  size_t ttag_len = tag_end - tag_start;
 
 
-                       ttag = malloc(ttag_len + 1);
-                       if (ttag)
-                         {
-                            memcpy(ttag, tag_start, ttag_len);
-                            ttag[ttag_len] = 0;
-                            evas_textblock_cursor_format_prepend(cur, ttag);
-                            free(ttag);
-                         }
-                       tag_start = tag_end = NULL;
-                    }
-                  else if (esc_end)
-                    {
-                       _prepend_escaped_char(cur, esc_start, esc_end + 1);
-                       esc_start = esc_end = NULL;
-                    }
-                  else if (*p == 0 && esc_start) /* escape start with no end, 
append it as text */
-                    {
-                       _prepend_text_run(cur, esc_start, p);
-                       esc_start = esc_end = NULL;
-                       s = NULL;
-                    }
-                  else if (*p == 0)
+                  ttag = malloc(ttag_len + 1);
+                  if (ttag)
                     {
-                       _prepend_text_run(cur, s, p);
-                       s = NULL;
+                       memcpy(ttag, tag_start, ttag_len);
+                       ttag[ttag_len] = 0;
+                       evas_textblock_cursor_format_prepend(cur, ttag);
+                       free(ttag);
                     }
-                  if (*p == 0)
-                    break;
+                  tag_start = tag_end = NULL;
                }
-             if (*p == '<')
+             else if (esc_end)
                {
-                  if (esc_start) /* escape start with no end, append it as 
text */
-                    {
-                       _prepend_text_run(cur, esc_start, p);
-                       esc_start = esc_end = NULL;
-                       s = NULL;
-                    }
-                  if (!esc_start)
-                    {
-                       /* Append the text prior to this to the textblock and 
mark
-                        * the start of the tag */
-                       tag_start = p;
-                       tag_end = NULL;
-                       _prepend_text_run(cur, s, p);
-                       s = NULL;
-                    }
+                  _prepend_escaped_char(cur, esc_start, esc_end + 1);
+                  esc_start = esc_end = NULL;
                }
-             else if (*p == '>')
+             else if (*p == 0 && esc_start) /* escape start with no end, 
append it as text */
                {
-                  if (tag_start)
-                    {
-                       tag_end = p + 1;
-                       s = p + 1;
-                    }
+                  _prepend_text_run(cur, esc_start, p);
+                  esc_start = esc_end = NULL;
+                  s = NULL;
                }
-             else if (*p == '&')
+             else if (*p == 0)
                {
-                  if (esc_start) /* escape start with no end, append it as 
text */
-                    {
-                       _prepend_text_run(cur, esc_start, p);
-                       esc_start = esc_end = NULL;
-                       s = NULL;
-                    }
-                  if (!tag_start)
-                    {
-                       /* Append the text prior to this to the textblock and 
mark
-                        * the start of the escape sequence */
-                       esc_start = p;
-                       esc_end = NULL;
-                       _prepend_text_run(cur, s, p);
-                       s = NULL;
-                    }
+                  _prepend_text_run(cur, s, p);
+                  s = NULL;
                }
-             else if (*p == ';')
+             if (*p == 0)
+               break;
+          }
+        if (*p == '<')
+          {
+             if (esc_start) /* escape start with no end, append it as text */
                {
-                  if (esc_start)
-                    {
-                       esc_end = p;
-                       s = p + 1;
-                    }
+                  _prepend_text_run(cur, esc_start, p);
+                  esc_start = esc_end = NULL;
+                  s = NULL;
                }
-             /* Unicode object replacement char */
-             else if (!strncmp(_REPLACEMENT_CHAR_UTF8, p,
-                      text_len = strlen(_REPLACEMENT_CHAR_UTF8)) ||
-                   !strncmp(_NEWLINE_UTF8, p,
-                      text_len = strlen(_NEWLINE_UTF8)) ||
-                   !strncmp(_TAB_UTF8, p,
-                      text_len = strlen(_TAB_UTF8)) ||
-                   !strncmp(_PARAGRAPH_SEPARATOR_UTF8, p,
-                      text_len = strlen(_PARAGRAPH_SEPARATOR_UTF8)))
+             if (!esc_start)
                {
-                  /*FIXME: currently just remove them, maybe do something
-                   * fancier in the future, atm it breaks if this char
-                   * is inside <> */
+                  /* Append the text prior to this to the textblock and mark
+                   * the start of the tag */
+                  tag_start = p;
+                  tag_end = NULL;
                   _prepend_text_run(cur, s, p);
-                  /* it's also advanced later in this loop need +text_len
-                     in total*/
-                  p += text_len - 1;
-                  s = p + 1; /* One after the end of the replacement char */
+                  s = NULL;
                }
-             p++;
           }
+        else if (*p == '>')
+          {
+             if (tag_start)
+               {
+                  tag_end = p + 1;
+                  s = p + 1;
+               }
+          }
+        else if (*p == '&')
+          {
+             if (esc_start) /* escape start with no end, append it as text */
+               {
+                  _prepend_text_run(cur, esc_start, p);
+                  esc_start = esc_end = NULL;
+                  s = NULL;
+               }
+             if (!tag_start)
+               {
+                  /* Append the text prior to this to the textblock and mark
+                   * the start of the escape sequence */
+                  esc_start = p;
+                  esc_end = NULL;
+                  _prepend_text_run(cur, s, p);
+                  s = NULL;
+               }
+          }
+        else if (*p == ';')
+          {
+             if (esc_start)
+               {
+                  esc_end = p;
+                  s = p + 1;
+               }
+          }
+        /* Unicode object replacement char */
+        else if (!strncmp(_REPLACEMENT_CHAR_UTF8, p,
+                 text_len = strlen(_REPLACEMENT_CHAR_UTF8)) ||
+              !strncmp(_NEWLINE_UTF8, p,
+                 text_len = strlen(_NEWLINE_UTF8)) ||
+              !strncmp(_TAB_UTF8, p,
+                 text_len = strlen(_TAB_UTF8)) ||
+              !strncmp(_PARAGRAPH_SEPARATOR_UTF8, p,
+                 text_len = strlen(_PARAGRAPH_SEPARATOR_UTF8)))
+          {
+             /*FIXME: currently just remove them, maybe do something
+              * fancier in the future, atm it breaks if this char
+              * is inside <> */
+             _prepend_text_run(cur, s, p);
+             /* it's also advanced later in this loop need +text_len
+                in total*/
+             p += text_len - 1;
+             s = p + 1; /* One after the end of the replacement char */
+          }
+        p++;
      }
 
    o->pause_change = EINA_FALSE;
+   efl_event_callback_call(cur->obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
    _evas_textblock_changed(o, eo_obj);
 }
 
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index ef830e8507..261c12145c 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -4530,7 +4530,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
    efl_text_set(txt, "");
    efl_text_set(txt, "");
    efl_text_cursor_text_insert(cursor1, "aa");
-   ck_assert_int_eq(changed_emit, 3);
+   ck_assert_int_eq(changed_emit, 4);
+
+   efl_text_markup_set(txt, "Hello<br/>Word");
+   efl_text_markup_set(txt, "Hello<br/>Word");
+   efl_text_cursor_markup_insert(cursor1, "aa");
+   ck_assert_int_eq(changed_emit, 6);
 
    efl_text_set(txt, "");
    ck_assert(!efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
@@ -4549,7 +4554,7 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
    ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST));
    ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
 
-   ck_assert_int_eq(changed_emit, 4);
+   ck_assert_int_eq(changed_emit, 7);
 
    efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
    ck_assert(efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));

-- 


Reply via email to