annotate src/doc.c @ 25427:dde5fcbfa2af

(Info-tagify): Don't insert more than one newline before the tag table. (Info-tagify): Start by widening. Match node headers that don't list the file name, and more kinds of page separations. Strip properties during tagification. Use start of node header line as tag's position. Fix the "done" message. (Info-validate): Save and restore match data around narrowing down.
author Richard M. Stallman <rms@gnu.org>
date Sun, 29 Aug 1999 19:19:00 +0000
parents aa24b1cb428a
children 0a7261c1d487
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Record indices of function doc strings stored in a file.
20708
ed9ed828415e Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20619
diff changeset
2 Copyright (C) 1985, 86, 93, 94, 95, 97, 1998 Free Software Foundation, Inc.
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
10344
a6e8525a1a9d (store_function_docstring, Fdocumentation): Use & PSEUDOVECTOR_SIZE_MASK on
Roland McGrath <roland@gnu.org>
parents: 10330
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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: 14069
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: 14069
diff changeset
19 Boston, MA 02111-1307, USA. */
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 3999
diff changeset
22 #include <config.h>
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <sys/types.h>
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <sys/file.h> /* Must be after sys/types.h for USG and BSD4_1*/
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #ifdef USG5
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include <fcntl.h>
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #endif
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
6862
653504b6b5dd [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 6030
diff changeset
31 #ifdef HAVE_UNISTD_H
653504b6b5dd [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 6030
diff changeset
32 #include <unistd.h>
653504b6b5dd [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 6030
diff changeset
33 #endif
653504b6b5dd [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 6030
diff changeset
34
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #ifndef O_RDONLY
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #define O_RDONLY 0
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #endif
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include "lisp.h"
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include "buffer.h"
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
41 #include "keyboard.h"
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
42 #include "charset.h"
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
961
8d2cbfd93066 * doc.c (Vdata_directory): Removed; this is declared in callproc.c.
Jim Blandy <jimb@redhat.com>
parents: 943
diff changeset
44 Lisp_Object Vdoc_file_name;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
46 extern char *index ();
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
47
5784
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
48 extern Lisp_Object Voverriding_local_map;
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
49
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
50 /* For VMS versions with limited file name syntax,
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
51 convert the name to something VMS will allow. */
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
52 static void
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
53 munge_doc_file_name (name)
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
54 char *name;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 #ifdef VMS
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 #ifndef VMS4_4
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 /* For VMS versions with limited file name syntax,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 convert the name to something VMS will allow. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 p = name;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 while (*p)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 if (*p == '-')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 *p = '_';
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 p++;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 #endif /* not VMS4_4 */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 #ifdef VMS4_4
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 strcpy (name, sys_translate_unix (name));
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 #endif /* VMS4_4 */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 #endif /* VMS */
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
72 }
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
73
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
74 /* Buffer used for reading from documentation file. */
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
75 static char *get_doc_string_buffer;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
76 static int get_doc_string_buffer_size;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
77
22690
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
78 static unsigned char *read_bytecode_pointer;
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
79
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
80 /* readchar in lread.c calls back here to fetch the next byte.
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
81 If UNREADFLAG is 1, we unread a byte. */
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
82
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
83 int
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
84 read_bytecode_char (unreadflag)
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
85 {
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
86 if (unreadflag)
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
87 {
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
88 read_bytecode_pointer--;
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
89 return 0;
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
90 }
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
91 return *read_bytecode_pointer++;
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
92 }
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
93
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
94 /* Extract a doc string from a file. FILEPOS says where to get it.
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
95 If it is an integer, use that position in the standard DOC-... file.
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
96 If it is (FILE . INTEGER), use FILE as the file name
11252
f610f9d7e3ca (get_doc_string): In (STRING . INTEGER), if INTEGER
Richard M. Stallman <rms@gnu.org>
parents: 10345
diff changeset
97 and INTEGER as the position in that file.
f610f9d7e3ca (get_doc_string): In (STRING . INTEGER), if INTEGER
Richard M. Stallman <rms@gnu.org>
parents: 10345
diff changeset
98 But if INTEGER is negative, make it positive.
f610f9d7e3ca (get_doc_string): In (STRING . INTEGER), if INTEGER
Richard M. Stallman <rms@gnu.org>
parents: 10345
diff changeset
99 (A negative integer is used for user variables, so we can distinguish
22043
10a9f355a346 (get_doc_string): New arg UNIBYTE
Richard M. Stallman <rms@gnu.org>
parents: 21514
diff changeset
100 them without actually fetching the doc string.)
10a9f355a346 (get_doc_string): New arg UNIBYTE
Richard M. Stallman <rms@gnu.org>
parents: 21514
diff changeset
101
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
102 If UNIBYTE is nonzero, always make a unibyte string.
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
103
22562
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
104 If DEFINITION is nonzero, assume this is for reading
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
105 a dynamic function definition; convert the bytestring
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
106 and the constants vector with appropriate byte handling,
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
107 and return a cons cell. */
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
108
22268
9308a15aa8f8 (get_doc_string): Make non-static.
Richard M. Stallman <rms@gnu.org>
parents: 22043
diff changeset
109 Lisp_Object
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
110 get_doc_string (filepos, unibyte, definition)
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
111 Lisp_Object filepos;
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
112 int unibyte, definition;
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
113 {
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
114 char *from, *to;
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
115 register int fd;
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
116 register char *name;
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
117 register char *p, *p1;
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
118 int minsize;
14552
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
119 int offset, position;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
120 Lisp_Object file, tem;
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
121
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
122 if (INTEGERP (filepos))
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
123 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
124 file = Vdoc_file_name;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
125 position = XINT (filepos);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
126 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
127 else if (CONSP (filepos))
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
128 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
129 file = XCONS (filepos)->car;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
130 position = XINT (XCONS (filepos)->cdr);
11252
f610f9d7e3ca (get_doc_string): In (STRING . INTEGER), if INTEGER
Richard M. Stallman <rms@gnu.org>
parents: 10345
diff changeset
131 if (position < 0)
f610f9d7e3ca (get_doc_string): In (STRING . INTEGER), if INTEGER
Richard M. Stallman <rms@gnu.org>
parents: 10345
diff changeset
132 position = - position;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
133 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
134 else
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
135 return Qnil;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
136
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
137 if (!STRINGP (Vdoc_directory))
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
138 return Qnil;
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
139
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
140 if (!STRINGP (file))
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
141 return Qnil;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
142
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
143 /* Put the file name in NAME as a C string.
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
144 If it is relative, combine it with Vdoc_directory. */
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
145
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
146 tem = Ffile_name_absolute_p (file);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
147 if (NILP (tem))
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
148 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
149 minsize = XSTRING (Vdoc_directory)->size;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
150 /* sizeof ("../etc/") == 8 */
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
151 if (minsize < 8)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
152 minsize = 8;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
153 name = (char *) alloca (minsize + XSTRING (file)->size + 8);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
154 strcpy (name, XSTRING (Vdoc_directory)->data);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
155 strcat (name, XSTRING (file)->data);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
156 munge_doc_file_name (name);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
157 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
158 else
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
159 {
11446
cee0510aa3aa (get_doc_string): Add cast.
Richard M. Stallman <rms@gnu.org>
parents: 11252
diff changeset
160 name = (char *) XSTRING (file)->data;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
161 }
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 fd = open (name, O_RDONLY, 0);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 if (fd < 0)
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
165 {
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
166 #ifndef CANNOT_DUMP
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
167 if (!NILP (Vpurify_flag))
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
168 {
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
169 /* Preparing to dump; DOC file is probably not installed.
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
170 So check in ../etc. */
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
171 strcpy (name, "../etc/");
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
172 strcat (name, XSTRING (file)->data);
9087
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
173 munge_doc_file_name (name);
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
174
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
175 fd = open (name, O_RDONLY, 0);
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
176 }
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
177 #endif
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
178 if (fd < 0)
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
179 error ("Cannot open doc string file \"%s\"", name);
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
180 }
e3c272c7f4d2 (get_doc_string): Look in ../etc while dumping.
Richard M. Stallman <rms@gnu.org>
parents: 8823
diff changeset
181
14552
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
182 /* Seek only to beginning of disk block. */
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
183 offset = position % (8 * 1024);
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
184 if (0 > lseek (fd, position - offset, 0))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 close (fd);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 error ("Position %ld out of range in doc string file \"%s\"",
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
188 position, name);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 }
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
190
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
191 /* Read the doc string into get_doc_string_buffer.
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
192 P points beyond the data just read. */
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
193
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
194 p = get_doc_string_buffer;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
195 while (1)
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 {
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
197 int space_left = (get_doc_string_buffer_size
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
198 - (p - get_doc_string_buffer));
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
199 int nread;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
200
14552
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
201 /* Allocate or grow the buffer if we need to. */
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
202 if (space_left == 0)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
203 {
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
204 int in_buffer = p - get_doc_string_buffer;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
205 get_doc_string_buffer_size += 16 * 1024;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
206 get_doc_string_buffer
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
207 = (char *) xrealloc (get_doc_string_buffer,
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
208 get_doc_string_buffer_size + 1);
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
209 p = get_doc_string_buffer + in_buffer;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
210 space_left = (get_doc_string_buffer_size
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
211 - (p - get_doc_string_buffer));
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
212 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
213
14552
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
214 /* Read a disk block at a time.
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
215 If we read the same block last time, maybe skip this? */
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
216 if (space_left > 1024 * 8)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
217 space_left = 1024 * 8;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
218 nread = read (fd, p, space_left);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
219 if (nread < 0)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
220 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
221 close (fd);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
222 error ("Read error on documentation file");
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
223 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
224 p[nread] = 0;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
225 if (!nread)
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 break;
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
227 if (p == get_doc_string_buffer)
14552
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
228 p1 = index (p + offset, '\037');
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
229 else
e6f31368feeb (get_doc_string): Always read entire disk blocks.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
230 p1 = index (p, '\037');
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 if (p1)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 *p1 = 0;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 p = p1;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 break;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 }
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
237 p += nread;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 close (fd);
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
240
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
241 /* Scan the text and perform quoting with ^A (char code 1).
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
242 ^A^A becomes ^A, ^A0 becomes a null char, and ^A_ becomes a ^_. */
14648
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
243 from = get_doc_string_buffer + offset;
45d13c154bb4 (get_doc_string): Move static vars outside the function,
Richard M. Stallman <rms@gnu.org>
parents: 14552
diff changeset
244 to = get_doc_string_buffer + offset;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
245 while (from != p)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
246 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
247 if (*from == 1)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
248 {
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
249 int c;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
250
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
251 from++;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
252 c = *from++;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
253 if (c == 1)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
254 *to++ = c;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
255 else if (c == '0')
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
256 *to++ = 0;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
257 else if (c == '_')
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
258 *to++ = 037;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
259 else
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
260 error ("Invalid data in documentation file -- ^A followed by code 0%o", c);
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
261 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
262 else
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
263 *to++ = *from++;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
264 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
265
22690
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
266 /* If DEFINITION, read from this buffer
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
267 the same way we would read bytes from a file. */
22562
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
268 if (definition)
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
269 {
22690
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
270 read_bytecode_pointer = get_doc_string_buffer + offset;
31bc848c5f18 (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22602
diff changeset
271 return Fread (Qlambda);
22562
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
272 }
ddb3fd464b77 (get_doc_string): 2nd arg is now DEFINITION;
Richard M. Stallman <rms@gnu.org>
parents: 22268
diff changeset
273
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
274 if (unibyte)
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
275 return make_unibyte_string (get_doc_string_buffer + offset,
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
276 to - (get_doc_string_buffer + offset));
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
277 else
24573
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
278 {
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
279 /* Let the data determine whether the string is multibyte,
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
280 even if Emacs is running in --unibyte mode. */
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
281 int nchars = multibyte_chars_in_text (get_doc_string_buffer + offset,
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
282 to - (get_doc_string_buffer + offset));
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
283 return make_string_from_bytes (get_doc_string_buffer + offset,
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
284 nchars,
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
285 to - (get_doc_string_buffer + offset));
aa24b1cb428a (get_doc_string): When UNIBYTE and DEFINITION are 0,
Richard M. Stallman <rms@gnu.org>
parents: 23921
diff changeset
286 }
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
287 }
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
288
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
289 /* Get a string from position FILEPOS and pass it through the Lisp reader.
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
290 We use this for fetching the bytecode string and constants vector
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
291 of a compiled function from the .elc file. */
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
292
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
293 Lisp_Object
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
294 read_doc_string (filepos)
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
295 Lisp_Object filepos;
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
296 {
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
297 return get_doc_string (filepos, 0, 1);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
300 DEFUN ("documentation", Fdocumentation, Sdocumentation, 1, 2, 0,
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 577
diff changeset
301 "Return the documentation string of FUNCTION.\n\
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
302 Unless a non-nil second argument RAW is given, the\n\
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
303 string is passed through `substitute-command-keys'.")
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
304 (function, raw)
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
305 Lisp_Object function, raw;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 Lisp_Object fun;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 Lisp_Object funcar;
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
309 Lisp_Object tem, doc;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
311 fun = Findirect_function (function);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312
10002
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
313 if (SUBRP (fun))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 if (XSUBR (fun)->doc == 0) return Qnil;
8823
fdb7ba55f05c (Fdocumentation): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 8552
diff changeset
316 if ((EMACS_INT) XSUBR (fun)->doc >= 0)
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
317 doc = build_string (XSUBR (fun)->doc);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 else
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
319 doc = get_doc_string (make_number (- (EMACS_INT) XSUBR (fun)->doc),
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
320 0, 0);
10002
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
321 }
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
322 else if (COMPILEDP (fun))
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
323 {
10345
9952a5ab70d1 Fix typo in last change.
Roland McGrath <roland@gnu.org>
parents: 10344
diff changeset
324 if ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) <= COMPILED_DOC_STRING)
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 return Qnil;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 tem = XVECTOR (fun)->contents[COMPILED_DOC_STRING];
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
327 if (STRINGP (tem))
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
328 doc = tem;
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
329 else if (NATNUMP (tem) || CONSP (tem))
22890
5044c732dbde (Fdocumentation): Specify UNIBYTE = 0
Richard M. Stallman <rms@gnu.org>
parents: 22690
diff changeset
330 doc = get_doc_string (tem, 0, 0);
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
331 else
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
332 return Qnil;
10002
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
333 }
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
334 else if (STRINGP (fun) || VECTORP (fun))
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
335 {
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 return build_string ("Keyboard macro.");
10002
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
337 }
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
338 else if (CONSP (fun))
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
339 {
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 funcar = Fcar (fun);
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
341 if (!SYMBOLP (funcar))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
343 else if (EQ (funcar, Qkeymap))
23921
81a6345fd5e8 (Fdocumentation): Change the doc string for prefix
Andreas Schwab <schwab@suse.de>
parents: 22890
diff changeset
344 return build_string ("Prefix command (definition is a keymap associating keystrokes with commands).");
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
345 else if (EQ (funcar, Qlambda)
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
346 || EQ (funcar, Qautoload))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 {
13521
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
348 Lisp_Object tem1;
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
349 tem1 = Fcdr (Fcdr (fun));
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
350 tem = Fcar (tem1);
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
351 if (STRINGP (tem))
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
352 doc = tem;
13521
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
353 /* Handle a doc reference--but these never come last
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
354 in the function body, so reject them if they are last. */
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
355 else if ((NATNUMP (tem) || CONSP (tem))
13e55327ef5e (Fdocumentation): Reject a file reference
Richard M. Stallman <rms@gnu.org>
parents: 13244
diff changeset
356 && ! NILP (XCONS (tem1)->cdr))
22890
5044c732dbde (Fdocumentation): Specify UNIBYTE = 0
Richard M. Stallman <rms@gnu.org>
parents: 22690
diff changeset
357 doc = get_doc_string (tem, 0, 0);
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
358 else
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
359 return Qnil;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 }
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
361 else if (EQ (funcar, Qmocklisp))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 return Qnil;
647
529171c8b71c entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
363 else if (EQ (funcar, Qmacro))
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
364 return Fdocumentation (Fcdr (fun), raw);
10002
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
365 else
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
366 goto oops;
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
367 }
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
368 else
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
369 {
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
370 oops:
5b2b7e378772 (Fdocumentation): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9958
diff changeset
371 Fsignal (Qinvalid_function, Fcons (fun, Qnil));
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 }
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
373
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 570
diff changeset
374 if (NILP (raw))
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
375 {
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
376 struct gcpro gcpro1;
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
377
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
378 GCPRO1 (doc);
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
379 doc = Fsubstitute_command_keys (doc);
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
380 UNGCPRO;
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
381 }
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
382 return doc;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384
5248
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
385 DEFUN ("documentation-property", Fdocumentation_property, Sdocumentation_property, 2, 3, 0,
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 "Return the documentation string that is SYMBOL's PROP property.\n\
570
c5bfe6e87d93 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 485
diff changeset
387 This is like `get', but it can refer to strings stored in the\n\
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 577
diff changeset
388 `etc/DOC' file; and if the value is a string, it is passed through\n\
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
389 `substitute-command-keys'. A non-nil third argument RAW avoids this\n\
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 570
diff changeset
390 translation.")
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
391 (symbol, prop, raw)
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
392 Lisp_Object symbol, prop, raw;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 register Lisp_Object tem;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
396 tem = Fget (symbol, prop);
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
397 if (INTEGERP (tem))
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
398 tem = get_doc_string (XINT (tem) > 0 ? tem : make_number (- XINT (tem)), 0, 0);
10202
4013c083162e (get_doc_string): Now static. Arg now Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 10002
diff changeset
399 else if (CONSP (tem))
22602
9c6b3b9c3c8f (get_doc_string): Take both UNIBYTE and DEFINITION as args.
Richard M. Stallman <rms@gnu.org>
parents: 22562
diff changeset
400 tem = get_doc_string (tem, 0, 0);
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
401 if (NILP (raw) && STRINGP (tem))
312
adba7439e87c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 297
diff changeset
402 return Fsubstitute_command_keys (tem);
adba7439e87c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 297
diff changeset
403 return tem;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
406 /* Scanning the DOC files and placing docstring offsets into functions. */
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
407
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
408 static void
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
409 store_function_docstring (fun, offset)
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
410 Lisp_Object fun;
10330
240a2c88d439 (store_function_docstring): Arg is now EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 10202
diff changeset
411 /* Use EMACS_INT because we get this from pointer subtraction. */
240a2c88d439 (store_function_docstring): Arg is now EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 10202
diff changeset
412 EMACS_INT offset;
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
413 {
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
414 fun = indirect_function (fun);
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
415
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
416 /* The type determines where the docstring is stored. */
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
417
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
418 /* Lisp_Subrs have a slot for it. */
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
419 if (SUBRP (fun))
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
420 XSUBR (fun)->doc = (char *) - offset;
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
421
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
422 /* If it's a lisp form, stick it in the form. */
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
423 else if (CONSP (fun))
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
424 {
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
425 Lisp_Object tem;
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
426
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
427 tem = XCONS (fun)->car;
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
428 if (EQ (tem, Qlambda) || EQ (tem, Qautoload))
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
429 {
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
430 tem = Fcdr (Fcdr (fun));
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
431 if (CONSP (tem) && INTEGERP (XCONS (tem)->car))
9304
1fbc46670cb0 (store_function_docstring): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9133
diff changeset
432 XSETFASTINT (XCONS (tem)->car, offset);
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
433 }
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
434 else if (EQ (tem, Qmacro))
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
435 store_function_docstring (XCONS (fun)->cdr, offset);
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
436 }
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
437
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
438 /* Bytecode objects sometimes have slots for it. */
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
439 else if (COMPILEDP (fun))
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
440 {
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
441 /* This bytecode object must have a slot for the
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
442 docstring, since we've found a docstring for it. */
10345
9952a5ab70d1 Fix typo in last change.
Roland McGrath <roland@gnu.org>
parents: 10344
diff changeset
443 if ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) > COMPILED_DOC_STRING)
9304
1fbc46670cb0 (store_function_docstring): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9133
diff changeset
444 XSETFASTINT (XVECTOR (fun)->contents[COMPILED_DOC_STRING], offset);
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
445 }
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
446 }
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
447
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
448
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 DEFUN ("Snarf-documentation", Fsnarf_documentation, Ssnarf_documentation,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 1, 1, 0,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 "Used during Emacs initialization, before dumping runnable Emacs,\n\
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 577
diff changeset
452 to find pointers to doc strings stored in `etc/DOC...' and\n\
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 record them in function definitions.\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 One arg, FILENAME, a string which does not include a directory.\n\
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 577
diff changeset
455 The file is found in `../etc' now; found in the `data-directory'\n\
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 when doc strings are referred to later in the dumped Emacs.")
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 (filename)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 Lisp_Object filename;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 int fd;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 char buf[1024 + 1];
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 register int filled;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 register int pos;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 register char *p, *end;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 Lisp_Object sym, fun, tem;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 char *name;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 extern char *index ();
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
1116
6d0d442e2ada * doc.c (Fsnarf_documentation): Signal an error if this is
Jim Blandy <jimb@redhat.com>
parents: 961
diff changeset
469 #ifndef CANNOT_DUMP
6d0d442e2ada * doc.c (Fsnarf_documentation): Signal an error if this is
Jim Blandy <jimb@redhat.com>
parents: 961
diff changeset
470 if (NILP (Vpurify_flag))
6d0d442e2ada * doc.c (Fsnarf_documentation): Signal an error if this is
Jim Blandy <jimb@redhat.com>
parents: 961
diff changeset
471 error ("Snarf-documentation can only be called in an undumped Emacs");
6d0d442e2ada * doc.c (Fsnarf_documentation): Signal an error if this is
Jim Blandy <jimb@redhat.com>
parents: 961
diff changeset
472 #endif
6d0d442e2ada * doc.c (Fsnarf_documentation): Signal an error if this is
Jim Blandy <jimb@redhat.com>
parents: 961
diff changeset
473
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 CHECK_STRING (filename, 0);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 #ifndef CANNOT_DUMP
463
ffdbf3445088 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 312
diff changeset
477 name = (char *) alloca (XSTRING (filename)->size + 14);
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 577
diff changeset
478 strcpy (name, "../etc/");
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 #else /* CANNOT_DUMP */
6030
8b3f54fb451f (get_doc_string, Snarf_documentation): Use new variable doc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5784
diff changeset
480 CHECK_STRING (Vdoc_directory, 0);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 name = (char *) alloca (XSTRING (filename)->size +
6030
8b3f54fb451f (get_doc_string, Snarf_documentation): Use new variable doc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5784
diff changeset
482 XSTRING (Vdoc_directory)->size + 1);
8b3f54fb451f (get_doc_string, Snarf_documentation): Use new variable doc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5784
diff changeset
483 strcpy (name, XSTRING (Vdoc_directory)->data);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 #endif /* CANNOT_DUMP */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 strcat (name, XSTRING (filename)->data); /*** Add this line ***/
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 #ifdef VMS
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 #ifndef VMS4_4
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 /* For VMS versions with limited file name syntax,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 convert the name to something VMS will allow. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 p = name;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 while (*p)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 if (*p == '-')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 *p = '_';
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 p++;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 #endif /* not VMS4_4 */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 #ifdef VMS4_4
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 strcpy (name, sys_translate_unix (name));
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 #endif /* VMS4_4 */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 #endif /* VMS */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 fd = open (name, O_RDONLY, 0);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 if (fd < 0)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 report_file_error ("Opening doc string file",
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 Fcons (build_string (name), Qnil));
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 Vdoc_file_name = filename;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 filled = 0;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 pos = 0;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 while (1)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 if (filled < 512)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 filled += read (fd, &buf[filled], sizeof buf - 1 - filled);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 if (!filled)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 break;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 buf[filled] = 0;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 p = buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 end = buf + (filled < 512 ? filled : filled - 128);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 while (p != end && *p != '\037') p++;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 /* p points to ^_Ffunctionname\n or ^_Vvarname\n. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 if (p != end)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 end = index (p, '\n');
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
525 sym = oblookup (Vobarray, p + 2,
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
526 multibyte_chars_in_text (p + 2, end - p - 2),
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
527 end - p - 2);
9133
48820d57a24c (get_doc_string, Fdocumentation, Fdocumentation_property,
Karl Heuer <kwzh@gnu.org>
parents: 9087
diff changeset
528 if (SYMBOLP (sym))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 /* Attach a docstring to a variable? */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 if (p[1] == 'V')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 /* Install file-position as variable-documentation property
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 and make it negative for a user-variable
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 (doc starts with a `*'). */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 Fput (sym, Qvariable_documentation,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 make_number ((pos + end + 1 - buf)
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 * (end[1] == '*' ? -1 : 1)));
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
541 /* Attach a docstring to a function? */
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 else if (p[1] == 'F')
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
543 store_function_docstring (sym, pos + end + 1 - buf);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544
1651
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
545 else
ef09501a0a9b * doc.c (store_function_docstring): New function, made from part
Jim Blandy <jimb@redhat.com>
parents: 1511
diff changeset
546 error ("DOC file invalid at position %d", pos);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 pos += end - buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 filled -= end - buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 bcopy (end, buf, filled);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 close (fd);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 return Qnil;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 DEFUN ("substitute-command-keys", Fsubstitute_command_keys,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 Ssubstitute_command_keys, 1, 1, 0,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 "Substitute key descriptions for command names in STRING.\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 Return a new string which is STRING with substrings of the form \\=\\[COMMAND]\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 replaced by either: a keystroke sequence that will invoke COMMAND,\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 or \"M-x COMMAND\" if COMMAND is not on any keys.\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 Substrings of the form \\=\\{MAPVAR} are replaced by summaries\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 \(made by describe-bindings) of the value of MAPVAR, taken as a keymap.\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 Substrings of the form \\=\\<MAPVAR> specify to use the value of MAPVAR\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 as the keymap for future \\=\\[COMMAND] substrings.\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 \\=\\= quotes the following character and is discarded;\n\
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output.")
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
569 (string)
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
570 Lisp_Object string;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 unsigned char *buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 int changed = 0;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 register unsigned char *strp;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 register unsigned char *bufp;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 int idx;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 int bsize;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 unsigned char *new;
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
579 Lisp_Object tem;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 Lisp_Object keymap;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 unsigned char *start;
20802
8cd0a6343a84 (Fsubstitute_command_keys): Declare length_byte out of
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
582 int length, length_byte;
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
583 Lisp_Object name;
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
584 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
585 int multibyte;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
586 int nchars;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
588 if (NILP (string))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 return Qnil;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
591 CHECK_STRING (string, 0);
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
592 tem = Qnil;
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
593 keymap = Qnil;
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
594 name = Qnil;
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
595 GCPRO4 (string, tem, keymap, name);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
597 multibyte = STRING_MULTIBYTE (string);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
598 nchars = 0;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
599
5784
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
600 /* KEYMAP is either nil (which means search all the active keymaps)
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
601 or a specified local map (which means search just that and the
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
602 global map). If non-nil, it might come from Voverriding_local_map,
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
603 or from a \\<mapname> construct in STRING itself.. */
12261
cd2e7821bbf5 (Fsubstitute_command_keys):
Karl Heuer <kwzh@gnu.org>
parents: 11925
diff changeset
604 keymap = current_kboard->Voverriding_terminal_local_map;
cd2e7821bbf5 (Fsubstitute_command_keys):
Karl Heuer <kwzh@gnu.org>
parents: 11925
diff changeset
605 if (NILP (keymap))
cd2e7821bbf5 (Fsubstitute_command_keys):
Karl Heuer <kwzh@gnu.org>
parents: 11925
diff changeset
606 keymap = Voverriding_local_map;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
608 bsize = STRING_BYTES (XSTRING (string));
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 bufp = buf = (unsigned char *) xmalloc (bsize);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
611 strp = (unsigned char *) XSTRING (string)->data;
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
612 while (strp < XSTRING (string)->data + STRING_BYTES (XSTRING (string)))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 if (strp[0] == '\\' && strp[1] == '=')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 /* \= quotes the next character;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 thus, to put in \[ without its special meaning, use \=\[. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 changed = 1;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
619 strp += 2;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
620 if (multibyte)
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
621 {
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
622 int len;
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
623 int maxlen = XSTRING (string)->data + STRING_BYTES (XSTRING (string)) - strp;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
624
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
625 STRING_CHAR_AND_LENGTH (strp, maxlen, len);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
626 if (len == 1)
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
627 *bufp = *strp;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
628 else
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
629 bcopy (strp, bufp, len);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
630 strp += len;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
631 bufp += len;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
632 nchars++;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
633 }
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
634 else
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
635 *bufp++ = *strp++, nchars++;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 else if (strp[0] == '\\' && strp[1] == '[')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 {
5248
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
639 Lisp_Object firstkey;
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
640
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 changed = 1;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 strp += 2; /* skip \[ */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 start = strp;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
645 while ((strp - (unsigned char *) XSTRING (string)->data
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
646 < STRING_BYTES (XSTRING (string)))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 && *strp != ']')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 strp++;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
649 length_byte = strp - start;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
650
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 strp++; /* skip ] */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 /* Save STRP in IDX. */
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
654 idx = strp - (unsigned char *) XSTRING (string)->data;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
655 tem = Fintern (make_string (start, length_byte), Qnil);
5784
9c3be8e0d2ef (Fsubstitute_command_keys): Pass keymap as that arg
Richard M. Stallman <rms@gnu.org>
parents: 5550
diff changeset
656 tem = Fwhere_is_internal (tem, keymap, Qt, Qnil);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657
5248
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
658 /* Disregard menu bar bindings; it is positively annoying to
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
659 mention them when there's no menu bar, and it isn't terribly
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
660 useful even when there is a menu bar. */
5377
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
661 if (!NILP (tem))
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
662 {
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
663 firstkey = Faref (tem, make_number (0));
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
664 if (EQ (firstkey, Qmenu_bar))
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
665 tem = Qnil;
7a8463c07d8f (Fsubstitute_command_keys): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5248
diff changeset
666 }
5248
27d6275810a7 (Fsubstitute_command_keys): Ignore menu bar bindings.
Richard M. Stallman <rms@gnu.org>
parents: 4716
diff changeset
667
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
668 if (NILP (tem)) /* but not on any keys */
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 new = (unsigned char *) xrealloc (buf, bsize += 4);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 bufp += new - buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 buf = new;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 bcopy ("M-x ", bufp, 4);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 bufp += 4;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
675 nchars += 4;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
676 if (multibyte)
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
677 length = multibyte_chars_in_text (start, length_byte);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
678 else
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
679 length = length_byte;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 goto subst;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 else
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 { /* function is on a key */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 tem = Fkey_description (tem);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 goto subst_string;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 /* \{foo} is replaced with a summary of the keymap (symbol-value foo).
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 \<foo> just sets the keymap used for \[cmd]. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 else if (strp[0] == '\\' && (strp[1] == '{' || strp[1] == '<'))
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 struct buffer *oldbuf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 changed = 1;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 strp += 2; /* skip \{ or \< */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 start = strp;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
698 while ((strp - (unsigned char *) XSTRING (string)->data
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
699 < XSTRING (string)->size)
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 && *strp != '}' && *strp != '>')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 strp++;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
702
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
703 length_byte = strp - start;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 strp++; /* skip } or > */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 /* Save STRP in IDX. */
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
707 idx = strp - (unsigned char *) XSTRING (string)->data;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 /* Get the value of the keymap in TEM, or nil if undefined.
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 Do this while still in the user's current buffer
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 in case it is a local variable. */
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
712 name = Fintern (make_string (start, length_byte), Qnil);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 tem = Fboundp (name);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
714 if (! NILP (tem))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 tem = Fsymbol_value (name);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
717 if (! NILP (tem))
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
718 tem = get_keymap_1 (tem, 0, 1);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 /* Now switch to a temp buffer. */
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 oldbuf = current_buffer;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 set_buffer_internal (XBUFFER (Vprin1_to_string_buffer));
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
725 if (NILP (tem))
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 name = Fsymbol_name (name);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 insert_string ("\nUses keymap \"");
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
729 insert_from_string (name, 0, 0,
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
730 XSTRING (name)->size,
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
731 STRING_BYTES (XSTRING (name)), 1);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 insert_string ("\", which is not currently defined.\n");
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 if (start[-1] == '<') keymap = Qnil;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 else if (start[-1] == '<')
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 keymap = tem;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 else
18746
c7ada1684ebb (Fsubstitute_command_keys): Add missing describe_map_tree argument.
Richard M. Stallman <rms@gnu.org>
parents: 14648
diff changeset
738 describe_map_tree (tem, 1, Qnil, Qnil, (char *)0, 1, 0, 0);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 tem = Fbuffer_string ();
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 Ferase_buffer ();
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 set_buffer_internal (oldbuf);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 subst_string:
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 start = XSTRING (tem)->data;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 length = XSTRING (tem)->size;
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
746 length_byte = STRING_BYTES (XSTRING (tem));
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 subst:
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
748 new = (unsigned char *) xrealloc (buf, bsize += length_byte);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 bufp += new - buf;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 buf = new;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
751 bcopy (start, bufp, length_byte);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
752 bufp += length_byte;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
753 nchars += length;
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
754 /* Check STRING again in case gc relocated it. */
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
755 strp = (unsigned char *) XSTRING (string)->data + idx;
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 }
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
757 else if (! multibyte) /* just copy other chars */
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
758 *bufp++ = *strp++, nchars++;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
759 else
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
760 {
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
761 int len;
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20802
diff changeset
762 int maxlen = XSTRING (string)->data + STRING_BYTES (XSTRING (string)) - strp;
20619
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
763
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
764 STRING_CHAR_AND_LENGTH (strp, maxlen, len);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
765 if (len == 1)
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
766 *bufp = *strp;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
767 else
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
768 bcopy (strp, bufp, len);
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
769 strp += len;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
770 bufp += len;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
771 nchars++;
0a559893331d Include charset.h.
Richard M. Stallman <rms@gnu.org>
parents: 18746
diff changeset
772 }
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 if (changed) /* don't bother if nothing substituted */
21252
fce0c8c246d1 (Fsubstitute_command_keys): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
776 tem = make_string_from_bytes (buf, nchars, bufp - buf);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 else
14069
a45a97ebdf1c (Fdocumentation, Fdocumentation_property, Fsubstitute_command_keys):
Erik Naggum <erik@naggum.no>
parents: 13521
diff changeset
778 tem = string;
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 1651
diff changeset
779 xfree (buf);
1511
ff88f962a982 * doc.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents: 1116
diff changeset
780 RETURN_UNGCPRO (tem);
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 }
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21252
diff changeset
783 void
297
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 syms_of_doc ()
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 {
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 DEFVAR_LISP ("internal-doc-file-name", &Vdoc_file_name,
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 "Name of file containing documentation strings of built-in symbols.");
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 Vdoc_file_name = Qnil;
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 defsubr (&Sdocumentation);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 defsubr (&Sdocumentation_property);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 defsubr (&Ssnarf_documentation);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 defsubr (&Ssubstitute_command_keys);
785f88514b16 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 }