static int cin_first_id_amount(void);
static int cin_get_equal_amount(linenr_T lnum);
static int cin_ispreproc(char_u *);
-static int cin_ispreproc_cont(char_u **pp, linenr_T *lnump);
static int cin_iscomment(char_u *);
static int cin_islinecomment(char_u *);
static int cin_isterminated(char_u *, int, int);
* Return TRUE if line "*pp" at "*lnump" is a preprocessor statement or a
* continuation line of a preprocessor statement. Decrease "*lnump" to the
* start and return the line in "*pp".
+ * Put the amount of indent in "*amount".
*/
static int
-cin_ispreproc_cont(char_u **pp, linenr_T *lnump)
+cin_ispreproc_cont(char_u **pp, linenr_T *lnump, int *amount)
{
char_u *line = *pp;
linenr_T lnum = *lnump;
int retval = FALSE;
+ int candidate_amount = *amount;
+
+ if (*line != NUL && line[STRLEN(line) - 1] == '\\')
+ candidate_amount = get_indent_lnum(lnum);
for (;;)
{
if (lnum != *lnump)
*pp = ml_get(*lnump);
+ if (retval)
+ *amount = candidate_amount;
return retval;
}
l = skipwhite(ml_get(lnum));
if (cin_nocode(l)) /* skip comment lines */
continue;
- if (cin_ispreproc_cont(&l, &lnum))
+ if (cin_ispreproc_cont(&l, &lnum, &amount))
continue; /* ignore #define, #if, etc. */
curwin->w_cursor.lnum = lnum;
*/
if (curwin->w_cursor.lnum <= ourscope)
{
- /* we reached end of scope:
- * if looking for a enum or structure initialization
+ /* We reached end of scope:
+ * If looking for a enum or structure initialization
* go further back:
- * if it is an initializer (enum xxx or xxx =), then
+ * If it is an initializer (enum xxx or xxx =), then
* don't add ind_continuation, otherwise it is a variable
* declaration:
* int x,
/*
* Skip preprocessor directives and blank lines.
*/
- if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum,
+ &amount))
continue;
if (cin_nocode(l))
}
/* Skip preprocessor directives and blank lines. */
- if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum,
+ &amount))
continue;
/* Finally the actual check for "namespace". */
* unlocked it)
*/
l = ml_get_curline();
- if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum)
+ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum, &amount)
|| cin_nocode(l))
continue;
/*
* Skip preprocessor directives and blank lines.
*/
- if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum, &amount))
continue;
if (cin_nocode(l))
{
look = ml_get(--curwin->w_cursor.lnum);
if (!(cin_nocode(look) || cin_ispreproc_cont(
- &look, &curwin->w_cursor.lnum)))
+ &look, &curwin->w_cursor.lnum, &amount)))
break;
}
if (curwin->w_cursor.lnum > 0