annotate src/emodules.h @ 4407:4ee73bbe4f8e

Always use boyer_moore in ASCII or Latin-1 buffers with ASCII search strings. 2007-12-26 Aidan Kehoe <kehoea@parhasard.net> * casetab.c: Extend and correct some case table documentation. * search.c (search_buffer): Correct a bug where only the first entry for a character in the case equivalence table was examined in determining if the Boyer-Moore search algorithm is appropriate. If there are case mappings outside of the charset and row of the characters specified in the search string, those case mappings can be safely ignored (and Boyer-Moore search can be used) if we know from the buffer statistics that the corresponding characters cannot occur. * search.c (boyer_moore): Assert that we haven't been passed a string with varying characters sets or rows within character sets. That's what simple_search is for. In the very rare event that a character in the search string has a canonical case mapping that is not in the same character set and row, don't try to search for the canonical character, search for some other character that is in the the desired character set and row. Assert that the case table isn't corrupt. Do not search for any character case mappings that cannot possibly occur in the buffer, given the buffer metadata about its contents.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 26 Dec 2007 17:30:16 +0100
parents ecf1ebac70d8
children 19a72041c5ed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
1 /* emodules.h - Declarations and definitions for XEmacs loadable modules.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
2 (C) Copyright 1998, 1999 J. Kean Johnston. All rights reserved.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
3
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
4 This file is part of XEmacs.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
5
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
9 later version.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
10
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
14 for more details.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
15
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
20
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
21 #ifndef EMODULES_HDR
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
22
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
23 #ifndef EMODULES_GATHER_VERSION
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
24 #define EMODULES_HDR
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
25 #endif
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
26
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
27 #define EMODULES_VERSION "1.1.0"
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
28 #define EMODULES_MAJOR 1
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
29 #define EMODULES_MINOR 1
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
30 #define EMODULES_PATCH 0
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
31 #define EMODULES_REVISION (long)((EMODULES_MAJOR * 1000) + \
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
32 (EMODULES_MINOR * 10) + \
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
33 (EMODULES_PATCH))
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
34
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
35 #ifndef EMODULES_GATHER_VERSION
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
36 #include <config.h>
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
37 #include "lisp.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
38 #include "sysdep.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
39 #include "window.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
40 #include "buffer.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
41 #include "insdel.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
42 #include "frame.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
43 #include "lstream.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
44 #include "file-coding.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
45
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
46 /* Module loading technology version number */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
47 extern Lisp_Object Vmodule_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
48
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
49 /* XEmacs version Information */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
50 extern Lisp_Object Vemacs_major_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
51 extern Lisp_Object Vemacs_minor_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
52
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
53 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
54 * Load in a C module. The first argument is the name of the .so file, the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
55 * second is the name of the module, and the third is the module version.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
56 * If the module name is NULL, we will always reload the .so. If it is not
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
57 * NULL, we check to make sure we haven't loaded it before. If the version
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
58 * is specified, we check to make sure we didn't load the module of the
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
59 * specified version before. We also use these as checks when we open the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
60 * module to make sure we have the right module.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
61 */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
62 extern void emodules_load (const char *module, const char *name, const char *version);
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
63
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
64 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
65 * Because subrs and symbols added by a dynamic module are not part of
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
66 * the make-docfile process, we need a clean way to get the variables
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
67 * and functions documented. Since people don't like the idea of making
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
68 * shared modules use different versions of DEFSUBR() and DEFVAR_LISP()
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
69 * and friends, we need these two functions to insert the documentation
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
70 * into the right place. These functions will be called by the module
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
71 * init code, generated by ellcc during initialization mode.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
72 */
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
73 EXTERN_C MODULE_API void emodules_doc_subr (const char *objname,
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
74 const char *docstr);
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
75 EXTERN_C MODULE_API void emodules_doc_sym (const char *objname,
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
76 const char *docstr);
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
77
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
78 #define CDOCSUBR(Fname, DOC) emodules_doc_subr (Fname, DOC)
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
79 #define CDOCSYM(Sname, DOC) emodules_doc_sym (Sname, DOC)
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
80 #endif /* EMODULES_GATHER_VERSION */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
81
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
82 /* We should not expose module entities to the portable dumper. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1220
diff changeset
83 #if defined(PDUMP) && defined(EMACS_MODULE)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1750
diff changeset
84 #undef dump_add_root_block_ptr
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 1750
diff changeset
85 #define dump_add_root_block_ptr(varaddr,descaddr) DO_NOTHING
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
86 #undef dump_add_opaque
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
87 #define dump_add_opaque(varaddr,size) DO_NOTHING
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
88 #undef dump_add_root_block
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
89 #define dump_add_root_block(ptraddress,desc) DO_NOTHING
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 996
diff changeset
90 #undef dump_add_opaque_int
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
91 #define dump_add_opaque_int(int_varaddr) DO_NOTHING
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 996
diff changeset
92 #undef dump_add_opaque_fixnum
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
93 #define dump_add_opaque_fixnum(fixnum_varaddr) DO_NOTHING
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
94 #undef dump_add_root_lisp_object
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
95 #define dump_add_root_lisp_object(varaddr) DO_NOTHING
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
96 #undef dump_add_weak_object_chain
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
97 #define dump_add_weak_object_chain(varaddr) DO_NOTHING
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 996
diff changeset
98 #undef staticpro
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
99 #define staticpro(DSF_location) staticpro_nodump(DSF_location)
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1220
diff changeset
100 #undef unstaticpro
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1220
diff changeset
101 #define unstaticpro(DSF_location) unstaticpro_nodump(DFS_location)
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
102
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
103 #undef DEFSYMBOL
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
104 #define DEFSYMBOL(name) DEFSYMBOL_NO_DUMP (name)
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
105 #undef DEFSYMBOL_MULTIWORD_PREDICATE
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
106 #define DEFSYMBOL_MULTIWORD_PREDICATE(name) \
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
107 DEFSYMBOL_MULTIWORD_PREDICATE_NO_DUMP (name)
1220
848225013a08 [xemacs-hg @ 2003-01-17 16:59:20 by james]
james
parents: 1204
diff changeset
108 #undef defsymbol
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
109 #define defsymbol(location,name) defsymbol_nodump (location, name)
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1220
diff changeset
110
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1220
diff changeset
111 #endif /* defined(PDUMP) && defined(EMACS_MODULE) */
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
112
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
113 #endif /* EMODULES_HDR */