forked from enlightenment/efl
Evas textblock: Added evas_textblock_markup_to_plain.
This function converts a textblock markup to plain text. It converts for example <br/> to \n and a lot more. SVN revision: 66034
This commit is contained in:
parent
a0fa810e82
commit
346e25b031
|
@ -536,3 +536,6 @@
|
||||||
* Textblock markup: Support self closing format tags, i.e <br/>.
|
* Textblock markup: Support self closing format tags, i.e <br/>.
|
||||||
You should use <br/> and not <br>. The latter still works but it's use
|
You should use <br/> and not <br>. The latter still works but it's use
|
||||||
is discouraged.
|
is discouraged.
|
||||||
|
* Textblock: Added evas_textblock_markup_to_plain.
|
||||||
|
This lets you convert textblock markup to plain text.
|
||||||
|
This converts formats and everything correctly.
|
||||||
|
|
|
@ -8101,6 +8101,19 @@ EAPI const char *evas_textblock_string_escape_get(const char *s
|
||||||
*/
|
*/
|
||||||
EAPI const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
|
EAPI const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the plain version of the markup.
|
||||||
|
*
|
||||||
|
* Works as if you set the markup to a textblock and then retrieve the plain
|
||||||
|
* version of the text. i.e: <br> and <\n> will be replaced with \n, &...; with
|
||||||
|
* the actual char and etc.
|
||||||
|
*
|
||||||
|
* @param obj the textblock object to work with.
|
||||||
|
* @param text the markup text
|
||||||
|
* @return an allocated plain text version of the markup
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
EAPI char *evas_textblock_markup_to_plain(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new textblock style.
|
* Creates a new textblock style.
|
||||||
|
|
|
@ -5084,6 +5084,36 @@ evas_object_textblock_text_markup_get(const Evas_Object *obj)
|
||||||
return o->markup_text;
|
return o->markup_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI char *
|
||||||
|
evas_textblock_markup_to_plain(const Evas_Object *obj, const char *text)
|
||||||
|
{
|
||||||
|
/* FIXME: Can be done better, this is the least redundant way of doing it,
|
||||||
|
* but by far the slowest, when the time comes, this should be
|
||||||
|
* re-implemented. */
|
||||||
|
char *ret;
|
||||||
|
Evas_Object *obj2;
|
||||||
|
Evas_Textblock_Cursor *cur1, *cur2;
|
||||||
|
obj2 = evas_object_textblock_add(evas_object_evas_get(obj));
|
||||||
|
/* Shouldn't have been const, casting is ok, or at least conforms
|
||||||
|
* with the rest of the ugliness in this func*/
|
||||||
|
evas_object_textblock_style_set(obj2,
|
||||||
|
(Evas_Textblock_Style *) evas_object_textblock_style_get(obj));
|
||||||
|
evas_object_textblock_legacy_newline_set(obj2,
|
||||||
|
evas_object_textblock_legacy_newline_get(obj));
|
||||||
|
|
||||||
|
evas_object_textblock_text_markup_set(obj2, text);
|
||||||
|
cur1 = evas_object_textblock_cursor_get(obj2);
|
||||||
|
cur2 = evas_object_textblock_cursor_new(obj2);
|
||||||
|
evas_textblock_cursor_paragraph_first(cur1);
|
||||||
|
evas_textblock_cursor_paragraph_last(cur2);
|
||||||
|
ret = evas_textblock_cursor_range_text_get(cur1, cur2,
|
||||||
|
EVAS_TEXTBLOCK_TEXT_PLAIN);
|
||||||
|
evas_textblock_cursor_free(cur2);
|
||||||
|
evas_object_del(obj2);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* cursors */
|
/* cursors */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1492,6 +1492,21 @@ START_TEST(evas_textblock_text_getters)
|
||||||
fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
|
fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
|
||||||
EVAS_TEXTBLOCK_TEXT_MARKUP), "aaa"));
|
EVAS_TEXTBLOCK_TEXT_MARKUP), "aaa"));
|
||||||
|
|
||||||
|
/* Markup to plain */
|
||||||
|
{
|
||||||
|
char *tmp = evas_textblock_markup_to_plain(tb, "<br/>aa<\n/>bb<\t/>");
|
||||||
|
fail_if(strcmp(tmp, "\naa\nbb\t"));
|
||||||
|
free(tmp);
|
||||||
|
|
||||||
|
tmp = evas_textblock_markup_to_plain(tb, "a<item></item>");
|
||||||
|
fail_if(strcmp(tmp, "a\xEF\xBF\xBC"));
|
||||||
|
free(tmp);
|
||||||
|
|
||||||
|
tmp = evas_textblock_markup_to_plain(tb, "a ");
|
||||||
|
fail_if(strcmp(tmp, "a\xC2\xA0"));
|
||||||
|
free(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
END_TB_TEST();
|
END_TB_TEST();
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
Loading…
Reference in New Issue