Patch 8.2.3635
Problem:    GTK: composing underline does not show.
Solution:   Include composing character in pango call. A few more
            optimizations for ligatures.  (Dusan Popovic, closes #9171,
            closes #9147)
Files:      src/gui_gtk_x11.c


*** ../vim-8.2.3634/src/gui_gtk_x11.c   2021-11-20 20:42:25.700580223 +0000
--- src/gui_gtk_x11.c   2021-11-20 22:02:48.842449821 +0000
***************
*** 5504,5510 ****
      int               should_need_pango = FALSE;
      int               slen;
      int               is_ligature;
-     int               next_is_ligature;
      int               is_utf8;
      char_u    backup_ch;
  
--- 5504,5509 ----
***************
*** 5564,5571 ****
                    // substrings
      byte_sum = 0;
      cs = s;
!     // look ahead, 0=ascii 1=unicode/ligatures
!     needs_pango = ((*cs & 0x80) || gui.ligatures_map[*cs]);
  
      // split string into ascii and non-ascii (ligatures + utf-8) substrings,
      // print glyphs or use Pango
--- 5563,5578 ----
                    // substrings
      byte_sum = 0;
      cs = s;
!     // First char decides starting needs_pango mode, 0=ascii 1=utf8/ligatures.
!     // Even if it is ligature char, two chars or more make ligature.
!     // Ascii followed by utf8 is also going trough pango.
!     is_utf8 = (*cs & 0x80);
!     is_ligature = gui.ligatures_map[*cs] && (len > 1);
!     if (is_ligature)
!       is_ligature = gui.ligatures_map[*(cs + 1)];
!     if (!is_utf8 && len > 1)
!       is_utf8 = (*(cs + 1) & 0x80) != 0;
!     needs_pango = is_utf8 || is_ligature;
  
      // split string into ascii and non-ascii (ligatures + utf-8) substrings,
      // print glyphs or use Pango
***************
*** 5579,5595 ****
            if (is_ligature && !needs_pango)
            {
                if ((slen + 1) < (len - byte_sum))
!               {
!                   next_is_ligature = gui.ligatures_map[*(cs + slen + 1)];
!                   if (!next_is_ligature)
!                       is_ligature = 0;
!               }
                else
-               {
                    is_ligature = 0;
-               }
            }
            is_utf8 = *(cs + slen) & 0x80;
            should_need_pango = (is_ligature || is_utf8);
            if (needs_pango != should_need_pango) // mode switch
                break;
--- 5586,5600 ----
            if (is_ligature && !needs_pango)
            {
                if ((slen + 1) < (len - byte_sum))
!                   is_ligature = gui.ligatures_map[*(cs + slen + 1)];
                else
                    is_ligature = 0;
            }
            is_utf8 = *(cs + slen) & 0x80;
+           // ascii followed by utf8 could be combining
+           // if so send it trough pango
+           if ((!is_utf8) && ((slen + 1) < (len - byte_sum)))
+               is_utf8 = (*(cs + slen + 1) & 0x80);
            should_need_pango = (is_ligature || is_utf8);
            if (needs_pango != should_need_pango) // mode switch
                break;
***************
*** 5599,5605 ****
                {
                    slen++; // ligature char by char
                }
!               else
                {
                    if ((*(cs + slen) & 0xC0) == 0x80)
                    {
--- 5604,5610 ----
                {
                    slen++; // ligature char by char
                }
!               else if (is_utf8)
                {
                    if ((*(cs + slen) & 0xC0) == 0x80)
                    {
***************
*** 5633,5638 ****
--- 5638,5647 ----
                        slen++;
                    }
                }
+               else
+               {
+                   slen++;
+               }
            }
            else
            {
*** ../vim-8.2.3634/src/version.c       2021-11-20 21:46:16.088614817 +0000
--- src/version.c       2021-11-20 21:59:42.839296978 +0000
***************
*** 759,760 ****
--- 759,762 ----
  {   /* Add new patch number below this line */
+ /**/
+     3635,
  /**/

-- 
A hamburger walks into a bar, and the bartender says: "I'm sorry,
but we don't serve food here."

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20211120220357.F19A91C044E%40moolenaar.net.

Raspunde prin e-mail lui