Patch 7.3.195
Problem:    "} else" causes following lines to be indented too much. (Rouben
            Rostamian)
Solution:   Better detection for the "else". (Lech Lorens)
Files:      src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok


*** ../vim-7.3.194/src/misc1.c  2011-05-10 16:41:13.000000000 +0200
--- src/misc1.c 2011-05-19 16:30:28.000000000 +0200
***************
*** 5482,5489 ****
   * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
   * '}'.
   * Don't consider "} else" a terminated line.
!  * Don't consider a line where there are unmatched opening braces before '}',
!  * ';' or ',' a terminated line.
   * Return the character terminating the line (ending char's have precedence if
   * both apply in order to determine initializations).
   */
--- 5482,5489 ----
   * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
   * '}'.
   * Don't consider "} else" a terminated line.
!  * If a line begins with an "else", only consider it terminated if no 
unmatched
!  * opening braces follow (handle "else { foo();" correctly).
   * Return the character terminating the line (ending char's have precedence if
   * both apply in order to determine initializations).
   */
***************
*** 5493,5513 ****
      int               incl_open;      /* include '{' at the end as terminator 
*/
      int               incl_comma;     /* recognize a trailing comma */
  {
!     char_u found_start = 0;
!     unsigned n_open = 0;
  
      s = cin_skipcomment(s);
  
      if (*s == '{' || (*s == '}' && !cin_iselse(s)))
        found_start = *s;
  
      while (*s)
      {
        /* skip over comments, "" strings and 'c'haracters */
        s = skip_string(cin_skipcomment(s));
        if (*s == '}' && n_open > 0)
            --n_open;
!       if (n_open == 0
                && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
                && cin_nocode(s + 1))
            return *s;
--- 5493,5517 ----
      int               incl_open;      /* include '{' at the end as terminator 
*/
      int               incl_comma;     /* recognize a trailing comma */
  {
!     char_u    found_start = 0;
!     unsigned  n_open = 0;
!     int               is_else = FALSE;
  
      s = cin_skipcomment(s);
  
      if (*s == '{' || (*s == '}' && !cin_iselse(s)))
        found_start = *s;
  
+     if (!found_start)
+       is_else = cin_iselse(s);
+ 
      while (*s)
      {
        /* skip over comments, "" strings and 'c'haracters */
        s = skip_string(cin_skipcomment(s));
        if (*s == '}' && n_open > 0)
            --n_open;
!       if ((!is_else || n_open == 0)
                && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
                && cin_nocode(s + 1))
            return *s;
*** ../vim-7.3.194/src/testdir/test3.in 2011-05-10 13:38:23.000000000 +0200
--- src/testdir/test3.in        2011-05-19 16:29:01.000000000 +0200
***************
*** 1345,1351 ****
  
  STARTTEST
  :set cino&
! 2kdd=][
  ENDTEST
  
  void func(void)
--- 1345,1351 ----
  
  STARTTEST
  :set cino&
! 2kdd=4][
  ENDTEST
  
  void func(void)
***************
*** 1359,1364 ****
--- 1359,1392 ----
        printf("Foo!\n");
  }
  
+ void func1(void)
+ {
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+                       "this line used", "to be indented incorrectly"};
+       foo();
+ }
+ 
+ void func2(void)
+ {
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+ 
+               printf("This line used to be indented incorrectly.\n");
+ }
+ 
+ void func3(void)
+ {
+       int tab[] = {
+       1, 2,
+       3, 4,
+       5, 6};
+ 
+ printf("Don't you dare indent this line incorrectly!\n);
+ }
+ 
  STARTTEST
  :set cino&
  2kdd=][
*** ../vim-7.3.194/src/testdir/test3.ok 2011-05-10 13:38:23.000000000 +0200
--- src/testdir/test3.ok        2011-05-19 16:29:01.000000000 +0200
***************
*** 1216,1221 ****
--- 1216,1249 ----
        printf("Foo!\n");
  }
  
+ void func1(void)
+ {
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+               "this line used", "to be indented incorrectly"};
+       foo();
+ }
+ 
+ void func2(void)
+ {
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+ 
+       printf("This line used to be indented incorrectly.\n");
+ }
+ 
+ void func3(void)
+ {
+       int tab[] = {
+               1, 2,
+               3, 4,
+               5, 6};
+ 
+       printf("Don't you dare indent this line incorrectly!\n);
+ }
+ 
  
  void func(void)
  {
*** ../vim-7.3.194/src/version.c        2011-05-19 14:59:07.000000000 +0200
--- src/version.c       2011-05-19 16:34:16.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     195,
  /**/

-- 
I AM THANKFUL...
...for the taxes that I pay because it means that I am employed.

 /// Bram Moolenaar -- [email protected] -- 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

Raspunde prin e-mail lui