From 9903e7d556a088751881164c6c3663d12ebf9c05 Mon Sep 17 00:00:00 2001 From: Daniel Hirt Date: Wed, 12 Sep 2018 21:17:53 +0300 Subject: [PATCH] Text: add markup_range_get This allows to retrieve the markup representation of the current text. @feature --- src/lib/efl/interfaces/efl_text_markup.eo | 11 ++++++++ src/lib/evas/canvas/efl_canvas_text.eo | 1 + src/lib/evas/canvas/evas_object_textblock.c | 11 ++++++++ src/tests/evas/evas_test_textblock.c | 30 +++++++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/src/lib/efl/interfaces/efl_text_markup.eo b/src/lib/efl/interfaces/efl_text_markup.eo index 7e2bbaaaee..1fbfd70b35 100644 --- a/src/lib/efl/interfaces/efl_text_markup.eo +++ b/src/lib/efl/interfaces/efl_text_markup.eo @@ -10,6 +10,17 @@ interface Efl.Text_Markup(Efl.Text_Cursor) { markup: string; [[The markup-text representation set to this text.]] } } + @property markup_range { + [[Markup of a given range in the text]] + values { + markup: mstring @owned; [[The markup-text representation set to + this text of a given range]] + } + keys { + start: ptr(Efl.Text_Cursor_Cursor); + end: ptr(Efl.Text_Cursor_Cursor); + } + } cursor_markup_insert { [[Inserts a markup text to the text object in a given cursor position]] params { diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo index 6c82adf82a..1f193443d0 100644 --- a/src/lib/evas/canvas/efl_canvas_text.eo +++ b/src/lib/evas/canvas/efl_canvas_text.eo @@ -355,6 +355,7 @@ class Efl.Canvas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text_Annotate.cursor_item_insert; Efl.Text_Markup.markup { set; get; } Efl.Text_Markup.cursor_markup_insert; + Efl.Text_Markup.markup_range { get;} Efl.Gfx.Entity.scale { set; } } events { diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index c290ac38ae..d5705a47ae 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -11418,6 +11418,17 @@ _evas_textblock_cursor_range_text_markup_get(const Efl_Text_Cursor_Cursor *cur1, } } +EOLIAN char * +_efl_canvas_text_efl_text_markup_markup_range_get(const Eo *eo_obj, + Efl_Canvas_Text_Data *o EINA_UNUSED, Efl_Text_Cursor_Cursor *start, + Efl_Text_Cursor_Cursor *end) +{ + if (!start || !start->node) return NULL; + if (!end || !end->node) return NULL; + if ((start->obj != eo_obj) || (start->obj != end->obj)) return NULL; + return _evas_textblock_cursor_range_text_markup_get(start, end); +} + static char * _evas_textblock_cursor_range_text_plain_get(const Efl_Text_Cursor_Cursor *cur1, const Efl_Text_Cursor_Cursor *_cur2) { diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 62b3812f8e..9246f77a52 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -4612,6 +4612,35 @@ EFL_START_TEST(efl_canvas_text_cursor) } EFL_END_TEST + +EFL_START_TEST(efl_canvas_text_markup) +{ + START_EFL_CANVAS_TEXT_TEST(); + Efl_Text_Cursor_Cursor *start, *end; + char *res; + + start = efl_text_cursor_new(txt); + end = efl_text_cursor_new(txt); + + efl_text_set(txt, "\n\n\n"); + + efl_text_cursor_position_set(txt, start, 1); + efl_text_cursor_position_set(txt, end, 2); + res = efl_text_markup_range_get(txt, start, end); + ck_assert_str_eq(res, "
"); + free(res); + + efl_text_set(txt, "a\u2029bc\ndef\n\u2029"); + efl_text_cursor_position_set(txt, start, 2); + efl_text_cursor_position_set(txt, end, 5); + res = efl_text_markup_range_get(txt, start, end); + ck_assert_str_eq(res, "bc
"); + free(res); + + END_EFL_CANVAS_TEXT_TEST(); +} +EFL_END_TEST + void evas_test_textblock(TCase *tc) { tcase_add_test(tc, evas_textblock_simple); @@ -4643,5 +4672,6 @@ void evas_test_textblock(TCase *tc) tcase_add_test(tc, efl_canvas_text_simple); tcase_add_test(tc, efl_text); tcase_add_test(tc, efl_canvas_text_cursor); + tcase_add_test(tc, efl_canvas_text_markup); }