summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.180
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.180')
-rw-r--r--source/ap/vim/patches/7.3.180295
1 files changed, 295 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.180 b/source/ap/vim/patches/7.3.180
new file mode 100644
index 000000000..5997bfbe8
--- /dev/null
+++ b/source/ap/vim/patches/7.3.180
@@ -0,0 +1,295 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.180
+Problem: When both a middle part of 'comments' matches and an end part, the
+ middle part was used errornously.
+Solution: After finding the middle part match continue looking for a better
+ end part match. (partly by Lech Lorens)
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.3.179/src/misc1.c 2011-05-10 11:56:26.000000000 +0200
+--- src/misc1.c 2011-05-10 13:24:38.000000000 +0200
+***************
+*** 1561,1566 ****
+--- 1561,1569 ----
+ char_u part_buf[COM_MAX_LEN]; /* buffer for one option part */
+ char_u *string; /* pointer to comment string */
+ char_u *list;
++ int middle_match_len = 0;
++ char_u *prev_list;
++ char_u *saved_flags;
+
+ i = 0;
+ while (vim_iswhite(line[i])) /* leading white space is ignored */
+***************
+*** 1569,1575 ****
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i])
+ {
+ /*
+ * scan through the 'comments' option for a match
+--- 1572,1578 ----
+ /*
+ * Repeat to match several nested comment strings.
+ */
+! while (line[i] != NUL)
+ {
+ /*
+ * scan through the 'comments' option for a match
+***************
+*** 1577,1658 ****
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /*
+! * Get one option part into part_buf[]. Advance list to next one.
+! * put string at start of string.
+! */
+! if (!got_com && flags != NULL) /* remember where flags started */
+! *flags = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /*
+! * When already found a nested comment, only accept further
+! * nested comments.
+! */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag used don't use for "O" command */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /*
+! * Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces).
+! */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue;
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue;
+
+! /*
+! * When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line.
+! */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /*
+! * We have found a match, stop searching.
+! */
+! i += j;
+! got_com = TRUE;
+ found_one = TRUE;
+ break;
+ }
+
+! /*
+! * No match found, stop scanning.
+! */
+ if (!found_one)
+ break;
+
+! /*
+! * Include any trailing white space.
+! */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /*
+! * If this comment doesn't nest, stop here.
+! */
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
+ return (got_com ? i : 0);
+ }
+ #endif
+--- 1580,1683 ----
+ found_one = FALSE;
+ for (list = curbuf->b_p_com; *list; )
+ {
+! /* Get one option part into part_buf[]. Advance "list" to next
+! * one. Put "string" at start of string. */
+! if (!got_com && flags != NULL)
+! *flags = list; /* remember where flags started */
+! prev_list = list;
+ (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ string = vim_strchr(part_buf, ':');
+ if (string == NULL) /* missing ':', ignore this part */
+ continue;
+ *string++ = NUL; /* isolate flags from string */
+
+! /* If we found a middle match previously, use that match when this
+! * is not a middle or end. */
+! if (middle_match_len != 0
+! && vim_strchr(part_buf, COM_MIDDLE) == NULL
+! && vim_strchr(part_buf, COM_END) == NULL)
+! break;
+!
+! /* When we already found a nested comment, only accept further
+! * nested comments. */
+ if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ continue;
+
+! /* When 'O' flag present and using "O" command skip this one. */
+ if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ continue;
+
+! /* Line contents and string must match.
+ * When string starts with white space, must have some white space
+ * (but the amount does not need to match, there might be a mix of
+! * TABs and spaces). */
+ if (vim_iswhite(string[0]))
+ {
+ if (i == 0 || !vim_iswhite(line[i - 1]))
+! continue; /* missing shite space */
+ while (vim_iswhite(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ ;
+ if (string[j] != NUL)
+! continue; /* string doesn't match */
+
+! /* When 'b' flag used, there must be white space or an
+! * end-of-line after the string in the line. */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! /* We have found a match, stop searching unless this is a middle
+! * comment. The middle comment can be a substring of the end
+! * comment in which case it's better to return the length of the
+! * end comment and its flags. Thus we keep searching with middle
+! * and end matches and use an end match if it matches better. */
+! if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+! {
+! if (middle_match_len == 0)
+! {
+! middle_match_len = j;
+! saved_flags = prev_list;
+! }
+! continue;
+! }
+! if (middle_match_len != 0 && j > middle_match_len)
+! /* Use this match instead of the middle match, since it's a
+! * longer thus better match. */
+! middle_match_len = 0;
+!
+! if (middle_match_len == 0)
+! i += j;
+ found_one = TRUE;
+ break;
+ }
+
+! if (middle_match_len != 0)
+! {
+! /* Use the previously found middle match after failing to find a
+! * match with an end. */
+! if (!got_com && flags != NULL)
+! *flags = saved_flags;
+! i += middle_match_len;
+! found_one = TRUE;
+! }
+!
+! /* No match found, stop scanning. */
+ if (!found_one)
+ break;
+
+! /* Include any trailing white space. */
+ while (vim_iswhite(line[i]))
+ ++i;
+
+! /* If this comment doesn't nest, stop here. */
+! got_com = TRUE;
+ if (vim_strchr(part_buf, COM_NEST) == NULL)
+ break;
+ }
++
+ return (got_com ? i : 0);
+ }
+ #endif
+*** ../vim-7.3.179/src/testdir/test3.in 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.in 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1373,1378 ****
+--- 1373,1390 ----
+ }
+
+ STARTTEST
++ :set com=s1:/*,m:*,ex:*/
++ ]]3jofoo();
++ ENDTEST
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ }
++
++ STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+*** ../vim-7.3.179/src/testdir/test3.ok 2011-05-10 11:56:26.000000000 +0200
+--- src/testdir/test3.ok 2011-05-10 12:05:50.000000000 +0200
+***************
+*** 1225,1227 ****
+--- 1225,1236 ----
+ << "c";
+ }
+
++
++ void func(void)
++ {
++ /*
++ * This is a comment.
++ */
++ foo();
++ }
++
+*** ../vim-7.3.179/src/version.c 2011-05-10 11:56:26.000000000 +0200
+--- src/version.c 2011-05-10 13:37:28.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 180,
+ /**/
+
+--
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@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 ///