diff --git a/7.4.069 b/7.4.069 new file mode 100644 index 0000000..ac52aff --- /dev/null +++ b/7.4.069 @@ -0,0 +1,2559 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.069 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.069 +Problem: Cannot right shift lines starting with #. +Solution: Allow the right shift when 'cino' contains #N with N > 0. + (Christian Brabandt) + Refactor parsing 'cino', store the values in the buffer. +Files: runtime/doc/indent.txt, src/buffer.c, src/edit.c, src/eval.c, + src/ex_getln.c, src/fold.c, src/misc1.c, src/ops.c, + src/proto/misc1.pro, src/proto/option.pro, src/structs.h, + src/option.c + + +*** ../vim-7.4.068/runtime/doc/indent.txt 2013-08-10 13:24:56.000000000 +0200 +--- runtime/doc/indent.txt 2013-11-05 07:10:56.000000000 +0100 +*************** +*** 545,554 **** + (default 70 lines). + + *cino-#* +! #N When N is non-zero recognize shell/Perl comments, starting with +! '#'. Default N is zero: don't recognize '#' comments. Note +! that lines starting with # will still be seen as preprocessor +! lines. + + + The defaults, spelled out in full, are: +--- 545,556 ---- + (default 70 lines). + + *cino-#* +! #N When N is non-zero recognize shell/Perl comments starting with +! '#', do not recognize preprocessor lines; allow right-shifting +! lines that start with "#". +! When N is zero (default): don't recognize '#' comments, do +! recognize preprocessor lines; right-shifting lines that start +! with "#" does not work. + + + The defaults, spelled out in full, are: +*************** +*** 556,562 **** + c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0 + + Vim puts a line in column 1 if: +! - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'. + - It starts with a label (a keyword followed by ':', other than "case" and + "default") and 'cinoptions' does not contain an 'L' entry with a positive + value. +--- 558,564 ---- + c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0 + + Vim puts a line in column 1 if: +! - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#0'. + - It starts with a label (a keyword followed by ':', other than "case" and + "default") and 'cinoptions' does not contain an 'L' entry with a positive + value. +*************** +*** 581,588 **** + + Clojure indentation differs somewhat from traditional Lisps, due in part to + the use of square and curly brackets, and otherwise by community convention. +! These conventions are not always universally followed, so the Clojure indent +! script offers a few configurable options, listed below. + + If the current vim does not include searchpairpos(), the indent script falls + back to normal 'lisp' indenting, and the following options are ignored. +--- 583,590 ---- + + Clojure indentation differs somewhat from traditional Lisps, due in part to + the use of square and curly brackets, and otherwise by community convention. +! These conventions are not universally followed, so the Clojure indent script +! offers a few configurable options, listed below. + + If the current vim does not include searchpairpos(), the indent script falls + back to normal 'lisp' indenting, and the following options are ignored. +*** ../vim-7.4.068/src/buffer.c 2013-11-02 04:39:34.000000000 +0100 +--- src/buffer.c 2013-11-05 06:18:54.000000000 +0100 +*************** +*** 211,217 **** +--- 211,220 ---- + + /* if first time loading this buffer, init b_chartab[] */ + if (curbuf->b_flags & BF_NEVERLOADED) ++ { + (void)buf_init_chartab(curbuf, FALSE); ++ parse_cino(curbuf); ++ } + + /* + * Set/reset the Changed flag first, autocmds may change the buffer. +*** ../vim-7.4.068/src/edit.c 2013-11-04 04:20:28.000000000 +0100 +--- src/edit.c 2013-11-05 06:12:45.000000000 +0100 +*************** +*** 8958,8964 **** + + *inserted_space_p = FALSE; + if (p_sta && in_indent) +! ts = (int)get_sw_value(); + else + ts = (int)get_sts_value(); + /* Compute the virtual column where we want to be. Since +--- 8958,8964 ---- + + *inserted_space_p = FALSE; + if (p_sta && in_indent) +! ts = (int)get_sw_value(curbuf); + else + ts = (int)get_sts_value(); + /* Compute the virtual column where we want to be. Since +*************** +*** 9647,9653 **** + * When nothing special, insert TAB like a normal character + */ + if (!curbuf->b_p_et +! && !(p_sta && ind && curbuf->b_p_ts != get_sw_value()) + && get_sts_value() == 0) + return TRUE; + +--- 9647,9653 ---- + * When nothing special, insert TAB like a normal character + */ + if (!curbuf->b_p_et +! && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf)) + && get_sts_value() == 0) + return TRUE; + +*************** +*** 9663,9669 **** + AppendToRedobuff((char_u *)"\t"); + + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ +! temp = (int)get_sw_value(); + else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */ + temp = (int)get_sts_value(); + else /* otherwise use 'tabstop' */ +--- 9663,9669 ---- + AppendToRedobuff((char_u *)"\t"); + + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ +! temp = (int)get_sw_value(curbuf); + else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */ + temp = (int)get_sts_value(); + else /* otherwise use 'tabstop' */ +*** ../vim-7.4.068/src/eval.c 2013-11-02 23:29:17.000000000 +0100 +--- src/eval.c 2013-11-05 06:12:49.000000000 +0100 +*************** +*** 16934,16940 **** + typval_T *argvars UNUSED; + typval_T *rettv; + { +! rettv->vval.v_number = get_sw_value(); + } + + /* +--- 16934,16940 ---- + typval_T *argvars UNUSED; + typval_T *rettv; + { +! rettv->vval.v_number = get_sw_value(curbuf); + } + + /* +*** ../vim-7.4.068/src/ex_getln.c 2013-07-05 19:44:21.000000000 +0200 +--- src/ex_getln.c 2013-11-05 06:12:57.000000000 +0100 +*************** +*** 2280,2286 **** + + if (c1 == Ctrl_T) + { +! long sw = get_sw_value(); + + p = (char_u *)line_ga.ga_data; + p[line_ga.ga_len] = NUL; +--- 2280,2286 ---- + + if (c1 == Ctrl_T) + { +! long sw = get_sw_value(curbuf); + + p = (char_u *)line_ga.ga_data; + p[line_ga.ga_len] = NUL; +*************** +*** 2337,2343 **** + p[line_ga.ga_len] = NUL; + indent = get_indent_str(p, 8); + --indent; +! indent -= indent % get_sw_value(); + } + while (get_indent_str(p, 8) > indent) + { +--- 2337,2343 ---- + p[line_ga.ga_len] = NUL; + indent = get_indent_str(p, 8); + --indent; +! indent -= indent % get_sw_value(curbuf); + } + while (get_indent_str(p, 8) > indent) + { +*************** +*** 4178,4184 **** + /* + * Prepare a string for expansion. + * When expanding file names: The string will be used with expand_wildcards(). +! * Copy the file name into allocated memory and add a '*' at the end. + * When expanding other names: The string will be used with regcomp(). Copy + * the name into allocated memory and prepend "^". + */ +--- 4178,4184 ---- + /* + * Prepare a string for expansion. + * When expanding file names: The string will be used with expand_wildcards(). +! * Copy "fname[len]" into allocated memory and add a '*' at the end. + * When expanding other names: The string will be used with regcomp(). Copy + * the name into allocated memory and prepend "^". + */ +*** ../vim-7.4.068/src/fold.c 2013-06-15 16:57:24.000000000 +0200 +--- src/fold.c 2013-11-05 06:13:03.000000000 +0100 +*************** +*** 3052,3058 **** + flp->lvl = -1; + } + else +! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(); + if (flp->lvl > flp->wp->w_p_fdn) + { + flp->lvl = flp->wp->w_p_fdn; +--- 3052,3058 ---- + flp->lvl = -1; + } + else +! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(curbuf); + if (flp->lvl > flp->wp->w_p_fdn) + { + flp->lvl = flp->wp->w_p_fdn; +*** ../vim-7.4.068/src/misc1.c 2013-11-04 02:53:46.000000000 +0100 +--- src/misc1.c 2013-11-05 06:45:15.000000000 +0100 +*************** +*** 1405,1411 **** + #ifdef FEAT_SMARTINDENT + if (did_si) + { +! int sw = (int)get_sw_value(); + + if (p_sr) + newindent -= newindent % sw; +--- 1405,1411 ---- + #ifdef FEAT_SMARTINDENT + if (did_si) + { +! int sw = (int)get_sw_value(curbuf); + + if (p_sr) + newindent -= newindent % sw; +*************** +*** 5342,5349 **** + 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. +--- 5342,5347 ---- +*************** +*** 5360,5366 **** + + /* Perl/shell # comment comment continues until eol. Require a space + * before # to avoid recognizing $#array. */ +! if (ind_hash_comment != 0 && s != prev_s && *s == '#') + { + s += STRLEN(s); + break; +--- 5358,5364 ---- + + /* Perl/shell # comment comment continues until eol. Require a space + * before # to avoid recognizing $#array. */ +! if (curbuf->b_ind_hash_comment != 0 && s != prev_s && *s == '#') + { + s += STRLEN(s); + break; +*************** +*** 6639,6839 **** + return retval; + } + +! int +! get_c_indent() + { +! int sw = (int)get_sw_value(); + + /* +! * spaces from a block's opening brace the prevailing indent for that +! * block should be + */ + +! 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. +! */ +! int ind_open_imag = 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; + +! /* +! * spaces from the prevailing indent a leftmost open brace should be +! * located +! */ +! int ind_open_extra = 0; + +! /* +! * 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; + +! /* +! * 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 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 from the switch() indent a "case xx" label should be located +! */ +! int ind_case = sw; + +! /* +! * spaces from the "case xx:" code after a switch() should be located +! */ +! int ind_case_code = sw; + +! /* +! * lineup break at end of case in switch() with case label +! */ +! int ind_case_break = 0; + +! /* +! * spaces from the class declaration indent a scope declaration label +! * should be located +! */ +! int ind_scopedecl = sw; + +! /* +! * spaces from the scope declaration label code should be located +! */ +! int ind_scopedecl_code = sw; + +! /* +! * amount K&R-style parameters should be indented +! */ +! int ind_param = sw; + +! /* +! * amount a function type spec should be indented +! */ +! int ind_func_type = sw; + +! /* +! * amount a cpp base class declaration or constructor initialization +! * should be indented +! */ +! int ind_cpp_baseclass = sw; + +! /* +! * additional spaces beyond the prevailing indent a continuation line +! * should be located +! */ +! int 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, which +! * itself is also unclosed +! */ +! int ind_unclosed2 = sw; + +! /* +! * suppress ignoring spaces from the indent of a line starting with an +! * unclosed parentheses. +! */ +! int 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; + +! /* +! * suppress ignoring white space when lining up with the character after +! * an unclosed parentheses. +! */ +! int 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 previous line. +! */ +! int ind_paren_prev = 0; + +! /* +! * Extra indent for comments. +! */ +! int ind_comment = 0; + +! /* +! * spaces from the comment opener when there is nothing after it. +! */ +! int 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; + +! /* +! * max lines to search for an open paren +! */ +! int ind_maxparen = 20; + +! /* +! * max lines to search for an open comment +! */ +! int ind_maxcomment = 70; + +! /* +! * handle braces for java code +! */ +! int ind_java = 0; + +! /* +! * not to confuse JS object properties with labels +! */ +! int ind_js = 0; + +! /* +! * handle blocked cases correctly +! */ +! int ind_keep_case_label = 0; + +! /* +! * handle C++ namespace +! */ +! int ind_cpp_namespace = 0; + +! /* +! * handle continuation lines containing conditions of if(), for() and +! * while() +! */ +! int ind_if_for_while = 0; + + pos_T cur_curpos; + int amount; + int scope_amount; +--- 6637,6865 ---- + return retval; + } + +! /* +! * 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; + { +! char_u *p; +! char_u *l; +! char_u *digits; +! int n; +! int divider; +! int fraction = 0; +! int sw = (int)get_sw_value(buf); + + /* +! * Set the default values. + */ ++ /* Spaces from a block's opening brace the prevailing indent for that ++ * block should be. */ ++ buf->b_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 prevailing indent for a line that is not preceded by +! * an opening brace. */ +! buf->b_ind_no_brace = 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. */ +! buf->b_ind_open_extra = 0; + +! /* 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. */ +! 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. */ +! 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. */ +! buf->b_ind_jump_label = -1; + +! /* 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. */ +! buf->b_ind_case_code = sw; + +! /* 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. */ +! buf->b_ind_scopedecl = 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. */ +! buf->b_ind_param = 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. */ +! buf->b_ind_cpp_baseclass = 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. */ +! buf->b_ind_unclosed = sw * 2; + +! /* 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. */ +! buf->b_ind_unclosed_noignore = 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. */ +! buf->b_ind_unclosed_whiteok = 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. */ +! buf->b_ind_paren_prev = 0; + +! /* Extra indent for comments. */ +! buf->b_ind_comment = 0; + +! /* Spaces from the comment opener when there is nothing after it. */ +! buf->b_ind_in_comment = 3; + +! /* 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. */ +! buf->b_ind_maxparen = 20; + +! /* Max lines to search for an open comment. */ +! buf->b_ind_maxcomment = 70; + +! /* Handle braces for java code. */ +! buf->b_ind_java = 0; + +! /* Not to confuse JS object properties with labels. */ +! buf->b_ind_js = 0; + +! /* Handle blocked cases correctly. */ +! buf->b_ind_keep_case_label = 0; + +! /* Handle C++ namespace. */ +! buf->b_ind_cpp_namespace = 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,6877 **** + + 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; +--- 6894,6899 ---- +*************** +*** 6880,6962 **** + 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; +! } + + /* remember where the cursor was when we started */ + cur_curpos = curwin->w_cursor; +--- 6902,6909 ---- + int original_line_islabel; + int added_to_amount = 0; + +! /* 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,7011 **** + + curwin->w_cursor.col = 0; + +! original_line_islabel = cin_islabel(ind_maxcomment); /* XXX */ + + /* + * #defines and so on always go at the left when included in 'cinkeys'. + */ + if (*theline == '#' && (*linecopy == '#' || in_cinkeys('#', ' ', TRUE))) +! { +! amount = 0; +! } + + /* + * 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) + { + amount = 0; + } +--- 6937,6957 ---- + + 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'. + */ + if (*theline == '#' && (*linecopy == '#' || in_cinkeys('#', ' ', TRUE))) +! 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 && !curbuf->b_ind_js +! && curbuf->b_ind_jump_label < 0) + { + amount = 0; + } +*************** +*** 7027,7033 **** + * comment, try using the 'comments' option. + */ + else if (!cin_iscomment(theline) +! && (trypos = find_start_comment(ind_maxcomment)) != NULL) /* XXX */ + { + int lead_start_len = 2; + int lead_middle_len = 1; +--- 6973,6980 ---- + * 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; + int lead_middle_len = 1; +*************** +*** 7161,7167 **** + } + if (amount == -1) /* use the comment opener */ + { +! if (!ind_in_comment2) + { + start = ml_get(trypos->lnum); + look = start + trypos->col + 2; /* skip / and * */ +--- 7108,7114 ---- + } + if (amount == -1) /* use the comment opener */ + { +! if (!curbuf->b_ind_in_comment2) + { + start = ml_get(trypos->lnum); + look = start + trypos->col + 2; /* skip / and * */ +*************** +*** 7170,7177 **** + } + getvcol(curwin, trypos, &col, NULL, NULL); + amount = col; +! if (ind_in_comment2 || *look == NUL) +! amount += ind_in_comment; + } + } + } +--- 7117,7124 ---- + } + getvcol(curwin, trypos, &col, NULL, NULL); + amount = col; +! if (curbuf->b_ind_in_comment2 || *look == NUL) +! amount += curbuf->b_ind_in_comment; + } + } + } +*************** +*** 7179,7187 **** + /* + * 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 + || trypos != NULL) + { + if (trypos != NULL && tryposBrace != NULL) +--- 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) +*************** +*** 7202,7208 **** + * 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) + { + /* Line up with the start of the matching paren line. */ + amount = get_indent_lnum(curwin->w_cursor.lnum - 1); /* XXX */ +--- 7151,7157 ---- + * 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] == ')' && 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,7227 **** + curwin->w_cursor.lnum = lnum; + + /* Skip a comment. XXX */ +! if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + { + lnum = trypos->lnum + 1; + continue; +--- 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; +*************** +*** 7229,7236 **** + + /* XXX */ + if ((trypos = find_match_paren( +! corr_ind_maxparen(ind_maxparen, &cur_curpos), +! ind_maxcomment)) != NULL + && trypos->lnum == our_paren_pos.lnum + && trypos->col == our_paren_pos.col) + { +--- 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) + { +*************** +*** 7258,7264 **** + int ignore_paren_col = 0; + int is_if_for_while = 0; + +! if (ind_if_for_while) + { + /* Look for the outermost opening parenthesis on this line + * and check whether it belongs to an "if", "for" or "while". */ +--- 7208,7214 ---- + int ignore_paren_col = 0; + int is_if_for_while = 0; + +! 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,7279 **** + curwin->w_cursor.lnum = outermost.lnum; + curwin->w_cursor.col = outermost.col; + +! trypos = find_match_paren(ind_maxparen, ind_maxcomment); + } while (trypos && trypos->lnum == outermost.lnum); + + curwin->w_cursor = cursor_save; +--- 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; +*************** +*** 7284,7290 **** + cin_is_if_for_while_before_offset(line, &outermost.col); + } + +! amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment); + look = skipwhite(look); + if (*look == '(') + { +--- 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 == '(') + { +*************** +*** 7298,7304 **** + line = ml_get_curline(); + look_col = (int)(look - line); + curwin->w_cursor.col = look_col + 1; +! if ((trypos = findmatchlimit(NULL, ')', 0, ind_maxparen)) + != NULL + && trypos->lnum == our_paren_pos.lnum + && trypos->col < our_paren_pos.col) +--- 7250,7257 ---- + line = ml_get_curline(); + look_col = (int)(look - line); + curwin->w_cursor.col = look_col + 1; +! if ((trypos = findmatchlimit(NULL, ')', 0, +! curbuf->b_ind_maxparen)) + != NULL + && trypos->lnum == our_paren_pos.lnum + && trypos->col < our_paren_pos.col) +*************** +*** 7307,7330 **** + 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 == '(' + && 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 + * 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 + * lines). + */ + if (theline[0] != ')') + { + cur_amount = MAXCOL; + l = ml_get(our_paren_pos.lnum); +! if (ind_unclosed_wrapped + && cin_ends_in(l, (char_u *)"(", NULL)) + { + /* look for opening unmatched paren, indent one level +--- 7260,7284 ---- + curwin->w_cursor.lnum = save_lnum; + look = ml_get(our_paren_pos.lnum) + look_col; + } +! 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 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 b_ind_unclosed_wrapped (for very long + * lines). + */ + if (theline[0] != ')') + { + cur_amount = MAXCOL; + l = ml_get(our_paren_pos.lnum); +! if (curbuf->b_ind_unclosed_wrapped + && cin_ends_in(l, (char_u *)"(", NULL)) + { + /* look for opening unmatched paren, indent one level +*************** +*** 7346,7354 **** + } + + our_paren_pos.col = 0; +! amount += n * ind_unclosed_wrapped; + } +! else if (ind_unclosed_whiteok) + our_paren_pos.col++; + else + { +--- 7300,7308 ---- + } + + our_paren_pos.col = 0; +! amount += n * curbuf->b_ind_unclosed_wrapped; + } +! else if (curbuf->b_ind_unclosed_whiteok) + our_paren_pos.col++; + else + { +*************** +*** 7374,7385 **** + } + } + +! if (theline[0] == ')' && 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 + && *look == '(' && ignore_paren_col == 0)) + { + if (cur_amount != MAXCOL) +--- 7328,7339 ---- + } + } + +! if (theline[0] == ')' && curbuf->b_ind_matching_paren) + { + /* Line up with the start of the matching paren line. */ + } +! 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,7425 **** + } + else + { +! /* Add 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; + col = our_paren_pos.col; + break; +! case ')': amount -= ind_unclosed2; + col = MAXCOL; + break; + } + } + +! /* Use ind_unclosed once, when the first '(' is not inside + * braces */ + if (col == MAXCOL) +! amount += 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; + else + { + if (is_if_for_while) +! amount += ind_if_for_while; + else +! amount += ind_unclosed; + } + } + /* +--- 7341,7380 ---- + } + else + { +! /* 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 += curbuf->b_ind_unclosed2; + col = our_paren_pos.col; + break; +! case ')': amount -= curbuf->b_ind_unclosed2; + col = MAXCOL; + break; + } + } + +! /* Use b_ind_unclosed once, when the first '(' is not inside + * braces */ + if (col == MAXCOL) +! amount += curbuf->b_ind_unclosed; + else + { + 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 + { + if (is_if_for_while) +! amount += curbuf->b_ind_if_for_while; + else +! amount += curbuf->b_ind_unclosed; + } + } + /* +*************** +*** 7437,7443 **** + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += ind_comment; + } + + /* +--- 7392,7398 ---- + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += curbuf->b_ind_comment; + } + + /* +*************** +*** 7480,7487 **** + */ + lnum = ourscope; + if (find_last_paren(start, '(', ')') +! && (trypos = find_match_paren(ind_maxparen, +! ind_maxcomment)) != NULL) + lnum = trypos->lnum; + + /* +--- 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; + + /* +*************** +*** 7490,7500 **** + * ldfd) { + * } + */ +! if (ind_js || (ind_keep_case_label + && cin_iscase(skipwhite(ml_get_curline()), FALSE))) + amount = get_indent(); + else +! amount = skip_label(lnum, &l, ind_maxcomment); + + start_brace = BRACE_AT_END; + } +--- 7445,7455 ---- + * ldfd) { + * } + */ +! 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, curbuf->b_ind_maxcomment); + + start_brace = BRACE_AT_END; + } +*************** +*** 7510,7516 **** + * they may want closing braces to line up with something + * other than the open brace. indulge them, if so. + */ +! amount += ind_close_extra; + } + else + { +--- 7465,7471 ---- + * they may want closing braces to line up with something + * other than the open brace. indulge them, if so. + */ +! amount += curbuf->b_ind_close_extra; + } + else + { +*************** +*** 7523,7536 **** + lookfor = LOOKFOR_INITIAL; + if (cin_iselse(theline)) + lookfor = LOOKFOR_IF; +! else if (cin_iswhileofdo(theline, cur_curpos.lnum, 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) + { + amount = get_indent(); /* XXX */ + goto theend; +--- 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; +*************** +*** 7547,7558 **** + /* + * 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. + */ + + if (start_brace == BRACE_IN_COL0) /* '{' is in column 0 */ + { +! amount = ind_open_left_imag; + lookfor_cpp_namespace = TRUE; + } + else if (start_brace == BRACE_AT_START && +--- 7502,7513 ---- + /* + * if the '{' is _really_ at the left margin, use the imaginary + * location of a left-margin brace. Otherwise, correct the +! * location for b_ind_open_extra. + */ + + if (start_brace == BRACE_IN_COL0) /* '{' is in column 0 */ + { +! amount = curbuf->b_ind_open_left_imag; + lookfor_cpp_namespace = TRUE; + } + else if (start_brace == BRACE_AT_START && +*************** +*** 7565,7580 **** + { + if (start_brace == BRACE_AT_END) /* '{' is at end of line */ + { +! amount += ind_open_imag; + + l = skipwhite(ml_get_curline()); + if (cin_is_cpp_namespace(l)) +! amount += ind_cpp_namespace; + } + else + { +! /* Compensate for adding ind_open_extra later. */ +! amount -= ind_open_extra; + if (amount < 0) + amount = 0; + } +--- 7520,7535 ---- + { + if (start_brace == BRACE_AT_END) /* '{' is at end of line */ + { +! amount += curbuf->b_ind_open_imag; + + l = skipwhite(ml_get_curline()); + if (cin_is_cpp_namespace(l)) +! amount += curbuf->b_ind_cpp_namespace; + } + else + { +! /* Compensate for adding b_ind_open_extra later. */ +! amount -= curbuf->b_ind_open_extra; + if (amount < 0) + amount = 0; + } +*************** +*** 7585,7604 **** + if (cin_iscase(theline, FALSE)) /* it's a switch() label */ + { + lookfor = LOOKFOR_CASE; /* find a previous switch() label */ +! amount += ind_case; + } + else if (cin_isscopedecl(theline)) /* private:, ... */ + { + lookfor = LOOKFOR_SCOPEDECL; /* class decl is this block */ +! amount += ind_scopedecl; + } + else + { +! if (ind_case_break && cin_isbreak(theline)) /* break; ... */ + lookfor_break = TRUE; + + lookfor = LOOKFOR_INITIAL; +! amount += ind_level; /* ind_level from start of block */ + } + scope_amount = amount; + whilelevel = 0; +--- 7540,7561 ---- + if (cin_iscase(theline, FALSE)) /* it's a switch() label */ + { + lookfor = LOOKFOR_CASE; /* find a previous switch() label */ +! amount += curbuf->b_ind_case; + } + else if (cin_isscopedecl(theline)) /* private:, ... */ + { + lookfor = LOOKFOR_SCOPEDECL; /* class decl is this block */ +! amount += curbuf->b_ind_scopedecl; + } + else + { +! if (curbuf->b_ind_case_break && cin_isbreak(theline)) +! /* break; ... */ + lookfor_break = TRUE; + + lookfor = LOOKFOR_INITIAL; +! /* b_ind_level from start of block */ +! amount += curbuf->b_ind_level; + } + scope_amount = amount; + whilelevel = 0; +*************** +*** 7636,7649 **** + { + if (curwin->w_cursor.lnum == 0 + || curwin->w_cursor.lnum +! < ourscope - ind_maxparen) + { +! /* nothing found (abuse ind_maxparen as limit) +! * assume terminated line (i.e. a variable + * initialization) */ + if (cont_amount > 0) + amount = cont_amount; +! else if (!ind_js) + amount += ind_continuation; + break; + } +--- 7593,7606 ---- + { + if (curwin->w_cursor.lnum == 0 + || curwin->w_cursor.lnum +! < ourscope - curbuf->b_ind_maxparen) + { +! /* 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 (!curbuf->b_ind_js) + amount += ind_continuation; + break; + } +*************** +*** 7654,7660 **** + * If we're in a comment now, skip to the start of the + * comment. + */ +! trypos = find_start_comment(ind_maxcomment); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +--- 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; +*************** +*** 7680,7686 **** + */ + if (start_brace != BRACE_IN_COL0 + || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, +! 0, ind_maxparen, ind_maxcomment)) + { + /* if the line is terminated with another ',' + * it is a continued variable initialization. +--- 7637,7644 ---- + */ + 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. +*************** +*** 7711,7721 **** + */ /* XXX */ + trypos = NULL; + if (find_last_paren(l, '(', ')')) +! trypos = find_match_paren(ind_maxparen, +! ind_maxcomment); + + if (trypos == NULL && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(ind_maxcomment); + + if (trypos != NULL) + { +--- 7669,7681 ---- + */ /* XXX */ + 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) + { +*************** +*** 7750,7757 **** + amount = scope_amount; + if (theline[0] == '{') + { +! amount += ind_open_extra; +! added_to_amount = ind_open_extra; + } + } + +--- 7710,7717 ---- + amount = scope_amount; + if (theline[0] == '{') + { +! amount += curbuf->b_ind_open_extra; +! added_to_amount = curbuf->b_ind_open_extra; + } + } + +*************** +*** 7773,7779 **** + + /* If we're in a comment now, skip to the start of + * the comment. */ +! trypos = find_start_comment(ind_maxcomment); + if (trypos != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; +--- 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; +*************** +*** 7788,7794 **** + /* Finally the actual check for "namespace". */ + if (cin_is_cpp_namespace(l)) + { +! amount += ind_cpp_namespace - added_to_amount; + break; + } + +--- 7749,7756 ---- + /* Finally the actual check for "namespace". */ + if (cin_is_cpp_namespace(l)) + { +! amount += curbuf->b_ind_cpp_namespace +! - added_to_amount; + break; + } + +*************** +*** 7802,7808 **** + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 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; +*************** +*** 7856,7863 **** + * Check that this case label is not for another + * switch() + */ /* XXX */ +! if ((trypos = find_start_brace(ind_maxcomment)) == +! NULL || trypos->lnum == ourscope) + { + amount = get_indent(); /* XXX */ + break; +--- 7819,7827 ---- + * 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 */ + break; +*************** +*** 7900,7908 **** + if (l != NULL && cin_is_cinword(l)) + { + if (theline[0] == '{') +! amount += ind_open_extra; + else +! amount += ind_level + ind_no_brace; + } + break; + } +--- 7864,7873 ---- + if (l != NULL && cin_is_cinword(l)) + { + if (theline[0] == '{') +! amount += curbuf->b_ind_open_extra; + else +! amount += curbuf->b_ind_level +! + curbuf->b_ind_no_brace; + } + break; + } +*************** +*** 7916,7923 **** + * -> y = 1; + */ + scope_amount = get_indent() + (iscase /* XXX */ +! ? ind_case_code : ind_scopedecl_code); +! lookfor = ind_case_break ? LOOKFOR_NOBREAK : LOOKFOR_ANY; + continue; + } + +--- 7881,7890 ---- + * -> y = 1; + */ + scope_amount = get_indent() + (iscase /* XXX */ +! ? curbuf->b_ind_case_code +! : curbuf->b_ind_scopedecl_code); +! lookfor = curbuf->b_ind_case_break +! ? LOOKFOR_NOBREAK : LOOKFOR_ANY; + continue; + } + +*************** +*** 7928,7934 **** + if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) + { + if (find_last_paren(l, '{', '}') && (trypos = +! find_start_brace(ind_maxcomment)) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 7895,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; +*************** +*** 7939,7945 **** + /* + * Ignore jump labels with nothing after them. + */ +! if (!ind_js && cin_islabel(ind_maxcomment)) + { + l = after_label(ml_get_curline()); + if (l == NULL || cin_nocode(l)) +--- 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)) +*************** +*** 7962,7968 **** + * constructor initialization? + */ /* XXX */ + n = FALSE; +! if (lookfor != LOOKFOR_TERM && ind_cpp_baseclass > 0) + { + n = cin_is_cpp_baseclass(&col); + l = ml_get_curline(); +--- 7929,7935 ---- + * constructor initialization? + */ /* XXX */ + n = FALSE; +! if (lookfor != LOOKFOR_TERM && curbuf->b_ind_cpp_baseclass > 0) + { + n = cin_is_cpp_baseclass(&col); + l = ml_get_curline(); +*************** +*** 7985,7992 **** + } + else + /* XXX */ +! amount = get_baseclass_amount(col, ind_maxparen, +! ind_maxcomment, ind_cpp_baseclass); + break; + } + else if (lookfor == LOOKFOR_CPP_BASECLASS) +--- 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) +*************** +*** 8029,8036 **** + */ + (void)find_last_paren(l, '(', ')'); + trypos = find_match_paren( +! corr_ind_maxparen(ind_maxparen, &cur_curpos), +! ind_maxcomment); + + /* + * If we are looking for ',', we also look for matching +--- 7998,8005 ---- + */ + (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 +*************** +*** 8038,8044 **** + */ + if (trypos == NULL && terminated == ',' + && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(ind_maxcomment); + + if (trypos != NULL) + { +--- 8007,8013 ---- + */ + if (trypos == NULL && terminated == ',' + && find_last_paren(l, '{', '}')) +! trypos = find_start_brace(curbuf->b_ind_maxcomment); + + if (trypos != NULL) + { +*************** +*** 8081,8089 **** + * Get indent and pointer to text for current line, + * ignoring any jump label. XXX + */ +! if (!ind_js) + cur_amount = skip_label(curwin->w_cursor.lnum, +! &l, ind_maxcomment); + else + cur_amount = get_indent(); + /* +--- 8050,8058 ---- + * Get indent and pointer to text for current line, + * 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(); + /* +*************** +*** 8098,8113 **** + { + amount = cur_amount; + /* +! * Only add 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; + +! if (ind_cpp_baseclass) + { + /* have to look back, whether it is a cpp base + * class declaration or initialization */ +--- 8067,8082 ---- + { + amount = cur_amount; + /* +! * 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 += curbuf->b_ind_open_extra; + +! if (curbuf->b_ind_cpp_baseclass) + { + /* have to look back, whether it is a cpp base + * class declaration or initialization */ +*************** +*** 8155,8164 **** + */ + amount = cur_amount; + if (theline[0] == '{') +! amount += ind_open_extra; + if (lookfor != LOOKFOR_TERM) + { +! amount += ind_level + ind_no_brace; + break; + } + +--- 8124,8134 ---- + */ + amount = cur_amount; + if (theline[0] == '{') +! amount += curbuf->b_ind_open_extra; + if (lookfor != LOOKFOR_TERM) + { +! amount += curbuf->b_ind_level +! + curbuf->b_ind_no_brace; + break; + } + +*************** +*** 8192,8201 **** + curwin->w_cursor.col = + (colnr_T)(l - ml_get_curline()) + 1; + +! if ((trypos = find_start_brace(ind_maxcomment)) +! == NULL + || find_match(LOOKFOR_IF, trypos->lnum, +! ind_maxparen, ind_maxcomment) == FAIL) + break; + } + } +--- 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; + } + } +*************** +*** 8232,8238 **** + * enumerations/initializations. */ + if (terminated == ',') + { +! if (ind_cpp_baseclass == 0) + break; + + lookfor = LOOKFOR_CPP_BASECLASS; +--- 8203,8209 ---- + * enumerations/initializations. */ + if (terminated == ',') + { +! if (curbuf->b_ind_cpp_baseclass == 0) + break; + + lookfor = LOOKFOR_CPP_BASECLASS; +*************** +*** 8290,8297 **** + * If so: Ignore until the matching "do". + */ + /* XXX */ +! else if (cin_iswhileofdo_end(terminated, ind_maxparen, +! ind_maxcomment)) + { + /* + * Found an unterminated line after a while ();, line up +--- 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 +*************** +*** 8315,8321 **** + lookfor = LOOKFOR_TERM; + amount = get_indent(); /* XXX */ + if (theline[0] == '{') +! amount += ind_open_extra; + } + ++whilelevel; + } +--- 8286,8292 ---- + lookfor = LOOKFOR_TERM; + amount = get_indent(); /* XXX */ + if (theline[0] == '{') +! amount += curbuf->b_ind_open_extra; + } + ++whilelevel; + } +*************** +*** 8408,8415 **** + term_again: + l = ml_get_curline(); + if (find_last_paren(l, '(', ')') +! && (trypos = find_match_paren(ind_maxparen, +! ind_maxcomment)) != NULL) + { + /* + * Check if we are on a case label now. This is +--- 8379,8387 ---- + term_again: + 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 +*************** +*** 8436,8456 **** + * stat; + * } + */ +! iscase = (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); + + if (theline[0] == '{') +! amount += ind_open_extra; +! /* See remark above: "Only add ind_open_extra.." */ + l = skipwhite(l); + if (*l == '{') +! amount -= ind_open_extra; + lookfor = iscase ? LOOKFOR_ANY : LOOKFOR_TERM; + + /* +--- 8408,8429 ---- + * stat; + * } + */ +! 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, curbuf->b_ind_maxcomment); + + if (theline[0] == '{') +! amount += curbuf->b_ind_open_extra; +! /* See remark above: "Only add b_ind_open_extra.." */ + l = skipwhite(l); + if (*l == '{') +! amount -= curbuf->b_ind_open_extra; + lookfor = iscase ? LOOKFOR_ANY : LOOKFOR_TERM; + + /* +*************** +*** 8466,8475 **** + && cin_iselse(l) + && whilelevel == 0) + { +! if ((trypos = find_start_brace(ind_maxcomment)) +! == NULL + || find_match(LOOKFOR_IF, trypos->lnum, +! ind_maxparen, ind_maxcomment) == FAIL) + break; + continue; + } +--- 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; + } +*************** +*** 8480,8487 **** + */ + l = ml_get_curline(); + if (find_last_paren(l, '{', '}') +! && (trypos = find_start_brace(ind_maxcomment)) +! != NULL) /* XXX */ + { + curwin->w_cursor = *trypos; + /* if not "else {" check for terminated again */ +--- 8454,8461 ---- + */ + 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 */ +*************** +*** 8500,8510 **** + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += ind_comment; + + /* subtract extra left-shift for jump labels */ +! if (ind_jump_label > 0 && original_line_islabel) +! amount -= ind_jump_label; + } + + /* +--- 8474,8484 ---- + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += curbuf->b_ind_comment; + + /* subtract extra left-shift for jump labels */ +! if (curbuf->b_ind_jump_label > 0 && original_line_islabel) +! amount -= curbuf->b_ind_jump_label; + } + + /* +*************** +*** 8525,8531 **** + + if (theline[0] == '{') + { +! amount = ind_first_open; + } + + /* +--- 8499,8505 ---- + + if (theline[0] == '{') + { +! amount = curbuf->b_ind_first_open; + } + + /* +*************** +*** 8543,8552 **** + && !cin_ends_in(theline, (char_u *)",", NULL) + && cin_isfuncdecl(NULL, cur_curpos.lnum + 1, + cur_curpos.lnum + 1, +! ind_maxparen, ind_maxcomment) + && !cin_isterminated(theline, FALSE, TRUE)) + { +! amount = ind_func_type; + } + else + { +--- 8517,8527 ---- + && !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; + } + else + { +*************** +*** 8565,8571 **** + /* + * If we're in a comment now, skip to the start of the comment. + */ /* XXX */ +! if ((trypos = find_start_comment(ind_maxcomment)) != NULL) + { + curwin->w_cursor.lnum = trypos->lnum + 1; + curwin->w_cursor.col = 0; +--- 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; +*************** +*** 8577,8583 **** + * constructor initialization? + */ /* XXX */ + n = FALSE; +! if (ind_cpp_baseclass != 0 && theline[0] != '{') + { + n = cin_is_cpp_baseclass(&col); + l = ml_get_curline(); +--- 8553,8559 ---- + * constructor initialization? + */ /* XXX */ + n = FALSE; +! if (curbuf->b_ind_cpp_baseclass != 0 && theline[0] != '{') + { + n = cin_is_cpp_baseclass(&col); + l = ml_get_curline(); +*************** +*** 8585,8592 **** + if (n) + { + /* XXX */ +! amount = get_baseclass_amount(col, ind_maxparen, +! ind_maxcomment, ind_cpp_baseclass); + break; + } + +--- 8561,8569 ---- + if (n) + { + /* XXX */ +! amount = get_baseclass_amount(col, curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment, +! curbuf->b_ind_cpp_baseclass); + break; + } + +*************** +*** 8617,8624 **** + { + /* take us back to opening paren */ + if (find_last_paren(l, '(', ')') +! && (trypos = find_match_paren(ind_maxparen, +! ind_maxcomment)) != NULL) + curwin->w_cursor = *trypos; + + /* For a line ending in ',' that is a continuation line go +--- 8594,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 +*************** +*** 8650,8656 **** + * not in a comment, put it the left margin. + */ + if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0, +! ind_maxparen, ind_maxcomment)) /* XXX */ + break; + l = ml_get_curline(); + +--- 8628,8635 ---- + * 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(); + +*************** +*** 8699,8707 **** + * parameters. + */ + if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0, +! ind_maxparen, ind_maxcomment)) + { +! amount = ind_param; + break; + } + +--- 8678,8687 ---- + * parameters. + */ + if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0, +! curbuf->b_ind_maxparen, +! curbuf->b_ind_maxcomment)) + { +! amount = curbuf->b_ind_param; + break; + } + +*************** +*** 8730,8737 **** + */ + find_last_paren(l, '(', ')'); + +! if ((trypos = find_match_paren(ind_maxparen, +! ind_maxcomment)) != NULL) + curwin->w_cursor = *trypos; + amount = get_indent(); /* XXX */ + 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; +*************** +*** 8739,8745 **** + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += ind_comment; + + /* add extra indent if the previous line ended in a backslash: + * "asdfasdf\ +--- 8719,8725 ---- + + /* add extra indent for a comment */ + if (cin_iscomment(theline)) +! amount += curbuf->b_ind_comment; + + /* add extra indent if the previous line ended in a backslash: + * "asdfasdf\ +*** ../vim-7.4.068/src/ops.c 2013-11-04 01:41:11.000000000 +0100 +--- src/ops.c 2013-11-05 06:13:27.000000000 +0100 +*************** +*** 336,342 **** + { + int count; + int i, j; +! int p_sw = (int)get_sw_value(); + + count = get_indent(); /* get current indent */ + +--- 336,342 ---- + { + int count; + int i, j; +! int p_sw = (int)get_sw_value(curbuf); + + count = get_indent(); /* get current indent */ + +*************** +*** 392,398 **** + int total; + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; +! int p_sw = (int)get_sw_value(); + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; + int incr; +--- 392,398 ---- + int total; + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; +! int p_sw = (int)get_sw_value(curbuf); + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; + int incr; +*************** +*** 4046,4052 **** + # endif + # endif + # ifdef FEAT_CINDENT +! (curbuf->b_p_cin && in_cinkeys('#', ' ', TRUE)) + # endif + ; + } +--- 4046,4053 ---- + # endif + # endif + # ifdef FEAT_CINDENT +! (curbuf->b_p_cin && in_cinkeys('#', ' ', TRUE) +! && curbuf->b_ind_hash_comment == 0) + # endif + ; + } +*** ../vim-7.4.068/src/proto/misc1.pro 2013-11-04 02:53:46.000000000 +0100 +--- src/proto/misc1.pro 2013-11-05 06:08:46.000000000 +0100 +*************** +*** 84,89 **** +--- 84,90 ---- + 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)); + int get_c_indent __ARGS((void)); + int get_expr_indent __ARGS((void)); + int get_lisp_indent __ARGS((void)); +*** ../vim-7.4.068/src/proto/option.pro 2013-08-10 13:37:22.000000000 +0200 +--- src/proto/option.pro 2013-11-05 06:14:46.000000000 +0100 +*************** +*** 59,65 **** + void save_file_ff __ARGS((buf_T *buf)); + int file_ff_differs __ARGS((buf_T *buf, int ignore_empty)); + 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 : */ +--- 59,65 ---- + void save_file_ff __ARGS((buf_T *buf)); + int file_ff_differs __ARGS((buf_T *buf, int ignore_empty)); + int check_ff_value __ARGS((char_u *p)); +! long get_sw_value __ARGS((buf_T *buf)); + 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.4.068/src/structs.h 2013-07-03 15:35:59.000000000 +0200 +--- src/structs.h 2013-11-05 05:08:26.000000000 +0100 +*************** +*** 1633,1638 **** +--- 1633,1677 ---- + + /* end of buffer options */ + ++ #ifdef FEAT_CINDENT ++ /* values set from b_p_cino */ ++ int b_ind_level; ++ int b_ind_open_imag; ++ int b_ind_no_brace; ++ int b_ind_first_open; ++ int b_ind_open_extra; ++ int b_ind_close_extra; ++ int b_ind_open_left_imag; ++ int b_ind_jump_label; ++ int b_ind_case; ++ int b_ind_case_code; ++ int b_ind_case_break; ++ int b_ind_param; ++ int b_ind_func_type; ++ int b_ind_comment; ++ int b_ind_in_comment; ++ int b_ind_in_comment2; ++ int b_ind_cpp_baseclass; ++ int b_ind_continuation; ++ int b_ind_unclosed; ++ int b_ind_unclosed2; ++ int b_ind_unclosed_noignore; ++ int b_ind_unclosed_wrapped; ++ int b_ind_unclosed_whiteok; ++ int b_ind_matching_paren; ++ int b_ind_paren_prev; ++ int b_ind_maxparen; ++ int b_ind_maxcomment; ++ int b_ind_scopedecl; ++ int b_ind_scopedecl_code; ++ int b_ind_java; ++ int b_ind_js; ++ int b_ind_keep_case_label; ++ int b_ind_hash_comment; ++ int b_ind_cpp_namespace; ++ int b_ind_if_for_while; ++ #endif ++ + linenr_T b_no_eol_lnum; /* non-zero lnum when last line of next binary + * write should not have an end-of-line */ + +*** ../vim-7.4.068/src/option.c 2013-07-17 21:39:13.000000000 +0200 +--- src/option.c 2013-11-05 06:58:04.000000000 +0100 +*************** +*** 5372,5377 **** +--- 5372,5378 ---- + #ifdef FEAT_CINDENT + check_string_option(&buf->b_p_cink); + check_string_option(&buf->b_p_cino); ++ parse_cino(buf); + #endif + #ifdef FEAT_AUTOCMD + check_string_option(&buf->b_p_ft); +*************** +*** 6990,6995 **** +--- 6991,7005 ---- + } + #endif + ++ #ifdef FEAT_CINDENT ++ /* 'cinoptions' */ ++ else if (gvarp == &p_cino) ++ { ++ /* TODO: recognize errors */ ++ parse_cino(curbuf); ++ } ++ #endif ++ + /* Options that are a list of flags. */ + else + { +*************** +*** 8338,8351 **** + curwin->w_p_fdc = 12; + } + } + + /* 'shiftwidth' or 'tabstop' */ + else if (pp == &curbuf->b_p_sw || pp == &curbuf->b_p_ts) + { + if (foldmethodIsIndent(curwin)) + foldUpdateAll(curwin); + } +! #endif /* FEAT_FOLDING */ + + #ifdef FEAT_MBYTE + /* 'maxcombine' */ +--- 8348,8371 ---- + curwin->w_p_fdc = 12; + } + } ++ #endif /* FEAT_FOLDING */ + ++ #if defined(FEAT_FOLDING) || defined(FEAT_CINDENT) + /* 'shiftwidth' or 'tabstop' */ + else if (pp == &curbuf->b_p_sw || pp == &curbuf->b_p_ts) + { ++ # ifdef FEAT_FOLDING + if (foldmethodIsIndent(curwin)) + foldUpdateAll(curwin); ++ # endif ++ # ifdef FEAT_CINDENT ++ /* When 'shiftwidth' changes, or it's zero and 'tabstop' changes: ++ * parse 'cinoptions'. */ ++ if (pp == &curbuf->b_p_sw || curbuf->b_p_sw == 0) ++ parse_cino(curbuf); ++ # endif + } +! #endif + + #ifdef FEAT_MBYTE + /* 'maxcombine' */ +*************** +*** 11729,11737 **** + * 'tabstop' value when 'shiftwidth' is zero. + */ + long +! get_sw_value() + { +! return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts; + } + + /* +--- 11749,11758 ---- + * 'tabstop' value when 'shiftwidth' is zero. + */ + long +! get_sw_value(buf) +! buf_T *buf; + { +! return buf->b_p_sw ? buf->b_p_sw : buf->b_p_ts; + } + + /* +*************** +*** 11741,11747 **** + long + get_sts_value() + { +! return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts; + } + + /* +--- 11762,11768 ---- + long + get_sts_value() + { +! return curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts; + } + + /* +*** ../vim-7.4.068/src/version.c 2013-11-04 04:57:46.000000000 +0100 +--- src/version.c 2013-11-05 04:55:36.000000000 +0100 +*************** +*** 740,741 **** +--- 740,743 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 69, + /**/ + +-- +A special cleaning ordinance bans housewives from hiding dirt and dust under a +rug in a dwelling. + [real standing law in Pennsylvania, 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 ///