evas_object_textblock: treat variation sequence as single run

Summary:
Variation sequence treated as a single run, if we found one, we keep looking adding to the same  run, but if it is not, then we need to start a new one.

Before:
{F3826735}

After:
{F3826736}

Test Plan:
```
#include <stdio.h>
#include <Elementary.h>
/*
gcc -o example test.c `pkg-config --cflags --libs elementary`
*/

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
   Evas_Object *win, *en;

   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

   win = elm_win_util_standard_add("emoji-example", "emoji-example");
   elm_win_autodel_set(win, EINA_TRUE);

   en = elm_entry_add(win);
   elm_entry_scrollable_set(en, EINA_TRUE);
   evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);

   elm_object_text_set(en, "<font_size=25>&#x262a;&#x262a;&#xfe0f;&#x262a;가</font_size>");

   evas_object_show(en);

   elm_object_content_set(win, en);
   evas_object_resize(win, 400, 200);
   evas_object_show(win);

   elm_run();

   return 0;
}
ELM_MAIN()
```

Reviewers: woohyun, bowonryu

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8542

Differential Revision: https://phab.enlightenment.org/D11096
This commit is contained in:
Ali Alzyod 2020-01-23 16:21:22 +09:00 committed by WooHyun Jung
parent 3d2f99af9e
commit 8143b81dd6
1 changed files with 12 additions and 1 deletions

View File

@ -68,6 +68,7 @@ get_top_font:
/* Find the longest run of the same font starting from the start position
* and update cur_fi accordingly. */
Eina_Unicode variation_sequence = 0;
itr = text;
while (itr < run_end)
{
@ -85,7 +86,17 @@ get_top_font:
if (evas_common_language_char_script_get(*itr) == EVAS_SCRIPT_INHERITED)
continue;
Eina_Unicode variation_sequence = VAR_SEQ_SAFE(itr+1);
if (!variation_sequence)
{
variation_sequence = VAR_SEQ_SAFE(itr+1);
}
else
{
/* Variation sequence treated as single run, if we found one, we keep looking adding to same
* run, but if it is not, then we need to start a new one */
if (variation_sequence != VAR_SEQ_SAFE(itr+1))
break;
}
/* Break if either it's not in the font, or if it is in the
* script's font. */