# HG changeset patch # User Miles Bader <miles@gnu.org> # Date 1003287237 0 # Node ID c9411c9fab91cc348f17c80089d0c5a0b89572e4 # Parent 3a906538d25400d8529fb853bcab0604d9790402 (put_char): New function. (read_c_string_or_comment): Strip trailing spaces and newlines. diff -r 3a906538d254 -r c9411c9fab91 lib-src/make-docfile.c --- a/lib-src/make-docfile.c Wed Oct 17 02:00:20 2001 +0000 +++ b/lib-src/make-docfile.c Wed Oct 17 02:53:57 2001 +0000 @@ -198,6 +198,42 @@ 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 @@ int printflag; { register int c; + unsigned pending_spaces = 0, pending_newlines = 0; char *p = buf; if (comment) @@ -239,10 +276,16 @@ 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 @@ break; } - if (printflag > 0) - putc ('*', outfile); - else if (printflag < 0) - *p++ = '*'; + put_char ('*', printflag, &p, &pending_newlines, &pending_spaces); } else {