diff options
Diffstat (limited to 'src/misc1.c')
-rw-r--r-- | src/misc1.c | 726 |
1 files changed, 353 insertions, 373 deletions
diff --git a/src/misc1.c b/src/misc1.c index c349015ba..fa43657a4 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -1405,7 +1405,7 @@ open_line(dir, flags, second_line_indent) #ifdef FEAT_SMARTINDENT if (did_si) { - int sw = (int)get_sw_value(); + int sw = (int)get_sw_value(curbuf); if (p_sr) newindent -= newindent % sw; @@ -5342,8 +5342,6 @@ 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 *)); -static int ind_hash_comment = 0; /* # starts a comment */ - /* * Skip over white space and C comments within the line. * Also skip over Perl/shell comments if desired. @@ -5360,7 +5358,7 @@ cin_skipcomment(s) /* Perl/shell # comment comment continues until eol. Require a space * before # to avoid recognizing $#array. */ - if (ind_hash_comment != 0 && s != prev_s && *s == '#') + if (curbuf->b_ind_hash_comment != 0 && s != prev_s && *s == '#') { s += STRLEN(s); break; @@ -6639,201 +6637,229 @@ find_last_paren(l, start, end) return retval; } - int -get_c_indent() +/* + * Parse 'cinoptions' and set the values in "curbuf". + * Must be called when 'cinoptions', 'shiftwidth' and/or 'tabstop' changes. + */ + void +parse_cino(buf) + buf_T *buf; { - int sw = (int)get_sw_value(); + char_u *p; + char_u *l; + char_u *digits; + int n; + int divider; + int fraction = 0; + int sw = (int)get_sw_value(buf); /* - * spaces from a block's opening brace the prevailing indent for that - * block should be + * Set the default values. */ + /* Spaces from a block's opening brace the prevailing indent for that + * block should be. */ + buf->b_ind_level = sw; - int ind_level = sw; + /* Spaces from the edge of the line an open brace that's at the end of a + * line is imagined to be. */ + buf->b_ind_open_imag = 0; - /* - * spaces from the edge of the line an open brace that's at the end of a - * line is imagined to be. - */ - int ind_open_imag = 0; + /* Spaces from the prevailing indent for a line that is not preceded by + * an opening brace. */ + buf->b_ind_no_brace = 0; - /* - * spaces from the prevailing indent for a line that is not preceded by - * an opening brace. - */ - int ind_no_brace = 0; - - /* - * column where the first { of a function should be located } - */ - int ind_first_open = 0; + /* Column where the first { of a function should be located }. */ + buf->b_ind_first_open = 0; - /* - * spaces from the prevailing indent a leftmost open brace should be - * located - */ - int ind_open_extra = 0; + /* Spaces from the prevailing indent a leftmost open brace should be + * located. */ + buf->b_ind_open_extra = 0; - /* - * spaces from the matching open brace (real location for one at the left + /* Spaces from the matching open brace (real location for one at the left * edge; imaginary location from one that ends a line) the matching close - * brace should be located - */ - int ind_close_extra = 0; + * brace should be located. */ + buf->b_ind_close_extra = 0; - /* - * spaces from the edge of the line an open brace sitting in the leftmost - * column is imagined to be - */ - int ind_open_left_imag = 0; + /* Spaces from the edge of the line an open brace sitting in the leftmost + * column is imagined to be. */ + buf->b_ind_open_left_imag = 0; - /* - * Spaces jump labels should be shifted to the left if N is non-negative, - * otherwise the jump label will be put to column 1. - */ - int ind_jump_label = -1; + /* Spaces jump labels should be shifted to the left if N is non-negative, + * otherwise the jump label will be put to column 1. */ + buf->b_ind_jump_label = -1; - /* - * spaces from the switch() indent a "case xx" label should be located - */ - int ind_case = sw; + /* Spaces from the switch() indent a "case xx" label should be located. */ + buf->b_ind_case = sw; - /* - * spaces from the "case xx:" code after a switch() should be located - */ - int ind_case_code = sw; + /* Spaces from the "case xx:" code after a switch() should be located. */ + buf->b_ind_case_code = sw; - /* - * lineup break at end of case in switch() with case label - */ - int ind_case_break = 0; + /* Lineup break at end of case in switch() with case label. */ + buf->b_ind_case_break = 0; - /* - * spaces from the class declaration indent a scope declaration label - * should be located - */ - int ind_scopedecl = sw; + /* Spaces from the class declaration indent a scope declaration label + * should be located. */ + buf->b_ind_scopedecl = sw; - /* - * spaces from the scope declaration label code should be located - */ - int ind_scopedecl_code = sw; + /* Spaces from the scope declaration label code should be located. */ + buf->b_ind_scopedecl_code = sw; - /* - * amount K&R-style parameters should be indented - */ - int ind_param = sw; + /* Amount K&R-style parameters should be indented. */ + buf->b_ind_param = sw; - /* - * amount a function type spec should be indented - */ - int ind_func_type = sw; + /* Amount a function type spec should be indented. */ + buf->b_ind_func_type = sw; - /* - * amount a cpp base class declaration or constructor initialization - * should be indented - */ - int ind_cpp_baseclass = sw; + /* Amount a cpp base class declaration or constructor initialization + * should be indented. */ + buf->b_ind_cpp_baseclass = sw; - /* - * additional spaces beyond the prevailing indent a continuation line - * should be located - */ - int ind_continuation = sw; + /* additional spaces beyond the prevailing indent a continuation line + * should be located. */ + buf->b_ind_continuation = sw; - /* - * spaces from the indent of the line with an unclosed parentheses - */ - int ind_unclosed = sw * 2; + /* Spaces from the indent of the line with an unclosed parentheses. */ + buf->b_ind_unclosed = sw * 2; - /* - * spaces from the indent of the line with an unclosed parentheses, which - * itself is also unclosed - */ - int ind_unclosed2 = sw; + /* Spaces from the indent of the line with an unclosed parentheses, which + * itself is also unclosed. */ + buf->b_ind_unclosed2 = sw; - /* - * suppress ignoring spaces from the indent of a line starting with an - * unclosed parentheses. - */ - int ind_unclosed_noignore = 0; + /* Suppress ignoring spaces from the indent of a line starting with an + * unclosed parentheses. */ + buf->b_ind_unclosed_noignore = 0; - /* - * If the opening paren is the last nonwhite character on the line, and - * ind_unclosed_wrapped is nonzero, use this indent relative to the outer - * context (for very long lines). - */ - int ind_unclosed_wrapped = 0; + /* If the opening paren is the last nonwhite character on the line, and + * b_ind_unclosed_wrapped is nonzero, use this indent relative to the outer + * context (for very long lines). */ + buf->b_ind_unclosed_wrapped = 0; - /* - * suppress ignoring white space when lining up with the character after - * an unclosed parentheses. - */ - int ind_unclosed_whiteok = 0; + /* Suppress ignoring white space when lining up with the character after + * an unclosed parentheses. */ + buf->b_ind_unclosed_whiteok = 0; - /* - * indent a closing parentheses under the line start of the matching - * opening parentheses. - */ - int ind_matching_paren = 0; + /* Indent a closing parentheses under the line start of the matching + * opening parentheses. */ + buf->b_ind_matching_paren = 0; - /* - * indent a closing parentheses under the previous line. - */ - int ind_paren_prev = 0; + /* Indent a closing parentheses under the previous line. */ + buf->b_ind_paren_prev = 0; - /* - * Extra indent for comments. - */ - int ind_comment = 0; + /* Extra indent for comments. */ + buf->b_ind_comment = 0; - /* - * spaces from the comment opener when there is nothing after it. - */ - int ind_in_comment = 3; + /* Spaces from the comment opener when there is nothing after it. */ + buf->b_ind_in_comment = 3; - /* - * boolean: if non-zero, use ind_in_comment even if there is something - * after the comment opener. - */ - int ind_in_comment2 = 0; + /* Boolean: if non-zero, use b_ind_in_comment even if there is something + * after the comment opener. */ + buf->b_ind_in_comment2 = 0; - /* - * max lines to search for an open paren - */ - int ind_maxparen = 20; + /* Max lines to search for an open paren. */ + buf->b_ind_maxparen = 20; - /* - * max lines to search for an open comment - */ - int ind_maxcomment = 70; + /* Max lines to search for an open comment. */ + buf->b_ind_maxcomment = 70; - /* - * handle braces for java code - */ - int ind_java = 0; + /* Handle braces for java code. */ + buf->b_ind_java = 0; - /* - * not to confuse JS object properties with labels - */ - int ind_js = 0; + /* Not to confuse JS object properties with labels. */ + buf->b_ind_js = 0; - /* - * handle blocked cases correctly - */ - int ind_keep_case_label = 0; + /* Handle blocked cases correctly. */ + buf->b_ind_keep_case_label = 0; - /* - * handle C++ namespace - */ - int ind_cpp_namespace = 0; + /* Handle C++ namespace. */ + buf->b_ind_cpp_namespace = 0; - /* - * handle continuation lines containing conditions of if(), for() and - * while() - */ - int ind_if_for_while = 0; + /* Handle continuation lines containing conditions of if(), for() and + * while(). */ + buf->b_ind_if_for_while = 0; + + for (p = buf->b_p_cino; *p; ) + { + l = p++; + if (*p == '-') + ++p; + digits = p; /* remember where the digits start */ + n = getdigits(&p); + divider = 0; + if (*p == '.') /* ".5s" means a fraction */ + { + fraction = atol((char *)++p); + while (VIM_ISDIGIT(*p)) + { + ++p; + if (divider) + divider *= 10; + else + divider = 10; + } + } + if (*p == 's') /* "2s" means two times 'shiftwidth' */ + { + if (p == digits) + n = sw; /* just "s" is one 'shiftwidth' */ + else + { + n *= sw; + if (divider) + n += (sw * fraction + divider / 2) / divider; + } + ++p; + } + if (l[1] == '-') + n = -n; + /* When adding an entry here, also update the default 'cinoptions' in + * doc/indent.txt, and add explanation for it! */ + switch (*l) + { + case '>': buf->b_ind_level = n; break; + case 'e': buf->b_ind_open_imag = n; break; + case 'n': buf->b_ind_no_brace = n; break; + case 'f': buf->b_ind_first_open = n; break; + case '{': buf->b_ind_open_extra = n; break; + case '}': buf->b_ind_close_extra = n; break; + case '^': buf->b_ind_open_left_imag = n; break; + case 'L': buf->b_ind_jump_label = n; break; + case ':': buf->b_ind_case = n; break; + case '=': buf->b_ind_case_code = n; break; + case 'b': buf->b_ind_case_break = n; break; + case 'p': buf->b_ind_param = n; break; + case 't': buf->b_ind_func_type = n; break; + case '/': buf->b_ind_comment = n; break; + case 'c': buf->b_ind_in_comment = n; break; + case 'C': buf->b_ind_in_comment2 = n; break; + case 'i': buf->b_ind_cpp_baseclass = n; break; + case '+': buf->b_ind_continuation = n; break; + case '(': buf->b_ind_unclosed = n; break; + case 'u': buf->b_ind_unclosed2 = n; break; + case 'U': buf->b_ind_unclosed_noignore = n; break; + case 'W': buf->b_ind_unclosed_wrapped = n; break; + case 'w': buf->b_ind_unclosed_whiteok = n; break; + case 'm': buf->b_ind_matching_paren = n; break; + case 'M': buf->b_ind_paren_prev = n; break; + case ')': buf->b_ind_maxparen = n; break; + case '*': buf->b_ind_maxcomment = n; break; + case 'g': buf->b_ind_scopedecl = n; break; + case 'h': buf->b_ind_scopedecl_code = n; break; + case 'j': buf->b_ind_java = n; break; + case 'J': buf->b_ind_js = n; break; + case 'l': buf->b_ind_keep_case_label = n; break; + case '#': buf->b_ind_hash_comment = n; break; + case 'N': buf->b_ind_cpp_namespace = n; break; + case 'k': buf->b_ind_if_for_while = n; break; + } + if (*p == ',') + ++p; + } +} + + int +get_c_indent() +{ pos_T cur_curpos; int amount; int scope_amount; @@ -6868,10 +6894,6 @@ get_c_indent() int whilelevel; linenr_T lnum; - char_u *options; - char_u *digits; - int fraction = 0; /* init for GCC */ - int divider; int n; int iscase; int lookfor_break; @@ -6880,83 +6902,8 @@ get_c_indent() int original_line_islabel; int added_to_amount = 0; - for (options = curbuf->b_p_cino; *options; ) - { - l = options++; - if (*options == '-') - ++options; - digits = options; /* remember where the digits start */ - n = getdigits(&options); - divider = 0; - if (*options == '.') /* ".5s" means a fraction */ - { - fraction = atol((char *)++options); - while (VIM_ISDIGIT(*options)) - { - ++options; - if (divider) - divider *= 10; - else - divider = 10; - } - } - if (*options == 's') /* "2s" means two times 'shiftwidth' */ - { - if (options == digits) - n = sw; /* just "s" is one 'shiftwidth' */ - else - { - n *= sw; - if (divider) - n += (sw * fraction + divider / 2) / divider; - } - ++options; - } - if (l[1] == '-') - n = -n; - /* When adding an entry here, also update the default 'cinoptions' in - * doc/indent.txt, and add explanation for it! */ - switch (*l) - { - case '>': ind_level = n; break; - case 'e': ind_open_imag = n; break; - case 'n': ind_no_brace = n; break; - case 'f': ind_first_open = n; break; - case '{': ind_open_extra = n; break; - case '}': ind_close_extra = n; break; - case '^': ind_open_left_imag = n; break; - case 'L': ind_jump_label = n; break; - case ':': ind_case = n; break; - case '=': ind_case_code = n; break; - case 'b': ind_case_break = n; break; - case 'p': ind_param = n; break; - case 't': ind_func_type = n; break; - case '/': ind_comment = n; break; - case 'c': ind_in_comment = n; break; - case 'C': ind_in_comment2 = n; break; - case 'i': ind_cpp_baseclass = n; break; - case '+': ind_continuation = n; break; - case '(': ind_unclosed = n; break; - case 'u': ind_unclosed2 = n; break; - case 'U': ind_unclosed_noignore = n; break; - case 'W': ind_unclosed_wrapped = n; break; - case 'w': ind_unclosed_whiteok = n; break; - case 'm': ind_matching_paren = n; break; - case 'M': ind_paren_prev = n; break; - case ')': ind_maxparen = n; break; - case '*': ind_maxcomment = n; break; - case 'g': ind_scopedecl = n; break; - case 'h': ind_scopedecl_code = n; break; - case 'j': ind_java = n; break; - case 'J': ind_js = n; break; - case 'l': ind_keep_case_label = n; break; - case '#': ind_hash_comment = n; break; - case 'N': ind_cpp_namespace = n; break; - case 'k': ind_if_for_while = n; break; - } - if (*options == ',') - ++options; - } + /* make a copy, value is changed below */ + int ind_continuation = curbuf->b_ind_continuation; /* remember where the cursor was when we started */ cur_curpos = curwin->w_cursor; @@ -6990,22 +6937,21 @@ get_c_indent() curwin->w_cursor.col = 0; - original_line_islabel = cin_islabel(ind_maxcomment); /* XXX */ + original_line_islabel = cin_islabel(curbuf->b_ind_maxcomment); /* XXX */ /* * #defines and so on always go at the left when included in 'cinkeys'. */ if (*theline == '#' && (*linecopy == '#' || in_cinkeys('#', ' ', TRUE))) - { - amount = 0; - } + amount = curbuf->b_ind_hash_comment; /* * Is it a non-case label? Then that goes at the left margin too unless: * - JS flag is set. * - 'L' item has a positive value. */ - else if (original_line_islabel && !ind_js && ind_jump_label < 0) + else if (original_line_islabel && !curbuf->b_ind_js + && curbuf->b_ind_jump_label < 0) { amount = 0; } @@ -7027,7 +6973,8 @@ get_c_indent() * comment, try using the 'comments' option. */ else if (!cin_iscomment(theline) - && (trypos = find_start_comment(ind_maxcomment)) != NULL) /* XXX */ + && (trypos = find_start_comment(curbuf->b_ind_maxcomment)) != NULL) + /* XXX */ { int lead_start_len = 2; int lead_middle_len = 1; @@ -7161,7 +7108,7 @@ get_c_indent() } if (amount == -1) /* use the comment opener */ { - if (!ind_in_comment2) + if (!curbuf->b_ind_in_comment2) { start = ml_get(trypos->lnum); look = start + trypos->col + 2; /* skip / and * */ @@ -7170,8 +7117,8 @@ get_c_indent() } getvcol(curwin, trypos, &col, NULL, NULL); amount = col; - if (ind_in_comment2 || *look == NUL) - amount += ind_in_comment; + if (curbuf->b_ind_in_comment2 || *look == NUL) + amount += curbuf->b_ind_in_comment; } } } @@ -7179,9 +7126,11 @@ get_c_indent() /* * Are we inside parentheses or braces? */ /* XXX */ - else if (((trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL - && ind_java == 0) - || (tryposBrace = find_start_brace(ind_maxcomment)) != NULL + 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) @@ -7202,7 +7151,7 @@ get_c_indent() * If the matching paren is more than one line away, use the indent of * a previous non-empty line that matches the same paren. */ - if (theline[0] == ')' && ind_paren_prev) + if (theline[0] == ')' && curbuf->b_ind_paren_prev) { /* Line up with the start of the matching paren line. */ amount = get_indent_lnum(curwin->w_cursor.lnum - 1); /* XXX */ @@ -7221,7 +7170,8 @@ get_c_indent() curwin->w_cursor.lnum = lnum; /* Skip a comment. XXX */ - if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) + != NULL) { lnum = trypos->lnum + 1; continue; @@ -7229,8 +7179,8 @@ get_c_indent() /* XXX */ if ((trypos = find_match_paren( - corr_ind_maxparen(ind_maxparen, &cur_curpos), - ind_maxcomment)) != NULL + 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) { @@ -7258,7 +7208,7 @@ get_c_indent() int ignore_paren_col = 0; int is_if_for_while = 0; - if (ind_if_for_while) + if (curbuf->b_ind_if_for_while) { /* Look for the outermost opening parenthesis on this line * and check whether it belongs to an "if", "for" or "while". */ @@ -7273,7 +7223,8 @@ get_c_indent() curwin->w_cursor.lnum = outermost.lnum; curwin->w_cursor.col = outermost.col; - trypos = find_match_paren(ind_maxparen, ind_maxcomment); + trypos = find_match_paren(curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment); } while (trypos && trypos->lnum == outermost.lnum); curwin->w_cursor = cursor_save; @@ -7284,7 +7235,8 @@ get_c_indent() cin_is_if_for_while_before_offset(line, &outermost.col); } - amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment); + amount = skip_label(our_paren_pos.lnum, &look, + curbuf->b_ind_maxcomment); look = skipwhite(look); if (*look == '(') { @@ -7298,7 +7250,8 @@ get_c_indent() line = ml_get_curline(); look_col = (int)(look - line); curwin->w_cursor.col = look_col + 1; - if ((trypos = findmatchlimit(NULL, ')', 0, ind_maxparen)) + if ((trypos = findmatchlimit(NULL, ')', 0, + curbuf->b_ind_maxparen)) != NULL && trypos->lnum == our_paren_pos.lnum && trypos->col < our_paren_pos.col) @@ -7307,24 +7260,25 @@ get_c_indent() curwin->w_cursor.lnum = save_lnum; look = ml_get(our_paren_pos.lnum) + look_col; } - if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0) - || (!ind_unclosed_noignore && *look == '(' + if (theline[0] == ')' || (curbuf->b_ind_unclosed == 0 + && is_if_for_while == 0) + || (!curbuf->b_ind_unclosed_noignore && *look == '(' && ignore_paren_col == 0)) { /* * If we're looking at a close paren, line up right there; * otherwise, line up with the next (non-white) character. - * When ind_unclosed_wrapped is set and the matching paren is + * When b_ind_unclosed_wrapped is set and the matching paren is * the last nonwhite character of the line, use either the * indent of the current line or the indentation of the next - * outer paren and add ind_unclosed_wrapped (for very long + * outer paren and add b_ind_unclosed_wrapped (for very long * lines). */ if (theline[0] != ')') { cur_amount = MAXCOL; l = ml_get(our_paren_pos.lnum); - if (ind_unclosed_wrapped + if (curbuf->b_ind_unclosed_wrapped && cin_ends_in(l, (char_u *)"(", NULL)) { /* look for opening unmatched paren, indent one level @@ -7346,9 +7300,9 @@ get_c_indent() } our_paren_pos.col = 0; - amount += n * ind_unclosed_wrapped; + amount += n * curbuf->b_ind_unclosed_wrapped; } - else if (ind_unclosed_whiteok) + else if (curbuf->b_ind_unclosed_whiteok) our_paren_pos.col++; else { @@ -7374,12 +7328,12 @@ get_c_indent() } } - if (theline[0] == ')' && ind_matching_paren) + if (theline[0] == ')' && curbuf->b_ind_matching_paren) { /* Line up with the start of the matching paren line. */ } - else if ((ind_unclosed == 0 && is_if_for_while == 0) - || (!ind_unclosed_noignore + else if ((curbuf->b_ind_unclosed == 0 && is_if_for_while == 0) + || (!curbuf->b_ind_unclosed_noignore && *look == '(' && ignore_paren_col == 0)) { if (cur_amount != MAXCOL) @@ -7387,39 +7341,40 @@ get_c_indent() } else { - /* Add ind_unclosed2 for each '(' before our matching one, but - * ignore (void) before the line (ignore_paren_col). */ + /* Add b_ind_unclosed2 for each '(' before our matching one, + * but ignore (void) before the line (ignore_paren_col). */ col = our_paren_pos.col; while ((int)our_paren_pos.col > ignore_paren_col) { --our_paren_pos.col; switch (*ml_get_pos(&our_paren_pos)) { - case '(': amount += ind_unclosed2; + case '(': amount += curbuf->b_ind_unclosed2; col = our_paren_pos.col; break; - case ')': amount -= ind_unclosed2; + case ')': amount -= curbuf->b_ind_unclosed2; col = MAXCOL; break; } } - /* Use ind_unclosed once, when the first '(' is not inside + /* Use b_ind_unclosed once, when the first '(' is not inside * braces */ if (col == MAXCOL) - amount += ind_unclosed; + amount += curbuf->b_ind_unclosed; else { curwin->w_cursor.lnum = our_paren_pos.lnum; curwin->w_cursor.col = col; - if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL) - amount += ind_unclosed2; + if (find_match_paren(curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment) != NULL) + amount += curbuf->b_ind_unclosed2; else { if (is_if_for_while) - amount += ind_if_for_while; + amount += curbuf->b_ind_if_for_while; else - amount += ind_unclosed; + amount += curbuf->b_ind_unclosed; } } /* @@ -7437,7 +7392,7 @@ get_c_indent() /* add extra indent for a comment */ if (cin_iscomment(theline)) - amount += ind_comment; + amount += curbuf->b_ind_comment; } /* @@ -7480,8 +7435,8 @@ get_c_indent() */ lnum = ourscope; if (find_last_paren(start, '(', ')') - && (trypos = find_match_paren(ind_maxparen, - ind_maxcomment)) != NULL) + && (trypos = find_match_paren(curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) != NULL) lnum = trypos->lnum; /* @@ -7490,11 +7445,11 @@ get_c_indent() * ldfd) { * } */ - if (ind_js || (ind_keep_case_label + if (curbuf->b_ind_js || (curbuf->b_ind_keep_case_label && cin_iscase(skipwhite(ml_get_curline()), FALSE))) amount = get_indent(); else - amount = skip_label(lnum, &l, ind_maxcomment); + amount = skip_label(lnum, &l, curbuf->b_ind_maxcomment); start_brace = BRACE_AT_END; } @@ -7510,7 +7465,7 @@ get_c_indent() * they may want closing braces to line up with something * other than the open brace. indulge them, if so. */ - amount += ind_close_extra; + amount += curbuf->b_ind_close_extra; } else { @@ -7523,14 +7478,14 @@ get_c_indent() lookfor = LOOKFOR_INITIAL; if (cin_iselse(theline)) lookfor = LOOKFOR_IF; - else if (cin_iswhileofdo(theline, cur_curpos.lnum, ind_maxparen)) - /* XXX */ + 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, ind_maxparen, - ind_maxcomment) == OK) + if (find_match(lookfor, ourscope, curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment) == OK) { amount = get_indent(); /* XXX */ goto theend; @@ -7547,12 +7502,12 @@ get_c_indent() /* * if the '{' is _really_ at the left margin, use the imaginary * location of a left-margin brace. Otherwise, correct the - * location for ind_open_extra. + * location for b_ind_open_extra. */ if (start_brace == BRACE_IN_COL0) /* '{' is in column 0 */ { - amount = ind_open_left_imag; + amount = curbuf->b_ind_open_left_imag; lookfor_cpp_namespace = TRUE; } else if (start_brace == BRACE_AT_START && @@ -7565,16 +7520,16 @@ get_c_indent() { if (start_brace == BRACE_AT_END) /* '{' is at end of line */ { - amount += ind_open_imag; + amount += curbuf->b_ind_open_imag; l = skipwhite(ml_get_curline()); if (cin_is_cpp_namespace(l)) - amount += ind_cpp_namespace; + amount += curbuf->b_ind_cpp_namespace; } else { - /* Compensate for adding ind_open_extra later. */ - amount -= ind_open_extra; + /* Compensate for adding b_ind_open_extra later. */ + amount -= curbuf->b_ind_open_extra; if (amount < 0) amount = 0; } @@ -7585,20 +7540,22 @@ get_c_indent() if (cin_iscase(theline, FALSE)) /* it's a switch() label */ { lookfor = LOOKFOR_CASE; /* find a previous switch() label */ - amount += ind_case; + amount += curbuf->b_ind_case; } else if (cin_isscopedecl(theline)) /* private:, ... */ { lookfor = LOOKFOR_SCOPEDECL; /* class decl is this block */ - amount += ind_scopedecl; + amount += curbuf->b_ind_scopedecl; } else { - if (ind_case_break && cin_isbreak(theline)) /* break; ... */ + if (curbuf->b_ind_case_break && cin_isbreak(theline)) + /* break; ... */ lookfor_break = TRUE; lookfor = LOOKFOR_INITIAL; - amount += ind_level; /* ind_level from start of block */ + /* b_ind_level from start of block */ + amount += curbuf->b_ind_level; } scope_amount = amount; whilelevel = 0; @@ -7636,14 +7593,14 @@ get_c_indent() { if (curwin->w_cursor.lnum == 0 || curwin->w_cursor.lnum - < ourscope - ind_maxparen) + < ourscope - curbuf->b_ind_maxparen) { - /* nothing found (abuse ind_maxparen as limit) - * assume terminated line (i.e. a variable + /* nothing found (abuse curbuf->b_ind_maxparen as + * limit) assume terminated line (i.e. a variable * initialization) */ if (cont_amount > 0) amount = cont_amount; - else if (!ind_js) + else if (!curbuf->b_ind_js) amount += ind_continuation; break; } @@ -7654,7 +7611,7 @@ get_c_indent() * If we're in a comment now, skip to the start of the * comment. */ - trypos = find_start_comment(ind_maxcomment); + trypos = find_start_comment(curbuf->b_ind_maxcomment); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; @@ -7680,7 +7637,8 @@ get_c_indent() */ if (start_brace != BRACE_IN_COL0 || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, - 0, ind_maxparen, ind_maxcomment)) + 0, curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) { /* if the line is terminated with another ',' * it is a continued variable initialization. @@ -7711,11 +7669,13 @@ get_c_indent() */ /* XXX */ trypos = NULL; if (find_last_paren(l, '(', ')')) - trypos = find_match_paren(ind_maxparen, - ind_maxcomment); + trypos = find_match_paren( + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment); if (trypos == NULL && find_last_paren(l, '{', '}')) - trypos = find_start_brace(ind_maxcomment); + trypos = find_start_brace( + curbuf->b_ind_maxcomment); if (trypos != NULL) { @@ -7750,8 +7710,8 @@ get_c_indent() amount = scope_amount; if (theline[0] == '{') { - amount += ind_open_extra; - added_to_amount = ind_open_extra; + amount += curbuf->b_ind_open_extra; + added_to_amount = curbuf->b_ind_open_extra; } } @@ -7773,7 +7733,8 @@ get_c_indent() /* If we're in a comment now, skip to the start of * the comment. */ - trypos = find_start_comment(ind_maxcomment); + trypos = find_start_comment( + curbuf->b_ind_maxcomment); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; @@ -7788,7 +7749,8 @@ get_c_indent() /* Finally the actual check for "namespace". */ if (cin_is_cpp_namespace(l)) { - amount += ind_cpp_namespace - added_to_amount; + amount += curbuf->b_ind_cpp_namespace + - added_to_amount; break; } @@ -7802,7 +7764,8 @@ get_c_indent() /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ - if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) + != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; @@ -7856,8 +7819,9 @@ get_c_indent() * Check that this case label is not for another * switch() */ /* XXX */ - if ((trypos = find_start_brace(ind_maxcomment)) == - NULL || trypos->lnum == ourscope) + if ((trypos = find_start_brace( + curbuf->b_ind_maxcomment)) == NULL + || trypos->lnum == ourscope) { amount = get_indent(); /* XXX */ break; @@ -7900,9 +7864,10 @@ get_c_indent() if (l != NULL && cin_is_cinword(l)) { if (theline[0] == '{') - amount += ind_open_extra; + amount += curbuf->b_ind_open_extra; else - amount += ind_level + ind_no_brace; + amount += curbuf->b_ind_level + + curbuf->b_ind_no_brace; } break; } @@ -7916,8 +7881,10 @@ get_c_indent() * -> y = 1; */ scope_amount = get_indent() + (iscase /* XXX */ - ? ind_case_code : ind_scopedecl_code); - lookfor = ind_case_break ? LOOKFOR_NOBREAK : LOOKFOR_ANY; + ? curbuf->b_ind_case_code + : curbuf->b_ind_scopedecl_code); + lookfor = curbuf->b_ind_case_break + ? LOOKFOR_NOBREAK : LOOKFOR_ANY; continue; } @@ -7928,7 +7895,7 @@ get_c_indent() if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) { if (find_last_paren(l, '{', '}') && (trypos = - find_start_brace(ind_maxcomment)) != NULL) + find_start_brace(curbuf->b_ind_maxcomment)) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; @@ -7939,7 +7906,7 @@ get_c_indent() /* * Ignore jump labels with nothing after them. */ - if (!ind_js && cin_islabel(ind_maxcomment)) + if (!curbuf->b_ind_js && cin_islabel(curbuf->b_ind_maxcomment)) { l = after_label(ml_get_curline()); if (l == NULL || cin_nocode(l)) @@ -7962,7 +7929,7 @@ get_c_indent() * constructor initialization? */ /* XXX */ n = FALSE; - if (lookfor != LOOKFOR_TERM && ind_cpp_baseclass > 0) + if (lookfor != LOOKFOR_TERM && curbuf->b_ind_cpp_baseclass > 0) { n = cin_is_cpp_baseclass(&col); l = ml_get_curline(); @@ -7985,8 +7952,10 @@ get_c_indent() } else /* XXX */ - amount = get_baseclass_amount(col, ind_maxparen, - ind_maxcomment, ind_cpp_baseclass); + 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) @@ -8029,8 +7998,8 @@ get_c_indent() */ (void)find_last_paren(l, '(', ')'); trypos = find_match_paren( - corr_ind_maxparen(ind_maxparen, &cur_curpos), - ind_maxcomment); + corr_ind_maxparen(curbuf->b_ind_maxparen, + &cur_curpos), curbuf->b_ind_maxcomment); /* * If we are looking for ',', we also look for matching @@ -8038,7 +8007,7 @@ get_c_indent() */ if (trypos == NULL && terminated == ',' && find_last_paren(l, '{', '}')) - trypos = find_start_brace(ind_maxcomment); + trypos = find_start_brace(curbuf->b_ind_maxcomment); if (trypos != NULL) { @@ -8081,9 +8050,9 @@ get_c_indent() * Get indent and pointer to text for current line, * ignoring any jump label. XXX */ - if (!ind_js) + if (!curbuf->b_ind_js) cur_amount = skip_label(curwin->w_cursor.lnum, - &l, ind_maxcomment); + &l, curbuf->b_ind_maxcomment); else cur_amount = get_indent(); /* @@ -8098,16 +8067,16 @@ get_c_indent() { amount = cur_amount; /* - * Only add ind_open_extra when the current line + * Only add b_ind_open_extra when the current line * doesn't start with a '{', which must have a match * in the same line (scope is the same). Probably: * { 1, 2 }, * -> { 3, 4 } */ if (*skipwhite(l) != '{') - amount += ind_open_extra; + amount += curbuf->b_ind_open_extra; - if (ind_cpp_baseclass) + if (curbuf->b_ind_cpp_baseclass) { /* have to look back, whether it is a cpp base * class declaration or initialization */ @@ -8155,10 +8124,11 @@ get_c_indent() */ amount = cur_amount; if (theline[0] == '{') - amount += ind_open_extra; + amount += curbuf->b_ind_open_extra; if (lookfor != LOOKFOR_TERM) { - amount += ind_level + ind_no_brace; + amount += curbuf->b_ind_level + + curbuf->b_ind_no_brace; break; } @@ -8192,10 +8162,11 @@ get_c_indent() curwin->w_cursor.col = (colnr_T)(l - ml_get_curline()) + 1; - if ((trypos = find_start_brace(ind_maxcomment)) - == NULL + if ((trypos = find_start_brace( + curbuf->b_ind_maxcomment)) == NULL || find_match(LOOKFOR_IF, trypos->lnum, - ind_maxparen, ind_maxcomment) == FAIL) + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment) == FAIL) break; } } @@ -8232,7 +8203,7 @@ get_c_indent() * enumerations/initializations. */ if (terminated == ',') { - if (ind_cpp_baseclass == 0) + if (curbuf->b_ind_cpp_baseclass == 0) break; lookfor = LOOKFOR_CPP_BASECLASS; @@ -8290,8 +8261,8 @@ get_c_indent() * If so: Ignore until the matching "do". */ /* XXX */ - else if (cin_iswhileofdo_end(terminated, ind_maxparen, - ind_maxcomment)) + else if (cin_iswhileofdo_end(terminated, curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) { /* * Found an unterminated line after a while ();, line up @@ -8315,7 +8286,7 @@ get_c_indent() lookfor = LOOKFOR_TERM; amount = get_indent(); /* XXX */ if (theline[0] == '{') - amount += ind_open_extra; + amount += curbuf->b_ind_open_extra; } ++whilelevel; } @@ -8408,8 +8379,9 @@ get_c_indent() term_again: l = ml_get_curline(); if (find_last_paren(l, '(', ')') - && (trypos = find_match_paren(ind_maxparen, - ind_maxcomment)) != NULL) + && (trypos = find_match_paren( + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) != NULL) { /* * Check if we are on a case label now. This is @@ -8436,21 +8408,22 @@ term_again: * stat; * } */ - iscase = (ind_keep_case_label && cin_iscase(l, FALSE)); + iscase = (curbuf->b_ind_keep_case_label + && cin_iscase(l, FALSE)); /* * Get indent and pointer to text for current line, * ignoring any jump label. */ amount = skip_label(curwin->w_cursor.lnum, - &l, ind_maxcomment); + &l, curbuf->b_ind_maxcomment); if (theline[0] == '{') - amount += ind_open_extra; - /* See remark above: "Only add ind_open_extra.." */ + amount += curbuf->b_ind_open_extra; + /* See remark above: "Only add b_ind_open_extra.." */ l = skipwhite(l); if (*l == '{') - amount -= ind_open_extra; + amount -= curbuf->b_ind_open_extra; lookfor = iscase ? LOOKFOR_ANY : LOOKFOR_TERM; /* @@ -8466,10 +8439,11 @@ term_again: && cin_iselse(l) && whilelevel == 0) { - if ((trypos = find_start_brace(ind_maxcomment)) - == NULL + if ((trypos = find_start_brace( + curbuf->b_ind_maxcomment)) == NULL || find_match(LOOKFOR_IF, trypos->lnum, - ind_maxparen, ind_maxcomment) == FAIL) + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment) == FAIL) break; continue; } @@ -8480,8 +8454,8 @@ term_again: */ l = ml_get_curline(); if (find_last_paren(l, '{', '}') - && (trypos = find_start_brace(ind_maxcomment)) - != NULL) /* XXX */ + && (trypos = find_start_brace( + curbuf->b_ind_maxcomment)) != NULL) /* XXX */ { curwin->w_cursor = *trypos; /* if not "else {" check for terminated again */ @@ -8500,11 +8474,11 @@ term_again: /* add extra indent for a comment */ if (cin_iscomment(theline)) - amount += ind_comment; + amount += curbuf->b_ind_comment; /* subtract extra left-shift for jump labels */ - if (ind_jump_label > 0 && original_line_islabel) - amount -= ind_jump_label; + if (curbuf->b_ind_jump_label > 0 && original_line_islabel) + amount -= curbuf->b_ind_jump_label; } /* @@ -8525,7 +8499,7 @@ term_again: if (theline[0] == '{') { - amount = ind_first_open; + amount = curbuf->b_ind_first_open; } /* @@ -8543,10 +8517,11 @@ term_again: && !cin_ends_in(theline, (char_u *)",", NULL) && cin_isfuncdecl(NULL, cur_curpos.lnum + 1, cur_curpos.lnum + 1, - ind_maxparen, ind_maxcomment) + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment) && !cin_isterminated(theline, FALSE, TRUE)) { - amount = ind_func_type; + amount = curbuf->b_ind_func_type; } else { @@ -8565,7 +8540,8 @@ term_again: /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ - if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + if ((trypos = find_start_comment( + curbuf->b_ind_maxcomment)) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; @@ -8577,7 +8553,7 @@ term_again: * constructor initialization? */ /* XXX */ n = FALSE; - if (ind_cpp_baseclass != 0 && theline[0] != '{') + if (curbuf->b_ind_cpp_baseclass != 0 && theline[0] != '{') { n = cin_is_cpp_baseclass(&col); l = ml_get_curline(); @@ -8585,8 +8561,9 @@ term_again: if (n) { /* XXX */ - amount = get_baseclass_amount(col, ind_maxparen, - ind_maxcomment, ind_cpp_baseclass); + amount = get_baseclass_amount(col, curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment, + curbuf->b_ind_cpp_baseclass); break; } @@ -8617,8 +8594,9 @@ term_again: { /* take us back to opening paren */ if (find_last_paren(l, '(', ')') - && (trypos = find_match_paren(ind_maxparen, - ind_maxcomment)) != NULL) + && (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 @@ -8650,7 +8628,8 @@ term_again: * not in a comment, put it the left margin. */ if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0, - ind_maxparen, ind_maxcomment)) /* XXX */ + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) /* XXX */ break; l = ml_get_curline(); @@ -8699,9 +8678,10 @@ term_again: * parameters. */ if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0, - ind_maxparen, ind_maxcomment)) + curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) { - amount = ind_param; + amount = curbuf->b_ind_param; break; } @@ -8730,8 +8710,8 @@ term_again: */ find_last_paren(l, '(', ')'); - if ((trypos = find_match_paren(ind_maxparen, - ind_maxcomment)) != NULL) + if ((trypos = find_match_paren(curbuf->b_ind_maxparen, + curbuf->b_ind_maxcomment)) != NULL) curwin->w_cursor = *trypos; amount = get_indent(); /* XXX */ break; @@ -8739,7 +8719,7 @@ term_again: /* add extra indent for a comment */ if (cin_iscomment(theline)) - amount += ind_comment; + amount += curbuf->b_ind_comment; /* add extra indent if the previous line ended in a backslash: * "asdfasdf\ |