summaryrefslogtreecommitdiff
path: root/lib-src/make-docfile.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2001-10-17 02:53:57 +0000
committerMiles Bader <miles@gnu.org>2001-10-17 02:53:57 +0000
commit0c82822ca0b5cc0445f218d1c719ca6bbe560031 (patch)
treeb97db3a02469ea082706bb13403f9802b8fb4cdd /lib-src/make-docfile.c
parent9f89e098634f1eeb0bf6e14c2b0b5f9ab575031d (diff)
downloademacs-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.c56
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
{