diff options
author | Miles Bader <miles@gnu.org> | 2001-10-17 02:53:57 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2001-10-17 02:53:57 +0000 |
commit | 0c82822ca0b5cc0445f218d1c719ca6bbe560031 (patch) | |
tree | b97db3a02469ea082706bb13403f9802b8fb4cdd /lib-src/make-docfile.c | |
parent | 9f89e098634f1eeb0bf6e14c2b0b5f9ab575031d (diff) | |
download | emacs-0c82822ca0b5cc0445f218d1c719ca6bbe560031.tar.gz |
(put_char): New function.
(read_c_string_or_comment): Strip trailing spaces and newlines.
Diffstat (limited to 'lib-src/make-docfile.c')
-rw-r--r-- | lib-src/make-docfile.c | 56 |
1 files 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 { |