Mercurial > emacs
annotate lib-src/make-docfile.c @ 32294:a6eff9b566ae
(lisp-imenu-generic-expression): Don't
insist on symbols starting with word syntax.
(lisp-mode-shared-map): Renamed from shared-lisp-mode-map.
(eval-defun-1): Doc fix.
(indent-sexp): Use nconc to build up indent-stack.
author | Dave Love <fx@gnu.org> |
---|---|
date | Sun, 08 Oct 2000 17:23:50 +0000 |
parents | 65f19ae2c578 |
children | 39b2af5f7ee2 |
rev | line source |
---|---|
24 | 1 /* Generate doc-string file for GNU Emacs from source files. |
26083
134b57acef68
Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents:
25821
diff
changeset
|
2 Copyright (C) 1985, 86, 92, 93, 94, 97, 1999 Free Software Foundation, Inc. |
24 | 3 |
4 This file is part of GNU Emacs. | |
5 | |
38 | 6 GNU Emacs is free software; you can redistribute it and/or modify |
7 it under the terms of the GNU General Public License as published by | |
638 | 8 the Free Software Foundation; either version 2, or (at your option) |
38 | 9 any later version. |
24 | 10 |
38 | 11 GNU Emacs is distributed in the hope that it will be useful, |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 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
|
18 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
|
19 Boston, MA 02111-1307, USA. */ |
24 | 20 |
21 /* The arguments given to this program are all the C and Lisp source files | |
22 of GNU Emacs. .elc and .el and .c files are allowed. | |
23 A .o file can also be specified; the .c file it was made from is used. | |
24 This helps the makefile pass the correct list of files. | |
25 | |
26 The results, which go to standard output or to a file | |
27 specified with -a or -o (-a to append, -o to start from nothing), | |
28 are entries containing function or variable names and their documentation. | |
29 Each entry starts with a ^_ character. | |
30 Then comes F for a function or V for a variable. | |
31 Then comes the function or variable name, terminated with a newline. | |
32 Then comes the documentation for that function or variable. | |
33 */ | |
34 | |
11690 | 35 #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
|
36 #include <config.h> |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
37 |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
38 /* 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
|
39 #undef main |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
40 #undef fopen |
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
41 #undef chdir |
11690 | 42 |
24 | 43 #include <stdio.h> |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
44 #ifdef MSDOS |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
45 #include <fcntl.h> |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
46 #endif /* MSDOS */ |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
47 #ifdef WINDOWSNT |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
48 #include <stdlib.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
49 #include <fcntl.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
50 #include <direct.h> |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
51 #endif /* WINDOWSNT */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
52 |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
53 #ifdef DOS_NT |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
54 #define READ_TEXT "rt" |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
55 #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
|
56 #else /* not DOS_NT */ |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
57 #define READ_TEXT "r" |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
58 #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
|
59 #endif /* not DOS_NT */ |
24 | 60 |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
61 int scan_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
62 int scan_lisp_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
63 int scan_c_file (); |
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
64 |
12134 | 65 #ifdef MSDOS |
66 /* s/msdos.h defines this as sys_chdir, but we're not linking with the | |
67 file where that function is defined. */ | |
68 #undef chdir | |
69 #endif | |
70 | |
21783
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
71 #ifdef HAVE_UNISTD_H |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
72 #include <unistd.h> |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
73 #endif |
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
74 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
75 /* Stdio stream for output to the DOC file. */ |
24 | 76 FILE *outfile; |
77 | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
78 /* Name this program was invoked with. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
79 char *progname; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
80 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
81 /* Print error message. `s1' is printf control string, `s2' is arg for it. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
82 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
83 /* VARARGS1 */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
84 void |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
85 error (s1, s2) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
86 char *s1, *s2; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
87 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
88 fprintf (stderr, "%s: ", progname); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
89 fprintf (stderr, s1, s2); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
90 fprintf (stderr, "\n"); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
91 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
92 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
93 /* Print error message and exit. */ |
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 /* VARARGS1 */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
96 void |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
97 fatal (s1, s2) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
98 char *s1, *s2; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
99 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
100 error (s1, s2); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
101 exit (1); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
102 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
103 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
104 /* 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
|
105 |
11690 | 106 long * |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
107 xmalloc (size) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
108 unsigned int size; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
109 { |
11690 | 110 long *result = (long *) malloc (size); |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
111 if (result == NULL) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
112 fatal ("virtual memory exhausted", 0); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
113 return result; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
114 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
115 |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
116 int |
24 | 117 main (argc, argv) |
118 int argc; | |
119 char **argv; | |
120 { | |
121 int i; | |
122 int err_count = 0; | |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
123 int first_infile; |
24 | 124 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
125 progname = argv[0]; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
126 |
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
|
127 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
|
128 |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
129 /* 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
|
130 #ifdef MSDOS |
12350
68508136431f
(main) [MSDOS]: Do set _fmode.
Richard M. Stallman <rms@gnu.org>
parents:
12328
diff
changeset
|
131 _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
|
132 #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
|
133 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
|
134 (stdout)->_flag &= ~_IOTEXT; |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
135 _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
|
136 #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
|
137 outfile = 0; |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
138 #endif /* MSDOS */ |
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
139 #ifdef WINDOWSNT |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
140 _fmode = O_BINARY; |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
141 _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
|
142 #endif /* WINDOWSNT */ |
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
143 |
24 | 144 /* If first two args are -o FILE, output to FILE. */ |
145 i = 1; | |
146 if (argc > i + 1 && !strcmp (argv[i], "-o")) | |
147 { | |
148 outfile = fopen (argv[i + 1], "w"); | |
149 i += 2; | |
150 } | |
151 if (argc > i + 1 && !strcmp (argv[i], "-a")) | |
152 { | |
153 outfile = fopen (argv[i + 1], "a"); | |
154 i += 2; | |
155 } | |
2814
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
156 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
|
157 { |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
158 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
|
159 i += 2; |
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
160 } |
24 | 161 |
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
|
162 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
|
163 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
|
164 |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
165 first_infile = i; |
24 | 166 for (; i < argc; i++) |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
167 { |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
168 int j; |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
169 /* 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
|
170 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
|
171 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
|
172 break; |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
173 if (j == i) |
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
174 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
|
175 } |
24 | 176 #ifndef VMS |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
177 exit (err_count > 0); |
3028 | 178 #endif /* VMS */ |
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
179 return err_count > 0; |
24 | 180 } |
181 | |
164 | 182 /* Read file FILENAME and output its doc strings to outfile. */ |
24 | 183 /* Return 1 if file is not found, 0 if it is found. */ |
184 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
185 int |
24 | 186 scan_file (filename) |
187 char *filename; | |
188 { | |
189 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
|
190 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
|
191 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
|
192 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
|
193 return scan_lisp_file (filename, READ_TEXT); |
24 | 194 else |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
195 return scan_c_file (filename, READ_TEXT); |
24 | 196 } |
197 | |
198 char buf[128]; | |
199 | |
200 /* Skip a C string from INFILE, | |
201 and return the character that follows the closing ". | |
164 | 202 If printflag is positive, output string contents to outfile. |
24 | 203 If it is negative, store contents in buf. |
204 Convert escape sequences \n and \t to newline and tab; | |
205 discard \ followed by newline. */ | |
206 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
207 int |
24 | 208 read_c_string (infile, printflag) |
209 FILE *infile; | |
210 int printflag; | |
211 { | |
212 register int c; | |
213 char *p = buf; | |
214 | |
215 c = getc (infile); | |
216 while (c != EOF) | |
217 { | |
218 while (c != '"' && c != EOF) | |
219 { | |
220 if (c == '\\') | |
221 { | |
222 c = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
223 if (c == '\n' || c == '\r') |
24 | 224 { |
225 c = getc (infile); | |
226 continue; | |
227 } | |
228 if (c == 'n') | |
229 c = '\n'; | |
230 if (c == 't') | |
231 c = '\t'; | |
232 } | |
233 if (printflag > 0) | |
234 putc (c, outfile); | |
235 else if (printflag < 0) | |
236 *p++ = c; | |
237 c = getc (infile); | |
238 } | |
239 c = getc (infile); | |
240 if (c != '"') | |
241 break; | |
4987
f052db139432
(read_c_string): For "", concatenate the two strings.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
242 /* If we had a "", concatenate the two strings. */ |
24 | 243 c = getc (infile); |
244 } | |
245 | |
246 if (printflag < 0) | |
247 *p = 0; | |
248 | |
249 return c; | |
250 } | |
251 | |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
252 /* Write to file OUT the argument names of function FUNC, whose text is in BUF. |
24 | 253 MINARGS and MAXARGS are the minimum and maximum number of arguments. */ |
254 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
255 void |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
256 write_c_args (out, func, buf, minargs, maxargs) |
24 | 257 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
|
258 char *func, *buf; |
24 | 259 int minargs, maxargs; |
260 { | |
1206 | 261 register char *p; |
1250 | 262 int in_ident = 0; |
263 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
|
264 int need_space = 1; |
24 | 265 |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
266 fprintf (out, "(%s", func); |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
267 |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
268 if (*buf == '(') |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
269 ++buf; |
24 | 270 |
1206 | 271 for (p = buf; *p; p++) |
24 | 272 { |
1250 | 273 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
|
274 int ident_start = 0; |
1250 | 275 |
276 /* Notice when we start printing a new identifier. */ | |
277 if ((('A' <= c && c <= 'Z') | |
278 || ('a' <= c && c <= 'z') | |
279 || ('0' <= c && c <= '9') | |
280 || c == '_') | |
281 != in_ident) | |
24 | 282 { |
1250 | 283 if (!in_ident) |
284 { | |
285 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
|
286 ident_start = 1; |
1206 | 287 |
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
288 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
|
289 putc (' ', out); |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
290 |
1250 | 291 if (minargs == 0 && maxargs > 0) |
292 fprintf (out, "&optional "); | |
293 just_spaced = 1; | |
1206 | 294 |
1250 | 295 minargs--; |
296 maxargs--; | |
297 } | |
298 else | |
299 in_ident = 0; | |
24 | 300 } |
638 | 301 |
1250 | 302 /* Print the C argument list as it would appear in lisp: |
303 print underscores as hyphens, and print commas as spaces. | |
304 Collapse adjacent spaces into one. */ | |
305 if (c == '_') c = '-'; | |
306 if (c == ',') c = ' '; | |
307 | |
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
308 /* 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
|
309 `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
|
310 if (ident_start |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
311 && 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
|
312 && ! (('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
|
313 || ('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
|
314 || ('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
|
315 || p[6] == '_')) |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
316 { |
7564
d5d803ffff27
(write_c_args): Put `default' in upper case.
Richard M. Stallman <rms@gnu.org>
parents:
5604
diff
changeset
|
317 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
|
318 p += 5; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
319 in_ident = 0; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
320 just_spaced = 0; |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
321 } |
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
322 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
|
323 { |
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
324 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
|
325 /* 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
|
326 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
|
327 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
|
328 } |
1250 | 329 |
330 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
|
331 need_space = 0; |
24 | 332 } |
333 } | |
334 | |
335 /* Read through a c file. If a .o file is named, | |
336 the corresponding .c file is read instead. | |
337 Looks for DEFUN constructs such as are defined in ../src/lisp.h. | |
338 Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */ | |
339 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
340 int |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
341 scan_c_file (filename, mode) |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
342 char *filename, *mode; |
24 | 343 { |
344 FILE *infile; | |
345 register int c; | |
346 register int commas; | |
347 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
|
348 register int defvarperbufferflag; |
24 | 349 register int defvarflag; |
350 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
|
351 int extension = filename[strlen (filename) - 1]; |
24 | 352 |
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
|
353 if (extension == 'o') |
24 | 354 filename[strlen (filename) - 1] = 'c'; |
355 | |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
356 infile = fopen (filename, mode); |
24 | 357 |
358 /* No error if non-ex input file */ | |
359 if (infile == NULL) | |
360 { | |
361 perror (filename); | |
362 return 0; | |
363 } | |
364 | |
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
|
365 /* Reset extension to be able to detect duplicate files. */ |
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
|
366 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
|
367 |
24 | 368 c = '\n'; |
369 while (!feof (infile)) | |
370 { | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
371 if (c != '\n' && c != '\r') |
24 | 372 { |
373 c = getc (infile); | |
374 continue; | |
375 } | |
376 c = getc (infile); | |
377 if (c == ' ') | |
378 { | |
379 while (c == ' ') | |
380 c = getc (infile); | |
381 if (c != 'D') | |
382 continue; | |
383 c = getc (infile); | |
384 if (c != 'E') | |
385 continue; | |
386 c = getc (infile); | |
387 if (c != 'F') | |
388 continue; | |
389 c = getc (infile); | |
390 if (c != 'V') | |
391 continue; | |
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
392 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
|
393 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
|
394 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
395 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
|
396 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
|
397 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
398 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
|
399 if (c != '_') |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
400 continue; |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
401 |
24 | 402 defvarflag = 1; |
403 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
|
404 |
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
405 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
|
406 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
|
407 |
24 | 408 c = getc (infile); |
409 } | |
410 else if (c == 'D') | |
411 { | |
412 c = getc (infile); | |
413 if (c != 'E') | |
414 continue; | |
415 c = getc (infile); | |
416 if (c != 'F') | |
417 continue; | |
418 c = getc (infile); | |
419 defunflag = c == 'U'; | |
420 defvarflag = 0; | |
421 } | |
422 else continue; | |
423 | |
424 while (c != '(') | |
425 { | |
426 if (c < 0) | |
427 goto eof; | |
428 c = getc (infile); | |
429 } | |
430 | |
431 c = getc (infile); | |
432 if (c != '"') | |
433 continue; | |
434 c = read_c_string (infile, -1); | |
435 | |
436 if (defunflag) | |
437 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
|
438 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
|
439 commas = 2; |
24 | 440 else if (defvarflag) |
441 commas = 1; | |
442 else /* For DEFSIMPLE and DEFPRED */ | |
443 commas = 2; | |
444 | |
445 while (commas) | |
446 { | |
447 if (c == ',') | |
448 { | |
449 commas--; | |
450 if (defunflag && (commas == 1 || commas == 2)) | |
451 { | |
452 do | |
453 c = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
454 while (c == ' ' || c == '\n' || c == '\r' || c == '\t'); |
24 | 455 if (c < 0) |
456 goto eof; | |
457 ungetc (c, infile); | |
458 if (commas == 2) /* pick up minargs */ | |
459 fscanf (infile, "%d", &minargs); | |
460 else /* pick up maxargs */ | |
461 if (c == 'M' || c == 'U') /* MANY || UNEVALLED */ | |
462 maxargs = -1; | |
463 else | |
464 fscanf (infile, "%d", &maxargs); | |
465 } | |
466 } | |
467 if (c < 0) | |
468 goto eof; | |
469 c = getc (infile); | |
470 } | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
471 while (c == ' ' || c == '\n' || c == '\r' || c == '\t') |
24 | 472 c = getc (infile); |
473 if (c == '"') | |
474 c = read_c_string (infile, 0); | |
475 while (c != ',') | |
476 c = getc (infile); | |
477 c = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
478 while (c == ' ' || c == '\n' || c == '\r' || c == '\t') |
24 | 479 c = getc (infile); |
480 | |
481 if (c == '"') | |
482 { | |
483 putc (037, outfile); | |
484 putc (defvarflag ? 'V' : 'F', outfile); | |
485 fprintf (outfile, "%s\n", buf); | |
168 | 486 c = read_c_string (infile, 1); |
487 | |
488 /* If this is a defun, find the arguments and print them. If | |
489 this function takes MANY or UNEVALLED args, then the C source | |
490 won't give the names of the arguments, so we shouldn't bother | |
491 trying to find them. */ | |
492 if (defunflag && maxargs != -1) | |
24 | 493 { |
494 char argbuf[1024], *p = argbuf; | |
495 while (c != ')') | |
496 { | |
497 if (c < 0) | |
498 goto eof; | |
499 c = getc (infile); | |
500 } | |
501 /* Skip into arguments. */ | |
502 while (c != '(') | |
503 { | |
504 if (c < 0) | |
505 goto eof; | |
506 c = getc (infile); | |
507 } | |
508 /* Copy arguments into ARGBUF. */ | |
509 *p++ = c; | |
510 do | |
511 *p++ = c = getc (infile); | |
512 while (c != ')'); | |
513 *p = '\0'; | |
514 /* Output them. */ | |
515 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
|
516 write_c_args (outfile, buf, argbuf, minargs, maxargs); |
24 | 517 } |
518 } | |
519 } | |
520 eof: | |
521 fclose (infile); | |
522 return 0; | |
523 } | |
524 | |
525 /* Read a file of Lisp code, compiled or interpreted. | |
526 Looks for | |
527 (defun NAME ARGS DOCSTRING ...) | |
753 | 528 (defmacro NAME ARGS DOCSTRING ...) |
28401
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
529 (defsubst NAME ARGS DOCSTRING ...) |
753 | 530 (autoload (quote NAME) FILE DOCSTRING ...) |
24 | 531 (defvar NAME VALUE DOCSTRING) |
532 (defconst NAME VALUE DOCSTRING) | |
753 | 533 (fset (quote NAME) (make-byte-code ... DOCSTRING ...)) |
534 (fset (quote NAME) #[... DOCSTRING ...]) | |
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
535 (defalias (quote NAME) #[... DOCSTRING ...]) |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
536 (custom-declare-variable (quote NAME) VALUE DOCSTRING ...) |
24 | 537 starting in column zero. |
753 | 538 (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
|
539 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
540 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
|
541 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
|
542 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
|
543 |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3028
diff
changeset
|
544 For defvar, defconst, and fset we skip to the docstring with a kludgy |
753 | 545 formatting convention: all docstrings must appear on the same line as the |
546 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
|
547 and a newline immediately after the initial double-quote. No newlines |
753 | 548 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
|
549 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
|
550 arglist, but the doc string must still have a backslash and newline |
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
551 immediately after the double quote. |
2cfdaebe325c
Fix comment about conventions for Lisp files.
Dave Love <fx@gnu.org>
parents:
25532
diff
changeset
|
552 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
|
553 uncompiled ones like loaddefs.el and bindings.el; aside |
753 | 554 from that, it is always the .elc file that we look at, and they are no |
555 problem because byte-compiler output follows this convention. | |
24 | 556 The NAME and DOCSTRING are output. |
557 NAME is preceded by `F' for a function or `V' for a variable. | |
558 An entry is output only if DOCSTRING has \ newline just after the opening " | |
559 */ | |
560 | |
753 | 561 void |
562 skip_white (infile) | |
563 FILE *infile; | |
564 { | |
565 char c = ' '; | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
566 while (c == ' ' || c == '\t' || c == '\n' || c == '\r') |
753 | 567 c = getc (infile); |
568 ungetc (c, infile); | |
569 } | |
570 | |
571 void | |
572 read_lisp_symbol (infile, buffer) | |
573 FILE *infile; | |
574 char *buffer; | |
575 { | |
576 char c; | |
577 char *fillp = buffer; | |
578 | |
579 skip_white (infile); | |
580 while (1) | |
581 { | |
582 c = getc (infile); | |
583 if (c == '\\') | |
584 *(++fillp) = getc (infile); | |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
585 else if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '(' || c == ')') |
753 | 586 { |
587 ungetc (c, infile); | |
588 *fillp = 0; | |
589 break; | |
590 } | |
591 else | |
592 *fillp++ = c; | |
593 } | |
594 | |
595 if (! buffer[0]) | |
596 fprintf (stderr, "## expected a symbol, got '%c'\n", c); | |
597 | |
598 skip_white (infile); | |
599 } | |
600 | |
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
601 int |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
602 scan_lisp_file (filename, mode) |
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
603 char *filename, *mode; |
24 | 604 { |
605 FILE *infile; | |
606 register int c; | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
607 char *saved_string = 0; |
24 | 608 |
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
609 infile = fopen (filename, mode); |
24 | 610 if (infile == NULL) |
611 { | |
612 perror (filename); | |
613 return 0; /* No error */ | |
614 } | |
615 | |
616 c = '\n'; | |
617 while (!feof (infile)) | |
618 { | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
619 char buffer[BUFSIZ]; |
753 | 620 char type; |
621 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
622 /* 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
|
623 if (c != '\n' && c != '\r') |
24 | 624 { |
625 c = getc (infile); | |
626 continue; | |
627 } | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
628 /* Skip the line break. */ |
25821
9a999c51f856
(scan_lisp_file): Fix typo causing infloop.
Dave Love <fx@gnu.org>
parents:
25809
diff
changeset
|
629 while (c == '\n' || c == '\r') |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
630 c = getc (infile); |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
631 /* 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
|
632 if (c == '#') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
633 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
634 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
635 if (c == '@') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
636 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
637 int length = 0; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
638 int i; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
639 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
640 /* Read the length. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
641 while ((c = getc (infile), |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
642 c >= '0' && c <= '9')) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
643 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
644 length *= 10; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
645 length += c - '0'; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
646 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
647 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
648 /* 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
|
649 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
|
650 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
|
651 length--; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
652 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
653 /* Read in the contents. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
654 if (saved_string != 0) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
655 free (saved_string); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
656 saved_string = (char *) malloc (length); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
657 for (i = 0; i < length; i++) |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
658 saved_string[i] = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
659 /* The last character is a ^_. |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
660 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
|
661 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
|
662 saved_string[length - 1] = 0; |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
663 /* Skip the line break. */ |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
664 while (c == '\n' && c == '\r') |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
665 c = getc (infile); |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
666 /* Skip the following line. */ |
25532
9ed9cbc425fe
Include config.h not ../src/config.h.
Richard M. Stallman <rms@gnu.org>
parents:
25449
diff
changeset
|
667 while (c != '\n' && c != '\r') |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
668 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
669 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
670 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
671 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
672 |
24 | 673 if (c != '(') |
674 continue; | |
164 | 675 |
753 | 676 read_lisp_symbol (infile, buffer); |
677 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
678 if (! strcmp (buffer, "defun") |
28401
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
679 || ! strcmp (buffer, "defmacro") |
65f19ae2c578
(scan_lisp_file): Also look for `defsubst'.
Andreas Schwab <schwab@suse.de>
parents:
26083
diff
changeset
|
680 || ! strcmp (buffer, "defsubst")) |
24 | 681 { |
753 | 682 type = 'F'; |
683 read_lisp_symbol (infile, buffer); | |
684 | |
685 /* Skip the arguments: either "nil" or a list in parens */ | |
24 | 686 |
687 c = getc (infile); | |
753 | 688 if (c == 'n') /* nil */ |
689 { | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
690 if ((c = getc (infile)) != 'i' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
691 || (c = getc (infile)) != 'l') |
753 | 692 { |
693 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
694 buffer, filename); | |
695 continue; | |
696 } | |
697 } | |
698 else if (c != '(') | |
699 { | |
700 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
701 buffer, filename); | |
702 continue; | |
703 } | |
704 else | |
705 while (c != ')') | |
706 c = getc (infile); | |
707 skip_white (infile); | |
24 | 708 |
753 | 709 /* If the next three characters aren't `dquote bslash newline' |
710 then we're not reading a docstring. | |
711 */ | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
712 if ((c = getc (infile)) != '"' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
713 || (c = getc (infile)) != '\\' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
714 || ((c = getc (infile)) != '\n' && c != '\r')) |
24 | 715 { |
753 | 716 #ifdef DEBUG |
717 fprintf (stderr, "## non-docstring in %s (%s)\n", | |
718 buffer, filename); | |
719 #endif | |
720 continue; | |
721 } | |
722 } | |
723 | |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
724 else if (! strcmp (buffer, "defvar") |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
725 || ! strcmp (buffer, "defconst")) |
753 | 726 { |
727 char c1 = 0, c2 = 0; | |
728 type = 'V'; | |
729 read_lisp_symbol (infile, buffer); | |
730 | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
731 if (saved_string == 0) |
753 | 732 { |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
733 |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
734 /* 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
|
735 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
|
736 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
737 c2 = c1; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
738 c1 = c; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
739 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
740 } |
753 | 741 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
742 /* If two previous characters were " and \, |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
743 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
|
744 if (c2 != '"' || c1 != '\\') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
745 { |
753 | 746 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
747 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
|
748 buffer, filename); |
753 | 749 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
750 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
751 } |
753 | 752 } |
753 } | |
754 | |
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
755 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
|
756 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
757 char c1 = 0, c2 = 0; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
758 type = 'V'; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
759 |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
760 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
761 if (c == '\'') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
762 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
763 else |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
764 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
765 if (c != '(') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
766 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
767 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
768 "## 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
|
769 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
770 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
771 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
772 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
773 if (strcmp (buffer, "quote")) |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
774 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
775 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
776 "## 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
|
777 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
778 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
779 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
780 read_lisp_symbol (infile, buffer); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
781 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
782 if (c != ')') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
783 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
784 fprintf (stderr, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
785 "## 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
|
786 filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
787 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
788 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
789 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
790 |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
791 if (saved_string == 0) |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
792 { |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
793 /* 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
|
794 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
|
795 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
796 c2 = c1; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
797 c1 = c; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
798 c = getc (infile); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
799 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
800 |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
801 /* If two previous characters were " and \, |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
802 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
|
803 if (c2 != '"' || c1 != '\\') |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
804 { |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
805 #ifdef DEBUG |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
806 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
|
807 buffer, filename); |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
808 #endif |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
809 continue; |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
810 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
811 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
812 } |
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
813 |
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
814 else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias")) |
753 | 815 { |
816 char c1 = 0, c2 = 0; | |
817 type = 'F'; | |
818 | |
819 c = getc (infile); | |
820 if (c == '\'') | |
821 read_lisp_symbol (infile, buffer); | |
24 | 822 else |
823 { | |
824 if (c != '(') | |
753 | 825 { |
826 fprintf (stderr, "## unparsable name in fset in %s\n", | |
827 filename); | |
828 continue; | |
829 } | |
830 read_lisp_symbol (infile, buffer); | |
831 if (strcmp (buffer, "quote")) | |
832 { | |
833 fprintf (stderr, "## unparsable name in fset in %s\n", | |
834 filename); | |
835 continue; | |
836 } | |
837 read_lisp_symbol (infile, buffer); | |
24 | 838 c = getc (infile); |
753 | 839 if (c != ')') |
840 { | |
841 fprintf (stderr, | |
842 "## unparsable quoted name in fset in %s\n", | |
843 filename); | |
844 continue; | |
845 } | |
24 | 846 } |
164 | 847 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
848 if (saved_string == 0) |
24 | 849 { |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
850 /* 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
|
851 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
|
852 { |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
853 c2 = c1; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
854 c1 = c; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
855 c = getc (infile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
856 } |
753 | 857 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
858 /* If two previous characters were " and \, |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
859 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
|
860 if (c2 != '"' || c1 != '\\') |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
861 { |
753 | 862 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
863 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
|
864 buffer, filename); |
753 | 865 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
866 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
867 } |
24 | 868 } |
869 } | |
753 | 870 |
871 else if (! strcmp (buffer, "autoload")) | |
164 | 872 { |
753 | 873 type = 'F'; |
164 | 874 c = getc (infile); |
753 | 875 if (c == '\'') |
876 read_lisp_symbol (infile, buffer); | |
877 else | |
878 { | |
879 if (c != '(') | |
880 { | |
881 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
882 filename); | |
883 continue; | |
884 } | |
885 read_lisp_symbol (infile, buffer); | |
886 if (strcmp (buffer, "quote")) | |
887 { | |
888 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
889 filename); | |
890 continue; | |
891 } | |
892 read_lisp_symbol (infile, buffer); | |
893 c = getc (infile); | |
894 if (c != ')') | |
895 { | |
896 fprintf (stderr, | |
897 "## unparsable quoted name in autoload in %s\n", | |
898 filename); | |
899 continue; | |
900 } | |
901 } | |
902 skip_white (infile); | |
903 if ((c = getc (infile)) != '\"') | |
904 { | |
905 fprintf (stderr, "## autoload of %s unparsable (%s)\n", | |
906 buffer, filename); | |
907 continue; | |
908 } | |
909 read_c_string (infile, 0); | |
910 skip_white (infile); | |
164 | 911 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
912 if (saved_string == 0) |
753 | 913 { |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
914 /* 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
|
915 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
|
916 if ((c = getc (infile)) != '"' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
917 || (c = getc (infile)) != '\\' |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
918 || ((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
|
919 { |
753 | 920 #ifdef DEBUG |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
921 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
|
922 buffer, filename); |
753 | 923 #endif |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
924 continue; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
925 } |
753 | 926 } |
164 | 927 } |
24 | 928 |
753 | 929 #ifdef DEBUG |
25809
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
930 else if (! strcmp (buffer, "if") |
89230444d638
patched by pjr from diff by rms
Phillip Rulon <pjr@gnu.org>
parents:
25536
diff
changeset
|
931 || ! strcmp (buffer, "byte-code")) |
753 | 932 ; |
933 #endif | |
24 | 934 |
753 | 935 else |
936 { | |
937 #ifdef DEBUG | |
938 fprintf (stderr, "## unrecognised top-level form, %s (%s)\n", | |
939 buffer, filename); | |
940 #endif | |
941 continue; | |
942 } | |
24 | 943 |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
944 /* 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
|
945 dynamic doc string in saved_string |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
946 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
|
947 |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
948 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
|
949 backslash-newline) have already been read. */ |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
950 |
24 | 951 putc (037, outfile); |
753 | 952 putc (type, outfile); |
953 fprintf (outfile, "%s\n", buffer); | |
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
954 if (saved_string) |
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 fputs (saved_string, outfile); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
957 /* 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
|
958 free (saved_string); |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
959 saved_string = 0; |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
960 } |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
961 else |
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
962 read_c_string (infile, 1); |
24 | 963 } |
964 fclose (infile); | |
965 return 0; | |
966 } |