[pango] Fix backspace-deletes-character for Emoji



commit 0328707ed085cc15b381ad6e8700aa630f20f5a6
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Aug 15 19:40:45 2017 -0400

    Fix backspace-deletes-character for Emoji
    
    We want to delete the entire cluster if it is an Emoji.
    To do so, look at prev_GB_type to find Emoji.
    
    This fixes backspacing for sequences like
    "man health worker" or "family: man, woman, boy, girl".

 pango/break.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)
---
diff --git a/pango/break.c b/pango/break.c
index ccf1394..f1bfb99 100644
--- a/pango/break.c
+++ b/pango/break.c
@@ -861,15 +861,23 @@ pango_default_break (const gchar   *text,
        else
          is_grapheme_boundary = TRUE; /* Rule GB999 */
 
-       prev_GB_type = GB_type;
-
        attrs[i].is_cursor_position = is_grapheme_boundary;
        /* If this is a grapheme boundary, we have to decide if backspace
         * deletes a character or the whole grapheme cluster */
        if (is_grapheme_boundary)
-         attrs[i].backspace_deletes_character = BACKSPACE_DELETES_CHARACTER (base_character);
+          {
+            if (prev_GB_type == GB_E_Base ||
+                prev_GB_type == GB_E_Base_GAZ ||
+                prev_GB_type == GB_Glue_After_Zwj ||
+                prev_GB_type == GB_Extend)
+             attrs[i].backspace_deletes_character = FALSE;
+            else
+             attrs[i].backspace_deletes_character = BACKSPACE_DELETES_CHARACTER (base_character);
+          }
        else
          attrs[i].backspace_deletes_character = FALSE;
+
+       prev_GB_type = GB_type;
       }
 
       /* ---- UAX#29 Word Boundaries ---- */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]