提交 db90bcf8 编写于 作者: B Bruce Momjian

Add more C comments to entab.c.

上级 25b1dafa
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
...@@ -88,6 +89,7 @@ main(int argc, char **argv) ...@@ -88,6 +89,7 @@ main(int argc, char **argv)
argv += optind; argv += optind;
argc -= optind; argc -= optind;
/* process arguments */
do do
{ {
if (argc < 1) if (argc < 1)
...@@ -104,6 +106,7 @@ main(int argc, char **argv) ...@@ -104,6 +106,7 @@ main(int argc, char **argv)
escaped = FALSE; escaped = FALSE;
/* process lines */
while (fgets(in_line, sizeof(in_line), in_file) != NULL) while (fgets(in_line, sizeof(in_line), in_file) != NULL)
{ {
col_in_tab = 0; col_in_tab = 0;
...@@ -114,9 +117,11 @@ main(int argc, char **argv) ...@@ -114,9 +117,11 @@ main(int argc, char **argv)
quote_char = ' '; quote_char = ' ';
escaped = FALSE; escaped = FALSE;
/* process line */
while (*src != NUL) while (*src != NUL)
{ {
col_in_tab++; col_in_tab++;
/* Is this a potential space/tab replacement? */
if (quote_char == ' ' && (*src == ' ' || *src == '\t')) if (quote_char == ' ' && (*src == ' ' || *src == '\t'))
{ {
if (*src == '\t') if (*src == '\t')
...@@ -127,22 +132,26 @@ main(int argc, char **argv) ...@@ -127,22 +132,26 @@ main(int argc, char **argv)
else else
prv_spaces++; prv_spaces++;
/* Are we at a tab stop? */
if (col_in_tab == tab_size) if (col_in_tab == tab_size)
{ {
/* /*
* Is the next character going to be a tab? Needed to * Is the next character going to be a tab? We do
* do tab replacement in current spot if next char is * tab replacement in the current spot if the next
* going to be a tab, ignoring min_spaces * char is going to be a tab and ignore min_spaces.
*/ */
nxt_spaces = 0; nxt_spaces = 0;
while (1) while (1)
{ {
/* Have we reached non-whitespace? */
if (*(src + nxt_spaces + 1) == NUL || if (*(src + nxt_spaces + 1) == NUL ||
(*(src + nxt_spaces + 1) != ' ' && (*(src + nxt_spaces + 1) != ' ' &&
*(src + nxt_spaces + 1) != '\t')) *(src + nxt_spaces + 1) != '\t'))
break; break;
/* count spaces */
if (*(src + nxt_spaces + 1) == ' ') if (*(src + nxt_spaces + 1) == ' ')
++nxt_spaces; ++nxt_spaces;
/* Have we found a forward tab? */
if (*(src + nxt_spaces + 1) == '\t' || if (*(src + nxt_spaces + 1) == '\t' ||
nxt_spaces == tab_size) nxt_spaces == tab_size)
{ {
...@@ -150,6 +159,7 @@ main(int argc, char **argv) ...@@ -150,6 +159,7 @@ main(int argc, char **argv)
break; break;
} }
} }
/* Do tab replacment for spaces? */
if ((prv_spaces >= min_spaces || if ((prv_spaces >= min_spaces ||
nxt_spaces == tab_size) && nxt_spaces == tab_size) &&
del_tabs == FALSE) del_tabs == FALSE)
...@@ -158,40 +168,51 @@ main(int argc, char **argv) ...@@ -158,40 +168,51 @@ main(int argc, char **argv)
prv_spaces = 0; prv_spaces = 0;
} }
else else
/* output accumulated spaces */
{ {
for (; prv_spaces > 0; prv_spaces--) for (; prv_spaces > 0; prv_spaces--)
*(dst++) = ' '; *(dst++) = ' ';
} }
} }
} }
/* Not a potential space/tab replacement */
else else
{ {
/* output accumulated spaces */
for (; prv_spaces > 0; prv_spaces--) for (; prv_spaces > 0; prv_spaces--)
*(dst++) = ' '; *(dst++) = ' ';
if (*src == '\t') /* only when in quote */ /* This can only happen in a quote. */
if (*src == '\t')
col_in_tab = 0; col_in_tab = 0;
/* visual backspace? */
if (*src == '\b') if (*src == '\b')
col_in_tab -= 2; col_in_tab -= 2;
/* Do we process quotes? */
if (escaped == FALSE && protect_quotes == TRUE) if (escaped == FALSE && protect_quotes == TRUE)
{ {
if (*src == '\\') if (*src == '\\')
escaped = TRUE; escaped = TRUE;
/* Is this a quote character? */
if (*src == '"' || *src == '\'') if (*src == '"' || *src == '\'')
{ {
/* toggle quote mode */
if (quote_char == ' ') if (quote_char == ' ')
quote_char = *src; quote_char = *src;
else if (*src == quote_char) else if (*src == quote_char)
quote_char = ' '; quote_char = ' ';
} }
} }
/* newlines/CRs do not terminate escapes */
else if (*src != '\r' && *src != '\n') else if (*src != '\r' && *src != '\n')
escaped = FALSE; escaped = FALSE;
/* reached newline/CR; clip line? */
if ((*src == '\r' || *src == '\n') && if ((*src == '\r' || *src == '\n') &&
quote_char == ' ' &&
clip_lines == TRUE && clip_lines == TRUE &&
quote_char == ' ' &&
escaped == FALSE) escaped == FALSE)
{ {
/* trim spaces starting from the end */
while (dst > out_line && while (dst > out_line &&
(*(dst - 1) == ' ' || *(dst - 1) == '\t')) (*(dst - 1) == ' ' || *(dst - 1) == '\t'))
dst--; dst--;
...@@ -210,9 +231,11 @@ main(int argc, char **argv) ...@@ -210,9 +231,11 @@ main(int argc, char **argv)
dst--; dst--;
prv_spaces = 0; prv_spaces = 0;
} }
/* output accumulated spaces */
for (; prv_spaces > 0; prv_spaces--) for (; prv_spaces > 0; prv_spaces--)
*(dst++) = ' '; *(dst++) = ' ';
*dst = NUL; *dst = NUL;
if (fputs(out_line, stdout) == EOF) if (fputs(out_line, stdout) == EOF)
{ {
fprintf(stderr, "Cannot write to output file %s: %s\n", argv[0], strerror(errno)); fprintf(stderr, "Cannot write to output file %s: %s\n", argv[0], strerror(errno));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册