[vim] - patchlevel 769

Karsten Hopp karsten at fedoraproject.org
Mon Jan 28 11:16:31 UTC 2013


commit 5386764db4239e75e344b9915a7d07f5f955825d
Author: Karsten Hopp <karsten at redhat.com>
Date:   Mon Jan 28 12:11:33 2013 +0100

    - patchlevel 769

 7.3.769 |  450 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 450 insertions(+), 0 deletions(-)
---
diff --git a/7.3.769 b/7.3.769
new file mode 100644
index 0000000..aac4579
--- /dev/null
+++ b/7.3.769
@@ -0,0 +1,450 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.769
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.769
+Problem:    'matchpairs' does not work with multi-byte characters.
+Solution:   Make it work. (Christian Brabandt)
+Files:	    src/misc1.c, src/option.c, src/proto/option.pro, src/search.c,
+	    src/testdir/test69.in, src/testdir/test69.ok
+
+
+*** ../vim-7.3.768/src/misc1.c	2012-08-15 14:04:50.000000000 +0200
+--- src/misc1.c	2013-01-17 15:55:09.000000000 +0100
+***************
+*** 2288,2301 ****
+       */
+      if (p_sm && (State & INSERT)
+  	    && msg_silent == 0
+- #ifdef FEAT_MBYTE
+- 	    && charlen == 1
+- #endif
+  #ifdef FEAT_INS_EXPAND
+  	    && !ins_compl_active()
+  #endif
+         )
+! 	showmatch(c);
+  
+  #ifdef FEAT_RIGHTLEFT
+      if (!p_ri || (State & REPLACE_FLAG))
+--- 2288,2305 ----
+       */
+      if (p_sm && (State & INSERT)
+  	    && msg_silent == 0
+  #ifdef FEAT_INS_EXPAND
+  	    && !ins_compl_active()
+  #endif
+         )
+!     {
+! #ifdef FEAT_MBYTE
+! 	if (has_mbyte)
+! 	    showmatch(mb_ptr2char(buf));
+! 	else
+! #endif
+! 	    showmatch(c);
+!     }
+  
+  #ifdef FEAT_RIGHTLEFT
+      if (!p_ri || (State & REPLACE_FLAG))
+*** ../vim-7.3.768/src/option.c	2012-12-05 14:42:56.000000000 +0100
+--- src/option.c	2013-01-17 16:38:42.000000000 +0100
+***************
+*** 6149,6164 ****
+      /* 'matchpairs' */
+      else if (gvarp == &p_mps)
+      {
+! 	/* Check for "x:y,x:y" */
+! 	for (p = *varp; *p != NUL; p += 4)
+  	{
+! 	    if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+  	    {
+! 		errmsg = e_invarg;
+! 		break;
+  	    }
+- 	    if (p[3] == NUL)
+- 		break;
+  	}
+      }
+  
+--- 6149,6194 ----
+      /* 'matchpairs' */
+      else if (gvarp == &p_mps)
+      {
+! #ifdef FEAT_MBYTE
+! 	if (has_mbyte)
+  	{
+! 	    for (p = *varp; *p != NUL; ++p)
+  	    {
+! 		int x2,x3 = -1;
+! 
+! 		if (*p != NUL)
+! 		    p += mb_ptr2len(p);
+! 		if (*p != NUL)
+! 		    x2 = *p++;
+! 		if (*p != NUL)
+! 		{
+! 		    x3 = mb_ptr2char(p);
+! 		    p += mb_ptr2len(p);
+! 		}
+! 		if (x2 != ':' || x2 == -1 || x3 == -1
+! 						  || (*p != NUL && *p != ','))
+! 		{
+! 		    errmsg = e_invarg;
+! 		    break;
+! 		}
+! 		if (*p == NUL)
+! 		    break;
+! 	    }
+! 	}
+! 	else
+! #endif
+! 	{
+! 	    /* Check for "x:y,x:y" */
+! 	    for (p = *varp; *p != NUL; p += 4)
+! 	    {
+! 		if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+! 		{
+! 		    errmsg = e_invarg;
+! 		    break;
+! 		}
+! 		if (p[3] == NUL)
+! 		    break;
+  	    }
+  	}
+      }
+  
+***************
+*** 11453,11455 ****
+--- 11483,11583 ----
+  {
+      return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts;
+  }
++ 
++ /*
++  * Check matchpairs option for "*initc".
++  * If there is a match set "*initc" to the matching character and "*findc" to
++  * the opposite character.  Set "*backwards" to the direction.
++  * When "switchit" is TRUE swap the direction.
++  */
++     void
++ find_mps_values(initc, findc, backwards, switchit)
++     int	    *initc;
++     int	    *findc;
++     int	    *backwards;
++     int	    switchit;
++ {
++     char_u	*ptr;
++ 
++     ptr = curbuf->b_p_mps;
++     while (*ptr != NUL)
++     {
++ #ifdef FEAT_MBYTE
++ 	if (has_mbyte)
++ 	{
++ 	    char_u *prev;
++ 
++ 	    if (mb_ptr2char(ptr) == *initc)
++ 	    {
++ 		if (switchit)
++ 		{
++ 		    *findc = *initc;
++ 		    *initc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
++ 		    *backwards = TRUE;
++ 		}
++ 		else
++ 		{
++ 		    *findc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
++ 		    *backwards = FALSE;
++ 		}
++ 		return;
++ 	    }
++ 	    prev = ptr;
++ 	    ptr += mb_ptr2len(ptr) + 1;
++ 	    if (mb_ptr2char(ptr) == *initc)
++ 	    {
++ 		if (switchit)
++ 		{
++ 		    *findc = *initc;
++ 		    *initc = mb_ptr2char(prev);
++ 		    *backwards = FALSE;
++ 		}
++ 		else
++ 		{
++ 		    *findc = mb_ptr2char(prev);
++ 		    *backwards = TRUE;
++ 		}
++ 		return;
++ 	    }
++ 	    ptr += mb_ptr2len(ptr);
++ 	}
++ 	else
++ #endif
++ 	{
++ 	    if (*ptr == *initc)
++ 	    {
++ 		if (switchit)
++ 		{
++ 		    *backwards = TRUE;
++ 		    *findc = *initc;
++ 		    *initc = ptr[2];
++ 		}
++ 		else
++ 		{
++ 		    *backwards = FALSE;
++ 		    *findc = ptr[2];
++ 		}
++ 		return;
++ 	    }
++ 	    ptr += 2;
++ 	    if (*ptr == *initc)
++ 	    {
++ 		if (switchit)
++ 		{
++ 		    *backwards = FALSE;
++ 		    *findc = *initc;
++ 		    *initc = ptr[-2];
++ 		}
++ 		else
++ 		{
++ 		    *backwards = TRUE;
++ 		    *findc =  ptr[-2];
++ 		}
++ 		return;
++ 	    }
++ 	    ++ptr;
++ 	}
++ 	if (*ptr == ',')
++ 	    ++ptr;
++     }
++ }
+*** ../vim-7.3.768/src/proto/option.pro	2012-12-05 14:42:56.000000000 +0100
+--- src/proto/option.pro	2013-01-17 16:39:30.000000000 +0100
+***************
+*** 59,62 ****
+--- 59,63 ----
+  int check_ff_value __ARGS((char_u *p));
+  long get_sw_value __ARGS((void));
+  long get_sts_value __ARGS((void));
++ void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
+  /* vim: set ft=c : */
+*** ../vim-7.3.768/src/search.c	2012-10-03 13:35:45.000000000 +0200
+--- src/search.c	2013-01-17 16:50:12.000000000 +0100
+***************
+*** 1786,1813 ****
+      }
+      else if (initc != '#' && initc != NUL)
+      {
+! 	/* 'matchpairs' is "x:y,x:y" */
+! 	for (ptr = curbuf->b_p_mps; *ptr; ptr += 2)
+! 	{
+! 	    if (*ptr == initc)
+! 	    {
+! 		findc = initc;
+! 		initc = ptr[2];
+! 		backwards = TRUE;
+! 		break;
+! 	    }
+! 	    ptr += 2;
+! 	    if (*ptr == initc)
+! 	    {
+! 		findc = initc;
+! 		initc = ptr[-2];
+! 		backwards = FALSE;
+! 		break;
+! 	    }
+! 	    if (ptr[1] != ',')
+! 		break;
+! 	}
+! 	if (!findc)		/* invalid initc! */
+  	    return NULL;
+      }
+      /*
+--- 1786,1793 ----
+      }
+      else if (initc != '#' && initc != NUL)
+      {
+! 	find_mps_values(&initc, &findc, &backwards, TRUE);
+! 	if (findc == NUL)
+  	    return NULL;
+      }
+      /*
+***************
+*** 1886,1921 ****
+  		    --pos.col;
+  		for (;;)
+  		{
+! 		    initc = linep[pos.col];
+  		    if (initc == NUL)
+  			break;
+  
+! 		    for (ptr = curbuf->b_p_mps; *ptr; ++ptr)
+! 		    {
+! 			if (*ptr == initc)
+! 			{
+! 			    findc = ptr[2];
+! 			    backwards = FALSE;
+! 			    break;
+! 			}
+! 			ptr += 2;
+! 			if (*ptr == initc)
+! 			{
+! 			    findc = ptr[-2];
+! 			    backwards = TRUE;
+! 			    break;
+! 			}
+! 			if (!*++ptr)
+! 			    break;
+! 		    }
+  		    if (findc)
+  			break;
+! #ifdef FEAT_MBYTE
+! 		    if (has_mbyte)
+! 			pos.col += (*mb_ptr2len)(linep + pos.col);
+! 		    else
+! #endif
+! 			++pos.col;
+  		}
+  		if (!findc)
+  		{
+--- 1866,1879 ----
+  		    --pos.col;
+  		for (;;)
+  		{
+! 		    initc = PTR2CHAR(linep + pos.col);
+  		    if (initc == NUL)
+  			break;
+  
+! 		    find_mps_values(&initc, &findc, &backwards, FALSE);
+  		    if (findc)
+  			break;
+! 		    pos.col += MB_PTR2LEN(linep + pos.col);
+  		}
+  		if (!findc)
+  		{
+***************
+*** 2260,2266 ****
+  	 *   inquote if the number of quotes in a line is even, unless this
+  	 *   line or the previous one ends in a '\'.  Complicated, isn't it?
+  	 */
+! 	switch (c = linep[pos.col])
+  	{
+  	case NUL:
+  	    /* at end of line without trailing backslash, reset inquote */
+--- 2218,2225 ----
+  	 *   inquote if the number of quotes in a line is even, unless this
+  	 *   line or the previous one ends in a '\'.  Complicated, isn't it?
+  	 */
+! 	c = PTR2CHAR(linep + pos.col);
+! 	switch (c)
+  	{
+  	case NUL:
+  	    /* at end of line without trailing backslash, reset inquote */
+***************
+*** 2469,2488 ****
+       * Only show match for chars in the 'matchpairs' option.
+       */
+      /* 'matchpairs' is "x:y,x:y" */
+!     for (p = curbuf->b_p_mps; *p != NUL; p += 2)
+      {
+  #ifdef FEAT_RIGHTLEFT
+! 	if (*p == c && (curwin->w_p_rl ^ p_ri))
+! 	    break;
+  #endif
+! 	p += 2;
+! 	if (*p == c
+  #ifdef FEAT_RIGHTLEFT
+  		&& !(curwin->w_p_rl ^ p_ri)
+  #endif
+  	   )
+  	    break;
+! 	if (p[1] != ',')
+  	    return;
+      }
+  
+--- 2428,2450 ----
+       * Only show match for chars in the 'matchpairs' option.
+       */
+      /* 'matchpairs' is "x:y,x:y" */
+!     for (p = curbuf->b_p_mps; *p != NUL; ++p)
+      {
++ 	if (PTR2CHAR(p) == c
+  #ifdef FEAT_RIGHTLEFT
+! 		    && (curwin->w_p_rl ^ p_ri)
+  #endif
+! 	   )
+! 	    break;
+! 	p += MB_PTR2LEN(p) + 1;
+! 	if (PTR2CHAR(p) == c
+  #ifdef FEAT_RIGHTLEFT
+  		&& !(curwin->w_p_rl ^ p_ri)
+  #endif
+  	   )
+  	    break;
+! 	p += MB_PTR2LEN(p);
+! 	if (*p == NUL)
+  	    return;
+      }
+  
+*** ../vim-7.3.768/src/testdir/test69.in	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test69.in	2013-01-17 15:55:09.000000000 +0100
+***************
+*** 1,4 ****
+--- 1,5 ----
+  Test for multi-byte text formatting.
++ Also test, that 'mps' with multibyte chars works.
+  
+  STARTTEST
+  :so mbyte.vim
+***************
+*** 134,139 ****
+--- 135,149 ----
+  }
+  
+  STARTTEST
++ /^{/+1
++ :set mps+=u2018:u2019
++ d%
++ ENDTEST
++ 
++ {
++ ‘ two three ’ four
++ }
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/^Results/,$wq! test.out
+  ENDTEST
+*** ../vim-7.3.768/src/testdir/test69.ok	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test69.ok	2013-01-17 15:55:09.000000000 +0100
+***************
+*** 140,142 ****
+--- 140,146 ----
+  a
+  }
+  
++ 
++ {
++  four
++ }
+*** ../vim-7.3.768/src/version.c	2013-01-17 15:36:54.000000000 +0100
+--- src/version.c	2013-01-17 15:55:49.000000000 +0100
+***************
+*** 727,728 ****
+--- 727,730 ----
+  {   /* Add new patch number below this line */
++ /**/
++     769,
+  /**/
+
+-- 
+Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
+"Embrace and extend"...?
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


More information about the scm-commits mailing list