diff --git a/7.4.071 b/7.4.071 new file mode 100644 index 0000000..71b2984 --- /dev/null +++ b/7.4.071 @@ -0,0 +1,1302 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.071 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.071 (after 7.4.069) +Problem: Passing limits around too often. +Solution: Use limits from buffer. +Files: src/edit.c, src/misc1.c, src/proto/misc1.pro + + +*** ../vim-7.4.070/src/edit.c 2013-11-05 07:12:59.000000000 +0100 +--- src/edit.c 2013-11-06 03:19:10.000000000 +0100 +*************** +*** 7857,7864 **** + if (try_match && keytyped == ':') + { + p = ml_get_curline(); +! if (cin_iscase(p, FALSE) || cin_isscopedecl(p) +! || cin_islabel(30)) + return TRUE; + /* Need to get the line again after cin_islabel(). */ + p = ml_get_curline(); +--- 7857,7863 ---- + if (try_match && keytyped == ':') + { + p = ml_get_curline(); +! if (cin_iscase(p, FALSE) || cin_isscopedecl(p) || cin_islabel()) + return TRUE; + /* Need to get the line again after cin_islabel(). */ + p = ml_get_curline(); +*************** +*** 7868,7874 **** + { + p[curwin->w_cursor.col - 1] = ' '; + i = (cin_iscase(p, FALSE) || cin_isscopedecl(p) +! || cin_islabel(30)); + p = ml_get_curline(); + p[curwin->w_cursor.col - 1] = ':'; + if (i) +--- 7867,7873 ---- + { + p[curwin->w_cursor.col - 1] = ' '; + i = (cin_iscase(p, FALSE) || cin_isscopedecl(p) +! || cin_islabel()); + p = ml_get_curline(); + p[curwin->w_cursor.col - 1] = ':'; + if (i) +*** ../vim-7.4.070/src/misc1.c 2013-11-05 07:12:59.000000000 +0100 +--- src/misc1.c 2013-11-06 03:46:59.000000000 +0100 +*************** +*** 5191,5201 **** +--- 5191,5208 ---- + #if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL) + + static char_u *skip_string __ARGS((char_u *p)); ++ static pos_T *ind_find_start_comment __ARGS((void)); + + /* + * Find the start of a comment, not knowing if we are in a comment right now. + * Search starts at w_cursor.lnum and goes backwards. + */ ++ static pos_T * ++ ind_find_start_comment() /* XXX */ ++ { ++ return find_start_comment(curbuf->b_ind_maxcomment); ++ } ++ + pos_T * + find_start_comment(ind_maxcomment) /* XXX */ + int ind_maxcomment; +*************** +*** 5313,5319 **** + static int cin_isdefault __ARGS((char_u *)); + static char_u *after_label __ARGS((char_u *l)); + static int get_indent_nolabel __ARGS((linenr_T lnum)); +! static int skip_label __ARGS((linenr_T, char_u **pp, int ind_maxcomment)); + static int cin_first_id_amount __ARGS((void)); + static int cin_get_equal_amount __ARGS((linenr_T lnum)); + static int cin_ispreproc __ARGS((char_u *)); +--- 5320,5326 ---- + static int cin_isdefault __ARGS((char_u *)); + static char_u *after_label __ARGS((char_u *l)); + static int get_indent_nolabel __ARGS((linenr_T lnum)); +! static int skip_label __ARGS((linenr_T, char_u **pp)); + static int cin_first_id_amount __ARGS((void)); + static int cin_get_equal_amount __ARGS((linenr_T lnum)); + static int cin_ispreproc __ARGS((char_u *)); +*************** +*** 5322,5345 **** + static int cin_islinecomment __ARGS((char_u *)); + static int cin_isterminated __ARGS((char_u *, int, int)); + static int cin_isinit __ARGS((void)); +! static int cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int)); + static int cin_isif __ARGS((char_u *)); + static int cin_iselse __ARGS((char_u *)); + static int cin_isdo __ARGS((char_u *)); +! static int cin_iswhileofdo __ARGS((char_u *, linenr_T, int)); + static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset)); +! static int cin_iswhileofdo_end __ARGS((int terminated, int ind_maxparen, int ind_maxcomment)); + static int cin_isbreak __ARGS((char_u *)); + static int cin_is_cpp_baseclass __ARGS((colnr_T *col)); +! static int get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass)); + static int cin_ends_in __ARGS((char_u *, char_u *, char_u *)); + static int cin_starts_with __ARGS((char_u *s, char *word)); + static int cin_skip2pos __ARGS((pos_T *trypos)); +! static pos_T *find_start_brace __ARGS((int)); +! static pos_T *find_match_paren __ARGS((int, int)); +! static int corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos)); + static int find_last_paren __ARGS((char_u *l, int start, int end)); +! static int find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment)); + static int cin_is_cpp_namespace __ARGS((char_u *)); + + /* +--- 5329,5352 ---- + static int cin_islinecomment __ARGS((char_u *)); + static int cin_isterminated __ARGS((char_u *, int, int)); + static int cin_isinit __ARGS((void)); +! static int cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T)); + static int cin_isif __ARGS((char_u *)); + static int cin_iselse __ARGS((char_u *)); + static int cin_isdo __ARGS((char_u *)); +! static int cin_iswhileofdo __ARGS((char_u *, linenr_T)); + static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset)); +! static int cin_iswhileofdo_end __ARGS((int terminated)); + static int cin_isbreak __ARGS((char_u *)); + static int cin_is_cpp_baseclass __ARGS((colnr_T *col)); +! static int get_baseclass_amount __ARGS((int col)); + static int cin_ends_in __ARGS((char_u *, char_u *, char_u *)); + static int cin_starts_with __ARGS((char_u *s, char *word)); + static int cin_skip2pos __ARGS((pos_T *trypos)); +! static pos_T *find_start_brace __ARGS((void)); +! static pos_T *find_match_paren __ARGS((int)); +! static int corr_ind_maxparen __ARGS((pos_T *startpos)); + static int find_last_paren __ARGS((char_u *l, int start, int end)); +! static int find_match __ARGS((int lookfor, linenr_T ourscope)); + static int cin_is_cpp_namespace __ARGS((char_u *)); + + /* +*************** +*** 5444,5451 **** + * Note: curwin->w_cursor must be where we are looking for the label. + */ + int +! cin_islabel(ind_maxcomment) /* XXX */ +! int ind_maxcomment; + { + char_u *s; + +--- 5451,5457 ---- + * Note: curwin->w_cursor must be where we are looking for the label. + */ + int +! cin_islabel() /* XXX */ + { + char_u *s; + +*************** +*** 5479,5485 **** + * If we're in a comment now, skip to the start of the comment. + */ + curwin->w_cursor.col = 0; +! if ((trypos = find_start_comment(ind_maxcomment)) != NULL) /* XXX */ + curwin->w_cursor = *trypos; + + line = ml_get_curline(); +--- 5485,5491 ---- + * If we're in a comment now, skip to the start of the comment. + */ + curwin->w_cursor.col = 0; +! if ((trypos = ind_find_start_comment()) != NULL) /* XXX */ + curwin->w_cursor = *trypos; + + line = ml_get_curline(); +*************** +*** 5725,5734 **** + * ^ + */ + static int +! skip_label(lnum, pp, ind_maxcomment) + linenr_T lnum; + char_u **pp; +- int ind_maxcomment; + { + char_u *l; + int amount; +--- 5731,5739 ---- + * ^ + */ + static int +! skip_label(lnum, pp) + linenr_T lnum; + char_u **pp; + { + char_u *l; + int amount; +*************** +*** 5738,5745 **** + curwin->w_cursor.lnum = lnum; + l = ml_get_curline(); + /* XXX */ +! if (cin_iscase(l, FALSE) || cin_isscopedecl(l) +! || cin_islabel(ind_maxcomment)) + { + amount = get_indent_nolabel(lnum); + l = after_label(ml_get_curline()); +--- 5743,5749 ---- + curwin->w_cursor.lnum = lnum; + l = ml_get_curline(); + /* XXX */ +! if (cin_iscase(l, FALSE) || cin_isscopedecl(l) || cin_islabel()) + { + amount = get_indent_nolabel(lnum); + l = after_label(ml_get_curline()); +*************** +*** 5983,5994 **** + * "min_lnum" is the line before which we will not be looking. + */ + static int +! cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment) + char_u **sp; + linenr_T first_lnum; + linenr_T min_lnum; +- int ind_maxparen; +- int ind_maxcomment; + { + char_u *s; + linenr_T lnum = first_lnum; +--- 5987,5996 ---- + * "min_lnum" is the line before which we will not be looking. + */ + static int +! cin_isfuncdecl(sp, first_lnum, min_lnum) + char_u **sp; + linenr_T first_lnum; + linenr_T min_lnum; + { + char_u *s; + linenr_T lnum = first_lnum; +*************** +*** 6002,6008 **** + s = *sp; + + if (find_last_paren(s, '(', ')') +! && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL) + { + lnum = trypos->lnum; + if (lnum < min_lnum) +--- 6004,6010 ---- + s = *sp; + + if (find_last_paren(s, '(', ')') +! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) + { + lnum = trypos->lnum; + if (lnum < min_lnum) +*************** +*** 6110,6119 **** + * ')' and ';'. The condition may be spread over several lines. + */ + static int +! cin_iswhileofdo(p, lnum, ind_maxparen) /* XXX */ + char_u *p; + linenr_T lnum; +- int ind_maxparen; + { + pos_T cursor_save; + pos_T *trypos; +--- 6112,6120 ---- + * ')' and ';'. The condition may be spread over several lines. + */ + static int +! cin_iswhileofdo(p, lnum) /* XXX */ + char_u *p; + linenr_T lnum; + { + pos_T cursor_save; + pos_T *trypos; +*************** +*** 6133,6139 **** + ++p; + ++curwin->w_cursor.col; + } +! if ((trypos = findmatchlimit(NULL, 0, 0, ind_maxparen)) != NULL + && *cin_skipcomment(ml_get_pos(trypos) + 1) == ';') + retval = TRUE; + curwin->w_cursor = cursor_save; +--- 6134,6141 ---- + ++p; + ++curwin->w_cursor.col; + } +! if ((trypos = findmatchlimit(NULL, 0, 0, +! curbuf->b_ind_maxparen)) != NULL + && *cin_skipcomment(ml_get_pos(trypos) + 1) == ';') + retval = TRUE; + curwin->w_cursor = cursor_save; +*************** +*** 6196,6205 **** + * Adjust the cursor to the line with "while". + */ + static int +! cin_iswhileofdo_end(terminated, ind_maxparen, ind_maxcomment) + int terminated; +- int ind_maxparen; +- int ind_maxcomment; + { + char_u *line; + char_u *p; +--- 6198,6205 ---- + * Adjust the cursor to the line with "while". + */ + static int +! cin_iswhileofdo_end(terminated) + int terminated; + { + char_u *line; + char_u *p; +*************** +*** 6223,6229 **** + * before the matching '('. XXX */ + i = (int)(p - line); + curwin->w_cursor.col = i; +! trypos = find_match_paren(ind_maxparen, ind_maxcomment); + if (trypos != NULL) + { + s = cin_skipcomment(ml_get(trypos->lnum)); +--- 6223,6229 ---- + * before the matching '('. XXX */ + i = (int)(p - line); + curwin->w_cursor.col = i; +! trypos = find_match_paren(curbuf->b_ind_maxparen); + if (trypos != NULL) + { + s = cin_skipcomment(ml_get(trypos->lnum)); +*************** +*** 6415,6425 **** + } + + static int +! get_baseclass_amount(col, ind_maxparen, ind_maxcomment, ind_cpp_baseclass) + int col; +- int ind_maxparen; +- int ind_maxcomment; +- int ind_cpp_baseclass; + { + int amount; + colnr_T vcol; +--- 6415,6422 ---- + } + + static int +! get_baseclass_amount(col) + int col; + { + int amount; + colnr_T vcol; +*************** +*** 6429,6439 **** + { + amount = get_indent(); + if (find_last_paren(ml_get_curline(), '(', ')') +! && (trypos = find_match_paren(ind_maxparen, +! ind_maxcomment)) != NULL) + amount = get_indent_lnum(trypos->lnum); /* XXX */ + if (!cin_ends_in(ml_get_curline(), (char_u *)",", NULL)) +! amount += ind_cpp_baseclass; + } + else + { +--- 6426,6435 ---- + { + amount = get_indent(); + if (find_last_paren(ml_get_curline(), '(', ')') +! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) + amount = get_indent_lnum(trypos->lnum); /* XXX */ + if (!cin_ends_in(ml_get_curline(), (char_u *)",", NULL)) +! amount += curbuf->b_ind_cpp_baseclass; + } + else + { +*************** +*** 6441,6448 **** + getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); + amount = (int)vcol; + } +! if (amount < ind_cpp_baseclass) +! amount = ind_cpp_baseclass; + return amount; + } + +--- 6437,6444 ---- + getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); + amount = (int)vcol; + } +! if (amount < curbuf->b_ind_cpp_baseclass) +! amount = curbuf->b_ind_cpp_baseclass; + return amount; + } + +*************** +*** 6526,6533 **** + /* } */ + + static pos_T * +! find_start_brace(ind_maxcomment) /* XXX */ +! int ind_maxcomment; + { + pos_T cursor_save; + pos_T *trypos; +--- 6522,6528 ---- + /* } */ + + static pos_T * +! find_start_brace() /* XXX */ + { + pos_T cursor_save; + pos_T *trypos; +*************** +*** 6543,6549 **** + pos = NULL; + /* ignore the { if it's in a // or / * * / comment */ + if ((colnr_T)cin_skip2pos(trypos) == trypos->col +! && (pos = find_start_comment(ind_maxcomment)) == NULL) /* XXX */ + break; + if (pos != NULL) + curwin->w_cursor.lnum = pos->lnum; +--- 6538,6544 ---- + pos = NULL; + /* ignore the { if it's in a // or / * * / comment */ + if ((colnr_T)cin_skip2pos(trypos) == trypos->col +! && (pos = ind_find_start_comment()) == NULL) /* XXX */ + break; + if (pos != NULL) + curwin->w_cursor.lnum = pos->lnum; +*************** +*** 6557,6565 **** + * Return NULL if no match found. + */ + static pos_T * +! find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */ + int ind_maxparen; +- int ind_maxcomment; + { + pos_T cursor_save; + pos_T *trypos; +--- 6552,6559 ---- + * Return NULL if no match found. + */ + static pos_T * +! find_match_paren(ind_maxparen) /* XXX */ + int ind_maxparen; + { + pos_T cursor_save; + pos_T *trypos; +*************** +*** 6576,6582 **** + pos_copy = *trypos; /* copy trypos, findmatch will change it */ + trypos = &pos_copy; + curwin->w_cursor = *trypos; +! if (find_start_comment(ind_maxcomment) != NULL) /* XXX */ + trypos = NULL; + } + } +--- 6570,6576 ---- + pos_copy = *trypos; /* copy trypos, findmatch will change it */ + trypos = &pos_copy; + curwin->w_cursor = *trypos; +! if (ind_find_start_comment() != NULL) /* XXX */ + trypos = NULL; + } + } +*************** +*** 6591,6605 **** + * looking a few lines further. + */ + static int +! corr_ind_maxparen(ind_maxparen, startpos) +! int ind_maxparen; + pos_T *startpos; + { + long n = (long)startpos->lnum - (long)curwin->w_cursor.lnum; + +! if (n > 0 && n < ind_maxparen / 2) +! return ind_maxparen - (int)n; +! return ind_maxparen; + } + + /* +--- 6585,6598 ---- + * looking a few lines further. + */ + static int +! corr_ind_maxparen(startpos) + pos_T *startpos; + { + long n = (long)startpos->lnum - (long)curwin->w_cursor.lnum; + +! if (n > 0 && n < curbuf->b_ind_maxparen / 2) +! return curbuf->b_ind_maxparen - (int)n; +! return curbuf->b_ind_maxparen; + } + + /* +*************** +*** 6937,6943 **** + + curwin->w_cursor.col = 0; + +! original_line_islabel = cin_islabel(curbuf->b_ind_maxcomment); /* XXX */ + + /* + * #defines and so on always go at the left when included in 'cinkeys'. +--- 6930,6936 ---- + + curwin->w_cursor.col = 0; + +! original_line_islabel = cin_islabel(); /* XXX */ + + /* + * #defines and so on always go at the left when included in 'cinkeys'. +*************** +*** 6973,6979 **** + * comment, try using the 'comments' option. + */ + else if (!cin_iscomment(theline) +! && (trypos = find_start_comment(curbuf->b_ind_maxcomment)) != NULL) + /* XXX */ + { + int lead_start_len = 2; +--- 6966,6972 ---- + * comment, try using the 'comments' option. + */ + else if (!cin_iscomment(theline) +! && (trypos = ind_find_start_comment()) != NULL) + /* XXX */ + { + int lead_start_len = 2; +*************** +*** 7126,7136 **** + /* + * Are we inside parentheses or braces? + */ /* XXX */ +! else if (((trypos = find_match_paren(curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) != NULL + && curbuf->b_ind_java == 0) +! || (tryposBrace = +! find_start_brace(curbuf->b_ind_maxcomment)) != NULL + || trypos != NULL) + { + if (trypos != NULL && tryposBrace != NULL) +--- 7119,7127 ---- + /* + * Are we inside parentheses or braces? + */ /* XXX */ +! else if (((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL + && curbuf->b_ind_java == 0) +! || (tryposBrace = find_start_brace()) != NULL + || trypos != NULL) + { + if (trypos != NULL && tryposBrace != NULL) +*************** +*** 7170,7177 **** + curwin->w_cursor.lnum = lnum; + + /* Skip a comment. XXX */ +! if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) +! != NULL) + { + lnum = trypos->lnum + 1; + continue; +--- 7161,7167 ---- + curwin->w_cursor.lnum = lnum; + + /* Skip a comment. XXX */ +! if ((trypos = ind_find_start_comment()) != NULL) + { + lnum = trypos->lnum + 1; + continue; +*************** +*** 7179,7186 **** + + /* XXX */ + if ((trypos = find_match_paren( +! corr_ind_maxparen(curbuf->b_ind_maxparen, &cur_curpos), +! curbuf->b_ind_maxcomment)) != NULL + && trypos->lnum == our_paren_pos.lnum + && trypos->col == our_paren_pos.col) + { +--- 7169,7175 ---- + + /* XXX */ + if ((trypos = find_match_paren( +! corr_ind_maxparen(&cur_curpos))) != NULL + && trypos->lnum == our_paren_pos.lnum + && trypos->col == our_paren_pos.col) + { +*************** +*** 7223,7230 **** + curwin->w_cursor.lnum = outermost.lnum; + curwin->w_cursor.col = outermost.col; + +! trypos = find_match_paren(curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment); + } while (trypos && trypos->lnum == outermost.lnum); + + curwin->w_cursor = cursor_save; +--- 7212,7218 ---- + curwin->w_cursor.lnum = outermost.lnum; + curwin->w_cursor.col = outermost.col; + +! trypos = find_match_paren(curbuf->b_ind_maxparen); + } while (trypos && trypos->lnum == outermost.lnum); + + curwin->w_cursor = cursor_save; +*************** +*** 7235,7242 **** + cin_is_if_for_while_before_offset(line, &outermost.col); + } + +! amount = skip_label(our_paren_pos.lnum, &look, +! curbuf->b_ind_maxcomment); + look = skipwhite(look); + if (*look == '(') + { +--- 7223,7229 ---- + cin_is_if_for_while_before_offset(line, &outermost.col); + } + +! amount = skip_label(our_paren_pos.lnum, &look); + look = skipwhite(look); + if (*look == '(') + { +*************** +*** 7366,7373 **** + { + curwin->w_cursor.lnum = our_paren_pos.lnum; + curwin->w_cursor.col = col; +! if (find_match_paren(curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment) != NULL) + amount += curbuf->b_ind_unclosed2; + else + { +--- 7353,7359 ---- + { + curwin->w_cursor.lnum = our_paren_pos.lnum; + curwin->w_cursor.col = col; +! if (find_match_paren(curbuf->b_ind_maxparen) != NULL) + amount += curbuf->b_ind_unclosed2; + else + { +*************** +*** 7435,7442 **** + */ + lnum = ourscope; + if (find_last_paren(start, '(', ')') +! && (trypos = find_match_paren(curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) != NULL) + lnum = trypos->lnum; + + /* +--- 7421,7428 ---- + */ + lnum = ourscope; + if (find_last_paren(start, '(', ')') +! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) +! != NULL) + lnum = trypos->lnum; + + /* +*************** +*** 7449,7455 **** + && cin_iscase(skipwhite(ml_get_curline()), FALSE))) + amount = get_indent(); + else +! amount = skip_label(lnum, &l, curbuf->b_ind_maxcomment); + + start_brace = BRACE_AT_END; + } +--- 7435,7441 ---- + && cin_iscase(skipwhite(ml_get_curline()), FALSE))) + amount = get_indent(); + else +! amount = skip_label(lnum, &l); + + start_brace = BRACE_AT_END; + } +*************** +*** 7478,7491 **** + lookfor = LOOKFOR_INITIAL; + if (cin_iselse(theline)) + lookfor = LOOKFOR_IF; +! else if (cin_iswhileofdo(theline, cur_curpos.lnum, +! curbuf->b_ind_maxparen)) /* XXX */ + lookfor = LOOKFOR_DO; + if (lookfor != LOOKFOR_INITIAL) + { + curwin->w_cursor.lnum = cur_curpos.lnum; +! if (find_match(lookfor, ourscope, curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment) == OK) + { + amount = get_indent(); /* XXX */ + goto theend; +--- 7464,7475 ---- + lookfor = LOOKFOR_INITIAL; + if (cin_iselse(theline)) + lookfor = LOOKFOR_IF; +! else if (cin_iswhileofdo(theline, cur_curpos.lnum)) /* XXX */ + lookfor = LOOKFOR_DO; + if (lookfor != LOOKFOR_INITIAL) + { + curwin->w_cursor.lnum = cur_curpos.lnum; +! if (find_match(lookfor, ourscope) == OK) + { + amount = get_indent(); /* XXX */ + goto theend; +*************** +*** 7611,7617 **** + * If we're in a comment now, skip to the start of the + * comment. + */ +! trypos = find_start_comment(curbuf->b_ind_maxcomment); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +--- 7595,7601 ---- + * If we're in a comment now, skip to the start of the + * comment. + */ +! trypos = ind_find_start_comment(); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +*************** +*** 7636,7644 **** + * (it's a variable declaration). + */ + if (start_brace != BRACE_IN_COL0 +! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, +! 0, curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) + { + /* if the line is terminated with another ',' + * it is a continued variable initialization. +--- 7620,7626 ---- + * (it's a variable declaration). + */ + if (start_brace != BRACE_IN_COL0 +! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0)) + { + /* if the line is terminated with another ',' + * it is a continued variable initialization. +*************** +*** 7670,7681 **** + trypos = NULL; + if (find_last_paren(l, '(', ')')) + trypos = find_match_paren( +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment); + + if (trypos == NULL && find_last_paren(l, '{', '}')) +! trypos = find_start_brace( +! curbuf->b_ind_maxcomment); + + if (trypos != NULL) + { +--- 7652,7661 ---- + trypos = NULL; + if (find_last_paren(l, '(', ')')) + trypos = find_match_paren( +! curbuf->b_ind_maxparen); + + if (trypos == NULL && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(); + + if (trypos != NULL) + { +*************** +*** 7733,7740 **** + + /* If we're in a comment now, skip to the start of + * the comment. */ +! trypos = find_start_comment( +! curbuf->b_ind_maxcomment); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +--- 7713,7719 ---- + + /* If we're in a comment now, skip to the start of + * the comment. */ +! trypos = ind_find_start_comment(); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +*************** +*** 7764,7771 **** + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) +! != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 7743,7749 ---- + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = ind_find_start_comment()) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +*************** +*** 7819,7826 **** + * Check that this case label is not for another + * switch() + */ /* XXX */ +! if ((trypos = find_start_brace( +! curbuf->b_ind_maxcomment)) == NULL + || trypos->lnum == ourscope) + { + amount = get_indent(); /* XXX */ +--- 7797,7803 ---- + * Check that this case label is not for another + * switch() + */ /* XXX */ +! if ((trypos = find_start_brace()) == NULL + || trypos->lnum == ourscope) + { + amount = get_indent(); /* XXX */ +*************** +*** 7894,7901 **** + */ + if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) + { +! if (find_last_paren(l, '{', '}') && (trypos = +! find_start_brace(curbuf->b_ind_maxcomment)) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 7871,7878 ---- + */ + if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) + { +! if (find_last_paren(l, '{', '}') +! && (trypos = find_start_brace()) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +*************** +*** 7906,7912 **** + /* + * Ignore jump labels with nothing after them. + */ +! if (!curbuf->b_ind_js && cin_islabel(curbuf->b_ind_maxcomment)) + { + l = after_label(ml_get_curline()); + if (l == NULL || cin_nocode(l)) +--- 7883,7889 ---- + /* + * Ignore jump labels with nothing after them. + */ +! if (!curbuf->b_ind_js && cin_islabel()) + { + l = after_label(ml_get_curline()); + if (l == NULL || cin_nocode(l)) +*************** +*** 7952,7961 **** + } + else + /* XXX */ +! amount = get_baseclass_amount(col, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment, +! curbuf->b_ind_cpp_baseclass); + break; + } + else if (lookfor == LOOKFOR_CPP_BASECLASS) +--- 7929,7935 ---- + } + else + /* XXX */ +! amount = get_baseclass_amount(col); + break; + } + else if (lookfor == LOOKFOR_CPP_BASECLASS) +*************** +*** 7997,8005 **** + * matching it will take us back to the start of the line. + */ + (void)find_last_paren(l, '(', ')'); +! trypos = find_match_paren( +! corr_ind_maxparen(curbuf->b_ind_maxparen, +! &cur_curpos), curbuf->b_ind_maxcomment); + + /* + * If we are looking for ',', we also look for matching +--- 7971,7977 ---- + * matching it will take us back to the start of the line. + */ + (void)find_last_paren(l, '(', ')'); +! trypos = find_match_paren(corr_ind_maxparen(&cur_curpos)); + + /* + * If we are looking for ',', we also look for matching +*************** +*** 8007,8013 **** + */ + if (trypos == NULL && terminated == ',' + && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(curbuf->b_ind_maxcomment); + + if (trypos != NULL) + { +--- 7979,7985 ---- + */ + if (trypos == NULL && terminated == ',' + && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(); + + if (trypos != NULL) + { +*************** +*** 8051,8058 **** + * ignoring any jump label. XXX + */ + if (!curbuf->b_ind_js) +! cur_amount = skip_label(curwin->w_cursor.lnum, +! &l, curbuf->b_ind_maxcomment); + else + cur_amount = get_indent(); + /* +--- 8023,8029 ---- + * ignoring any jump label. XXX + */ + if (!curbuf->b_ind_js) +! cur_amount = skip_label(curwin->w_cursor.lnum, &l); + else + cur_amount = get_indent(); + /* +*************** +*** 8162,8172 **** + curwin->w_cursor.col = + (colnr_T)(l - ml_get_curline()) + 1; + +! if ((trypos = find_start_brace( +! curbuf->b_ind_maxcomment)) == NULL +! || find_match(LOOKFOR_IF, trypos->lnum, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment) == FAIL) + break; + } + } +--- 8133,8141 ---- + curwin->w_cursor.col = + (colnr_T)(l - ml_get_curline()) + 1; + +! if ((trypos = find_start_brace()) == NULL +! || find_match(LOOKFOR_IF, trypos->lnum) +! == FAIL) + break; + } + } +*************** +*** 8261,8268 **** + * If so: Ignore until the matching "do". + */ + /* XXX */ +! else if (cin_iswhileofdo_end(terminated, curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) + { + /* + * Found an unterminated line after a while ();, line up +--- 8230,8236 ---- + * If so: Ignore until the matching "do". + */ + /* XXX */ +! else if (cin_iswhileofdo_end(terminated)) + { + /* + * Found an unterminated line after a while ();, line up +*************** +*** 8380,8387 **** + l = ml_get_curline(); + if (find_last_paren(l, '(', ')') + && (trypos = find_match_paren( +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) != NULL) + { + /* + * Check if we are on a case label now. This is +--- 8348,8354 ---- + l = ml_get_curline(); + if (find_last_paren(l, '(', ')') + && (trypos = find_match_paren( +! curbuf->b_ind_maxparen)) != NULL) + { + /* + * Check if we are on a case label now. This is +*************** +*** 8415,8422 **** + * Get indent and pointer to text for current line, + * ignoring any jump label. + */ +! amount = skip_label(curwin->w_cursor.lnum, +! &l, curbuf->b_ind_maxcomment); + + if (theline[0] == '{') + amount += curbuf->b_ind_open_extra; +--- 8382,8388 ---- + * Get indent and pointer to text for current line, + * ignoring any jump label. + */ +! amount = skip_label(curwin->w_cursor.lnum, &l); + + if (theline[0] == '{') + amount += curbuf->b_ind_open_extra; +*************** +*** 8439,8449 **** + && cin_iselse(l) + && whilelevel == 0) + { +! if ((trypos = find_start_brace( +! curbuf->b_ind_maxcomment)) == NULL +! || find_match(LOOKFOR_IF, trypos->lnum, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment) == FAIL) + break; + continue; + } +--- 8405,8413 ---- + && cin_iselse(l) + && whilelevel == 0) + { +! if ((trypos = find_start_brace()) == NULL +! || find_match(LOOKFOR_IF, trypos->lnum) +! == FAIL) + break; + continue; + } +*************** +*** 8453,8461 **** + * that block. + */ + l = ml_get_curline(); +! if (find_last_paren(l, '{', '}') +! && (trypos = find_start_brace( +! curbuf->b_ind_maxcomment)) != NULL) /* XXX */ + { + curwin->w_cursor = *trypos; + /* if not "else {" check for terminated again */ +--- 8417,8424 ---- + * that block. + */ + l = ml_get_curline(); +! if (find_last_paren(l, '{', '}') /* XXX */ +! && (trypos = find_start_brace()) != NULL) + { + curwin->w_cursor = *trypos; + /* if not "else {" check for terminated again */ +*************** +*** 8516,8524 **** + && !cin_ends_in(theline, (char_u *)":", NULL) + && !cin_ends_in(theline, (char_u *)",", NULL) + && cin_isfuncdecl(NULL, cur_curpos.lnum + 1, +! cur_curpos.lnum + 1, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment) + && !cin_isterminated(theline, FALSE, TRUE)) + { + amount = curbuf->b_ind_func_type; +--- 8479,8485 ---- + && !cin_ends_in(theline, (char_u *)":", NULL) + && !cin_ends_in(theline, (char_u *)",", NULL) + && cin_isfuncdecl(NULL, cur_curpos.lnum + 1, +! cur_curpos.lnum + 1) + && !cin_isterminated(theline, FALSE, TRUE)) + { + amount = curbuf->b_ind_func_type; +*************** +*** 8540,8547 **** + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = find_start_comment( +! curbuf->b_ind_maxcomment)) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 8501,8507 ---- + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = ind_find_start_comment()) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +*************** +*** 8561,8569 **** + if (n) + { + /* XXX */ +! amount = get_baseclass_amount(col, curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment, +! curbuf->b_ind_cpp_baseclass); + break; + } + +--- 8521,8527 ---- + if (n) + { + /* XXX */ +! amount = get_baseclass_amount(col); + break; + } + +*************** +*** 8595,8602 **** + /* take us back to opening paren */ + if (find_last_paren(l, '(', ')') + && (trypos = find_match_paren( +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) != NULL) + curwin->w_cursor = *trypos; + + /* For a line ending in ',' that is a continuation line go +--- 8553,8559 ---- + /* take us back to opening paren */ + if (find_last_paren(l, '(', ')') + && (trypos = find_match_paren( +! curbuf->b_ind_maxparen)) != NULL) + curwin->w_cursor = *trypos; + + /* For a line ending in ',' that is a continuation line go +*************** +*** 8627,8635 **** + * If the line looks like a function declaration, and we're + * not in a comment, put it the left margin. + */ +! if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) /* XXX */ + break; + l = ml_get_curline(); + +--- 8584,8590 ---- + * If the line looks like a function declaration, and we're + * not in a comment, put it the left margin. + */ +! if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0)) /* XXX */ + break; + l = ml_get_curline(); + +*************** +*** 8677,8685 **** + * line (and the ones that follow) needs to be indented as + * parameters. + */ +! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) + { + amount = curbuf->b_ind_param; + break; +--- 8632,8638 ---- + * line (and the ones that follow) needs to be indented as + * parameters. + */ +! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0)) + { + amount = curbuf->b_ind_param; + break; +*************** +*** 8710,8717 **** + */ + find_last_paren(l, '(', ')'); + +! if ((trypos = find_match_paren(curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) != NULL) + curwin->w_cursor = *trypos; + amount = get_indent(); /* XXX */ + break; +--- 8663,8669 ---- + */ + find_last_paren(l, '(', ')'); + +! if ((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) + curwin->w_cursor = *trypos; + amount = get_indent(); /* XXX */ + break; +*************** +*** 8754,8764 **** + } + + static int +! find_match(lookfor, ourscope, ind_maxparen, ind_maxcomment) + int lookfor; + linenr_T ourscope; +- int ind_maxparen; +- int ind_maxcomment; + { + char_u *look; + pos_T *theirscope; +--- 8706,8714 ---- + } + + static int +! find_match(lookfor, ourscope) + int lookfor; + linenr_T ourscope; + { + char_u *look; + pos_T *theirscope; +*************** +*** 8788,8800 **** + if (cin_iselse(look) + || cin_isif(look) + || cin_isdo(look) /* XXX */ +! || cin_iswhileofdo(look, curwin->w_cursor.lnum, ind_maxparen)) + { + /* + * if we've gone outside the braces entirely, + * we must be out of scope... + */ +! theirscope = find_start_brace(ind_maxcomment); /* XXX */ + if (theirscope == NULL) + break; + +--- 8738,8750 ---- + if (cin_iselse(look) + || cin_isif(look) + || cin_isdo(look) /* XXX */ +! || cin_iswhileofdo(look, curwin->w_cursor.lnum)) + { + /* + * if we've gone outside the braces entirely, + * we must be out of scope... + */ +! theirscope = find_start_brace(); /* XXX */ + if (theirscope == NULL) + break; + +*************** +*** 8832,8838 **** + * if it was a "while" then we need to go back to + * another "do", so increment whilelevel. XXX + */ +! if (cin_iswhileofdo(look, curwin->w_cursor.lnum, ind_maxparen)) + { + ++whilelevel; + continue; +--- 8782,8788 ---- + * if it was a "while" then we need to go back to + * another "do", so increment whilelevel. XXX + */ +! if (cin_iswhileofdo(look, curwin->w_cursor.lnum)) + { + ++whilelevel; + continue; +*** ../vim-7.4.070/src/proto/misc1.pro 2013-11-05 07:12:59.000000000 +0100 +--- src/proto/misc1.pro 2013-11-06 03:19:45.000000000 +0100 +*************** +*** 81,87 **** + char_u *FullName_save __ARGS((char_u *fname, int force)); + pos_T *find_start_comment __ARGS((int ind_maxcomment)); + void do_c_expr_indent __ARGS((void)); +! int cin_islabel __ARGS((int ind_maxcomment)); + int cin_iscase __ARGS((char_u *s, int strict)); + int cin_isscopedecl __ARGS((char_u *s)); + void parse_cino __ARGS((buf_T *buf)); +--- 81,87 ---- + char_u *FullName_save __ARGS((char_u *fname, int force)); + pos_T *find_start_comment __ARGS((int ind_maxcomment)); + void do_c_expr_indent __ARGS((void)); +! int cin_islabel __ARGS((void)); + int cin_iscase __ARGS((char_u *s, int strict)); + int cin_isscopedecl __ARGS((char_u *s)); + void parse_cino __ARGS((buf_T *buf)); +*** ../vim-7.4.070/src/version.c 2013-11-05 17:40:47.000000000 +0100 +--- src/version.c 2013-11-06 03:43:44.000000000 +0100 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 71, + /**/ + +-- +A law to reduce crime states: "It is mandatory for a motorist with criminal +intentions to stop at the city limits and telephone the chief of police as he +is entering the town. + [real standing law in Washington, United States of America] + + /// 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 ///