Loading ...
Sorry, an error occurred while loading the content.

Re: Patch 7.3.769

Expand Messages
  • Yasuhiro MATSUMOTO
    x2 seems not be initialized by -1. ... -- - Yasuhiro Matsumoto -- You received this message from the vim_dev maillist. Do not top-post! Type your reply below
    Message 1 of 3 , Jan 17, 2013
    • 0 Attachment
      x2 seems not be initialized by -1.

      On 1/18/13, Bram Moolenaar <Bram@...> wrote:
      >
      > 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@... -- 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 ///
      >
      > --
      > 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
      >


      --
      - Yasuhiro Matsumoto

      --
      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
    • Bram Moolenaar
      ... Right, thanks for reporting. -- If I tell you you have a beautiful body , would you hold it against me? /// Bram Moolenaar -- Bram@Moolenaar.net --
      Message 2 of 3 , Jan 17, 2013
      • 0 Attachment
        Yasuhiro Matsumoto wrote:

        > x2 seems not be initialized by -1.

        Right, thanks for reporting.


        --
        If I tell you "you have a beautiful body", would you hold it against me?

        /// Bram Moolenaar -- Bram@... -- 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 ///

        --
        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
      Your message has been successfully submitted and would be delivered to recipients shortly.