X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/3720fa2b1ac94b8ac9f193264bcf36990a5f43d2..c530e1c2a3a036d71942c354ba11b30a06341fd7:/src/doc.c diff --git a/src/doc.c b/src/doc.c index e57fb4d12b..c56f0b6c9d 100644 --- a/src/doc.c +++ b/src/doc.c @@ -1,6 +1,5 @@ /* Record indices of function doc strings stored in a file. - Copyright (C) 1985, 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 1985-1986, 1993-1995, 1997-2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -35,13 +34,9 @@ along with GNU Emacs. If not, see . */ #include "keymap.h" #include "buildobj.h" -Lisp_Object Vdoc_file_name; - Lisp_Object Qfunction_documentation; -/* A list of files used to build this Emacs binary. */ -static Lisp_Object Vbuild_files; - +extern Lisp_Object Qclosure; /* Buffer used for reading from documentation file. */ static char *get_doc_string_buffer; static int get_doc_string_buffer_size; @@ -126,12 +121,12 @@ get_doc_string (Lisp_Object filepos, int unibyte, int definition) if (minsize < 8) minsize = 8; name = (char *) alloca (minsize + SCHARS (file) + 8); - strcpy (name, SDATA (Vdoc_directory)); - strcat (name, SDATA (file)); + strcpy (name, SSDATA (Vdoc_directory)); + strcat (name, SSDATA (file)); } else { - name = (char *) SDATA (file); + name = SSDATA (file); } fd = emacs_open (name, O_RDONLY, 0); @@ -143,7 +138,7 @@ get_doc_string (Lisp_Object filepos, int unibyte, int definition) /* Preparing to dump; DOC file is probably not installed. So check in ../etc. */ strcpy (name, "../etc/"); - strcat (name, SDATA (file)); + strcat (name, SSDATA (file)); fd = emacs_open (name, O_RDONLY, 0); } @@ -266,7 +261,7 @@ get_doc_string (Lisp_Object filepos, int unibyte, int definition) the same way we would read bytes from a file. */ if (definition) { - read_bytecode_pointer = get_doc_string_buffer + offset; + read_bytecode_pointer = (unsigned char *) get_doc_string_buffer + offset; return Fread (Qlambda); } @@ -276,8 +271,10 @@ get_doc_string (Lisp_Object filepos, int unibyte, int definition) else { /* The data determines whether the string is multibyte. */ - EMACS_INT nchars = multibyte_chars_in_text (get_doc_string_buffer + offset, - to - (get_doc_string_buffer + offset)); + EMACS_INT nchars = + multibyte_chars_in_text (((unsigned char *) get_doc_string_buffer + + offset), + to - (get_doc_string_buffer + offset)); return make_string_from_bytes (get_doc_string_buffer + offset, nchars, to - (get_doc_string_buffer + offset)); @@ -360,6 +357,11 @@ string is passed through `substitute-command-keys'. */) else return Qnil; } + else if (FUNVECP (fun)) + { + /* Unless otherwise handled, funvecs have no documentation. */ + return Qnil; + } else if (STRINGP (fun) || VECTORP (fun)) { return build_string ("Keyboard macro."); @@ -387,6 +389,8 @@ string is passed through `substitute-command-keys'. */) else return Qnil; } + else if (EQ (funcar, Qclosure)) + return Fdocumentation (Fcdr (XCDR (fun)), raw); else if (EQ (funcar, Qmacro)) return Fdocumentation (Fcdr (fun), raw); else @@ -479,7 +483,7 @@ aren't strings. */) } else if (!STRINGP (tem)) /* Feval protects its argument. */ - tem = Feval (tem); + tem = Feval (tem, Qnil); if (NILP (raw) && STRINGP (tem)) tem = Fsubstitute_command_keys (tem); @@ -514,6 +518,8 @@ store_function_docstring (Lisp_Object fun, EMACS_INT offset) } else if (EQ (tem, Qmacro)) store_function_docstring (XCDR (fun), offset); + else if (EQ (tem, Qclosure)) + store_function_docstring (Fcdr (XCDR (fun)), offset); } /* Bytecode objects sometimes have slots for it. */ @@ -565,9 +571,9 @@ the same file name is found in the `doc-directory'. */) CHECK_STRING (Vdoc_directory); name = (char *) alloca (SCHARS (filename) + SCHARS (Vdoc_directory) + 1); - strcpy (name, SDATA (Vdoc_directory)); + strcpy (name, SSDATA (Vdoc_directory)); } - strcat (name, SDATA (filename)); /*** Add this line ***/ + strcat (name, SSDATA (filename)); /*** Add this line ***/ /* Vbuild_files is nil when temacs is run, and non-nil after that. */ if (NILP (Vbuild_files)) @@ -636,7 +642,8 @@ the same file name is found in the `doc-directory'. */) } sym = oblookup (Vobarray, p + 2, - multibyte_chars_in_text (p + 2, end - p - 2), + multibyte_chars_in_text ((unsigned char *) p + 2, + end - p - 2), end - p - 2); /* Check skip_file so that when a function is defined several times in different files (typically, once in xterm, once in @@ -691,10 +698,10 @@ Returns original STRING if no substitutions were made. Otherwise, a new string, without any text properties, is returned. */) (Lisp_Object string) { - unsigned char *buf; + char *buf; int changed = 0; register unsigned char *strp; - register unsigned char *bufp; + register char *bufp; EMACS_INT idx; EMACS_INT bsize; Lisp_Object tem; @@ -727,7 +734,7 @@ a new string, without any text properties, is returned. */) keymap = Voverriding_local_map; bsize = SBYTES (string); - bufp = buf = (unsigned char *) xmalloc (bsize); + bufp = buf = (char *) xmalloc (bsize); strp = SDATA (string); while (strp < SDATA (string) + SBYTES (string)) @@ -774,7 +781,7 @@ a new string, without any text properties, is returned. */) /* Save STRP in IDX. */ idx = strp - SDATA (string); - name = Fintern (make_string (start, length_byte), Qnil); + name = Fintern (make_string ((char *) start, length_byte), Qnil); do_remap: tem = Fwhere_is_internal (name, keymap, Qt, Qnil, Qnil); @@ -796,7 +803,7 @@ a new string, without any text properties, is returned. */) if (NILP (tem)) /* but not on any keys */ { EMACS_INT offset = bufp - buf; - buf = (unsigned char *) xrealloc (buf, bsize += 4); + buf = (char *) xrealloc (buf, bsize += 4); bufp = buf + offset; memcpy (bufp, "M-x ", 4); bufp += 4; @@ -841,7 +848,7 @@ a new string, without any text properties, is returned. */) /* Get the value of the keymap in TEM, or nil if undefined. Do this while still in the user's current buffer in case it is a local variable. */ - name = Fintern (make_string (start, length_byte), Qnil); + name = Fintern (make_string ((char *) start, length_byte), Qnil); tem = Fboundp (name); if (! NILP (tem)) { @@ -890,13 +897,13 @@ a new string, without any text properties, is returned. */) subst: { EMACS_INT offset = bufp - buf; - buf = (unsigned char *) xrealloc (buf, bsize += length_byte); + buf = (char *) xrealloc (buf, bsize += length_byte); bufp = buf + offset; memcpy (bufp, start, length_byte); bufp += length_byte; nchars += length; /* Check STRING again in case gc relocated it. */ - strp = (unsigned char *) SDATA (string) + idx; + strp = SDATA (string) + idx; } } else if (! multibyte) /* just copy other chars */ @@ -930,11 +937,11 @@ syms_of_doc (void) Qfunction_documentation = intern_c_string ("function-documentation"); staticpro (&Qfunction_documentation); - DEFVAR_LISP ("internal-doc-file-name", &Vdoc_file_name, + DEFVAR_LISP ("internal-doc-file-name", Vdoc_file_name, doc: /* Name of file containing documentation strings of built-in symbols. */); Vdoc_file_name = Qnil; - DEFVAR_LISP ("build-files", &Vbuild_files, + DEFVAR_LISP ("build-files", Vbuild_files, doc: /* A list of files used to build this Emacs binary. */); Vbuild_files = Qnil; @@ -943,6 +950,3 @@ syms_of_doc (void) defsubr (&Ssnarf_documentation); defsubr (&Ssubstitute_command_keys); } - -/* arch-tag: 56281d4d-6949-43e2-be2e-f6517de744ba - (do not change this comment) */