forked from enlightenment/efl
evas_object_textblock: utf8_to_markup support all escapse chars
Summary: update evas_textblock_text_utf8_to_markup to support all escape characters Test Plan: ``` #define EFL_EO_API_SUPPORT 1 #define EFL_BETA_API_SUPPORT 1 #include<Eina.h> #include<Efl.h> #include <Elementary.h> EAPI_MAIN int elm_main(int argc, char **argv) { Evas_Object *win,*textblock; elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); win = elm_win_util_standard_add("Main", "App"); elm_win_autodel_set(win, EINA_TRUE); textblock = evas_object_textblock_add(win); char * aaa = evas_textblock_text_utf8_to_markup(textblock,"A<<>>\"A\'\tA"); // aaa == "A<<>>"A'<tab/>A"; evas_object_size_hint_weight_set(textblock,EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); evas_object_size_hint_align_set(textblock,EVAS_HINT_FILL,EVAS_HINT_FILL); evas_object_show(textblock); evas_object_move(textblock,0,0); evas_object_resize(textblock,320,480); evas_object_resize(win,320,480); evas_object_show(win); elm_run(); return 0; } ELM_MAIN() ``` Reviewers: lauromoura, CHAN, woohyun, bu5hm4n, bowonryu, tasn, herdsman Subscribers: zmike, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D8843
This commit is contained in:
parent
463291548d
commit
4ad272a8c3
|
@ -8570,7 +8570,8 @@ _escaped_char_match(const char *s, int *adv)
|
|||
int n_ret = _escaped_value_search(s, list, len);
|
||||
if (n_ret != -1)
|
||||
{
|
||||
*adv = (int) list[n_ret]->value_len;
|
||||
if (adv)
|
||||
*adv = (int) list[n_ret]->value_len;
|
||||
return list[n_ret]->escape;
|
||||
}
|
||||
else
|
||||
|
@ -8579,7 +8580,8 @@ _escaped_char_match(const char *s, int *adv)
|
|||
n_ret = _escaped_value_search(s, list, len);
|
||||
if (n_ret != -1)
|
||||
{
|
||||
*adv = (int)list[n_ret]->value_len;
|
||||
if (adv)
|
||||
*adv = (int)list[n_ret]->value_len;
|
||||
return list[n_ret]->escape;
|
||||
}
|
||||
}
|
||||
|
@ -8996,6 +8998,7 @@ static void
|
|||
_markup_get_text_utf8_append(Eina_Strbuf *sbuf, const char *text)
|
||||
{
|
||||
int ch, pos = 0, pos2 = 0;
|
||||
const char * replacement;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
@ -9007,23 +9010,21 @@ _markup_get_text_utf8_append(Eina_Strbuf *sbuf, const char *text)
|
|||
eina_strbuf_append(sbuf, "<br/>");
|
||||
else if (ch == _TAB)
|
||||
eina_strbuf_append(sbuf, "<tab/>");
|
||||
else if (ch == '<')
|
||||
eina_strbuf_append(sbuf, "<");
|
||||
else if (ch == '>')
|
||||
eina_strbuf_append(sbuf, ">");
|
||||
else if (ch == '&')
|
||||
eina_strbuf_append(sbuf, "&");
|
||||
else if (ch == '"')
|
||||
eina_strbuf_append(sbuf, """);
|
||||
else if (ch == '\'')
|
||||
eina_strbuf_append(sbuf, "'");
|
||||
else if (ch == _PARAGRAPH_SEPARATOR)
|
||||
eina_strbuf_append(sbuf, "<ps/>");
|
||||
else if (ch == _REPLACEMENT_CHAR)
|
||||
eina_strbuf_append(sbuf, "");
|
||||
else if (ch != '\r')
|
||||
else if (ch == _PARAGRAPH_SEPARATOR)
|
||||
eina_strbuf_append(sbuf, "<ps/>");
|
||||
else
|
||||
{
|
||||
eina_strbuf_append_length(sbuf, text + pos, pos2 - pos);
|
||||
replacement = _escaped_char_match(text + pos, NULL);
|
||||
if (replacement)
|
||||
{
|
||||
eina_strbuf_append(sbuf, replacement);
|
||||
}
|
||||
else if (ch != '\r')
|
||||
{
|
||||
eina_strbuf_append_length(sbuf, text + pos, pos2 - pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,43 @@ do \
|
|||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
typedef struct _Escape_Value Escape_Value;
|
||||
|
||||
struct _Escape_Value
|
||||
{
|
||||
char *escape;
|
||||
char *value;
|
||||
};
|
||||
|
||||
#define ESCAPE_VALUE(e,v) {e,v}
|
||||
|
||||
static const Escape_Value escape_strings[] = {
|
||||
ESCAPE_VALUE("Á", "\xc3\x81"),
|
||||
ESCAPE_VALUE("Â", "\xc3\x82"),
|
||||
ESCAPE_VALUE("&Aelig;", "\xc3\x86"),
|
||||
ESCAPE_VALUE("Õ", "\xc3\x95"),
|
||||
ESCAPE_VALUE("Ö", "\xc3\x96"),
|
||||
ESCAPE_VALUE("&Thorn;", "\xc3\x9e"),
|
||||
ESCAPE_VALUE("Ú", "\xc3\x9a"),
|
||||
ESCAPE_VALUE("Û", "\xc3\x9b"),
|
||||
ESCAPE_VALUE("⇒", "\xe2\x87\x92"),
|
||||
ESCAPE_VALUE("®", "\xc2\xae"),
|
||||
ESCAPE_VALUE("ρ", "\xce\xa1"),
|
||||
ESCAPE_VALUE("σ", "\xce\xa3"),
|
||||
ESCAPE_VALUE("∑", "\xe2\x88\x91"),
|
||||
ESCAPE_VALUE("¹", "\xc2\xb9"),
|
||||
ESCAPE_VALUE("û", "\xc3\xbb"),
|
||||
ESCAPE_VALUE("ù", "\xc3\xb9"),
|
||||
ESCAPE_VALUE("¨", "\xc2\xa8"),
|
||||
ESCAPE_VALUE("¥", "\xc2\xa5"),
|
||||
ESCAPE_VALUE("ÿ", "\xc3\xbf"),
|
||||
ESCAPE_VALUE("<tab/>", "\t"),
|
||||
ESCAPE_VALUE("<br/>", "\n"),
|
||||
ESCAPE_VALUE("<ps/>", "\xe2\x80\xa9"), //0x2029
|
||||
ESCAPE_VALUE("", "\xef\xbf\xbc"), //0xFFFC
|
||||
};
|
||||
|
||||
EFL_START_TEST(evas_textblock_simple)
|
||||
{
|
||||
START_TB_TEST();
|
||||
|
@ -3195,7 +3232,7 @@ EFL_START_TEST(evas_textblock_text_getters)
|
|||
tmp = evas_textblock_text_markup_to_utf8(tb, "a ");
|
||||
fail_if(strcmp(tmp, "a\xC2\xA0"));
|
||||
tmp2 = evas_textblock_text_utf8_to_markup(tb, tmp);
|
||||
fail_if(strcmp(tmp2, "a\xC2\xA0"));
|
||||
fail_if(strcmp(tmp2, "a "));
|
||||
free(tmp2);
|
||||
free(tmp);
|
||||
|
||||
|
@ -3238,7 +3275,7 @@ EFL_START_TEST(evas_textblock_text_getters)
|
|||
tmp = evas_textblock_text_markup_to_utf8(NULL, "a ");
|
||||
fail_if(strcmp(tmp, "a\xC2\xA0"));
|
||||
tmp2 = evas_textblock_text_utf8_to_markup(NULL, tmp);
|
||||
fail_if(strcmp(tmp2, "a\xC2\xA0"));
|
||||
fail_if(strcmp(tmp2, "a "));
|
||||
free(tmp2);
|
||||
free(tmp);
|
||||
|
||||
|
@ -4469,6 +4506,19 @@ do \
|
|||
} \
|
||||
while (0)
|
||||
|
||||
EFL_START_TEST(evas_textblock_utf8_to_markup)
|
||||
{
|
||||
size_t len = sizeof(escape_strings) / sizeof(Escape_Value);
|
||||
char * mkup_txt;
|
||||
for(size_t i = 0 ; i < len ; i++)
|
||||
{
|
||||
mkup_txt = evas_textblock_text_utf8_to_markup(NULL, escape_strings[i].value);
|
||||
fail_if(strcmp(escape_strings[i].escape, mkup_txt));
|
||||
free(mkup_txt);
|
||||
}
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(efl_canvas_textblock_simple)
|
||||
{
|
||||
START_EFL_CANVAS_TEXTBLOCK_TEST();
|
||||
|
@ -5160,6 +5210,7 @@ void evas_test_textblock(TCase *tc)
|
|||
#endif
|
||||
tcase_add_test(tc, evas_textblock_text_iface);
|
||||
tcase_add_test(tc, evas_textblock_annotation);
|
||||
tcase_add_test(tc, evas_textblock_utf8_to_markup);
|
||||
tcase_add_test(tc, efl_canvas_textblock_simple);
|
||||
tcase_add_test(tc, efl_text);
|
||||
tcase_add_test(tc, efl_canvas_textblock_cursor);
|
||||
|
|
Loading…
Reference in New Issue