Fix problems with non-8 space tabs. New options for function
declarations with the opening brace on the same line as the declaration of arguments all spaces and no tabs (a feature which exists in GNU's indent). Man page update to follow RSN. PR: bin/67983 Submitted by: Chip Norkus <wd@teleri.net> Style guidance and bug for bug compatibility by: bde MFC after: 2 weeks
This commit is contained in:
parent
d900c38411
commit
e3625e9c22
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=131184
@ -111,6 +111,7 @@ struct pro {
|
||||
{"eei", PRO_BOOL, false, ON, &extra_expression_indent},
|
||||
{"ei", PRO_BOOL, true, ON, &ps.else_if},
|
||||
{"fbc", PRO_FONT, 0, 0, (int *) &blkcomf},
|
||||
{"fbs", PRO_BOOL, true, ON, &function_brace_split},
|
||||
{"fbx", PRO_FONT, 0, 0, (int *) &boxcomf},
|
||||
{"fb", PRO_FONT, 0, 0, (int *) &bodyf},
|
||||
{"fc1", PRO_BOOL, true, ON, &format_col1_comments},
|
||||
@ -136,6 +137,7 @@ struct pro {
|
||||
{"ndj", PRO_BOOL, false, OFF, &ps.ljust_decl},
|
||||
{"neei", PRO_BOOL, false, OFF, &extra_expression_indent},
|
||||
{"nei", PRO_BOOL, true, OFF, &ps.else_if},
|
||||
{"nfbs", PRO_BOOL, true, OFF, &function_brace_split},
|
||||
{"nfc1", PRO_BOOL, true, OFF, &format_col1_comments},
|
||||
{"nfcb", PRO_BOOL, true, OFF, &format_block_comments},
|
||||
{"nip", PRO_BOOL, true, OFF, &ps.indent_parameters},
|
||||
@ -146,6 +148,7 @@ struct pro {
|
||||
{"nps", PRO_BOOL, false, OFF, &pointer_as_binop},
|
||||
{"nsc", PRO_BOOL, true, OFF, &star_comment_cont},
|
||||
{"nsob", PRO_BOOL, false, OFF, &swallow_optional_blanklines},
|
||||
{"nut", PRO_BOOL, true, OFF, &use_tabs},
|
||||
{"nv", PRO_BOOL, false, OFF, &verbose},
|
||||
{"pcs", PRO_BOOL, false, ON, &proc_calls_space},
|
||||
{"psl", PRO_BOOL, true, ON, &procnames_start_line},
|
||||
@ -154,6 +157,7 @@ struct pro {
|
||||
{"sob", PRO_BOOL, false, ON, &swallow_optional_blanklines},
|
||||
{"st", PRO_SPECIAL, 0, STDIN, 0},
|
||||
{"troff", PRO_BOOL, false, ON, &troff},
|
||||
{"ut", PRO_BOOL, true, ON, &use_tabs},
|
||||
{"v", PRO_BOOL, false, ON, &verbose},
|
||||
/* whew! */
|
||||
{0, 0, 0, 0, 0}
|
||||
|
@ -83,7 +83,7 @@ main(int argc, char **argv)
|
||||
int force_nl; /* when true, code must be broken */
|
||||
int hd_type = 0; /* used to store type of stmt for if (...),
|
||||
* for (...), etc */
|
||||
int i; /* local loop counter */
|
||||
int i; /* local loop counter */
|
||||
int scase; /* set to true when we see a case, so we will
|
||||
* know what to do with the following colon */
|
||||
int sp_sw; /* when true, we are in the expression of
|
||||
@ -91,8 +91,8 @@ main(int argc, char **argv)
|
||||
int squest; /* when this is positive, we have seen a ?
|
||||
* without the matching : in a <c>?<s>:<s>
|
||||
* construct */
|
||||
int use_tabs; /* true if using tabs to indent to var name */
|
||||
const char *t_ptr; /* used for copying tokens */
|
||||
int tabs_to_var; /* true if using tabs to indent to var name */
|
||||
int type_code; /* the type of token, returned by lexi */
|
||||
|
||||
int last_else = 0; /* true iff last keyword was an else */
|
||||
@ -765,8 +765,12 @@ main(int argc, char **argv)
|
||||
}
|
||||
else if (ps.in_parameter_declaration && !ps.in_or_st) {
|
||||
ps.i_l_follow = 0;
|
||||
dump_line();
|
||||
ps.want_blank = false;
|
||||
if (function_brace_split) { /* dump the line prior to the
|
||||
* brace ... */
|
||||
dump_line();
|
||||
ps.want_blank = false;
|
||||
} else /* add a space between the decl and brace */
|
||||
ps.want_blank = true;
|
||||
}
|
||||
}
|
||||
if (ps.in_parameter_declaration)
|
||||
@ -914,11 +918,11 @@ main(int argc, char **argv)
|
||||
if (ps.ind_level == 0 || ps.dec_nest > 0) {
|
||||
/* global variable or struct member in local variable */
|
||||
dec_ind = ps.decl_indent > 0 ? ps.decl_indent : i;
|
||||
use_tabs = ps.decl_indent > 0;
|
||||
tabs_to_var = (use_tabs ? ps.decl_indent > 0 : 0);
|
||||
} else {
|
||||
/* local variable */
|
||||
dec_ind = ps.local_decl_indent > 0 ? ps.local_decl_indent : i;
|
||||
use_tabs = ps.local_decl_indent > 0;
|
||||
tabs_to_var = (use_tabs ? ps.local_decl_indent > 0 : 0);
|
||||
}
|
||||
goto copy_id;
|
||||
|
||||
@ -935,18 +939,34 @@ main(int argc, char **argv)
|
||||
ps.dumped_decl_indent = 1;
|
||||
e_code += strlen(e_code);
|
||||
} else {
|
||||
int cur_dec_ind;
|
||||
int pos, startpos;
|
||||
|
||||
/*
|
||||
* in order to get the tab math right for
|
||||
* indentations that are not multiples of 8 we
|
||||
* need to modify both startpos and dec_ind
|
||||
* (cur_dec_ind) here by eight minus the
|
||||
* remainder of the current starting column
|
||||
* divided by eight. This seems to be a
|
||||
* properly working fix
|
||||
*/
|
||||
startpos = e_code - s_code;
|
||||
cur_dec_ind = dec_ind;
|
||||
pos = startpos;
|
||||
if (use_tabs) {
|
||||
while ((pos & ~7) + 8 <= dec_ind) {
|
||||
if ((ps.ind_level * ps.ind_size) % 8 != 0) {
|
||||
pos += (ps.ind_level * ps.ind_size) % 8;
|
||||
cur_dec_ind += (ps.ind_level * ps.ind_size) % 8;
|
||||
}
|
||||
|
||||
if (tabs_to_var) {
|
||||
while ((pos & ~7) + 8 <= cur_dec_ind) {
|
||||
CHECK_SIZE_CODE;
|
||||
*e_code++ = '\t';
|
||||
pos = (pos & ~7) + 8;
|
||||
}
|
||||
}
|
||||
while (pos < dec_ind) {
|
||||
while (pos < cur_dec_ind) {
|
||||
CHECK_SIZE_CODE;
|
||||
*e_code++ = ' ';
|
||||
pos++;
|
||||
|
@ -193,12 +193,16 @@ int blanklines_after_declarations_at_proctop; /* This is vaguely
|
||||
* if there are no
|
||||
* declarations */
|
||||
int block_comment_max_col;
|
||||
int extra_expression_indent; /* True if continuation lines from the
|
||||
int extra_expression_indent; /* true if continuation lines from the
|
||||
* expression part of "if(e)",
|
||||
* "while(e)", "for(e;e;e)" should be
|
||||
* indented an extra tab stop so that
|
||||
* they don't conflict with the code
|
||||
* that follows */
|
||||
int function_brace_split; /* split function declaration and
|
||||
* brace onto separate lines */
|
||||
int use_tabs; /* set true to use tabs for spacing,
|
||||
* false uses all spaces */
|
||||
|
||||
/* -troff font state information */
|
||||
|
||||
|
@ -472,11 +472,13 @@ pad_output(int current, int target)
|
||||
if (current >= target)
|
||||
return (current); /* line is already long enough */
|
||||
curr = current;
|
||||
while ((tcur = ((curr - 1) & tabmask) + tabsize + 1) <= target) {
|
||||
putc('\t', output);
|
||||
curr = tcur;
|
||||
}
|
||||
while (curr++ < target)
|
||||
if (use_tabs) {
|
||||
while ((tcur = ((curr - 1) & tabmask) + tabsize + 1) <= target) {
|
||||
putc('\t', output);
|
||||
curr = tcur;
|
||||
}
|
||||
}
|
||||
while (curr++ < target)
|
||||
putc(' ', output); /* pad with final blanks */
|
||||
}
|
||||
return (target);
|
||||
|
Loading…
Reference in New Issue
Block a user