To: [email protected]
Subject: Patch 6.2f.024
Fcc: outbox
From: Bram Moolenaar <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 6.2f.024
Problem:    When 'delcombine' is set and a character has more than two
           composing characters "x" deletes them all.
Solution:   Always delete only the last composing character.
Files:      src/misc1.c


*** ../vim-6.2f.023/src/misc1.c Mon May 26 22:15:06 2003
--- src/misc1.c Thu May 29 20:32:05 2003
***************
*** 2055,2064 ****
     colnr_T   col = curwin->w_cursor.col;
     int               was_alloced;
     long      movelen;
- #ifdef FEAT_MBYTE
-     int               p0, p1, p2;
-     int               p0len, p1len, p2len;
- #endif

     oldp = ml_get(lnum);
     oldlen = (int)STRLEN(oldp);
--- 2055,2060 ----
***************
*** 2070,2100 ****
       return FAIL;

 #ifdef FEAT_MBYTE
!     if (p_deco && enc_utf8)
     {
!       p1 = p2 = 0;
!       /* see if there are any combining characters: */
!       p0 = utfc_ptr2char(oldp + col, &p1, &p2);
!       p0len = utf_char2len(p0);
!       p1len = p1 != 0 ? utf_char2len(p1) : 0;
!       p2len = p2 != 0 ? utf_char2len(p2) : 0;

!       /* don't try anything if trying to del more than one 'char' */
!       if ((count <= (p0len + p1len + p2len)) && p1 != 0)
       {
!           /* We are here because there are combining characters; either
!            * p1, p2 or both.  We need to remove just that character, and
!            * leave the cursor where it was. */
!
!           /* since p1 is always valid, adjust for it */
!           col += p0len;
!           count = p1len;
!           if (p2 != 0)
           {
!               /* p2 is valid, so remove it instead of p1 */
!               col += p1len;
!               count = p2len;
!           }
           fixpos = 0;
       }
     }
--- 2066,2089 ----
       return FAIL;

 #ifdef FEAT_MBYTE
!     /* If 'delcombine' is set and deleting (less than) one character, only
!      * delete the last combining character. */
!     if (p_deco && enc_utf8 && (*mb_ptr2len_check)(oldp + col) <= count)
     {
!       int     c1, c2;
!       int     n;

!       (void)utfc_ptr2char(oldp + col, &c1, &c2);
!       if (c1 != NUL)
       {
!           /* Find the last composing char, there can be several. */
!           n = col;
!           do
           {
!               col = n;
!               count = utf_ptr2len_check(oldp + n);
!               n += count;
!           } while (UTF_COMPOSINGLIKE(oldp + col, oldp + n));
           fixpos = 0;
       }
     }
*** ../vim-6.2f.023/src/version.c       Thu May 29 19:54:32 2003
--- src/version.c       Thu May 29 20:38:56 2003
***************
*** 632,633 ****
--- 632,635 ----
 {   /* Add new patch number below this line */
+ /**/
+     24,
 /**/

--
If they don't keep on exercising their lips, he thought, their brains
start working.
               -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"

/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
\\\     Help AIDS victims, buy at Amazon -- http://ICCF.nl/click1.html ///