X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/59ce725a3b68cbc324f01bc8dc5f9e07286431d1..4a47c2757309e338321da1e7a2f6d399a306ce7d:/lib-src/make-docfile.c?ds=sidebyside
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 1564aca5bb..e2dc99214d 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -1,14 +1,14 @@
/* Generate doc-string file for GNU Emacs from source files.
Copyright (C) 1985, 1986, 1992, 1993, 1994, 1997, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,9 +16,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see . */
+
/* The arguments given to this program are all the C and Lisp source files
of GNU Emacs. .elc and .el and .c files are allowed.
@@ -35,7 +34,6 @@ Boston, MA 02110-1301, USA. */
Then comes the documentation for that function or variable.
*/
-#define NO_SHORTNAMES /* Tell config not to load remap.h */
#include
/* defined to be emacs_main, sys_fopen, etc. in config.h */
@@ -62,20 +60,17 @@ Boston, MA 02110-1301, USA. */
#endif /* not DOS_NT */
#ifndef DIRECTORY_SEP
-#ifdef MAC_OS8
-#define DIRECTORY_SEP ':'
-#else /* not MAC_OS8 */
#define DIRECTORY_SEP '/'
-#endif /* not MAC_OS8 */
#endif
#ifndef IS_DIRECTORY_SEP
#define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
#endif
-int scan_file ();
-int scan_lisp_file ();
-int scan_c_file ();
+int scan_file (char *filename);
+int scan_lisp_file (const char *filename, const char *mode);
+int scan_c_file (char *filename, const char *mode);
+void fatal (const char *s1, const char *s2) NO_RETURN;
#ifdef MSDOS
/* s/msdos.h defines this as sys_chdir, but we're not linking with the
@@ -97,8 +92,7 @@ char *progname;
/* VARARGS1 */
void
-error (s1, s2)
- char *s1, *s2;
+error (const char *s1, const char *s2)
{
fprintf (stderr, "%s: ", progname);
fprintf (stderr, s1, s2);
@@ -109,8 +103,7 @@ error (s1, s2)
/* VARARGS1 */
void
-fatal (s1, s2)
- char *s1, *s2;
+fatal (const char *s1, const char *s2)
{
error (s1, s2);
exit (EXIT_FAILURE);
@@ -119,8 +112,7 @@ fatal (s1, s2)
/* Like malloc but get fatal error if memory is exhausted. */
void *
-xmalloc (size)
- unsigned int size;
+xmalloc (unsigned int size)
{
void *result = (void *) malloc (size);
if (result == NULL)
@@ -129,9 +121,7 @@ xmalloc (size)
}
int
-main (argc, argv)
- int argc;
- char **argv;
+main (int argc, char **argv)
{
int i;
int err_count = 0;
@@ -193,8 +183,7 @@ main (argc, argv)
/* Add a source file name boundary marker in the output file. */
void
-put_filename (filename)
- char *filename;
+put_filename (char *filename)
{
char *tmp;
@@ -213,10 +202,10 @@ put_filename (filename)
/* Return 1 if file is not found, 0 if it is found. */
int
-scan_file (filename)
- char *filename;
+scan_file (char *filename)
{
- int len = strlen (filename);
+
+ size_t len = strlen (filename);
put_filename (filename);
if (len > 4 && !strcmp (filename + len - 4, ".elc"))
@@ -245,11 +234,11 @@ struct rcsoc_state
/* A keyword we look for at the beginning of lines. If found, it is
not copied, and SAW_KEYWORD is set to true. */
- char *keyword;
- /* The current point we've reached in an occurance of KEYWORD in
+ const char *keyword;
+ /* The current point we've reached in an occurrence of KEYWORD in
the input stream. */
- char *cur_keyword_ptr;
- /* Set to true if we saw an occurance of KEYWORD. */
+ const char *cur_keyword_ptr;
+ /* Set to true if we saw an occurrence of KEYWORD. */
int saw_keyword;
};
@@ -257,9 +246,7 @@ struct rcsoc_state
spaces are output first. */
static INLINE void
-put_char (ch, state)
- int ch;
- struct rcsoc_state *state;
+put_char (int ch, struct rcsoc_state *state)
{
int out_ch;
do
@@ -292,9 +279,7 @@ put_char (ch, state)
keyword, but were in fact not. */
static void
-scan_keyword_or_put_char (ch, state)
- int ch;
- struct rcsoc_state *state;
+scan_keyword_or_put_char (int ch, struct rcsoc_state *state)
{
if (state->keyword
&& *state->cur_keyword_ptr == ch
@@ -342,7 +327,7 @@ scan_keyword_or_put_char (ch, state)
keyword, but it was a false alarm. Output the
part we scanned. */
{
- char *p;
+ const char *p;
for (p = state->keyword; p < state->cur_keyword_ptr; p++)
put_char (*p, state);
@@ -360,16 +345,12 @@ scan_keyword_or_put_char (ch, state)
PRINTFLAG is positive, output string contents to outfile. If it is
negative, store contents in buf. Convert escape sequences \n and
\t to newline and tab; discard \ followed by newline.
- If SAW_USAGE is non-zero, then any occurances of the string `usage:'
+ If SAW_USAGE is non-zero, then any occurrences of the string `usage:'
at the beginning of a line will be removed, and *SAW_USAGE set to
true if any were encountered. */
int
-read_c_string_or_comment (infile, printflag, comment, saw_usage)
- FILE *infile;
- int printflag;
- int *saw_usage;
- int comment;
+read_c_string_or_comment (FILE *infile, int printflag, int comment, int *saw_usage)
{
register int c;
struct rcsoc_state state;
@@ -457,15 +438,12 @@ read_c_string_or_comment (infile, printflag, comment, saw_usage)
MINARGS and MAXARGS are the minimum and maximum number of arguments. */
void
-write_c_args (out, func, buf, minargs, maxargs)
- FILE *out;
- char *func, *buf;
- int minargs, maxargs;
+write_c_args (FILE *out, char *func, char *buf, int minargs, int maxargs)
{
register char *p;
int in_ident = 0;
- int just_spaced = 0;
- int need_space = 1;
+ char *ident_start;
+ size_t ident_length = 0;
fprintf (out, "(fn");
@@ -475,9 +453,8 @@ write_c_args (out, func, buf, minargs, maxargs)
for (p = buf; *p; p++)
{
char c = *p;
- int ident_start = 0;
- /* Notice when we start printing a new identifier. */
+ /* Notice when a new identifier starts. */
if ((('A' <= c && c <= 'Z')
|| ('a' <= c && c <= 'z')
|| ('0' <= c && c <= '9')
@@ -487,65 +464,65 @@ write_c_args (out, func, buf, minargs, maxargs)
if (!in_ident)
{
in_ident = 1;
- ident_start = 1;
-
- if (need_space)
- putc (' ', out);
-
- if (minargs == 0 && maxargs > 0)
- fprintf (out, "&optional ");
- just_spaced = 1;
-
- minargs--;
- maxargs--;
+ ident_start = p;
}
else
- in_ident = 0;
+ {
+ in_ident = 0;
+ ident_length = p - ident_start;
+ }
}
- /* Print the C argument list as it would appear in lisp:
- print underscores as hyphens, and print commas and newlines
- as spaces. Collapse adjacent spaces into one. */
- if (c == '_')
- c = '-';
- else if (c == ',' || c == '\n')
- c = ' ';
-
- /* In C code, `default' is a reserved word, so we spell it
- `defalt'; unmangle that here. */
- if (ident_start
- && strncmp (p, "defalt", 6) == 0
- && ! (('A' <= p[6] && p[6] <= 'Z')
- || ('a' <= p[6] && p[6] <= 'z')
- || ('0' <= p[6] && p[6] <= '9')
- || p[6] == '_'))
- {
- fprintf (out, "DEFAULT");
- p += 5;
- in_ident = 0;
- just_spaced = 0;
- }
- else if (c != ' ' || !just_spaced)
+ /* Found the end of an argument, write out the last seen
+ identifier. */
+ if (c == ',' || c == ')')
{
- if (c >= 'a' && c <= 'z')
- /* Upcase the letter. */
- c += 'A' - 'a';
- putc (c, out);
- }
+ if (ident_length == 0)
+ {
+ error ("empty arg list for `%s' should be (void), not ()", func);
+ continue;
+ }
+
+ if (strncmp (ident_start, "void", ident_length) == 0)
+ continue;
+
+ putc (' ', out);
+
+ if (minargs == 0 && maxargs > 0)
+ fprintf (out, "&optional ");
+
+ minargs--;
+ maxargs--;
- just_spaced = c == ' ';
- need_space = 0;
+ /* In C code, `default' is a reserved word, so we spell it
+ `defalt'; unmangle that here. */
+ if (ident_length == 6 && strncmp (ident_start, "defalt", 6) == 0)
+ fprintf (out, "DEFAULT");
+ else
+ while (ident_length-- > 0)
+ {
+ c = *ident_start++;
+ if (c >= 'a' && c <= 'z')
+ /* Upcase the letter. */
+ c += 'A' - 'a';
+ else if (c == '_')
+ /* Print underscore as hyphen. */
+ c = '-';
+ putc (c, out);
+ }
+ }
}
+
+ putc (')', out);
}
/* Read through a c file. If a .o file is named,
- the corresponding .c file is read instead.
+ the corresponding .c or .m file is read instead.
Looks for DEFUN constructs such as are defined in ../src/lisp.h.
Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */
int
-scan_c_file (filename, mode)
- char *filename, *mode;
+scan_c_file (char *filename, const char *mode)
{
FILE *infile;
register int c;
@@ -561,6 +538,15 @@ scan_c_file (filename, mode)
infile = fopen (filename, mode);
+ if (infile == NULL && extension == 'o')
+ {
+ /* try .m */
+ filename[strlen (filename) - 1] = 'm';
+ infile = fopen (filename, mode);
+ if (infile == NULL)
+ filename[strlen (filename) - 1] = 'c'; /* don't confuse people */
+ }
+
/* No error if non-ex input file */
if (infile == NULL)
{
@@ -812,8 +798,7 @@ scan_c_file (filename, mode)
*/
void
-skip_white (infile)
- FILE *infile;
+skip_white (FILE *infile)
{
char c = ' ';
while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
@@ -822,9 +807,7 @@ skip_white (infile)
}
void
-read_lisp_symbol (infile, buffer)
- FILE *infile;
- char *buffer;
+read_lisp_symbol (FILE *infile, char *buffer)
{
char c;
char *fillp = buffer;
@@ -852,8 +835,7 @@ read_lisp_symbol (infile, buffer)
}
int
-scan_lisp_file (filename, mode)
- char *filename, *mode;
+scan_lisp_file (const char *filename, const char *mode)
{
FILE *infile;
register int c;
@@ -904,9 +886,8 @@ scan_lisp_file (filename, mode)
length--;
/* Read in the contents. */
- if (saved_string != 0)
- free (saved_string);
- saved_string = (char *) malloc (length);
+ free (saved_string);
+ saved_string = (char *) xmalloc (length);
for (i = 0; i < length; i++)
saved_string[i] = getc (infile);
/* The last character is a ^_.
@@ -1005,7 +986,9 @@ scan_lisp_file (filename, mode)
}
}
- else if (! strcmp (buffer, "custom-declare-variable"))
+ else if (! strcmp (buffer, "custom-declare-variable")
+ || ! strcmp (buffer, "defvaralias")
+ )
{
char c1 = 0, c2 = 0;
type = 'V';
@@ -1188,7 +1171,7 @@ scan_lisp_file (filename, mode)
else
{
#ifdef DEBUG
- fprintf (stderr, "## unrecognised top-level form, %s (%s)\n",
+ fprintf (stderr, "## unrecognized top-level form, %s (%s)\n",
buffer, filename);
#endif
continue;