From 0c82822ca0b5cc0445f218d1c719ca6bbe560031 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Wed, 17 Oct 2001 02:53:57 +0000 Subject: [PATCH] (put_char): New function. (read_c_string_or_comment): Strip trailing spaces and newlines. --- lib-src/make-docfile.c | 56 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index cfa7878d6f5..8a74de40301 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -198,6 +198,42 @@ scan_file (filename) char buf[128]; +/* Add CH to either outfile, if PRINTFLAG is positive, or to the buffer + whose end is pointed to by BUFP, if PRINTFLAG is negative. + If the counters pointed to by PENDING_NEWLINES and PENDING_SPACES are + non-zero, that many newlines and spaces are output before CH, and + the counters are zeroed. */ + +static INLINE void +put_char (ch, printflag, bufp, pending_newlines, pending_spaces) + int ch, printflag; + char **bufp; + unsigned *pending_newlines, *pending_spaces; +{ + int out_ch; + do + { + if (*pending_newlines > 0) + { + (*pending_newlines)--; + out_ch = '\n'; + } + else if (*pending_spaces > 0) + { + (*pending_spaces)--; + out_ch = ' '; + } + else + out_ch = ch; + + if (printflag > 0) + putc (out_ch, outfile); + else if (printflag < 0) + *(*bufp)++ = out_ch; + } + while (out_ch != ch); +} + /* Skip a C string or C-style comment from INFILE, and return the character that follows. COMMENT non-zero means skip a comment. If PRINTFLAG is positive, output string contents to outfile. If it is @@ -210,6 +246,7 @@ read_c_string_or_comment (infile, printflag, comment) int printflag; { register int c; + unsigned pending_spaces = 0, pending_newlines = 0; char *p = buf; if (comment) @@ -239,10 +276,16 @@ read_c_string_or_comment (infile, printflag, comment) c = '\t'; } - if (printflag > 0) - putc (c, outfile); - else if (printflag < 0) - *p++ = c; + if (c == ' ') + pending_spaces++; + else if (c == '\n') + { + pending_newlines++; + pending_spaces = 0; + } + else + put_char (c, printflag, &p, &pending_newlines, &pending_spaces); + c = getc (infile); } @@ -257,10 +300,7 @@ read_c_string_or_comment (infile, printflag, comment) break; } - if (printflag > 0) - putc ('*', outfile); - else if (printflag < 0) - *p++ = '*'; + put_char ('*', printflag, &p, &pending_newlines, &pending_spaces); } else { -- 2.39.2