woohyun pushed a commit to branch master.

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

commit eed4068fa2a24693514a7713b779b7a84e803b85
Author: Ali Alzyod <ali198...@gmail.com>
Date:   Tue Aug 18 19:15:12 2020 +0900

    evas_textblock: myanmar script rendering with e vowel.
    
    Summary: Resolve rendering e vowel (0x1031) with Myanmar(Burmese) with zero 
width non joiner (0x200C)
    
    Test Plan: ninja test
    
    Reviewers: woohyun, bowonryu
    
    Reviewed By: bowonryu
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D12102
---
 src/lib/evas/canvas/evas_object_textblock.c | 21 +++++++++++++++++++++
 src/tests/elementary/elm_test_entry.c       | 22 ++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 7a4a37134c..d50592cc5d 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -5436,6 +5436,27 @@ skip:
 
         script = evas_common_language_script_type_get(str, script_len);
 
+        /* FIXME Workaround for Burmese Vowel E Rendering, caused by bug in 
Harfbuzz
+           breaking text run will fix the visual issue.
+        */
+        if (script == EVAS_SCRIPT_MYANMAR && script_len > 1)
+          {
+             int i;
+             for (i = 0 ; i < script_len - 1; i++)
+               {
+                  if (str[i] == 0x200C)
+                    {
+                       if (str[i+1] == 0x1031)
+                         {
+                            cur_len += script_len;
+                            script_len = i + 1;
+                            cur_len -= script_len;
+                            break;
+                         }
+                    }
+               }
+          }
+
         Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, 
EFL_CANVAS_OBJECT_CLASS);
         while (script_len > 0)
           {
diff --git a/src/tests/elementary/elm_test_entry.c 
b/src/tests/elementary/elm_test_entry.c
index f3e5c1225c..5df40b19ec 100644
--- a/src/tests/elementary/elm_test_entry.c
+++ b/src/tests/elementary/elm_test_entry.c
@@ -610,6 +610,27 @@ EFL_START_TEST(elm_entry_test_text_class)
 }
 EFL_END_TEST
 
+EFL_START_TEST(elm_entry_test_burmese)
+{
+   Evas_Object *win, *textblock;
+   Evas_Textblock_Style *style;
+   int w;
+
+   win = win_add(NULL, "entry", ELM_WIN_BASIC);
+   textblock = evas_object_textblock_add(win);
+
+   style = evas_textblock_style_new();
+   evas_textblock_style_set(style, "DEFAULT='font=arial font_size=20 
color=red'");
+   evas_object_textblock_style_set(textblock, style);
+   evas_textblock_style_free(style);
+   style = NULL;
+
+   evas_object_textblock_text_markup_set(textblock, 
"\u1006\u200C\u1031\u200C\u1031\u200C\u1031");
+   evas_object_textblock_size_native_get(textblock, &w, NULL);
+   ck_assert_int_ne(w, 0);
+}
+EFL_END_TEST
+
 EFL_START_TEST(elm_entry_keycode)
 {
    Evas_Object *win, *entry;
@@ -651,5 +672,6 @@ void elm_test_entry(TCase *tc)
    tcase_add_test(tc, elm_entry_magnifier);
    tcase_add_test(tc, elm_entry_file_get_set);
    tcase_add_test(tc, elm_entry_test_text_class);
+   tcase_add_test(tc, elm_entry_test_burmese);
    tcase_add_test(tc, elm_entry_keycode);
 }

-- 


Reply via email to