annotate lwlib/xrdb-cpp.c @ 35926:d2997845573f

(hi-lock-mode): Toggling hi-lock-mode now affects all buffers. When hi-lock turned on rather than only checking current buffer for regexps, all buffers are checked. Moved activation of font-lock to hi-lock-refontify. When font-lock turned off rather than removing added highlighting just in current buffer, remove it in all buffers. Changed edit menu text from "Automatic Highlighting" to "Regexp Highlighting" Documentation for highlighting phrases, minor documentation changes. (hi-lock-set-file-patterns): Execute only if there are new or existing file patterns. (hi-lock-refontify): Assume font-lock-fontify-buffer will first unfontify and, if a support mode is active, will not refontify the whole buffer. If necessary, turn on font lock. (Removed font-lock-unfontify and font-lock support-mode-specific calls, such as lazy-lock-fontify-window.) (hi-lock-find-patterns): Do not turn on hi-lock-mode even if patterns are found. Not useful now since find-file-hook is removed if hi-lock is off, but may be needed for per-buffer hi-lock activation. (hi-lock-face-phrase-buffer): New function. Also added related menu item and keybinding. (highlight-phrase): New alias, to hi-lock-face-phrase-buffer. (hi-lock-process-phrase): New function. (hi-lock-line-face-buffer): Doc fixes. (hi-lock-face-buffer): Doc fixes. (hi-lock-unface-buffer): Doc fixes.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 06 Feb 2001 15:43:37 +0000
parents e0d966fb548f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25842
Dave Love <fx@gnu.org>
parents:
diff changeset
1 /* A general interface to the widgets of different toolkits.
Dave Love <fx@gnu.org>
parents:
diff changeset
2 Copyright (C) 1992, 1993 Lucid, Inc.
Dave Love <fx@gnu.org>
parents:
diff changeset
3
Dave Love <fx@gnu.org>
parents:
diff changeset
4 This file is part of the Lucid Widget Library.
Dave Love <fx@gnu.org>
parents:
diff changeset
5
Dave Love <fx@gnu.org>
parents:
diff changeset
6 The Lucid Widget Library is free software; you can redistribute it and/or
Dave Love <fx@gnu.org>
parents:
diff changeset
7 modify it under the terms of the GNU General Public License as published by
Dave Love <fx@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
Dave Love <fx@gnu.org>
parents:
diff changeset
9 any later version.
Dave Love <fx@gnu.org>
parents:
diff changeset
10
Dave Love <fx@gnu.org>
parents:
diff changeset
11 The Lucid Widget Library is distributed in the hope that it will be useful,
Dave Love <fx@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
Dave Love <fx@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Dave Love <fx@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
Dave Love <fx@gnu.org>
parents:
diff changeset
15
Dave Love <fx@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
Dave Love <fx@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
Dave Love <fx@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Dave Love <fx@gnu.org>
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
Dave Love <fx@gnu.org>
parents:
diff changeset
20
Dave Love <fx@gnu.org>
parents:
diff changeset
21 /* This code reads a resource database file and filters it through cpp
Dave Love <fx@gnu.org>
parents:
diff changeset
22 with the same set of preprocessor defines that `xrdb' uses.
Dave Love <fx@gnu.org>
parents:
diff changeset
23 Call lwlib_xrdb_initialize(dpy) once, and then call the function
Dave Love <fx@gnu.org>
parents:
diff changeset
24 lwlib_GetFileDatabase() instead of XrmGetFileDatabase(),
Dave Love <fx@gnu.org>
parents:
diff changeset
25 and lwlib_CombineFileDatabase() instead of XrmCombineFileDatabase().
Dave Love <fx@gnu.org>
parents:
diff changeset
26 */
Dave Love <fx@gnu.org>
parents:
diff changeset
27
Dave Love <fx@gnu.org>
parents:
diff changeset
28 #ifndef __STDC_EXTENDED__
Dave Love <fx@gnu.org>
parents:
diff changeset
29 #define __STDC_EXTENDED__
Dave Love <fx@gnu.org>
parents:
diff changeset
30 #endif
Dave Love <fx@gnu.org>
parents:
diff changeset
31
26087
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25842
diff changeset
32 #ifdef HAVE_CONFIG_H
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25842
diff changeset
33 #include <config.h>
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25842
diff changeset
34 #endif
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25842
diff changeset
35
25842
Dave Love <fx@gnu.org>
parents:
diff changeset
36 #include <stdio.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
37 #include <ctype.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
38 #include <X11/Xlib.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
39 #include <X11/Xos.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
40 #include <X11/Intrinsic.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
41 #include <X11/Xmu/SysUtil.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
42 #include <sys/stat.h>
Dave Love <fx@gnu.org>
parents:
diff changeset
43
Dave Love <fx@gnu.org>
parents:
diff changeset
44 extern char *index ();
Dave Love <fx@gnu.org>
parents:
diff changeset
45
Dave Love <fx@gnu.org>
parents:
diff changeset
46 static int
Dave Love <fx@gnu.org>
parents:
diff changeset
47 file_p (path)
Dave Love <fx@gnu.org>
parents:
diff changeset
48 char *path;
Dave Love <fx@gnu.org>
parents:
diff changeset
49 {
Dave Love <fx@gnu.org>
parents:
diff changeset
50 struct stat status;
Dave Love <fx@gnu.org>
parents:
diff changeset
51
Dave Love <fx@gnu.org>
parents:
diff changeset
52 return (access (path, R_OK) == 0 /* exists and is readable */
Dave Love <fx@gnu.org>
parents:
diff changeset
53 && stat (path, &status) == 0 /* get the status */
Dave Love <fx@gnu.org>
parents:
diff changeset
54 && (status.st_mode & S_IFDIR) == 0); /* not a directory */
Dave Love <fx@gnu.org>
parents:
diff changeset
55 }
Dave Love <fx@gnu.org>
parents:
diff changeset
56
Dave Love <fx@gnu.org>
parents:
diff changeset
57 #ifndef CPP_PROGRAM
Dave Love <fx@gnu.org>
parents:
diff changeset
58 #define CPP_PROGRAM "/lib/cpp"
Dave Love <fx@gnu.org>
parents:
diff changeset
59 #endif
Dave Love <fx@gnu.org>
parents:
diff changeset
60
Dave Love <fx@gnu.org>
parents:
diff changeset
61 static char cpp_string [BUFSIZ];
Dave Love <fx@gnu.org>
parents:
diff changeset
62 static char *cpp_file = 0;
Dave Love <fx@gnu.org>
parents:
diff changeset
63
Dave Love <fx@gnu.org>
parents:
diff changeset
64 #define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100)
Dave Love <fx@gnu.org>
parents:
diff changeset
65
Dave Love <fx@gnu.org>
parents:
diff changeset
66 void
Dave Love <fx@gnu.org>
parents:
diff changeset
67 lwlib_xrdb_initialize (display)
Dave Love <fx@gnu.org>
parents:
diff changeset
68 Display *display;
Dave Love <fx@gnu.org>
parents:
diff changeset
69 {
Dave Love <fx@gnu.org>
parents:
diff changeset
70 Screen *screen;
Dave Love <fx@gnu.org>
parents:
diff changeset
71 Visual *visual;
Dave Love <fx@gnu.org>
parents:
diff changeset
72 char server [255];
Dave Love <fx@gnu.org>
parents:
diff changeset
73 char *colon, *s;
Dave Love <fx@gnu.org>
parents:
diff changeset
74
Dave Love <fx@gnu.org>
parents:
diff changeset
75 #define Push(str) \
Dave Love <fx@gnu.org>
parents:
diff changeset
76 (strncpy (s, str, sizeof(str)), s += (sizeof(str)-1))
Dave Love <fx@gnu.org>
parents:
diff changeset
77
Dave Love <fx@gnu.org>
parents:
diff changeset
78 #define Print(str, thing) \
Dave Love <fx@gnu.org>
parents:
diff changeset
79 (sprintf (s, str, thing), s = index (s, 0))
Dave Love <fx@gnu.org>
parents:
diff changeset
80
Dave Love <fx@gnu.org>
parents:
diff changeset
81 s = cpp_string;
Dave Love <fx@gnu.org>
parents:
diff changeset
82 Push (CPP_PROGRAM);
Dave Love <fx@gnu.org>
parents:
diff changeset
83
Dave Love <fx@gnu.org>
parents:
diff changeset
84 Push (" -DCLIENTHOST=");
Dave Love <fx@gnu.org>
parents:
diff changeset
85 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string));
Dave Love <fx@gnu.org>
parents:
diff changeset
86 s = index (s, 0);
Dave Love <fx@gnu.org>
parents:
diff changeset
87 Push (" -DSERVERHOST=");
Dave Love <fx@gnu.org>
parents:
diff changeset
88 strcpy (s, XDisplayName (DisplayString (display)));
Dave Love <fx@gnu.org>
parents:
diff changeset
89 colon = index (s, ':');
Dave Love <fx@gnu.org>
parents:
diff changeset
90 if (colon == s)
Dave Love <fx@gnu.org>
parents:
diff changeset
91 {
Dave Love <fx@gnu.org>
parents:
diff changeset
92 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string));
Dave Love <fx@gnu.org>
parents:
diff changeset
93 s = index (s, 0);
Dave Love <fx@gnu.org>
parents:
diff changeset
94 }
Dave Love <fx@gnu.org>
parents:
diff changeset
95 else if (colon)
Dave Love <fx@gnu.org>
parents:
diff changeset
96 s = colon;
Dave Love <fx@gnu.org>
parents:
diff changeset
97 else
Dave Love <fx@gnu.org>
parents:
diff changeset
98 s = index (s, 0);
Dave Love <fx@gnu.org>
parents:
diff changeset
99
Dave Love <fx@gnu.org>
parents:
diff changeset
100 Print (" -DVERSION=%d", ProtocolVersion(display));
Dave Love <fx@gnu.org>
parents:
diff changeset
101 Print (" -DREVISION=%d", ProtocolRevision(display));
Dave Love <fx@gnu.org>
parents:
diff changeset
102 Print (" -DVENDOR=\"%s\"", ServerVendor(display));
Dave Love <fx@gnu.org>
parents:
diff changeset
103 Print (" -DRELEASE=%d", VendorRelease(display));
Dave Love <fx@gnu.org>
parents:
diff changeset
104 screen = DefaultScreenOfDisplay(display);
Dave Love <fx@gnu.org>
parents:
diff changeset
105 visual = DefaultVisualOfScreen(screen);
Dave Love <fx@gnu.org>
parents:
diff changeset
106 Print (" -DWIDTH=%d", screen->width);
Dave Love <fx@gnu.org>
parents:
diff changeset
107 Print (" -DHEIGHT=%d", screen->height);
Dave Love <fx@gnu.org>
parents:
diff changeset
108 Print (" -DX_RESOLUTION=%d", Resolution(screen->width,screen->mwidth));
Dave Love <fx@gnu.org>
parents:
diff changeset
109 Print (" -DY_RESOLUTION=%d", Resolution(screen->height,screen->mheight));
Dave Love <fx@gnu.org>
parents:
diff changeset
110 Print (" -DPLANES=%d", DisplayPlanes(display, DefaultScreen(display)));
Dave Love <fx@gnu.org>
parents:
diff changeset
111 Print (" -DBITS_PER_RGB=%d", visual->bits_per_rgb);
Dave Love <fx@gnu.org>
parents:
diff changeset
112 switch(visual->class) {
Dave Love <fx@gnu.org>
parents:
diff changeset
113 case StaticGray: Print (" -DCLASS=%s", "StaticGray"); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
114 case GrayScale: Print (" -DCLASS=%s", "GrayScale"); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
115 case StaticColor: Print (" -DCLASS=%s", "StaticColor");
Dave Love <fx@gnu.org>
parents:
diff changeset
116 Print (" -DCOLOR", 0); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
117 case PseudoColor: Print (" -DCLASS=%s", "PseudoColor");
Dave Love <fx@gnu.org>
parents:
diff changeset
118 Print (" -DCOLOR", 0); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
119 case TrueColor: Print (" -DCLASS=%s", "TrueColor");
Dave Love <fx@gnu.org>
parents:
diff changeset
120 Print (" -DCOLOR", 0); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
121 case DirectColor: Print (" -DCLASS=%s", "DirectColor");
Dave Love <fx@gnu.org>
parents:
diff changeset
122 Print (" -DCOLOR", 0); break;
Dave Love <fx@gnu.org>
parents:
diff changeset
123 default:
Dave Love <fx@gnu.org>
parents:
diff changeset
124 fprintf (stderr, "unexpected visual class=%d\n", visual->class);
Dave Love <fx@gnu.org>
parents:
diff changeset
125 exit (-1);
Dave Love <fx@gnu.org>
parents:
diff changeset
126 }
Dave Love <fx@gnu.org>
parents:
diff changeset
127 *s++ = ' ';
Dave Love <fx@gnu.org>
parents:
diff changeset
128 *s = 0;
Dave Love <fx@gnu.org>
parents:
diff changeset
129 cpp_file = s;
Dave Love <fx@gnu.org>
parents:
diff changeset
130 }
Dave Love <fx@gnu.org>
parents:
diff changeset
131
Dave Love <fx@gnu.org>
parents:
diff changeset
132 XrmDatabase
Dave Love <fx@gnu.org>
parents:
diff changeset
133 lwlib_GetFileDatabase (path)
Dave Love <fx@gnu.org>
parents:
diff changeset
134 char *path;
Dave Love <fx@gnu.org>
parents:
diff changeset
135 {
Dave Love <fx@gnu.org>
parents:
diff changeset
136 XrmDatabase db = 0;
Dave Love <fx@gnu.org>
parents:
diff changeset
137 char line [BUFSIZ];
Dave Love <fx@gnu.org>
parents:
diff changeset
138 char *s;
Dave Love <fx@gnu.org>
parents:
diff changeset
139 FILE *file;
Dave Love <fx@gnu.org>
parents:
diff changeset
140
Dave Love <fx@gnu.org>
parents:
diff changeset
141 if (! file_p (path))
Dave Love <fx@gnu.org>
parents:
diff changeset
142 return 0;
Dave Love <fx@gnu.org>
parents:
diff changeset
143
Dave Love <fx@gnu.org>
parents:
diff changeset
144 strcpy (cpp_file, path);
Dave Love <fx@gnu.org>
parents:
diff changeset
145 if (! (file = popen (cpp_string, "r")))
Dave Love <fx@gnu.org>
parents:
diff changeset
146 {
Dave Love <fx@gnu.org>
parents:
diff changeset
147 fprintf (stderr,
Dave Love <fx@gnu.org>
parents:
diff changeset
148 "couldn't execute %s; resource file %s file not munged.\n",
Dave Love <fx@gnu.org>
parents:
diff changeset
149 CPP_PROGRAM, path);
Dave Love <fx@gnu.org>
parents:
diff changeset
150 return XrmGetFileDatabase (path);
Dave Love <fx@gnu.org>
parents:
diff changeset
151 }
Dave Love <fx@gnu.org>
parents:
diff changeset
152 while (s = fgets (line, sizeof (line), file))
Dave Love <fx@gnu.org>
parents:
diff changeset
153 {
Dave Love <fx@gnu.org>
parents:
diff changeset
154 char ch, *tail;
Dave Love <fx@gnu.org>
parents:
diff changeset
155 if (*s == '!') continue;
Dave Love <fx@gnu.org>
parents:
diff changeset
156 for (; ((ch = *s) != '\n') && isspace(ch); s++);
Dave Love <fx@gnu.org>
parents:
diff changeset
157 if ((ch == '\0') || (ch == '\n') || (ch == '#')) continue;
Dave Love <fx@gnu.org>
parents:
diff changeset
158 tail = s + strlen (s);
Dave Love <fx@gnu.org>
parents:
diff changeset
159 if (tail - s < 3) continue; /* this would be syntactically incorrect */
Dave Love <fx@gnu.org>
parents:
diff changeset
160 while (*(tail-1) == '\n' && /* handle \ at end of line */
Dave Love <fx@gnu.org>
parents:
diff changeset
161 *(tail-2) == '\\')
Dave Love <fx@gnu.org>
parents:
diff changeset
162 {
Dave Love <fx@gnu.org>
parents:
diff changeset
163 if (! fgets (tail, sizeof (line) - (tail - line), file))
Dave Love <fx@gnu.org>
parents:
diff changeset
164 continue;
Dave Love <fx@gnu.org>
parents:
diff changeset
165 tail += strlen (tail);
Dave Love <fx@gnu.org>
parents:
diff changeset
166 }
Dave Love <fx@gnu.org>
parents:
diff changeset
167 XrmPutLineResource (&db, s);
Dave Love <fx@gnu.org>
parents:
diff changeset
168 }
Dave Love <fx@gnu.org>
parents:
diff changeset
169 pclose (file);
Dave Love <fx@gnu.org>
parents:
diff changeset
170 return db;
Dave Love <fx@gnu.org>
parents:
diff changeset
171 }
Dave Love <fx@gnu.org>
parents:
diff changeset
172
Dave Love <fx@gnu.org>
parents:
diff changeset
173 #ifdef THIS_IS_X11R5
Dave Love <fx@gnu.org>
parents:
diff changeset
174
Dave Love <fx@gnu.org>
parents:
diff changeset
175 int
Dave Love <fx@gnu.org>
parents:
diff changeset
176 lwlib_CombineFileDatabase (path, target_db, override)
Dave Love <fx@gnu.org>
parents:
diff changeset
177 char *path;
Dave Love <fx@gnu.org>
parents:
diff changeset
178 XrmDatabase *target_db;
Dave Love <fx@gnu.org>
parents:
diff changeset
179 Bool override;
Dave Love <fx@gnu.org>
parents:
diff changeset
180 {
Dave Love <fx@gnu.org>
parents:
diff changeset
181 XrmDatabase source_db = lwlib_GetFileDatabase (path);
Dave Love <fx@gnu.org>
parents:
diff changeset
182 if (! source_db)
Dave Love <fx@gnu.org>
parents:
diff changeset
183 return (! file_p (path));
Dave Love <fx@gnu.org>
parents:
diff changeset
184 XrmCombineDatabase (source_db, target_db, override);
Dave Love <fx@gnu.org>
parents:
diff changeset
185 return 1;
Dave Love <fx@gnu.org>
parents:
diff changeset
186 }
Dave Love <fx@gnu.org>
parents:
diff changeset
187
Dave Love <fx@gnu.org>
parents:
diff changeset
188 #endif /* r5 */