annotate src/glade.c @ 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 91d4c8c65a0f
children 8f1ee2d15784
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1 /* glade.c
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 ** Description: Interface to `libglade' for XEmacs/GTK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 ** Created by: William M. Perry <wmperry@gnu.org>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7 ** Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 ** Copyright (c) 2000 Free Software Foundation
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 #if defined(HAVE_GLADE_H) || defined(HAVE_GLADE_GLADE_H)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14 /* For COMPILED_FUNCTIONP */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 #include "bytecode.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 #ifdef HAVE_GLADE_GLADE_H
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 #include <glade/glade.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21 #ifdef HAVE_GLADE_H
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 #include <glade.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 /* This is based on the code from rep-gtk 0.11 in libglade-support.c */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 connector (const gchar *handler_name, GtkObject *object,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29 const gchar *signal_name, const gchar *signal_data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
30 GtkObject *connect_object, gboolean after, gpointer user_data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
31 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
32 Lisp_Object func;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
33 Lisp_Object lisp_data = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
34
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 563
diff changeset
35 func = VOID_TO_LISP (user_data);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
36
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
37 if (NILP (func))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
38 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
39 /* Look for a lisp function called HANDLER_NAME */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40 func = intern (handler_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
41 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43 if (signal_data && signal_data[0])
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
45 lisp_data = Feval (Fread (build_string (signal_data)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48 /* obj, name, func, cb_data, object_signal, after_p */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49 Fgtk_signal_connect (build_gtk_object (object),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 intern (signal_name),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 func,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 lisp_data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 connect_object ? Qt : Qnil,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54 after ? Qt : Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57 /* This differs from lisp/subr.el (functionp) definition by allowing
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58 ** symbol names that may not necessarily be fboundp yet.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
60 static int __almost_functionp (Lisp_Object obj)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62 return (SYMBOLP (obj) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 SUBRP (obj) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64 COMPILED_FUNCTIONP (obj) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 EQ (Fcar_safe (obj), Qlambda));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 DEFUN ("glade-xml-signal-connect", Fglade_xml_signal_connect, 3, 3, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69 Connect a glade handler.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 (xml, handler_name, func))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 CHECK_GTK_OBJECT (xml);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 CHECK_STRING (handler_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 if (!__almost_functionp (func))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 func = wrong_type_argument (intern ("functionp"), func);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 glade_xml_signal_connect_full (GLADE_XML (XGTK_OBJECT (xml)->object),
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 826
diff changeset
82 (char*) XSTRING_DATA (handler_name),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 connector, LISP_TO_VOID (func));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84 return (Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 DEFUN ("glade-xml-signal-autoconnect", Fglade_xml_signal_autoconnect, 1, 1, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 Connect all glade handlers.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 (xml))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 CHECK_GTK_OBJECT (xml);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 glade_xml_signal_autoconnect_full (GLADE_XML (XGTK_OBJECT (xml)->object),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 connector, LISP_TO_VOID (Qnil));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 return (Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 DEFUN ("glade-xml-textdomain", Fglade_xml_textdomain, 1, 1, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 Return the textdomain of a GladeXML object.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 (xml))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104 gchar *the_domain = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
105
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 CHECK_GTK_OBJECT (xml);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 if (!GLADE_IS_XML (XGTK_OBJECT (xml)->object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
110 wtaerror ("Object is not a GladeXML type.", xml);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 #ifdef LIBGLADE_XML_TXTDOMAIN
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->txtdomain;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->textdomain;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 return (build_string (the_domain));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 void syms_of_glade (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123 DEFSUBR (Fglade_xml_signal_connect);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 DEFSUBR (Fglade_xml_signal_autoconnect);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 DEFSUBR (Fglade_xml_textdomain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 void vars_of_glade (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 Fprovide (intern ("glade"));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 #else /* !(HAVE_GLADE_H || HAVE_GLADE_GLADE_H) */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 #define syms_of_glade()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 #define vars_of_glade()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136 #endif