Mercurial > emacs
annotate lib-src/make-docfile.c @ 54111:b49a38db4abc
(save-place-forget-unreadable-files)
(save-place-save-skipped, save-place-skip-check-regexp): New defcustoms.
(save-place-forget-unreadable-files): New function.
(save-place-alist-to-file): Use it to filter out files that are
no longer readable.
author | Eli Zaretskii <eliz@is.elta.co.il> |
---|---|
date | Sat, 21 Feb 2004 14:07:11 +0000 |
parents | 957afba80853 |
children | effb507b5258 |
rev | line source |
---|---|
24 | 1 /* Generate doc-string file for GNU Emacs from source files. |
35293
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
2 Copyright (C) 1985, 86, 92, 93, 94, 97, 1999, 2000, 2001 |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
3 Free Software Foundation, Inc. |
24 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
38 | 7 GNU Emacs is free software; you can redistribute it and/or modify |
8 it under the terms of the GNU General Public License as published by | |
638 | 9 the Free Software Foundation; either version 2, or (at your option) |
38 | 10 any later version. |
24 | 11 |
38 | 12 GNU Emacs is distributed in the hope that it will be useful, |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
12351
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
12351
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
24 | 21 |
22 /* The arguments given to this program are all the C and Lisp source files | |
23 of GNU Emacs. .elc and .el and .c files are allowed. | |
24 A .o file can also be specified; the .c file it was made from is used. | |
25 This helps the makefile pass the correct list of files. | |
53269
957afba80853
(main): For return code, no longer special-case VMS.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
26 Option -d DIR means change to DIR before looking for files. |
24 | 27 |
28 The results, which go to standard output or to a file | |
29 specified with -a or -o (-a to append, -o to start from nothing), | |
30 are entries containing function or variable names and their documentation. | |
31 Each entry starts with a ^_ character. | |
32 Then comes F for a function or V for a variable. | |
33 Then comes the function or variable name, terminated with a newline. | |
34 Then comes the documentation for that function or variable. | |
35 */ | |
36 | |
11690 | 37 #define NO_SHORTNAMES /* Tell config not to load remap.h */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
38 #include <config.h> |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
39 |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
40 /* defined to be emacs_main, sys_fopen, etc. in config.h */ |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
41 #undef main |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
42 #undef fopen |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
43 #undef chdir |
11690 | 44 |
24 | 45 #include <stdio.h> |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
46 #ifdef MSDOS |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
47 #include <fcntl.h> |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
48 #endif /* MSDOS */ |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
49 #ifdef WINDOWSNT |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
50 #include <stdlib.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
51 #include <fcntl.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
52 #include <direct.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
53 #endif /* WINDOWSNT */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
54 |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
55 #ifdef DOS_NT |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
56 #define READ_TEXT "rt" |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
57 #define READ_BINARY "rb" |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
58 #else /* not DOS_NT */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
59 #define READ_TEXT "r" |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
60 #define READ_BINARY "r" |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
61 #endif /* not DOS_NT */ |
24 | 62 |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
63 int scan_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
64 int scan_lisp_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
65 int scan_c_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
66 |
12134 | 67 #ifdef MSDOS |
68 /* s/msdos.h defines this as sys_chdir, but we're not linking with the | |
69 file where that function is defined. */ | |
70 #undef chdir | |
71 #endif | |
72 | |
21783
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
73 #ifdef HAVE_UNISTD_H |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
74 #include <unistd.h> |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
75 #endif |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
76 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
77 /* Stdio stream for output to the DOC file. */ |
24 | 78 FILE *outfile; |
79 | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
80 /* Name this program was invoked with. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
81 char *progname; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
82 |
41084 | 83 /* Print error message. `s1' is printf control string, `s2' is arg for it. */ |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
84 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
85 /* VARARGS1 */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
86 void |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
87 error (s1, s2) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
88 char *s1, *s2; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
89 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
90 fprintf (stderr, "%s: ", progname); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
91 fprintf (stderr, s1, s2); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
92 fprintf (stderr, "\n"); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
93 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
94 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
95 /* Print error message and exit. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
96 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
97 /* VARARGS1 */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
98 void |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
99 fatal (s1, s2) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
100 char *s1, *s2; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
101 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
102 error (s1, s2); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
103 exit (1); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
104 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
105 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
106 /* Like malloc but get fatal error if memory is exhausted. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
107 |
11690 | 108 long * |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
109 xmalloc (size) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
110 unsigned int size; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
111 { |
11690 | 112 long *result = (long *) malloc (size); |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
113 if (result == NULL) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
114 fatal ("virtual memory exhausted", 0); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
115 return result; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
116 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
117 |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
118 int |
24 | 119 main (argc, argv) |
120 int argc; | |
121 char **argv; | |
122 { | |
123 int i; | |
124 int err_count = 0; | |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
125 int first_infile; |
24 | 126 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
127 progname = argv[0]; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
128 |
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
129 outfile = stdout; |
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
130 |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
131 /* Don't put CRs in the DOC file. */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
132 #ifdef MSDOS |
12350
68508136431f
(main) [MSDOS]: Do set _fmode.
Richard M. Stallman <rms@gnu.org>
parents:
12328
diff
changeset
|
133 _fmode = O_BINARY; |
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
134 #if 0 /* Suspicion is that this causes hanging. |
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
135 So instead we require people to use -o on MSDOS. */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
136 (stdout)->_flag &= ~_IOTEXT; |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
137 _setmode (fileno (stdout), O_BINARY); |
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
138 #endif |
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
139 outfile = 0; |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
140 #endif /* MSDOS */ |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
141 #ifdef WINDOWSNT |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
142 _fmode = O_BINARY; |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
143 _setmode (fileno (stdout), O_BINARY); |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
144 #endif /* WINDOWSNT */ |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
145 |
24 | 146 /* If first two args are -o FILE, output to FILE. */ |
147 i = 1; | |
148 if (argc > i + 1 && !strcmp (argv[i], "-o")) | |
149 { | |
150 outfile = fopen (argv[i + 1], "w"); | |
151 i += 2; | |
152 } | |
153 if (argc > i + 1 && !strcmp (argv[i], "-a")) | |
154 { | |
155 outfile = fopen (argv[i + 1], "a"); | |
156 i += 2; | |
157 } | |
2814
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
158 if (argc > i + 1 && !strcmp (argv[i], "-d")) |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
159 { |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
160 chdir (argv[i + 1]); |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
161 i += 2; |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
162 } |
24 | 163 |
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
164 if (outfile == 0) |
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
165 fatal ("No output file specified", ""); |
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
166 |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
167 first_infile = i; |
24 | 168 for (; i < argc; i++) |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
169 { |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
170 int j; |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
171 /* Don't process one file twice. */ |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
172 for (j = first_infile; j < i; j++) |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
173 if (! strcmp (argv[i], argv[j])) |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
174 break; |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
175 if (j == i) |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
176 err_count += scan_file (argv[i]); |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
177 } |
53269
957afba80853
(main): For return code, no longer special-case VMS.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
178 return (err_count > 0 ? EXIT_FAILURE : EXIT_SUCCESS); |
24 | 179 } |
180 | |
164 | 181 /* Read file FILENAME and output its doc strings to outfile. */ |
24 | 182 /* Return 1 if file is not found, 0 if it is found. */ |
183 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
184 int |
24 | 185 scan_file (filename) |
186 char *filename; | |
187 { | |
188 int len = strlen (filename); | |
12351
f2e9eb6a8939
(scan_file): Make sure it never looks at filename[-1].
Richard M. Stallman <rms@gnu.org>
parents:
12350
diff
changeset
|
189 if (len > 4 && !strcmp (filename + len - 4, ".elc")) |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
190 return scan_lisp_file (filename, READ_BINARY); |
12351
f2e9eb6a8939
(scan_file): Make sure it never looks at filename[-1].
Richard M. Stallman <rms@gnu.org>
parents:
12350
diff
changeset
|
191 else if (len > 3 && !strcmp (filename + len - 3, ".el")) |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
192 return scan_lisp_file (filename, READ_TEXT); |
24 | 193 else |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
194 return scan_c_file (filename, READ_TEXT); |
24 | 195 } |
196 | |
197 char buf[128]; | |
198 | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
199 /* Some state during the execution of `read_c_string_or_comment'. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
200 struct rcsoc_state |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
201 { |
41084 | 202 /* A count of spaces and newlines that have been read, but not output. */ |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
203 unsigned pending_spaces, pending_newlines; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
204 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
205 /* Where we're reading from. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
206 FILE *in_file; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
207 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
208 /* If non-zero, a buffer into which to copy characters. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
209 char *buf_ptr; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
210 /* If non-zero, a file into which to copy characters. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
211 FILE *out_file; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
212 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
213 /* A keyword we look for at the beginning of lines. If found, it is |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
214 not copied, and SAW_KEYWORD is set to true. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
215 char *keyword; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
216 /* The current point we've reached in an occurance of KEYWORD in |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
217 the input stream. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
218 char *cur_keyword_ptr; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
219 /* Set to true if we saw an occurance of KEYWORD. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
220 int saw_keyword; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
221 }; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
222 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
223 /* Output CH to the file or buffer in STATE. Any pending newlines or |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
224 spaces are output first. */ |
39986 | 225 |
226 static INLINE void | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
227 put_char (ch, state) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
228 int ch; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
229 struct rcsoc_state *state; |
39986 | 230 { |
231 int out_ch; | |
232 do | |
233 { | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
234 if (state->pending_newlines > 0) |
39986 | 235 { |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
236 state->pending_newlines--; |
39986 | 237 out_ch = '\n'; |
238 } | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
239 else if (state->pending_spaces > 0) |
39986 | 240 { |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
241 state->pending_spaces--; |
39986 | 242 out_ch = ' '; |
243 } | |
244 else | |
245 out_ch = ch; | |
246 | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
247 if (state->out_file) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
248 putc (out_ch, state->out_file); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
249 if (state->buf_ptr) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
250 *state->buf_ptr++ = out_ch; |
39986 | 251 } |
252 while (out_ch != ch); | |
253 } | |
254 | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
255 /* If in the middle of scanning a keyword, continue scanning with |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
256 character CH, otherwise output CH to the file or buffer in STATE. |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
257 Any pending newlines or spaces are output first, as well as any |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
258 previously scanned characters that were thought to be part of a |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
259 keyword, but were in fact not. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
260 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
261 static void |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
262 scan_keyword_or_put_char (ch, state) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
263 int ch; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
264 struct rcsoc_state *state; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
265 { |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
266 if (state->keyword |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
267 && *state->cur_keyword_ptr == ch |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
268 && (state->cur_keyword_ptr > state->keyword |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
269 || state->pending_newlines > 0)) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
270 /* We might be looking at STATE->keyword at some point. |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
271 Keep looking until we know for sure. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
272 { |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
273 if (*++state->cur_keyword_ptr == '\0') |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
274 /* Saw the whole keyword. Set SAW_KEYWORD flag to true. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
275 { |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
276 state->saw_keyword = 1; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
277 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
278 /* Reset the scanning pointer. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
279 state->cur_keyword_ptr = state->keyword; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
280 |
41084 | 281 /* Canonicalize whitespace preceding a usage string. */ |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
282 state->pending_newlines = 2; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
283 state->pending_spaces = 0; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
284 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
285 /* Skip any whitespace between the keyword and the |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
286 usage string. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
287 do |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
288 ch = getc (state->in_file); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
289 while (ch == ' ' || ch == '\n'); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
290 |
46958
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
291 /* Output the open-paren we just read. */ |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
292 put_char (ch, state); |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
293 |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
294 /* Skip the function name and replace it with `fn'. */ |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
295 do |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
296 ch = getc (state->in_file); |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
297 while (ch != ' ' && ch != ')'); |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
298 put_char ('f', state); |
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
299 put_char ('n', state); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48313
diff
changeset
|
300 |
46958
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
301 /* Put back the last character. */ |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
302 ungetc (ch, state->in_file); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
303 } |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
304 } |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
305 else |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
306 { |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
307 if (state->keyword && state->cur_keyword_ptr > state->keyword) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
308 /* We scanned the beginning of a potential usage |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
309 keyword, but it was a false alarm. Output the |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
310 part we scanned. */ |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
311 { |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
312 char *p; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
313 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
314 for (p = state->keyword; p < state->cur_keyword_ptr; p++) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
315 put_char (*p, state); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
316 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
317 state->cur_keyword_ptr = state->keyword; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
318 } |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
319 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
320 put_char (ch, state); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
321 } |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
322 } |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
323 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
324 |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
325 /* Skip a C string or C-style comment from INFILE, and return the |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
326 character that follows. COMMENT non-zero means skip a comment. If |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
327 PRINTFLAG is positive, output string contents to outfile. If it is |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
328 negative, store contents in buf. Convert escape sequences \n and |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
329 \t to newline and tab; discard \ followed by newline. |
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
330 If SAW_USAGE is non-zero, then any occurances of the string `usage:' |
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
331 at the beginning of a line will be removed, and *SAW_USAGE set to |
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
332 true if any were encountered. */ |
24 | 333 |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
334 int |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
335 read_c_string_or_comment (infile, printflag, comment, saw_usage) |
24 | 336 FILE *infile; |
337 int printflag; | |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
338 int *saw_usage; |
48313
85a91bbe8e45
(read_c_string_or_comment): Declare msgno.
Dave Love <fx@gnu.org>
parents:
46958
diff
changeset
|
339 int comment; |
24 | 340 { |
341 register int c; | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
342 struct rcsoc_state state; |
24 | 343 |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
344 state.in_file = infile; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
345 state.buf_ptr = (printflag < 0 ? buf : 0); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
346 state.out_file = (printflag > 0 ? outfile : 0); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
347 state.pending_spaces = 0; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
348 state.pending_newlines = 0; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
349 state.keyword = (saw_usage ? "usage:" : 0); |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
350 state.cur_keyword_ptr = state.keyword; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
351 state.saw_keyword = 0; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
352 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
353 c = getc (infile); |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
354 if (comment) |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
355 while (c == '\n' || c == '\r' || c == '\t' || c == ' ') |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
356 c = getc (infile); |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
357 |
24 | 358 while (c != EOF) |
359 { | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
360 while (c != EOF && (comment ? c != '*' : c != '"')) |
24 | 361 { |
362 if (c == '\\') | |
363 { | |
364 c = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
365 if (c == '\n' || c == '\r') |
24 | 366 { |
367 c = getc (infile); | |
368 continue; | |
369 } | |
370 if (c == 'n') | |
371 c = '\n'; | |
372 if (c == 't') | |
373 c = '\t'; | |
374 } | |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
375 |
39986 | 376 if (c == ' ') |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
377 state.pending_spaces++; |
39986 | 378 else if (c == '\n') |
379 { | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
380 state.pending_newlines++; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
381 state.pending_spaces = 0; |
39986 | 382 } |
383 else | |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
384 scan_keyword_or_put_char (c, &state); |
39986 | 385 |
24 | 386 c = getc (infile); |
387 } | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
388 |
39949
f169b10c8e00
(read_c_string_or_comment): Don't drop a '*'
Gerd Moellmann <gerd@gnu.org>
parents:
39897
diff
changeset
|
389 if (c != EOF) |
f169b10c8e00
(read_c_string_or_comment): Don't drop a '*'
Gerd Moellmann <gerd@gnu.org>
parents:
39897
diff
changeset
|
390 c = getc (infile); |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
391 |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
392 if (comment) |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
393 { |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
394 if (c == '/') |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
395 { |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
396 c = getc (infile); |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
397 break; |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
398 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
399 |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
400 scan_keyword_or_put_char ('*', &state); |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
401 } |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
402 else |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
403 { |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
404 if (c != '"') |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
405 break; |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
406 |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
407 /* If we had a "", concatenate the two strings. */ |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
408 c = getc (infile); |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
409 } |
24 | 410 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
411 |
24 | 412 if (printflag < 0) |
40130
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
413 *state.buf_ptr = 0; |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
414 |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
415 if (saw_usage) |
89269b100451
(struct rcsoc_state): New type.
Miles Bader <miles@gnu.org>
parents:
40112
diff
changeset
|
416 *saw_usage = state.saw_keyword; |
24 | 417 |
418 return c; | |
419 } | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
420 |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
421 |
24 | 422 |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
423 /* Write to file OUT the argument names of function FUNC, whose text is in BUF. |
24 | 424 MINARGS and MAXARGS are the minimum and maximum number of arguments. */ |
425 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
426 void |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
427 write_c_args (out, func, buf, minargs, maxargs) |
24 | 428 FILE *out; |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
429 char *func, *buf; |
24 | 430 int minargs, maxargs; |
431 { | |
1206 | 432 register char *p; |
1250 | 433 int in_ident = 0; |
434 int just_spaced = 0; | |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
435 int need_space = 1; |
24 | 436 |
46958
d7669c85c9cb
(scan_keyword_or_put_char, write_c_args): Use `fn'
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46394
diff
changeset
|
437 fprintf (out, "(fn"); |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
438 |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
439 if (*buf == '(') |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
440 ++buf; |
24 | 441 |
1206 | 442 for (p = buf; *p; p++) |
24 | 443 { |
1250 | 444 char c = *p; |
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
445 int ident_start = 0; |
1250 | 446 |
447 /* Notice when we start printing a new identifier. */ | |
448 if ((('A' <= c && c <= 'Z') | |
449 || ('a' <= c && c <= 'z') | |
450 || ('0' <= c && c <= '9') | |
451 || c == '_') | |
452 != in_ident) | |
24 | 453 { |
1250 | 454 if (!in_ident) |
455 { | |
456 in_ident = 1; | |
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
457 ident_start = 1; |
1206 | 458 |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
459 if (need_space) |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
460 putc (' ', out); |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
461 |
1250 | 462 if (minargs == 0 && maxargs > 0) |
463 fprintf (out, "&optional "); | |
464 just_spaced = 1; | |
1206 | 465 |
1250 | 466 minargs--; |
467 maxargs--; | |
468 } | |
469 else | |
470 in_ident = 0; | |
24 | 471 } |
638 | 472 |
1250 | 473 /* Print the C argument list as it would appear in lisp: |
35293
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
474 print underscores as hyphens, and print commas and newlines |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
475 as spaces. Collapse adjacent spaces into one. */ |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
476 if (c == '_') |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
477 c = '-'; |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
478 else if (c == ',' || c == '\n') |
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
479 c = ' '; |
1250 | 480 |
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
481 /* In C code, `default' is a reserved word, so we spell it |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
482 `defalt'; unmangle that here. */ |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
483 if (ident_start |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
484 && strncmp (p, "defalt", 6) == 0 |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
485 && ! (('A' <= p[6] && p[6] <= 'Z') |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
486 || ('a' <= p[6] && p[6] <= 'z') |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
487 || ('0' <= p[6] && p[6] <= '9') |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
488 || p[6] == '_')) |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
489 { |
7564
d5d803ffff27
(write_c_args): Put `default' in upper case.
Richard M. Stallman <rms@gnu.org>
parents:
5604
diff
changeset
|
490 fprintf (out, "DEFAULT"); |
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
491 p += 5; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
492 in_ident = 0; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
493 just_spaced = 0; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
494 } |
35293
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
495 else if (c != ' ' || !just_spaced) |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
496 { |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
497 if (c >= 'a' && c <= 'z') |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
498 /* Upcase the letter. */ |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
499 c += 'A' - 'a'; |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
500 putc (c, out); |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
501 } |
1250 | 502 |
35293
39b2af5f7ee2
(write_c_args): Print newlines as spaces.
Gerd Moellmann <gerd@gnu.org>
parents:
28401
diff
changeset
|
503 just_spaced = c == ' '; |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
504 need_space = 0; |
24 | 505 } |
506 } | |
507 | |
508 /* Read through a c file. If a .o file is named, | |
509 the corresponding .c file is read instead. | |
510 Looks for DEFUN constructs such as are defined in ../src/lisp.h. | |
511 Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */ | |
512 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
513 int |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
514 scan_c_file (filename, mode) |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
515 char *filename, *mode; |
24 | 516 { |
517 FILE *infile; | |
518 register int c; | |
519 register int commas; | |
520 register int defunflag; | |
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
521 register int defvarperbufferflag; |
24 | 522 register int defvarflag; |
523 int minargs, maxargs; | |
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
524 int extension = filename[strlen (filename) - 1]; |
24 | 525 |
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
526 if (extension == 'o') |
24 | 527 filename[strlen (filename) - 1] = 'c'; |
528 | |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
529 infile = fopen (filename, mode); |
24 | 530 |
531 /* No error if non-ex input file */ | |
532 if (infile == NULL) | |
533 { | |
534 perror (filename); | |
535 return 0; | |
536 } | |
537 | |
41084 | 538 /* Reset extension to be able to detect duplicate files. */ |
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
539 filename[strlen (filename) - 1] = extension; |
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
540 |
24 | 541 c = '\n'; |
542 while (!feof (infile)) | |
543 { | |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
544 int doc_keyword = 0; |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
545 |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
546 if (c != '\n' && c != '\r') |
24 | 547 { |
548 c = getc (infile); | |
549 continue; | |
550 } | |
551 c = getc (infile); | |
552 if (c == ' ') | |
553 { | |
554 while (c == ' ') | |
555 c = getc (infile); | |
556 if (c != 'D') | |
557 continue; | |
558 c = getc (infile); | |
559 if (c != 'E') | |
560 continue; | |
561 c = getc (infile); | |
562 if (c != 'F') | |
563 continue; | |
564 c = getc (infile); | |
565 if (c != 'V') | |
566 continue; | |
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
567 c = getc (infile); |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
568 if (c != 'A') |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
569 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
570 c = getc (infile); |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
571 if (c != 'R') |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
572 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
573 c = getc (infile); |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
574 if (c != '_') |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
575 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
576 |
24 | 577 defvarflag = 1; |
578 defunflag = 0; | |
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
579 |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
580 c = getc (infile); |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
581 defvarperbufferflag = (c == 'P'); |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
582 |
24 | 583 c = getc (infile); |
584 } | |
585 else if (c == 'D') | |
586 { | |
587 c = getc (infile); | |
588 if (c != 'E') | |
589 continue; | |
590 c = getc (infile); | |
591 if (c != 'F') | |
592 continue; | |
593 c = getc (infile); | |
594 defunflag = c == 'U'; | |
595 defvarflag = 0; | |
596 } | |
597 else continue; | |
598 | |
599 while (c != '(') | |
600 { | |
601 if (c < 0) | |
602 goto eof; | |
603 c = getc (infile); | |
604 } | |
605 | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
606 /* Lisp variable or function name. */ |
24 | 607 c = getc (infile); |
608 if (c != '"') | |
609 continue; | |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
610 c = read_c_string_or_comment (infile, -1, 0, 0); |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
611 |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
612 /* DEFVAR_LISP ("name", addr, "doc") |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
613 DEFVAR_LISP ("name", addr /\* doc *\/) |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
614 DEFVAR_LISP ("name", addr, doc: /\* doc *\/) */ |
24 | 615 |
616 if (defunflag) | |
617 commas = 5; | |
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
618 else if (defvarperbufferflag) |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
619 commas = 2; |
24 | 620 else if (defvarflag) |
621 commas = 1; | |
622 else /* For DEFSIMPLE and DEFPRED */ | |
623 commas = 2; | |
624 | |
625 while (commas) | |
626 { | |
627 if (c == ',') | |
628 { | |
629 commas--; | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
630 |
24 | 631 if (defunflag && (commas == 1 || commas == 2)) |
632 { | |
633 do | |
634 c = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
635 while (c == ' ' || c == '\n' || c == '\r' || c == '\t'); |
24 | 636 if (c < 0) |
637 goto eof; | |
638 ungetc (c, infile); | |
639 if (commas == 2) /* pick up minargs */ | |
640 fscanf (infile, "%d", &minargs); | |
641 else /* pick up maxargs */ | |
642 if (c == 'M' || c == 'U') /* MANY || UNEVALLED */ | |
643 maxargs = -1; | |
644 else | |
645 fscanf (infile, "%d", &maxargs); | |
646 } | |
647 } | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
648 |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
649 if (c == EOF) |
24 | 650 goto eof; |
651 c = getc (infile); | |
652 } | |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
653 |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
654 while (c == ' ' || c == '\n' || c == '\r' || c == '\t') |
24 | 655 c = getc (infile); |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
656 |
24 | 657 if (c == '"') |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
658 c = read_c_string_or_comment (infile, 0, 0, 0); |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
659 |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
660 while (c != EOF && c != ',' && c != '/') |
24 | 661 c = getc (infile); |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
662 if (c == ',') |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
663 { |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
664 c = getc (infile); |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
665 while (c == ' ' || c == '\n' || c == '\r' || c == '\t') |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
666 c = getc (infile); |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
667 while ((c >= 'a' && c <= 'z') || (c >= 'Z' && c <= 'Z')) |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
668 c = getc (infile); |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
669 if (c == ':') |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
670 { |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
671 doc_keyword = 1; |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
672 c = getc (infile); |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
673 while (c == ' ' || c == '\n' || c == '\r' || c == '\t') |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
674 c = getc (infile); |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
675 } |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
676 } |
24 | 677 |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
678 if (c == '"' |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
679 || (c == '/' |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
680 && (c = getc (infile), |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
681 ungetc (c, infile), |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
682 c == '*'))) |
24 | 683 { |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
684 int comment = c != '"'; |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
685 int saw_usage; |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
686 |
24 | 687 putc (037, outfile); |
688 putc (defvarflag ? 'V' : 'F', outfile); | |
689 fprintf (outfile, "%s\n", buf); | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
690 |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
691 if (comment) |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
692 getc (infile); /* Skip past `*' */ |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
693 c = read_c_string_or_comment (infile, 1, comment, &saw_usage); |
168 | 694 |
695 /* If this is a defun, find the arguments and print them. If | |
696 this function takes MANY or UNEVALLED args, then the C source | |
697 won't give the names of the arguments, so we shouldn't bother | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
698 trying to find them. |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
699 |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
700 Various doc-string styles: |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
701 0: DEFUN (..., "DOC") (args) [!comment] |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
702 1: DEFUN (..., /\* DOC *\/ (args)) [comment && !doc_keyword] |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
703 2: DEFUN (..., doc: /\* DOC *\/) (args) [comment && doc_keyword] |
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
704 */ |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
705 if (defunflag && maxargs != -1 && !saw_usage) |
24 | 706 { |
707 char argbuf[1024], *p = argbuf; | |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
708 |
39976
fa2e20b1440c
(scan_c_file): Handle `new style' doc strings in comments [with `doc:'
Miles Bader <miles@gnu.org>
parents:
39949
diff
changeset
|
709 if (!comment || doc_keyword) |
39897
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
710 while (c != ')') |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
711 { |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
712 if (c < 0) |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
713 goto eof; |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
714 c = getc (infile); |
3e6f2f2a0a62
(read_c_string_or_comment): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
35293
diff
changeset
|
715 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
716 |
24 | 717 /* Skip into arguments. */ |
718 while (c != '(') | |
719 { | |
720 if (c < 0) | |
721 goto eof; | |
722 c = getc (infile); | |
723 } | |
724 /* Copy arguments into ARGBUF. */ | |
725 *p++ = c; | |
726 do | |
727 *p++ = c = getc (infile); | |
728 while (c != ')'); | |
729 *p = '\0'; | |
730 /* Output them. */ | |
731 fprintf (outfile, "\n\n"); | |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
732 write_c_args (outfile, buf, argbuf, minargs, maxargs); |
24 | 733 } |
46394
1dd68094031a
(scan_c_file): Warn about missing `usage' info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42566
diff
changeset
|
734 else if (defunflag && maxargs == -1 && !saw_usage) |
1dd68094031a
(scan_c_file): Warn about missing `usage' info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42566
diff
changeset
|
735 /* The DOC should provide the usage form. */ |
1dd68094031a
(scan_c_file): Warn about missing `usage' info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42566
diff
changeset
|
736 fprintf (stderr, "Missing `usage' for function `%s'.\n", buf); |
24 | 737 } |
738 } | |
739 eof: | |
740 fclose (infile); | |
741 return 0; | |
742 } | |
743 | |
744 /* Read a file of Lisp code, compiled or interpreted. | |
745 Looks for | |
746 (defun NAME ARGS DOCSTRING ...) | |
753 | 747 (defmacro NAME ARGS DOCSTRING ...) |
28401
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
748 (defsubst NAME ARGS DOCSTRING ...) |
753 | 749 (autoload (quote NAME) FILE DOCSTRING ...) |
24 | 750 (defvar NAME VALUE DOCSTRING) |
751 (defconst NAME VALUE DOCSTRING) | |
753 | 752 (fset (quote NAME) (make-byte-code ... DOCSTRING ...)) |
753 (fset (quote NAME) #[... DOCSTRING ...]) | |
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
754 (defalias (quote NAME) #[... DOCSTRING ...]) |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
755 (custom-declare-variable (quote NAME) VALUE DOCSTRING ...) |
24 | 756 starting in column zero. |
753 | 757 (quote NAME) may appear as 'NAME as well. |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
758 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
759 We also look for #@LENGTH CONTENTS^_ at the beginning of the line. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
760 When we find that, we save it for the following defining-form, |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
761 and we use that instead of reading a doc string within that defining-form. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
762 |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
763 For defvar, defconst, and fset we skip to the docstring with a kludgy |
753 | 764 formatting convention: all docstrings must appear on the same line as the |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
765 initial open-paren (the one in column zero) and must contain a backslash |
25536
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
766 and a newline immediately after the initial double-quote. No newlines |
753 | 767 must appear between the beginning of the form and the first double-quote. |
25536
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
768 For defun, defmacro, and autoload, we know how to skip over the |
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
769 arglist, but the doc string must still have a backslash and newline |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
770 immediately after the double quote. |
25536
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
771 The only source files that must follow this convention are preloaded |
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
772 uncompiled ones like loaddefs.el and bindings.el; aside |
753 | 773 from that, it is always the .elc file that we look at, and they are no |
774 problem because byte-compiler output follows this convention. | |
24 | 775 The NAME and DOCSTRING are output. |
776 NAME is preceded by `F' for a function or `V' for a variable. | |
777 An entry is output only if DOCSTRING has \ newline just after the opening " | |
778 */ | |
779 | |
753 | 780 void |
781 skip_white (infile) | |
782 FILE *infile; | |
783 { | |
784 char c = ' '; | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
785 while (c == ' ' || c == '\t' || c == '\n' || c == '\r') |
753 | 786 c = getc (infile); |
787 ungetc (c, infile); | |
788 } | |
789 | |
790 void | |
791 read_lisp_symbol (infile, buffer) | |
792 FILE *infile; | |
793 char *buffer; | |
794 { | |
795 char c; | |
796 char *fillp = buffer; | |
797 | |
798 skip_white (infile); | |
799 while (1) | |
800 { | |
801 c = getc (infile); | |
802 if (c == '\\') | |
803 *(++fillp) = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
804 else if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '(' || c == ')') |
753 | 805 { |
806 ungetc (c, infile); | |
807 *fillp = 0; | |
808 break; | |
809 } | |
810 else | |
811 *fillp++ = c; | |
812 } | |
813 | |
814 if (! buffer[0]) | |
815 fprintf (stderr, "## expected a symbol, got '%c'\n", c); | |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
816 |
753 | 817 skip_white (infile); |
818 } | |
819 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
820 int |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
821 scan_lisp_file (filename, mode) |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
822 char *filename, *mode; |
24 | 823 { |
824 FILE *infile; | |
825 register int c; | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
826 char *saved_string = 0; |
24 | 827 |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
828 infile = fopen (filename, mode); |
24 | 829 if (infile == NULL) |
830 { | |
831 perror (filename); | |
832 return 0; /* No error */ | |
833 } | |
834 | |
835 c = '\n'; | |
836 while (!feof (infile)) | |
837 { | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
838 char buffer[BUFSIZ]; |
753 | 839 char type; |
840 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
841 /* If not at end of line, skip till we get to one. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
842 if (c != '\n' && c != '\r') |
24 | 843 { |
844 c = getc (infile); | |
845 continue; | |
846 } | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
847 /* Skip the line break. */ |
25821
9a999c51f856
(scan_lisp_file): Fix typo causing infloop.
Dave Love <fx@gnu.org>
parents:
25809
diff
changeset
|
848 while (c == '\n' || c == '\r') |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
849 c = getc (infile); |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
850 /* Detect a dynamic doc string and save it for the next expression. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
851 if (c == '#') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
852 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
853 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
854 if (c == '@') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
855 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
856 int length = 0; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
857 int i; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
858 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
859 /* Read the length. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
860 while ((c = getc (infile), |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
861 c >= '0' && c <= '9')) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
862 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
863 length *= 10; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
864 length += c - '0'; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
865 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
866 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
867 /* The next character is a space that is counted in the length |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
868 but not part of the doc string. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
869 We already read it, so just ignore it. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
870 length--; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
871 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
872 /* Read in the contents. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
873 if (saved_string != 0) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
874 free (saved_string); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
875 saved_string = (char *) malloc (length); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
876 for (i = 0; i < length; i++) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
877 saved_string[i] = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
878 /* The last character is a ^_. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
879 That is needed in the .elc file |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
880 but it is redundant in DOC. So get rid of it here. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
881 saved_string[length - 1] = 0; |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
882 /* Skip the line break. */ |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
883 while (c == '\n' && c == '\r') |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
884 c = getc (infile); |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
885 /* Skip the following line. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
886 while (c != '\n' && c != '\r') |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
887 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
888 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
889 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
890 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
891 |
24 | 892 if (c != '(') |
893 continue; | |
164 | 894 |
753 | 895 read_lisp_symbol (infile, buffer); |
896 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
897 if (! strcmp (buffer, "defun") |
28401
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
898 || ! strcmp (buffer, "defmacro") |
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
899 || ! strcmp (buffer, "defsubst")) |
24 | 900 { |
753 | 901 type = 'F'; |
902 read_lisp_symbol (infile, buffer); | |
903 | |
904 /* Skip the arguments: either "nil" or a list in parens */ | |
24 | 905 |
906 c = getc (infile); | |
753 | 907 if (c == 'n') /* nil */ |
908 { | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
909 if ((c = getc (infile)) != 'i' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
910 || (c = getc (infile)) != 'l') |
753 | 911 { |
912 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
913 buffer, filename); | |
914 continue; | |
915 } | |
916 } | |
917 else if (c != '(') | |
918 { | |
919 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
920 buffer, filename); | |
921 continue; | |
922 } | |
923 else | |
924 while (c != ')') | |
925 c = getc (infile); | |
926 skip_white (infile); | |
24 | 927 |
753 | 928 /* If the next three characters aren't `dquote bslash newline' |
929 then we're not reading a docstring. | |
930 */ | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
931 if ((c = getc (infile)) != '"' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
932 || (c = getc (infile)) != '\\' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
933 || ((c = getc (infile)) != '\n' && c != '\r')) |
24 | 934 { |
753 | 935 #ifdef DEBUG |
936 fprintf (stderr, "## non-docstring in %s (%s)\n", | |
937 buffer, filename); | |
938 #endif | |
939 continue; | |
940 } | |
941 } | |
942 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
943 else if (! strcmp (buffer, "defvar") |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
944 || ! strcmp (buffer, "defconst")) |
753 | 945 { |
946 char c1 = 0, c2 = 0; | |
947 type = 'V'; | |
948 read_lisp_symbol (infile, buffer); | |
949 | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
950 if (saved_string == 0) |
753 | 951 { |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
952 |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
953 /* Skip until the end of line; remember two previous chars. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
954 while (c != '\n' && c != '\r' && c >= 0) |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
955 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
956 c2 = c1; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
957 c1 = c; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
958 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
959 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
960 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
961 /* If two previous characters were " and \, |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
962 this is a doc string. Otherwise, there is none. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
963 if (c2 != '"' || c1 != '\\') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
964 { |
753 | 965 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
966 fprintf (stderr, "## non-docstring in %s (%s)\n", |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
967 buffer, filename); |
753 | 968 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
969 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
970 } |
753 | 971 } |
972 } | |
973 | |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
974 else if (! strcmp (buffer, "custom-declare-variable")) |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
975 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
976 char c1 = 0, c2 = 0; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
977 type = 'V'; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
978 |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
979 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
980 if (c == '\'') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
981 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
982 else |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
983 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
984 if (c != '(') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
985 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
986 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
987 "## unparsable name in custom-declare-variable in %s\n", |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
988 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
989 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
990 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
991 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
992 if (strcmp (buffer, "quote")) |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
993 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
994 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
995 "## unparsable name in custom-declare-variable in %s\n", |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
996 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
997 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
998 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
999 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1000 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1001 if (c != ')') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1002 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1003 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1004 "## unparsable quoted name in custom-declare-variable in %s\n", |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1005 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1006 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1007 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1008 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1009 |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1010 if (saved_string == 0) |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1011 { |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1012 /* Skip to end of line; remember the two previous chars. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
1013 while (c != '\n' && c != '\r' && c >= 0) |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1014 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1015 c2 = c1; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1016 c1 = c; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1017 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1018 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
1019 |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1020 /* If two previous characters were " and \, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1021 this is a doc string. Otherwise, there is none. */ |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1022 if (c2 != '"' || c1 != '\\') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1023 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1024 #ifdef DEBUG |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1025 fprintf (stderr, "## non-docstring in %s (%s)\n", |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1026 buffer, filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1027 #endif |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1028 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1029 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1030 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1031 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1032 |
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
1033 else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias")) |
753 | 1034 { |
1035 char c1 = 0, c2 = 0; | |
1036 type = 'F'; | |
1037 | |
1038 c = getc (infile); | |
1039 if (c == '\'') | |
1040 read_lisp_symbol (infile, buffer); | |
24 | 1041 else |
1042 { | |
1043 if (c != '(') | |
753 | 1044 { |
1045 fprintf (stderr, "## unparsable name in fset in %s\n", | |
1046 filename); | |
1047 continue; | |
1048 } | |
1049 read_lisp_symbol (infile, buffer); | |
1050 if (strcmp (buffer, "quote")) | |
1051 { | |
1052 fprintf (stderr, "## unparsable name in fset in %s\n", | |
1053 filename); | |
1054 continue; | |
1055 } | |
1056 read_lisp_symbol (infile, buffer); | |
24 | 1057 c = getc (infile); |
753 | 1058 if (c != ')') |
1059 { | |
1060 fprintf (stderr, | |
1061 "## unparsable quoted name in fset in %s\n", | |
1062 filename); | |
1063 continue; | |
1064 } | |
24 | 1065 } |
164 | 1066 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1067 if (saved_string == 0) |
24 | 1068 { |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1069 /* Skip to end of line; remember the two previous chars. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
1070 while (c != '\n' && c != '\r' && c >= 0) |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1071 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1072 c2 = c1; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1073 c1 = c; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1074 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1075 } |
42566
6c1d733d1794
Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
41084
diff
changeset
|
1076 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1077 /* If two previous characters were " and \, |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1078 this is a doc string. Otherwise, there is none. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1079 if (c2 != '"' || c1 != '\\') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1080 { |
753 | 1081 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1082 fprintf (stderr, "## non-docstring in %s (%s)\n", |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1083 buffer, filename); |
753 | 1084 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1085 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1086 } |
24 | 1087 } |
1088 } | |
753 | 1089 |
1090 else if (! strcmp (buffer, "autoload")) | |
164 | 1091 { |
753 | 1092 type = 'F'; |
164 | 1093 c = getc (infile); |
753 | 1094 if (c == '\'') |
1095 read_lisp_symbol (infile, buffer); | |
1096 else | |
1097 { | |
1098 if (c != '(') | |
1099 { | |
1100 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
1101 filename); | |
1102 continue; | |
1103 } | |
1104 read_lisp_symbol (infile, buffer); | |
1105 if (strcmp (buffer, "quote")) | |
1106 { | |
1107 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
1108 filename); | |
1109 continue; | |
1110 } | |
1111 read_lisp_symbol (infile, buffer); | |
1112 c = getc (infile); | |
1113 if (c != ')') | |
1114 { | |
1115 fprintf (stderr, | |
1116 "## unparsable quoted name in autoload in %s\n", | |
1117 filename); | |
1118 continue; | |
1119 } | |
1120 } | |
1121 skip_white (infile); | |
1122 if ((c = getc (infile)) != '\"') | |
1123 { | |
1124 fprintf (stderr, "## autoload of %s unparsable (%s)\n", | |
1125 buffer, filename); | |
1126 continue; | |
1127 } | |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
1128 read_c_string_or_comment (infile, 0, 0, 0); |
753 | 1129 skip_white (infile); |
164 | 1130 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1131 if (saved_string == 0) |
753 | 1132 { |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1133 /* If the next three characters aren't `dquote bslash newline' |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1134 then we're not reading a docstring. */ |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1135 if ((c = getc (infile)) != '"' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1136 || (c = getc (infile)) != '\\' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1137 || ((c = getc (infile)) != '\n' && c != '\r')) |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1138 { |
753 | 1139 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1140 fprintf (stderr, "## non-docstring in %s (%s)\n", |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1141 buffer, filename); |
753 | 1142 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1143 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1144 } |
753 | 1145 } |
164 | 1146 } |
24 | 1147 |
753 | 1148 #ifdef DEBUG |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1149 else if (! strcmp (buffer, "if") |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
1150 || ! strcmp (buffer, "byte-code")) |
753 | 1151 ; |
1152 #endif | |
24 | 1153 |
753 | 1154 else |
1155 { | |
1156 #ifdef DEBUG | |
1157 fprintf (stderr, "## unrecognised top-level form, %s (%s)\n", | |
1158 buffer, filename); | |
1159 #endif | |
1160 continue; | |
1161 } | |
24 | 1162 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1163 /* At this point, we should either use the previous |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1164 dynamic doc string in saved_string |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1165 or gobble a doc string from the input file. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1166 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1167 In the latter case, the opening quote (and leading |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1168 backslash-newline) have already been read. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1169 |
24 | 1170 putc (037, outfile); |
753 | 1171 putc (type, outfile); |
1172 fprintf (outfile, "%s\n", buffer); | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1173 if (saved_string) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1174 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1175 fputs (saved_string, outfile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1176 /* Don't use one dynamic doc string twice. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1177 free (saved_string); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1178 saved_string = 0; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1179 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
1180 else |
40112
3a1cdf305658
(read_c_string_or_comment): Add SAW_USAGE parameter, and implement
Miles Bader <miles@gnu.org>
parents:
39986
diff
changeset
|
1181 read_c_string_or_comment (infile, 1, 0, 0); |
24 | 1182 } |
1183 fclose (infile); | |
1184 return 0; | |
1185 } | |
52401 | 1186 |
1187 /* arch-tag: f7203aaf-991a-4238-acb5-601db56f2894 | |
1188 (do not change this comment) */ |