Mercurial > hg > xemacs-beta
annotate src/font-mgr.c @ 5176:8b2f75cecb89
rename objects* (.c, .h and .el files) to fontcolor*
-------------------- ChangeLog entries follow: --------------------
etc/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* dbxrc.in:
Rename objects.c -> fontcolor.c.
lisp/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* dumped-lisp.el (preloaded-file-list):
* font.el (font-tty-find-closest-color):
* fontcolor.el:
* fontcolor.el (ws-object-property-1): Removed.
* fontcolor.el (fontcolor-property-1): New.
* fontcolor.el (font-name):
* fontcolor.el (font-ascent):
* fontcolor.el (font-descent):
* fontcolor.el (font-width):
* fontcolor.el (font-height):
* fontcolor.el (font-proportional-p):
* fontcolor.el (font-properties):
* fontcolor.el (font-truename):
* fontcolor.el (color-name):
* fontcolor.el (color-rgb-components):
* x-faces.el:
Rename objects.el -> fontcolor.el.
lwlib/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* lwlib-colors.h:
objects*.h -> fontcolor*.h.
man/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* internals/internals.texi (A Summary of the Various XEmacs Modules):
* internals/internals.texi (Modules for other Display-Related Lisp Objects):
objects*.[ch] -> fontcolor*.[ch].
nt/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* xemacs.dsp:
* xemacs.mak:
* xemacs.mak (OPT_OBJS):
objects*.[ch] -> fontcolor*.[ch].
src/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* EmacsFrame.c:
* Makefile.in.in (x_objs):
* Makefile.in.in (mswindows_objs):
* Makefile.in.in (tty_objs):
* Makefile.in.in (gtk_objs):
* Makefile.in.in (objs):
* console-tty.h:
* console-x-impl.h:
* console-x-impl.h (struct x_device):
* console-x.h:
* console-xlike-inc.h:
* depend:
* device-gtk.c:
* device-msw.c:
* device-x.c:
* device-x.c (x_init_device):
* device-x.c (x_finish_init_device):
* device.c:
* devslots.h (MARKED_SLOT):
* emacs.c (main_1):
* event-Xt.c:
* event-gtk.c:
* event-msw.c:
* faces.c:
* font-mgr.c:
* fontcolor-gtk-impl.h:
* fontcolor-gtk.c:
* fontcolor-gtk.c (syms_of_fontcolor_gtk):
* fontcolor-gtk.c (console_type_create_fontcolor_gtk):
* fontcolor-gtk.c (vars_of_fontcolor_gtk):
* fontcolor-gtk.h:
* fontcolor-impl.h:
* fontcolor-msw-impl.h:
* fontcolor-msw.c:
* fontcolor-msw.c (syms_of_fontcolor_mswindows):
* fontcolor-msw.c (console_type_create_fontcolor_mswindows):
* fontcolor-msw.c (reinit_vars_of_fontcolor_mswindows):
* fontcolor-msw.c (vars_of_fontcolor_mswindows):
* fontcolor-msw.h:
* fontcolor-msw.h (mswindows_color_to_string):
* fontcolor-tty-impl.h:
* fontcolor-tty.c:
* fontcolor-tty.c (syms_of_fontcolor_tty):
* fontcolor-tty.c (console_type_create_fontcolor_tty):
* fontcolor-tty.c (vars_of_fontcolor_tty):
* fontcolor-tty.h:
* fontcolor-x-impl.h:
* fontcolor-x.c:
* fontcolor-x.c (syms_of_fontcolor_x):
* fontcolor-x.c (console_type_create_fontcolor_x):
* fontcolor-x.c (vars_of_fontcolor_x):
* fontcolor-x.c (Xatoms_of_fontcolor_x):
* fontcolor-x.h:
* fontcolor.c:
* fontcolor.c (syms_of_fontcolor):
* fontcolor.c (specifier_type_create_fontcolor):
* fontcolor.c (reinit_specifier_type_create_fontcolor):
* fontcolor.c (reinit_vars_of_fontcolor):
* fontcolor.c (vars_of_fontcolor):
* fontcolor.h:
* fontcolor.h (set_face_boolean_attached_to):
* frame-gtk.c:
* frame-x.c:
* glyphs-eimage.c:
* glyphs-gtk.c:
* glyphs-msw.c:
* glyphs-widget.c:
* glyphs-x.c:
* glyphs.c:
* gtk-glue.c:
* gtk-glue.c (xemacs_type_register):
* gtk-xemacs.c:
* inline.c:
* intl-win32.c:
* lisp.h:
* lrecord.h:
* mule-charset.c:
* native-gtk-toolbar.c:
* redisplay-msw.c:
* redisplay-tty.c:
* redisplay.c:
* select-x.c:
* select.c:
* symsinit.h:
* toolbar-msw.c:
* toolbar-msw.c (TOOLBAR_ITEM_ID_BITS):
* toolbar-x.c:
* ui-gtk.c:
* window.c:
Rename objects*.[ch] -> fontcolor*.[ch]. Fix up all references to
the old files (e.g. in #include statements, Makefiles,
functions like syms_of_objects_x(), etc.).
tests/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* reproduce-crashes.el (8):
objects*.[ch] -> fontcolor*.[ch].
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 22 Feb 2010 06:49:30 -0600 |
parents | 3c3c1d139863 |
children | 97eb4942aec8 |
rev | line source |
---|---|
3354 | 1 /* Lisp font handling implementation for X with Xft. |
2 | |
3 Copyright (C) 2003 Eric Knauel and Matthias Neubauer | |
4 Copyright (C) 2005 Eric Knauel | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
5 Copyright (C) 2004-2009 Free Software Foundation, Inc. |
3354 | 6 |
7 Authors: Eric Knauel <knauel@informatik.uni-tuebingen.de> | |
8 Matthias Neubauer <neubauer@informatik.uni-freiburg.de> | |
9 Stephen J. Turnbull <stephen@xemacs.org> | |
10 Created: 27 Oct 2003 | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
11 Updated: 18 November 2009 by Stephen J. Turnbull |
3354 | 12 |
13 This file is part of XEmacs. | |
14 | |
15 XEmacs is free software; you can redistribute it and/or modify it | |
16 under the terms of the GNU General Public License as published by the | |
17 Free Software Foundation; either version 2, or (at your option) any | |
18 later version. | |
19 | |
20 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
21 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
23 for more details. | |
24 | |
25 You should have received a copy of the GNU General Public License | |
26 along with XEmacs; see the file COPYING. If not, write to | |
27 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
28 Boston, MA 02111-1307, USA. */ | |
29 | |
30 /* Synched up with: Not in GNU Emacs. */ | |
31 | |
32 /* This module provides the Lisp interface to fonts in X11, including Xft, | |
33 but (at least at first) not GTK+ or Qt. | |
34 | |
35 Sealevel code should be in ../lwlib/lwlib-fonts.c or | |
36 ../lwlib/lwlib-colors.c. | |
37 */ | |
38 | |
39 #include <config.h> | |
40 #include "lisp.h" | |
41 #include "device.h" | |
42 #include "device-impl.h" | |
43 #include "console-x-impl.h" | |
5176
8b2f75cecb89
rename objects* (.c, .h and .el files) to fontcolor*
Ben Wing <ben@xemacs.org>
parents:
4982
diff
changeset
|
44 #include "fontcolor-x.h" |
8b2f75cecb89
rename objects* (.c, .h and .el files) to fontcolor*
Ben Wing <ben@xemacs.org>
parents:
4982
diff
changeset
|
45 #include "fontcolor-x-impl.h" |
3354 | 46 #include "hash.h" |
47 #include "font-mgr.h" | |
48 | |
4981
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
49 #include "sysfile.h" |
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
50 |
3354 | 51 /* #### TO DO #### |
52 . The "x-xft-*" and "x_xft_*" nomenclature is mostly redundant, especially | |
53 if we separate X fonts from Xft fonts, and use fontconfig more generally. | |
54 . We should support the most recent Xft first, old Xft libraries later. | |
55 . We may (think about it) wish to use fontconfig generally, even if we're | |
56 not using Xft. Either way, names that are really from fontconfig should | |
57 use the Fc* namespace. | |
58 . Mule-ize this file. | |
59 . Separate X Font Struct ops from Xft Font ops; give precedence to Xft but | |
60 allow fallback to X. | |
61 . Push decisions about font choice, defaults, fallbacks to Lisp; if we | |
62 really need efficiency, can reimplement in C later. | |
63 . Implement symbols interned in this file in the Q* namespace. | |
64 . Implement FcMatrix (Lisp vector). | |
65 . Implement FcCharSets (Lisp chartable? For implementation hints, see | |
66 FcCharSetFirstPage and FcCharSetNextPage). | |
67 . Implement FcConfigs. | |
68 DONE | |
69 . Fontconfig fontnames are encoded in UTF-8. | |
70 */ | |
71 | |
3360 | 72 Lisp_Object Qfont_mgr; |
3354 | 73 Lisp_Object Qfc_patternp; |
74 /* Lisp_Object Qfc_result_match; */ /* FcResultMatch */ | |
75 Lisp_Object Qfc_result_type_mismatch; /* FcResultTypeMismatch */ | |
76 Lisp_Object Qfc_result_no_match; /* FcResultNoMatch */ | |
77 Lisp_Object Qfc_result_no_id; /* FcResultNoId */ | |
78 Lisp_Object Qfc_internal_error; | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
79 Lisp_Object Qfc_match_pattern; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
80 Lisp_Object Qfc_match_font; |
3354 | 81 Lisp_Object Vxlfd_font_name_regexp; /* #### Really needed? */ |
3935 | 82 Fixnum xft_version; |
83 Fixnum fc_version; | |
3354 | 84 Fixnum debug_xft; /* Set to 1 enables lots of obnoxious messages. |
85 Setting it to 2 or 3 enables even more. */ | |
3931 | 86 #ifdef FONTCONFIG_EXPOSE_CONFIG |
87 Lisp_Object Qfc_configp; | |
88 static Lisp_Object Vfc_config_weak_list; | |
89 #endif | |
3354 | 90 |
91 /**************************************************************** | |
92 * FcPattern objects * | |
93 ****************************************************************/ | |
94 | |
95 static void | |
96 finalize_fc_pattern (void *header, int UNUSED (for_disksave)) | |
97 { | |
98 struct fc_pattern *p = (struct fc_pattern *) header; | |
99 if (p->fcpatPtr) | |
100 { | |
101 FcPatternDestroy (p->fcpatPtr); | |
102 p->fcpatPtr = 0; | |
103 } | |
104 } | |
105 | |
3906 | 106 static void |
107 print_fc_pattern (Lisp_Object obj, Lisp_Object printcharfun, | |
108 int UNUSED(escapeflag)) | |
109 { | |
110 struct fc_pattern *c = XFCPATTERN (obj); | |
111 if (print_readably) | |
112 printing_unreadable_object ("#<fc-pattern 0x%x>", c->header.uid); | |
113 write_fmt_string (printcharfun, "#<fc-pattern 0x%x>", c->header.uid); | |
114 } | |
115 | |
116 /* #### We really need an equal method and a hash method (required if you | |
117 have an equal method). For the equal method, we can probably use one | |
118 or both of | |
119 | |
120 -- Function: FcBool FcPatternEqual (const FcPattern *pa, const | |
121 FcPattern *pb); | |
122 Returns whether PA and PB are exactly alike. | |
123 | |
124 -- Function: FcBool FcPatternEqualSubset (const FcPattern *pa, const | |
125 FcPattern *pb, const FcObjectSet *os) | |
126 Returns whether PA and PB have exactly the same values for all of | |
127 the objects in OS. | |
128 | |
129 For the hash, we'll have to extract some subset of attributes. | |
130 | |
131 #### Crap. It's altogether unobvious what we need. x_color_instance | |
132 does have a hash method, but fonts are apparently special. I get the | |
133 feeling that for this to work properly we're going to need to switch | |
134 to fontconfig-based font specifications (although we can allow the | |
135 platform syntaxes, the underlying specification object will need to | |
136 conform to the fontconfig API, or more precisely the font-mgr API). | |
137 | |
138 I think the whole `font-truename' interface needs to be dropped. */ | |
139 | |
3354 | 140 static const struct memory_description fcpattern_description [] = { |
141 /* #### nothing here, is this right?? */ | |
142 { XD_END } | |
143 }; | |
144 | |
3906 | 145 DEFINE_LRECORD_IMPLEMENTATION("fc-pattern", fc_pattern, 0, |
146 0, print_fc_pattern, finalize_fc_pattern, | |
147 0, 0, fcpattern_description, | |
3354 | 148 struct fc_pattern); |
149 | |
150 /* | |
151 * Helper Functions | |
152 */ | |
153 static Lisp_Object make_xlfd_font_regexp (void); | |
154 static void string_list_to_fcobjectset (Lisp_Object list, FcObjectSet *os); | |
155 | |
156 /* | |
157 extract the C representation of the Lisp string STR and convert it | |
158 to the encoding used by the Fontconfig API for property and font | |
159 names. I suppose that Qnative is the right encoding, the manual | |
160 doesn't say much about this topic. This functions assumes that STR | |
161 is a Lisp string. | |
162 */ | |
163 #define extract_fcapi_string(str) \ | |
4981
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
164 (LISP_STRING_TO_EXTERNAL ((str), Qfc_font_name_encoding)) |
3354 | 165 |
3906 | 166 #define build_fcapi_string(str) \ |
4953
304aebb79cd3
function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents:
4932
diff
changeset
|
167 (build_extstring ((Extbyte *) (str), Qfc_font_name_encoding)) |
3906 | 168 |
3360 | 169 /* #### This homebrew lashup should be replaced with FcConstants. |
170 | |
171 fontconfig assumes that objects (property names) are statically allocated, | |
3354 | 172 and you will get bizarre results if you pass Lisp string data or strings |
173 allocated on the stack as objects. fontconfig _does_ copy values, so we | |
174 (I hope) don't have to worry about that member. | |
175 | |
176 Probably these functions don't get called so often that the memory leak | |
177 due to strdup'ing every time we add a property would matter, but XEmacs | |
178 _is_ a long-running process. So we hash them. | |
179 | |
180 I suspect that using symbol names or even keywords does not provide | |
181 assurance that the string won't move in memory. So we hash them | |
3360 | 182 ourselves; hash.c hashtables do not interpret the value pointers. |
183 | |
184 This array should be FcChar8**, but GCC 4.x bitches about signedness. */ | |
4932 | 185 static const Extbyte *fc_standard_properties[] = { |
3360 | 186 /* treated specially, ordered first */ |
187 "family", "size", | |
188 /* remaining are alphabetized by group */ | |
189 /* standard properties in fontconfig and Xft v.2 */ | |
190 "antialias", "aspect", "autohint", "charset", "dpi", "file", | |
3354 | 191 "foundry", "ftface", "globaladvance", "hinting", "index", "lang", |
192 "minspace", "outline", "pixelsize", "rasterizer", "rgba", "scalable", | |
3360 | 193 "scale", "slant", "spacing", "style", "verticallayout", "weight", |
194 /* common in modern fonts */ | |
195 "fontformat", "fontversion", | |
3354 | 196 /* obsolete after Xft v. 1 */ |
197 "charwidth", "charheight", "core", "encoding", "render" | |
198 }; | |
199 | |
200 static struct hash_table *fc_property_name_hash_table; | |
201 | |
202 /* #### Maybe fc_intern should be exposed to LISP? The idea is that | |
203 fc-pattern-add could warn or error if the property isn't interned. */ | |
204 | |
3469 | 205 static const Extbyte * |
3354 | 206 fc_intern (Lisp_Object property) |
207 { | |
208 const void *dummy; | |
3469 | 209 const Extbyte *prop = extract_fcapi_string (property); |
3354 | 210 const void *val = gethash (prop, fc_property_name_hash_table, &dummy); |
211 | |
212 /* extract_fcapi_string returns something alloca'd | |
213 so we can just drop the old value of prop on the floor */ | |
214 if (val) | |
3469 | 215 prop = (const Extbyte *) val; |
3354 | 216 else |
217 { | |
3469 | 218 prop = (const Extbyte *) FcStrCopy ((FcChar8 *) prop); |
3354 | 219 puthash (prop, NULL, fc_property_name_hash_table); |
220 } | |
221 return prop; | |
222 } | |
223 | |
224 DEFUN("fc-pattern-p", Ffc_pattern_p, 1, 1, 0, /* | |
225 Returns t if OBJECT is of type fc-pattern, nil otherwise. | |
226 */ | |
227 (object)) | |
228 { | |
229 return FCPATTERNP(object) ? Qt : Qnil; | |
230 } | |
231 | |
232 DEFUN("fc-pattern-create", Ffc_pattern_create, 0, 0, 0, /* | |
233 Return a new, empty fc-pattern object. | |
234 */ | |
235 ()) | |
236 { | |
237 fc_pattern *fcpat = | |
238 ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); | |
239 | |
240 fcpat->fcpatPtr = FcPatternCreate(); | |
241 return wrap_fcpattern(fcpat); | |
242 } | |
243 | |
244 DEFUN("fc-name-parse", Ffc_name_parse, 1, 1, 0, /* | |
245 Parse an Fc font name and return its representation as a fc pattern object. | |
246 */ | |
247 (name)) | |
248 { | |
249 struct fc_pattern *fcpat = | |
250 ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); | |
251 | |
3906 | 252 CHECK_STRING(name); |
3354 | 253 |
3469 | 254 fcpat->fcpatPtr = FcNameParse ((FcChar8 *) extract_fcapi_string (name)); |
3354 | 255 return wrap_fcpattern(fcpat); |
256 } | |
257 | |
258 /* #### Ga-a-ack! Xft's similar function is actually a different API. | |
259 We provide both. */ | |
260 DEFUN("fc-name-unparse", Ffc_name_unparse, 1, 1, 0, /* | |
261 Unparse an fc pattern object to a string. | |
262 */ | |
263 (pattern)) | |
264 { | |
4799
ca99a807b025
Free, rather than discard, the return value of FcNameUnparse. See message
Jerry James <james@xemacs.org>
parents:
4758
diff
changeset
|
265 FcChar8 *name; |
ca99a807b025
Free, rather than discard, the return value of FcNameUnparse. See message
Jerry James <james@xemacs.org>
parents:
4758
diff
changeset
|
266 Lisp_Object result; |
3354 | 267 CHECK_FCPATTERN(pattern); |
4799
ca99a807b025
Free, rather than discard, the return value of FcNameUnparse. See message
Jerry James <james@xemacs.org>
parents:
4758
diff
changeset
|
268 name = FcNameUnparse (XFCPATTERN_PTR (pattern)); |
ca99a807b025
Free, rather than discard, the return value of FcNameUnparse. See message
Jerry James <james@xemacs.org>
parents:
4758
diff
changeset
|
269 result = build_fcapi_string (name); |
4976
16112448d484
Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
270 xfree (name); |
4799
ca99a807b025
Free, rather than discard, the return value of FcNameUnparse. See message
Jerry James <james@xemacs.org>
parents:
4758
diff
changeset
|
271 return result; |
3354 | 272 } |
273 | |
274 DEFUN("fc-pattern-duplicate", Ffc_pattern_duplicate, 1, 1, 0, /* | |
275 Make a copy of the fc pattern object PATTERN and return it. | |
276 */ | |
277 (pattern)) | |
278 { | |
279 struct fc_pattern *copy = NULL; | |
280 CHECK_FCPATTERN(pattern); | |
281 | |
282 copy = ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); | |
283 copy->fcpatPtr = FcPatternDuplicate(XFCPATTERN_PTR(pattern)); | |
284 return wrap_fcpattern(copy); | |
285 } | |
286 | |
287 DEFUN("fc-pattern-add", Ffc_pattern_add, 3, 3, 0, /* | |
288 Add attributes to the pattern object PATTERN. PROPERTY is a string naming | |
289 the attribute to add, VALUE the value for this attribute. | |
290 | |
291 VALUE may be a string, integer, float, or symbol, in which case the value | |
292 will be added as an FcChar8[], int, double, or FcBool respectively. | |
293 */ | |
294 (pattern, property, value)) | |
295 { | |
296 Bool res = 0; | |
3469 | 297 const Extbyte *obj; |
3354 | 298 FcPattern *fcpat; |
299 | |
300 CHECK_FCPATTERN(pattern); | |
301 CHECK_STRING(property); | |
302 | |
303 obj = fc_intern (property); | |
304 fcpat = XFCPATTERN_PTR (pattern); | |
305 | |
306 if (STRINGP(value)) | |
307 { | |
308 FcChar8 *str = (FcChar8 *) extract_fcapi_string (value); | |
309 res = FcPatternAddString (fcpat, obj, str); | |
310 } | |
311 else if (INTP(value)) | |
312 { | |
313 res = FcPatternAddInteger (fcpat, obj, XINT(value)); | |
314 } | |
315 else if (FLOATP(value)) | |
316 { | |
317 res = FcPatternAddDouble (fcpat, obj, (double) XFLOAT_DATA(value)); | |
318 } | |
319 else if (SYMBOLP(value)) | |
320 { | |
321 res = FcPatternAddBool (fcpat, obj, !NILP(value)); | |
322 } | |
323 /* else ... maybe we should wta here? */ | |
324 | |
325 return res ? Qt : Qnil; | |
326 } | |
327 | |
328 DEFUN("fc-pattern-del", Ffc_pattern_del, 2, 2, 0, /* | |
329 Remove attribute PROPERTY from fc pattern object OBJECT. | |
330 */ | |
331 (pattern, property)) | |
332 { | |
333 Bool res; | |
334 | |
335 CHECK_FCPATTERN(pattern); | |
336 CHECK_STRING(property); | |
337 | |
3469 | 338 res = FcPatternDel(XFCPATTERN_PTR(pattern), extract_fcapi_string (property)); |
3354 | 339 return res ? Qt : Qnil; |
340 } | |
341 | |
342 /* Generic interface to FcPatternGet() | |
343 * Don't support the losing symbol-for-property interface. | |
344 */ | |
345 DEFUN("fc-pattern-get", Ffc_pattern_get, 2, 4, 0, /* | |
346 From PATTERN, extract PROPERTY for the ID'th member, of type TYPE. | |
347 | |
348 PATTERN is an Xft (fontconfig) pattern object. | |
349 PROPERTY is a string naming an fontconfig font property. | |
350 Optional ID is a nonnegative integer indexing the list of values for PROPERTY | |
351 stored in PATTERN, defaulting to 0 (the first value). | |
352 Optional TYPE is a symbol, one of 'string, 'boolean, 'integer, 'float, | |
353 'double, 'matrix, 'charset, or 'void, corresponding to the FcValue types. | |
354 ('float is an alias for 'double). | |
355 | |
356 The Lisp types returned will conform to TYPE: | |
357 string string | |
358 boolean `t' or `nil' | |
359 integer integer | |
360 double (float) float | |
361 matrix not implemented | |
362 charset not implemented | |
363 void not implemented | |
364 | |
365 Symbols with names of the form "fc-result-DESCRIPTION" are returned when | |
366 the desired value is not available. These are | |
367 | |
368 fc-result-type-mismatch the value found has an unexpected type | |
369 fc-result-no-match there is no such attribute | |
370 fc-result-no-id there is no value for the requested ID | |
371 | |
372 The types of the following standard properties are predefined by fontconfig. | |
373 The symbol 'fc-result-type-mismatch will be returned if the object exists but | |
374 TYPE does not match the predefined type. It is best not to specify a type | |
375 for predefined properties, as a mistake here ensures error returns on the | |
376 correct type. | |
377 | |
378 Each standard property has a convenience accessor defined in fontconfig.el, | |
379 named in the form "fc-pattern-get-PROPERTY". The convenience functions are | |
380 preferred to `fc-pattern-get' since a typo in the string naming a property | |
381 will result in a silent null return, while a typo in a function name will | |
382 usually result in a compiler or runtime \"not fboundp\" error. You may use | |
383 `defsubst' to define convenience functions for non-standard properties. | |
384 | |
385 family String Font family name | |
386 style String Font style. Overrides weight and slant | |
387 slant Int Italic, oblique or roman | |
388 weight Int Light, medium, demibold, bold or black | |
389 size Double Point size | |
390 aspect Double Stretches glyphs horizontally before hinting | |
391 pixelsize Double Pixel size | |
392 spacing Int Proportional, monospace or charcell | |
393 foundry String Font foundry name | |
394 antialias Bool Whether glyphs can be antialiased | |
395 hinting Bool Whether the rasterizer should use hinting | |
396 verticallayout Bool Use vertical layout | |
397 autohint Bool Use autohinter instead of normal hinter | |
398 globaladvance Bool Use font global advance data | |
399 file String The filename holding the font | |
400 index Int The index of the font within the file | |
401 ftface FT_Face Use the specified FreeType face object | |
402 rasterizer String Which rasterizer is in use | |
403 outline Bool Whether the glyphs are outlines | |
404 scalable Bool Whether glyphs can be scaled | |
405 scale Double Scale factor for point->pixel conversions | |
406 dpi Double Target dots per inch | |
407 rgba Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry | |
408 minspace Bool Eliminate leading from line spacing | |
409 charset CharSet Unicode chars encoded by the font | |
410 lang String List of RFC-3066-style languages this font supports | |
411 | |
412 The FT_Face, Matrix, CharSet types are unimplemented, so the corresponding | |
413 properties are not accessible from Lisp at this time. If the value of a | |
414 property returned has type FT_Face, FcCharSet, or FcMatrix, | |
415 `fc-result-type-mismatch' is returned. | |
416 | |
417 The following properties which were standard in Xft v.1 are obsolete in | |
418 Xft v.2: encoding, charwidth, charheight, core, and render. */ | |
419 (pattern, property, id, type)) | |
420 { | |
3469 | 421 Extbyte *fc_property; |
3354 | 422 FcResult fc_result; |
423 FcValue fc_value; | |
424 | |
425 /* | |
426 process arguments | |
427 */ | |
428 CHECK_FCPATTERN (pattern); | |
429 | |
430 #if 0 | |
431 /* Don't support the losing symbol-for-property interface. */ | |
432 property = SYMBOLP (property) ? symbol_name (XSYMBOL (property)) : property; | |
433 #endif | |
434 if (STRINGP (property)) | |
435 { | |
3469 | 436 fc_property = extract_fcapi_string (property); |
3354 | 437 } |
438 else | |
439 { | |
440 /* if we allow symbols, this would need to be | |
441 list3 (Qlambda, list1 (Qobject), | |
442 list3 (Qor, list2 (Qstringp, Qobject), | |
443 list2 (Qsymbolp, Qobject))) | |
444 or something like that? */ | |
445 dead_wrong_type_argument (Qstringp, property); | |
446 } | |
447 | |
448 if (!NILP (id)) CHECK_NATNUM (id); | |
449 if (!NILP (type)) CHECK_SYMBOL (type); | |
450 | |
451 /* get property */ | |
452 fc_result = FcPatternGet (XFCPATTERN_PTR (pattern), | |
453 fc_property, | |
454 NILP (id) ? 0 : XINT(id), | |
455 &fc_value); | |
456 | |
457 switch (fc_result) | |
458 { | |
459 case FcResultMatch: | |
460 /* wrap it and return */ | |
461 switch (fc_value.type) | |
462 { | |
463 case FcTypeInteger: | |
464 return ((!NILP (type) && !EQ (type, Qinteger)) | |
465 ? Qfc_result_type_mismatch : make_int (fc_value.u.i)); | |
466 case FcTypeDouble: | |
467 return ((!NILP (type) && !EQ (type, intern ("double")) | |
468 && !EQ (type, Qfloat)) | |
469 ? Qfc_result_type_mismatch : make_float (fc_value.u.d)); | |
470 case FcTypeString: | |
471 return ((!NILP (type) && !EQ (type, Qstring)) | |
472 ? Qfc_result_type_mismatch | |
3906 | 473 : build_fcapi_string (fc_value.u.s)); |
3354 | 474 case FcTypeBool: |
475 return ((!NILP (type) && !EQ (type, Qboolean)) | |
476 ? Qfc_result_type_mismatch : fc_value.u.b ? Qt : Qnil); | |
477 case FcTypeMatrix: | |
478 return Qfc_result_type_mismatch; | |
479 /* #### unimplemented | |
480 return ((!NILP (type) && !EQ (type, intern ("matrix"))) | |
481 ? Qfc_result_type_mismatch : make_int (fc_value.u.m)); | |
482 */ | |
483 case FcTypeCharSet: | |
484 return Qfc_result_type_mismatch; | |
485 /* #### unimplemented | |
486 return ((!NILP (type) && !EQ (type, intern ("charset"))) | |
487 ? Qfc_result_type_mismatch : make_int (fc_value.u.c)); | |
488 */ | |
489 } | |
490 case FcResultTypeMismatch: | |
491 return Qfc_result_type_mismatch; | |
492 case FcResultNoMatch: | |
493 return Qfc_result_no_match; | |
494 case FcResultNoId: | |
495 return Qfc_result_no_id; | |
496 default: | |
497 return Qfc_internal_error; | |
498 } | |
499 } | |
500 | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
501 /* FcConfig handling functions. */ |
3354 | 502 |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
503 /* We obviously need to be careful about garbage collecting the current |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
504 FcConfig. I infer from the documentation of FcConfigDestroy that that |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
505 is the only reference maintained by fontconfig. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
506 So we keep track of our own references on a weak list, and only cons a |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
507 new object if we don't already have a reference to it there. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
508 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
509 enum DestroyFontsetP { DestroyNo = 0, DestroyYes = 1 }; |
3354 | 510 |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
511 static Lisp_Object |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
512 fc_config_create_using (FcConfig * (*create_function) ()) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
513 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
514 FcConfig *fc = (*create_function) (); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
515 Lisp_Object configs = XWEAK_LIST_LIST (Vfc_config_weak_list); |
3354 | 516 |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
517 /* Linear search: fc_configs are not going to multiply like conses. */ |
3360 | 518 { |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
519 LIST_LOOP_2 (cfg, configs) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
520 if (fc == XFCCONFIG_PTR (cfg)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
521 return cfg; |
3360 | 522 } |
523 | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
524 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
525 fc_config *fccfg = |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
526 ALLOC_LCRECORD_TYPE (struct fc_config, &lrecord_fc_config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
527 fccfg->fccfgPtr = fc; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
528 configs = Fcons (wrap_fcconfig (fccfg), configs); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
529 XWEAK_LIST_LIST (Vfc_config_weak_list) = configs; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
530 return wrap_fcconfig (fccfg); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
531 } |
3354 | 532 } |
533 | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
534 static Lisp_Object |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
535 fc_strlist_to_lisp_using (FcStrList * (*getter) (FcConfig *), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
536 Lisp_Object config) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
537 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
538 FcChar8 *thing; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
539 Lisp_Object value = Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
540 FcStrList *thing_list; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
541 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
542 CHECK_FCCONFIG (config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
543 thing_list = (*getter) (XFCCONFIG_PTR(config)); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
544 /* Yes, we need to do this check -- sheesh, Keith! */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
545 if (!thing_list) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
546 return Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
547 while ((thing = FcStrListNext (thing_list))) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
548 value = Fcons (build_fcapi_string (thing), value); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
549 FcStrListDone (thing_list); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
550 return value; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
551 } |
3931 | 552 |
3354 | 553 static Lisp_Object |
3931 | 554 fontset_to_list (FcFontSet *fontset, enum DestroyFontsetP destroyp) |
3354 | 555 { |
556 int idx; | |
557 Lisp_Object fontlist = Qnil; | |
558 fc_pattern *fcpat; | |
559 | |
560 /* #### improve this error message */ | |
561 if (!fontset) | |
4860 | 562 invalid_state ("failed to create FcFontSet", Qunbound); |
3354 | 563 for (idx = 0; idx < fontset->nfont; ++idx) |
564 { | |
565 fcpat = | |
566 ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); | |
567 fcpat->fcpatPtr = FcPatternDuplicate (fontset->fonts[idx]); | |
568 fontlist = Fcons (wrap_fcpattern(fcpat), fontlist); | |
569 } | |
3931 | 570 if (destroyp) |
571 FcFontSetDestroy (fontset); | |
3354 | 572 return fontlist; |
573 } | |
574 | |
3931 | 575 DEFUN("fc-config-p", Ffc_config_p, 1, 1, 0, /* |
576 Returns t if OBJECT is of type fc-config, nil otherwise. | |
577 */ | |
578 (object)) | |
579 { | |
580 return FCCONFIGP (object) ? Qt : Qnil; | |
581 } | |
582 | |
583 DEFUN("fc-config-create", Ffc_config_create, 0, 0, 0, /* | |
584 -- Function: FcConfig *FcConfigCreate (void) | |
585 Creates an empty configuration. */ | |
586 ()) | |
587 { | |
588 return fc_config_create_using (&FcConfigCreate); | |
589 } | |
590 | |
591 #if 0 | |
592 /* I'm sorry, but we just don't do this in Lisp, OK? | |
593 Don't even think about implementing this. */ | |
594 DEFUN("fc-config-destroy", Ffc_config_destroy, 1, 1, 0, /* | |
595 -- Function: void FcConfigDestroy (FcConfig *config) | |
596 Destroys a configuration and any data associated with it. Note | |
597 that calling this function with the return value from | |
598 FcConfigGetCurrent will place the library in an indeterminate | |
599 state. */ | |
600 (config)) | |
601 { | |
602 signal_error (Qunimplemented, "No user-servicable parts!", | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
603 intern ("fc-config-destroy")); |
3931 | 604 } |
605 #endif | |
606 | |
607 DEFUN("fc-config-up-to-date", Ffc_config_up_to_date, 1, 1, 0, /* | |
608 -- Function: FcBool FcConfigUptoDate (FcConfig *config) | |
609 Checks all of the files related to 'config' and returns whether the | |
610 in-memory version is in sync with the disk version. */ | |
611 (config)) | |
612 { | |
613 CHECK_FCCONFIG (config); | |
614 return FcConfigUptoDate (XFCCONFIG_PTR (config)) == FcFalse ? Qnil : Qt; | |
615 } | |
616 | |
617 DEFUN("fc-config-build-fonts", Ffc_config_build_fonts, 1, 1, 0, /* | |
618 -- Function: FcBool FcConfigBuildFonts (FcConfig *config) | |
619 Builds the set of available fonts for the given configuration. | |
620 Note that any changes to the configuration after this call have | |
621 indeterminate effects. Returns FcFalse if this operation runs out | |
622 of memory. | |
623 XEmacs: signal out-of-memory, or return nil on success. */ | |
624 (config)) | |
625 { | |
626 CHECK_FCCONFIG (config); | |
627 if (FcConfigBuildFonts (XFCCONFIG_PTR (config)) == FcFalse) | |
628 out_of_memory ("FcConfigBuildFonts failed", config); | |
629 return Qnil; | |
630 } | |
631 | |
632 DEFUN("fc-config-get-config-dirs", Ffc_config_get_config_dirs, 1, 1, 0, /* | |
633 -- Function: FcStrList *FcConfigGetConfigDirs (FcConfig *config) | |
634 Returns the list of font directories specified in the | |
635 configuration files for 'config'. Does not include any | |
636 subdirectories. */ | |
637 (config)) | |
638 { | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
639 return fc_strlist_to_lisp_using (&FcConfigGetConfigDirs, config); |
3931 | 640 } |
641 | |
642 DEFUN("fc-config-get-font-dirs", Ffc_config_get_font_dirs, 1, 1, 0, /* | |
643 -- Function: FcStrList *FcConfigGetFontDirs (FcConfig *config) | |
644 Returns the list of font directories in 'config'. This includes the | |
645 configured font directories along with any directories below those | |
646 in the filesystem. */ | |
647 (config)) | |
648 { | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
649 return fc_strlist_to_lisp_using (&FcConfigGetFontDirs, config); |
3931 | 650 } |
651 | |
652 DEFUN("fc-config-get-config-files", Ffc_config_get_config_files, 1, 1, 0, /* | |
653 -- Function: FcStrList *FcConfigGetConfigFiles (FcConfig *config) | |
654 Returns the list of known configuration files used to generate | |
655 'config'. Note that this will not include any configuration done | |
656 with FcConfigParse. */ | |
657 (config)) | |
658 { | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
659 return fc_strlist_to_lisp_using (&FcConfigGetConfigFiles, config); |
3931 | 660 } |
661 | |
662 DEFUN("fc-config-get-cache", Ffc_config_get_cache, 1, 1, 0, /* | |
663 -- Function: char *FcConfigGetCache (FcConfig *config) | |
664 Returns the name of the file used to store per-user font | |
665 information. */ | |
666 (config)) | |
667 { | |
668 CHECK_FCCONFIG (config); | |
669 /* Surely FcConfigGetCache just casts an FcChar8* to char*. */ | |
670 return build_fcapi_string ((FcChar8 *) FcConfigGetCache (XFCCONFIG_PTR (config))); | |
671 } | |
672 | |
673 DEFUN("fc-config-get-fonts", Ffc_config_get_fonts, 2, 2, 0, /* | |
674 -- Function: FcFontSet *FcConfigGetFonts (FcConfig *config, FcSetName set) | |
675 Returns one of the two sets of fonts from the configuration as | |
676 specified by 'set'. | |
677 `FcSetName' | |
678 Specifies one of the two sets of fonts available in a | |
679 configuration; FcSetSystem for those fonts specified in the | |
680 configuration and FcSetApplication which holds fonts provided by | |
681 the application. */ | |
682 (config, set)) | |
683 { | |
684 FcSetName name = FcSetSystem; | |
685 FcFontSet *fs = NULL; | |
686 | |
687 CHECK_FCCONFIG (config); | |
688 CHECK_SYMBOL (set); | |
689 | |
690 if (EQ (set, intern ("fc-set-system"))) | |
691 name = FcSetSystem; | |
692 else if (EQ (set, intern ("fc-set-application"))) | |
693 name = FcSetApplication; | |
694 else | |
695 wtaerror ("must be in (fc-set-system fc-set-application)", set); | |
696 | |
697 fs = FcConfigGetFonts (XFCCONFIG_PTR (config), name); | |
698 return fs ? fontset_to_list (fs, DestroyNo) : Qnil; | |
699 } | |
700 | |
701 DEFUN("fc-config-set-current", Ffc_config_set_current, 1, 1, 0, /* | |
702 -- Function: FcBool FcConfigSetCurrent (FcConfig *config) | |
703 Sets the current default configuration to 'config'. Implicitly | |
704 calls FcConfigBuildFonts if necessary, returning FcFalse if that | |
705 call fails. | |
706 XEmacs: signals out-of-memory if FcConfigBuildFonts fails, or args-out-of-range | |
707 if the resulting FcConfig has no fonts (which would crash XEmacs if installed). | |
708 */ | |
709 (config)) | |
710 { | |
711 CHECK_FCCONFIG (config); | |
712 /* *sigh* "Success" DOES NOT mean you have any fonts available. It is | |
713 easy to crash fontconfig, and XEmacs with it. Without the following | |
714 check, this will do it: | |
715 (progn | |
716 (fc-config-set-current (fc-config-create)) | |
717 (set-face-font 'default "serif-12")) | |
718 */ | |
719 | |
720 if (FcConfigBuildFonts (XFCCONFIG_PTR (config)) == FcFalse) | |
721 out_of_memory ("FcConfigBuildFonts failed", config); | |
722 /* #### We'd like to avoid this consing, and FcConfigGetFonts sometimes | |
723 returns NULL, but it doesn't always. This will do for now .... */ | |
724 if (NILP (Ffc_config_get_fonts (config, intern ("fc-set-system"))) | |
725 && NILP (Ffc_config_get_fonts (config, intern ("fc-set-application")))) | |
726 signal_error (intern ("args-out-of-range"), "no fonts found", config); | |
727 /* Should never happen, but I don't trust Keith anymore .... */ | |
728 if (FcConfigSetCurrent (XFCCONFIG_PTR (config)) == FcFalse) | |
729 out_of_memory ("FcConfigBuildFonts failed in set", config); | |
730 return Qnil; | |
731 } | |
732 | |
733 DEFUN("fc-config-get-blanks", Ffc_config_get_blanks, 1, 1, 0, /* | |
734 -- Function: FcBlanks *FcConfigGetBlanks (FcConfig *config) | |
735 Returns the FcBlanks object associated with the given | |
736 configuration, if no blanks were present in the configuration, | |
737 this function will return 0. | |
738 XEmacs: should convert to a chartable. | |
739 #### Unimplemented. */ | |
740 (config)) | |
741 { | |
742 CHECK_FCCONFIG (config); | |
743 signal_error (Qunimplemented, "no method to convert FcBlanks object", | |
744 intern ("fc-config-get-blanks")); | |
745 } | |
746 | |
747 DEFUN("fc-config-get-rescan-interval", Ffc_config_get_rescan_interval, 1, 1, 0, /* | |
4328
dfd878799ef0
Autoconfiscate the recent fontconfig spelling change.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3935
diff
changeset
|
748 -- Function: int FcConfigGetRescanInterval (FcConfig *config) |
3931 | 749 Returns the interval between automatic checks of the configuration |
750 (in seconds) specified in 'config'. The configuration is checked | |
751 during a call to FcFontList when this interval has passed since | |
752 the last check. */ | |
753 (config)) | |
754 { | |
755 CHECK_FCCONFIG (config); | |
4328
dfd878799ef0
Autoconfiscate the recent fontconfig spelling change.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3935
diff
changeset
|
756 return make_int (FcConfigGetRescanInterval (XFCCONFIG_PTR (config))); |
3931 | 757 } |
758 | |
759 DEFUN("fc-config-set-rescan-interval", Ffc_config_set_rescan_interval, 2, 2, 0, /* | |
4328
dfd878799ef0
Autoconfiscate the recent fontconfig spelling change.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3935
diff
changeset
|
760 -- Function: FcBool FcConfigSetRescanInterval (FcConfig *config, int |
3931 | 761 rescanInterval) |
762 Sets the rescan interval; returns FcFalse if an error occurred. | |
763 XEmacs: signal such error, or return nil on success. */ | |
764 (config, rescan_interval)) | |
765 { | |
766 CHECK_FCCONFIG (config); | |
767 CHECK_INT (rescan_interval); | |
4328
dfd878799ef0
Autoconfiscate the recent fontconfig spelling change.
Aidan Kehoe <kehoea@parhasard.net>
parents:
3935
diff
changeset
|
768 if (FcConfigSetRescanInterval (XFCCONFIG_PTR (config), |
3931 | 769 XINT (rescan_interval)) == FcFalse) |
770 signal_error (Qio_error, "FcConfigSetRescanInverval barfed", | |
771 intern ("fc-config-set-rescan-interval")); | |
772 return Qnil; | |
773 } | |
774 | |
775 /* #### This might usefully be made interactive. */ | |
776 DEFUN("fc-config-app-font-add-file", Ffc_config_app_font_add_file, 2, 2, 0, /* | |
777 -- Function: FcBool FcConfigAppFontAddFile (FcConfig *config, const | |
778 char *file) | |
779 Adds an application-specific font to the configuration. */ | |
780 (config, file)) | |
781 { | |
782 CHECK_FCCONFIG (config); | |
783 CHECK_STRING (file); | |
784 if (FcConfigAppFontAddFile | |
785 (XFCCONFIG_PTR (config), | |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4809
diff
changeset
|
786 /* #### FIXME! is Qfile_name right? */ |
4981
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
787 (FcChar8 *) LISP_STRING_TO_EXTERNAL (file, Qfile_name)) == FcFalse) |
3931 | 788 return Qnil; |
789 else | |
790 return Qt; | |
791 } | |
792 | |
793 /* #### This might usefully be made interactive. */ | |
794 DEFUN("fc-config-app-font-add-dir", Ffc_config_app_font_add_dir, 2, 2, 0, /* | |
795 -- Function: FcBool FcConfigAppFontAddDir (FcConfig *config, const | |
796 char *dir) | |
797 Scans the specified directory for fonts, adding each one found to | |
798 the application-specific set of fonts. */ | |
799 (config, dir)) | |
800 { | |
801 CHECK_FCCONFIG (config); | |
802 CHECK_STRING (dir); | |
803 if (FcConfigAppFontAddDir | |
804 (XFCCONFIG_PTR (config), | |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4809
diff
changeset
|
805 /* #### FIXME! is Qfile_name right? */ |
4981
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
806 (FcChar8 *) LISP_STRING_TO_EXTERNAL (dir, Qfile_name)) == FcFalse) |
3931 | 807 return Qnil; |
808 else | |
809 return Qt; | |
810 } | |
811 | |
812 /* #### This might usefully be made interactive. */ | |
813 DEFUN("fc-config-app-font-clear", Ffc_config_app_font_clear, 1, 1, 0, /* | |
814 -- Function: void FcConfigAppFontClear (FcConfig *config) | |
815 Clears the set of application-specific fonts. */ | |
816 (config)) | |
817 { | |
818 CHECK_FCCONFIG (config); | |
819 FcConfigAppFontClear (XFCCONFIG_PTR (config)); | |
820 return Qnil; | |
821 } | |
822 | |
823 /* These functions provide some control over how the default | |
824 configuration of the library is initialized. (This configuration is | |
825 normally implicitly initialized.) */ | |
826 | |
827 DEFUN("fc-config-filename", Ffc_config_filename, 1, 1, 0, /* | |
828 -- Function: char *FcConfigFilename (const char *name) | |
829 Given the specified external entity name, return the associated | |
830 filename. This provides applications a way to convert various | |
831 configuration file references into filename form. | |
832 | |
833 A null or empty 'name' indicates that the default configuration | |
834 file should be used; which file this references can be overridden | |
835 with the FC_CONFIG_FILE environment variable. Next, if the name | |
836 starts with '~', it refers to a file in the current users home | |
837 directory. Otherwise if the name doesn't start with '/', it | |
838 refers to a file in the default configuration directory; the | |
839 built-in default directory can be overridden with the | |
840 FC_CONFIG_DIR environment variable. */ | |
841 (name)) | |
842 { | |
4932 | 843 const Ascbyte *fcname = ""; |
3931 | 844 |
845 if (!NILP (name)) | |
846 { | |
847 CHECK_STRING (name); | |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4809
diff
changeset
|
848 /* #### FIXME! is Qfile_name right? */ |
4981
4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents:
4953
diff
changeset
|
849 LISP_PATHNAME_CONVERT_OUT (name, fcname); |
3931 | 850 } |
851 return (build_fcapi_string (FcConfigFilename ((FcChar8 *) fcname))); | |
852 } | |
853 | |
854 DEFUN("fc-init-load-config", Ffc_init_load_config, 0, 0, 0, /* | |
855 -- Function: FcConfig *FcInitLoadConfig (void) | |
856 Loads the default configuration file and returns the resulting | |
857 configuration. Does not load any font information. */ | |
858 ()) | |
859 { | |
860 return fc_config_create_using (&FcInitLoadConfig); | |
861 } | |
862 | |
863 DEFUN("fc-init-load-config-and-fonts", Ffc_init_load_config_and_fonts, 0, 0, 0, /* | |
864 -- Function: FcConfig *FcInitLoadConfigAndFonts (void) | |
865 Loads the default configuration file and builds information about | |
866 the available fonts. Returns the resulting configuration. */ | |
867 ()) | |
868 { | |
869 return fc_config_create_using (&FcInitLoadConfigAndFonts); | |
870 } | |
871 | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
872 DEFUN("fc-config-get-current", Ffc_config_get_current, 0, 0, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
873 -- Function: FcConfig *FcConfigGetCurrent (void) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
874 Returns the current default configuration. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
875 ()) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
876 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
877 return fc_config_create_using (&FcConfigGetCurrent); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
878 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
879 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
880 /* Pattern manipulation functions. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
881 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
882 DEFUN("fc-default-substitute", Ffc_default_substitute, 1, 1, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
883 Adds defaults for certain attributes if not specified in PATTERN. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
884 FcPattern PATTERN is modified in-place, and nil is returned. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
885 * Patterns without a specified style or weight are set to Medium |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
886 * Patterns without a specified style or slant are set to Roman |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
887 * Patterns without a specified pixel size are given one computed from any |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
888 specified point size (default 12), dpi (default 75) and scale (default 1). */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
889 (pattern)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
890 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
891 CHECK_FCPATTERN (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
892 FcDefaultSubstitute (XFCPATTERN_PTR (pattern)); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
893 return Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
894 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
895 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
896 /* -- Function: FcBool FcConfigSubstituteWithPat (FcConfig *config, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
897 FcPattern *p, FcPattern *p_pat FcMatchKind kind) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
898 OMITTED: use optional arguments in `fc-config-substitute'. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
899 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
900 DEFUN("fc-config-substitute", Ffc_config_substitute, 1, 4, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
901 Modifies PATTERN according to KIND and TESTPAT using operations from CONFIG. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
902 PATTERN is modified in-place. Returns an undocumented Boolean value. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
903 If optional KIND is `fc-match-pattern', then those tagged as pattern operations |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
904 are applied, else if KIND is `fc-match-font', those tagged as font operations |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
905 are applied and TESTPAT is used for <test> elements with target=pattern. KIND |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
906 defaults to `fc-match-font'. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
907 If optional TESTPAT is nil, it is ignored. Otherwise it must be an FcPattern. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
908 Optional CONFIG must be an FcConfig, defaulting to the current one. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
909 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
910 Note that this function actually corresponds to FcConfigSubstituteWithPat, and |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
911 the argument order is changed to take advantage of Lisp optional arguments. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
912 (pattern, kind, testpat, config)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
913 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
914 FcMatchKind knd; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
915 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
916 /* There ought to be a standard idiom for this.... */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
917 if (NILP (kind) |
4860 | 918 || EQ (kind, Qfc_match_font)) |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
919 knd = FcMatchFont; |
4860 | 920 else if (EQ (kind, Qfc_match_pattern)) |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
921 knd = FcMatchPattern; |
4860 | 922 else |
923 wtaerror ("need `fc-match-pattern' or `fc-match-font'", kind); | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
924 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
925 /* Typecheck arguments */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
926 CHECK_FCPATTERN (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
927 if (!NILP (testpat)) CHECK_FCPATTERN (testpat); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
928 if (!NILP (config)) CHECK_FCCONFIG (config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
929 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
930 return (FcConfigSubstituteWithPat |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
931 (NILP (config) ? FcConfigGetCurrent () : XFCCONFIG_PTR (config), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
932 XFCPATTERN_PTR (pattern), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
933 NILP (testpat) ? NULL : XFCPATTERN_PTR (testpat), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
934 knd) == FcTrue) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
935 ? Qt : Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
936 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
937 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
938 /* Pattern matching functions. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
939 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
940 /* The following functions return fonts that match a certain pattern. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
941 `FcFontRenderPrepare' and `FcFontMatch' always return a single best |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
942 match. `FcFontList' returns the list of fonts that match a given |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
943 pattern on a certain set of properties. `FcFontSort' returns the |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
944 entire list of fonts, sorted in order of match quality, possibly |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
945 filtering out fonts that do not provide additional characters beyond |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
946 those provided by preferred fonts. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
947 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
948 DEFUN("fc-font-render-prepare", Ffc_font_render_prepare, 2, 3, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
949 Return a new pattern blending PATTERN and FONT. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
950 Optional CONFIG is an FcConfig, defaulting to the current one. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
951 The returned pattern consists of elements of FONT not appearing in PATTERN, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
952 elements of PATTERN not appearing in FONT, and the best matching value from |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
953 PATTERN for elements appearing in both. The result is passed to |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
954 FcConfigSubstitute with 'kind' FcMatchFont and then returned. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
955 (pattern, font, config)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
956 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
957 if (NILP (config)) { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
958 config = Ffc_config_get_current (); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
959 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
960 CHECK_FCPATTERN (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
961 CHECK_FCPATTERN (font); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
962 CHECK_FCCONFIG (config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
963 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
964 /* I don't think this can fail? */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
965 return wrap_fcpattern (FcFontRenderPrepare (XFCCONFIG_PTR(config), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
966 XFCPATTERN_PTR(font), |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
967 XFCPATTERN_PTR(pattern))); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
968 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
969 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
970 DEFUN("fc-font-match", Ffc_font_match, 2, 3, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
971 Return the font on DEVICE that most closely matches PATTERN. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
972 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
973 DEVICE is an X11 device. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
974 PATTERN is a fontconfig pattern object. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
975 Optional CONFIG is an FcConfig, defaulting to the current one. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
976 Returns a fontconfig pattern object representing the closest match to the |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
977 given pattern, or an error code. Possible error codes are |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
978 `fc-result-no-match' and `fc-result-no-id'. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
979 PATTERN is massaged with FcConfigSubstitute and FcDefaultSubstitute before |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
980 being processed by FcFontMatch. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
981 (device, pattern, config)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
982 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
983 FcResult res; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
984 struct fc_pattern *res_fcpat; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
985 FcPattern *p; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
986 FcConfig *fcc; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
987 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
988 CHECK_FCPATTERN(pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
989 if (NILP(device)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
990 return Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
991 CHECK_X_DEVICE(device); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
992 if (!DEVICE_LIVE_P(XDEVICE(device))) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
993 return Qnil; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
994 if (!NILP (config)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
995 CHECK_FCCONFIG (config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
996 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
997 res_fcpat = ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
998 p = XFCPATTERN_PTR(pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
999 fcc = NILP (config) ? FcConfigGetCurrent () : XFCCONFIG_PTR (config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1000 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1001 FcConfigSubstitute (fcc, p, FcMatchPattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1002 FcDefaultSubstitute (p); |
4809
0d3ccd5a2509
Initialize the result variable passed to FcFontMatch. See xemacs-patches
Jerry James <james@xemacs.org>
parents:
4799
diff
changeset
|
1003 res = FcResultMatch; |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1004 res_fcpat->fcpatPtr = FcFontMatch (fcc, p, &res); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1005 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1006 if (res_fcpat->fcpatPtr == NULL) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1007 switch (res) { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1008 case FcResultNoMatch: |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1009 return Qfc_result_no_match; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1010 case FcResultNoId: |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1011 return Qfc_result_no_id; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1012 default: |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1013 return Qfc_internal_error; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1014 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1015 else |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1016 return wrap_fcpattern(res_fcpat); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1017 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1018 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1019 /* #### fix this name to correspond to Ben's new nomenclature */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1020 DEFUN("fc-list-fonts-pattern-objects", Ffc_list_fonts_pattern_objects, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1021 3, 3, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1022 Return a list of fonts on DEVICE that match PATTERN for PROPERTIES. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1023 Each font is represented by a fontconfig pattern object. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1024 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1025 DEVICE is an X11 device. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1026 PATTERN is a fontconfig pattern to be matched. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1027 PROPERTIES is a list of property names (strings) that should match. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1028 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1029 #### DEVICE is unused, ignored, and may be removed if it's not needed to |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1030 match other font-listing APIs. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1031 (UNUSED (device), pattern, properties)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1032 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1033 FcObjectSet *os; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1034 FcFontSet *fontset; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1035 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1036 CHECK_FCPATTERN (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1037 CHECK_LIST (properties); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1038 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1039 os = FcObjectSetCreate (); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1040 string_list_to_fcobjectset (properties, os); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1041 /* #### why don't we need to do the "usual substitutions"? */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1042 fontset = FcFontList (NULL, XFCPATTERN_PTR (pattern), os); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1043 FcObjectSetDestroy (os); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1044 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1045 return fontset_to_list (fontset, DestroyYes); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1046 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1047 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1048 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1049 /* #### maybe this can/should be folded into fc-list-fonts-pattern-objects? */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1050 DEFUN("fc-font-sort", Ffc_font_sort, 2, 4, 0, /* |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1051 Return a list of all fonts sorted by proximity to PATTERN. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1052 Each font is represented by a fontconfig pattern object. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1053 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1054 DEVICE is an X11 device. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1055 PATTERN is a fontconfig pattern to be matched. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1056 Optional argument TRIM, if non-nil, means to trim trailing fonts that do not |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1057 contribute new characters to the union repertoire. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1058 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1059 #### Optional argument NOSUB, if non-nil, suppresses some of the usual |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1060 property substitutions. DON'T USE THIS in production code, it is intended |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1061 for exploring behavior of fontconfig and will be removed when this code is |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1062 stable. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1063 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1064 #### DEVICE is unused, ignored, and may be removed if it's not needed to |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1065 match other font-listing APIs. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1066 (UNUSED (device), pattern, trim, nosub)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1067 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1068 CHECK_FCPATTERN (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1069 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1070 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1071 FcConfig *fcc = FcConfigGetCurrent(); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1072 FcFontSet *fontset; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1073 FcPattern *p = XFCPATTERN_PTR (pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1074 FcResult fcresult; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1075 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1076 if (NILP(nosub)) /* #### temporary debug hack */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1077 FcDefaultSubstitute (p); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1078 FcConfigSubstitute (fcc, p, FcMatchPattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1079 fontset = FcFontSort (fcc, p, !NILP(trim), NULL, &fcresult); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1080 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1081 return fontset_to_list (fontset, DestroyYes); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1082 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1083 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1084 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1085 #ifdef FONTCONFIG_EXPOSE_CONFIG |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1086 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1087 /* Configuration routines --- for debugging |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1088 Don't depend on these routines being available in the future! |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1089 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1090 3.2.10 Initialization |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1091 --------------------- |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1092 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1093 An FcConfig object holds the internal representation of a configuration. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1094 There is a default configuration which applications may use by passing |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1095 0 to any function using the data within an FcConfig. |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1096 */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1097 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1098 static void |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1099 finalize_fc_config (void *header, int UNUSED (for_disksave)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1100 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1101 struct fc_config *p = (struct fc_config *) header; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1102 if (p->fccfgPtr && p->fccfgPtr != FcConfigGetCurrent()) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1103 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1104 /* If we get here, all of *our* references are garbage (see comment on |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1105 fc_config_create_using() for why), and the only reference that |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1106 fontconfig keeps is the current FcConfig. */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1107 FcConfigDestroy (p->fccfgPtr); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1108 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1109 p->fccfgPtr = 0; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1110 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1111 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1112 static void |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1113 print_fc_config (Lisp_Object obj, Lisp_Object printcharfun, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1114 int UNUSED(escapeflag)) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1115 { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1116 struct fc_config *c = XFCCONFIG (obj); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1117 if (print_readably) |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1118 printing_unreadable_object ("#<fc-config 0x%x>", c->header.uid); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1119 write_fmt_string (printcharfun, "#<fc-config 0x%x>", c->header.uid); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1120 } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1121 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1122 static const struct memory_description fcconfig_description [] = { |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1123 /* #### nothing here, is this right?? */ |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1124 { XD_END } |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1125 }; |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1126 |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1127 DEFINE_LRECORD_IMPLEMENTATION("fc-config", fc_config, 0, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1128 0, print_fc_config, finalize_fc_config, 0, 0, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1129 fcconfig_description, |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1130 struct fc_config); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1131 |
3931 | 1132 DEFUN("fc-init", Ffc_init, 0, 0, 0, /* |
1133 -- Function: FcBool FcInit (void) | |
1134 Loads the default configuration file and the fonts referenced | |
1135 therein and sets the default configuration to that result. | |
1136 Returns whether this process succeeded or not. If the default | |
1137 configuration has already been loaded, this routine does nothing | |
1138 and returns FcTrue. */ | |
1139 ()) | |
1140 { | |
1141 return (FcInit () == FcTrue) ? Qt : Qnil; | |
1142 } | |
1143 | |
1144 DEFUN("fc-get-version", Ffc_get_version, 0, 0, 0, /* | |
1145 -- Function: int FcGetVersion (void) | |
1146 Returns the version number of the library. | |
3935 | 1147 XEmacs: No, this should NOT return a pretty string. |
3931 | 1148 (let ((i (fc-get-version))) |
1149 (format "%d.%d.%d" (/ i 10000) (mod (/ i 100) 100) (mod i 100))) | |
3935 | 1150 gives the usual x.y.z format. This is the version of the .so. It can be |
1151 checked against `fc-version', which is the version of fontconfig.h. | |
1152 It's probably not a disaster if `(> (fc-get-version) fc-version)'. */ | |
3931 | 1153 ()) |
1154 { | |
1155 return make_int (FcGetVersion ()); | |
1156 } | |
1157 | |
1158 DEFUN("fc-init-reinitialize", Ffc_init_reinitialize, 0, 0, 0, /* | |
1159 -- Function: FcBool FcInitReinitialize (void) | |
1160 Forces the default configuration file to be reloaded and resets | |
1161 the default configuration. */ | |
1162 ()) | |
1163 { | |
1164 return (FcInitReinitialize () == FcTrue) ? Qt : Qnil; | |
1165 } | |
1166 | |
1167 DEFUN("fc-init-bring-up-to-date", Ffc_init_bring_up_to_date, 0, 0, 0, /* | |
1168 -- Function: FcBool FcInitBringUptoDate (void) | |
1169 Checks the rescan interval in the default configuration, checking | |
1170 the configuration if the interval has passed and reloading the | |
1171 configuration when any changes are detected. */ | |
1172 ()) | |
1173 { | |
1174 return (FcInitBringUptoDate () == FcTrue) ? Qt : Qnil; | |
1175 } | |
1176 | |
1177 #endif /* FONTCONFIG_EXPOSE_CONFIG */ | |
1178 | |
3354 | 1179 DEFUN("xlfd-font-name-p", Fxlfd_font_name_p, 1, 1, 0, /* |
1180 Check whether the string FONTNAME is a XLFD font name. */ | |
1181 (fontname)) | |
1182 { | |
1183 CHECK_STRING(fontname); | |
1184 /* #### should bind `case-fold-search' here? */ | |
1185 return Fstring_match(Vxlfd_font_name_regexp, fontname, Qnil, Qnil); | |
1186 } | |
1187 | |
1188 /* FcPatternPrint: there is no point in having wrappers fc-pattern-print, | |
1189 Ffc_pattern_print since this function prints to stdout. */ | |
1190 | |
1191 /* Initialization of font-mgr */ | |
1192 | |
1193 #define XE_XLFD_SEPARATOR "-" | |
1194 /* XLFD specifies ISO 8859-1 encoding, but we can't handle non-ASCII | |
1195 in Mule when this function is called. So use HPC. */ | |
1196 #if 0 | |
1197 #define XE_XLFD_PREFIX "\\(\\+[\040-\176\240-\377]*\\)?-" | |
1198 #define XE_XLFD_OPT_TEXT "\\([\040-\044\046-\176\240-\377]*\\)" | |
1199 #define XE_XLFD_TEXT "\\([\040-\044\046-\176\240-\377]+\\)" | |
1200 #else | |
1201 #define XE_XLFD_PREFIX "\\(\\+[\040-\176]*\\)?-" | |
1202 #define XE_XLFD_OPT_TEXT "\\([^-]*\\)" | |
1203 #define XE_XLFD_TEXT "\\([^-]+\\)" | |
1204 #endif | |
1205 | |
1206 #define XE_XLFD_SLANT "\\([0-9ior?*][iot]?\\)" | |
1207 #define XE_XLFD_SPACING "\\([cmp?*]\\)" | |
1208 /* Hyphen as minus conflicts with use as separator. */ | |
1209 #define XE_XLFD_OPT_NEGATE "~?" | |
1210 #define XE_XLFD_NUMBER "\\([0-9?*]+\\)" | |
1211 #define XE_XLFD_PSIZE "\\([0-9?*]+\\|\\[[ 0-9+~.e?*]+\\]\\)" | |
1212 | |
1213 /* Call this only from the init code | |
1214 #### This is really horrible, let's get rid of it, please. */ | |
1215 static Lisp_Object | |
1216 make_xlfd_font_regexp (void) | |
1217 { | |
1218 struct gcpro gcpro1; | |
1219 unsigned i; | |
1220 Lisp_Object reg = Qnil; | |
1221 const Extbyte *re[] = /* #### This could just be catenated by | |
4953
304aebb79cd3
function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents:
4932
diff
changeset
|
1222 cpp and passed to build_extstring. */ |
3354 | 1223 { |
1224 /* Regular expression matching XLFDs as defined by XLFD v. 1.5. | |
1225 Matches must be case-insensitive. | |
1226 PSIZE is a pixel or point size, which may be a "matrix". The | |
1227 syntax of a matrix is not checked, just some lexical properties. | |
1228 AFAICT none of the TEXT fields except adstyle is optional. | |
1229 | |
1230 NB. It should not be a problem if this matches "too much", since | |
1231 an "old" server will simply not be able to find a matching font. */ | |
1232 "\\`", | |
1233 XE_XLFD_PREFIX, /* prefix */ | |
1234 XE_XLFD_TEXT, /* foundry */ | |
1235 XE_XLFD_SEPARATOR, | |
1236 XE_XLFD_TEXT, /* family */ | |
1237 XE_XLFD_SEPARATOR, | |
1238 XE_XLFD_TEXT, /* weight */ | |
1239 XE_XLFD_SEPARATOR, | |
1240 XE_XLFD_SLANT, /* slant */ | |
1241 XE_XLFD_SEPARATOR, | |
1242 XE_XLFD_TEXT, /* swidth */ | |
1243 XE_XLFD_SEPARATOR, | |
1244 XE_XLFD_OPT_TEXT, /* adstyle */ | |
1245 XE_XLFD_SEPARATOR, | |
1246 XE_XLFD_PSIZE, /* pixelsize */ | |
1247 XE_XLFD_SEPARATOR, | |
1248 XE_XLFD_PSIZE, /* pointsize */ | |
1249 XE_XLFD_SEPARATOR, | |
1250 XE_XLFD_NUMBER, /* resx */ | |
1251 XE_XLFD_SEPARATOR, | |
1252 XE_XLFD_NUMBER, /* resy */ | |
1253 XE_XLFD_SEPARATOR, | |
1254 XE_XLFD_SPACING, /* spacing */ | |
1255 XE_XLFD_SEPARATOR, | |
1256 XE_XLFD_OPT_NEGATE, /* avgwidth */ | |
1257 XE_XLFD_NUMBER, | |
1258 XE_XLFD_SEPARATOR, | |
1259 XE_XLFD_TEXT, /* registry */ | |
1260 XE_XLFD_SEPARATOR, | |
1261 XE_XLFD_TEXT, /* encoding */ | |
1262 "\\'" | |
1263 }; | |
1264 | |
1265 GCPRO1 (reg); | |
1266 for (i = 0; i < sizeof(re)/sizeof(Extbyte *); i++) | |
1267 { | |
1268 /* #### Currently this is Host Portable Coding, not ISO 8859-1. */ | |
4953
304aebb79cd3
function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents:
4932
diff
changeset
|
1269 reg = concat2(reg, build_extstring (re[i], Qx_font_name_encoding)); |
3354 | 1270 } |
1271 | |
1272 RETURN_UNGCPRO (reg); | |
1273 } | |
1274 #undef XE_XLFD_SEPARATOR | |
1275 #undef XE_XLFD_PREFIX | |
1276 #undef XE_XLFD_OPT_TEXT | |
1277 #undef XE_XLFD_TEXT | |
1278 #undef XE_XLFD_OPT_SLANT | |
1279 #undef XE_XLFD_OPT_SPACING | |
1280 #undef XE_XLFD_OPT_NEGATE | |
1281 #undef XE_XLFD_NUMBER | |
1282 #undef XE_XLFD_PSIZE | |
1283 | |
1284 #define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ | |
1285 ? ((unsigned long) (x)) : ((unsigned long) (y))) | |
1286 | |
1287 static void | |
1288 string_list_to_fcobjectset (Lisp_Object list, FcObjectSet *os) | |
1289 { | |
1290 EXTERNAL_LIST_LOOP_2 (elt, list) | |
1291 { | |
3469 | 1292 const Extbyte *s; |
3354 | 1293 |
1294 CHECK_STRING (elt); | |
1295 s = fc_intern (elt); | |
1296 FcObjectSetAdd (os, s); | |
1297 } | |
1298 } | |
1299 | |
1300 void | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1301 syms_of_font_mgr (void) { |
3354 | 1302 INIT_LRECORD_IMPLEMENTATION(fc_pattern); |
1303 | |
1304 DEFSYMBOL_MULTIWORD_PREDICATE(Qfc_patternp); | |
1305 | |
1306 DEFSYMBOL(Qfc_result_type_mismatch); | |
1307 DEFSYMBOL(Qfc_result_no_match); | |
1308 DEFSYMBOL(Qfc_result_no_id); | |
1309 DEFSYMBOL(Qfc_internal_error); | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1310 DEFSYMBOL(Qfc_match_pattern); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1311 DEFSYMBOL(Qfc_match_font); |
3360 | 1312 DEFSYMBOL(Qfont_mgr); |
3354 | 1313 |
1314 DEFSUBR(Ffc_pattern_p); | |
1315 DEFSUBR(Ffc_pattern_create); | |
1316 DEFSUBR(Ffc_name_parse); | |
1317 DEFSUBR(Ffc_name_unparse); | |
1318 DEFSUBR(Ffc_pattern_duplicate); | |
1319 DEFSUBR(Ffc_pattern_add); | |
1320 DEFSUBR(Ffc_pattern_del); | |
1321 DEFSUBR(Ffc_pattern_get); | |
1322 DEFSUBR(Ffc_list_fonts_pattern_objects); | |
1323 DEFSUBR(Ffc_font_sort); | |
1324 DEFSUBR(Ffc_font_match); | |
4758
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1325 DEFSUBR(Ffc_default_substitute); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1326 DEFSUBR(Ffc_config_substitute); |
75975fd0b7fc
Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4757
diff
changeset
|
1327 DEFSUBR(Ffc_font_render_prepare); |
3354 | 1328 DEFSUBR(Fxlfd_font_name_p); |
3931 | 1329 |
1330 #ifdef FONTCONFIG_EXPOSE_CONFIG | |
1331 INIT_LRECORD_IMPLEMENTATION(fc_config); | |
1332 | |
1333 DEFSYMBOL_MULTIWORD_PREDICATE(Qfc_configp); | |
1334 | |
1335 DEFSUBR(Ffc_config_p); | |
1336 DEFSUBR(Ffc_config_create); | |
1337 #if 0 | |
1338 DEFSUBR(Ffc_config_destroy); | |
1339 #endif | |
1340 DEFSUBR(Ffc_config_set_current); | |
1341 DEFSUBR(Ffc_config_get_current); | |
1342 DEFSUBR(Ffc_config_up_to_date); | |
1343 DEFSUBR(Ffc_config_build_fonts); | |
1344 DEFSUBR(Ffc_config_get_config_dirs); | |
1345 DEFSUBR(Ffc_config_get_font_dirs); | |
1346 DEFSUBR(Ffc_config_get_config_files); | |
1347 DEFSUBR(Ffc_config_get_cache); | |
1348 DEFSUBR(Ffc_config_get_fonts); | |
1349 DEFSUBR(Ffc_config_get_blanks); | |
1350 DEFSUBR(Ffc_config_get_rescan_interval); | |
1351 DEFSUBR(Ffc_config_set_rescan_interval); | |
1352 DEFSUBR(Ffc_config_app_font_add_file); | |
1353 DEFSUBR(Ffc_config_app_font_add_dir); | |
1354 DEFSUBR(Ffc_config_app_font_clear); | |
1355 DEFSUBR(Ffc_config_filename); | |
1356 DEFSUBR(Ffc_init_load_config); | |
1357 DEFSUBR(Ffc_init_load_config_and_fonts); | |
1358 DEFSUBR(Ffc_init); | |
1359 DEFSUBR(Ffc_get_version); | |
1360 DEFSUBR(Ffc_init_reinitialize); | |
1361 DEFSUBR(Ffc_init_bring_up_to_date); | |
1362 #endif /* FONTCONFIG_EXPOSE_CONFIG */ | |
3354 | 1363 } |
1364 | |
1365 void | |
1366 vars_of_font_mgr (void) | |
1367 { | |
3935 | 1368 /* #### The next two DEFVARs belong somewhere else. */ |
3354 | 1369 |
1370 /* #### I know, but the right fix is use the generic debug facility. */ | |
1371 DEFVAR_INT ("xft-debug-level", &debug_xft /* | |
1372 Level of debugging messages to issue to stderr for Xft. | |
1373 A nonnegative integer. Set to 0 to suppress all warnings. | |
1374 Default is 1 to ensure a minimum of debugging output at initialization. | |
1375 Higher levels give even more information. | |
1376 */ ); | |
4757
a23ac8f90a49
Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4328
diff
changeset
|
1377 debug_xft = 0; |
3354 | 1378 |
3935 | 1379 DEFVAR_CONST_INT("xft-version", &xft_version /* |
3354 | 1380 The major version number of the Xft library being used. |
1381 */ ); | |
3935 | 1382 xft_version = XFT_VERSION; |
1383 | |
1384 DEFVAR_CONST_INT("fc-version", &fc_version /* | |
1385 The version number of fontconfig.h. It can be checked against | |
1386 `(fc-get-version)', which is the version of the .so. | |
1387 It's probably not a disaster if `(> (fc-get-version) fc-version)'. | |
1388 */ ); | |
1389 fc_version = FC_VERSION; | |
3354 | 1390 |
3360 | 1391 Fprovide (intern ("font-mgr")); |
3354 | 1392 } |
1393 | |
1394 void | |
1395 complex_vars_of_font_mgr (void) | |
1396 { | |
3931 | 1397 #ifdef FONTCONFIG_EXPOSE_CONFIG |
1398 Vfc_config_weak_list = make_weak_list (WEAK_LIST_SIMPLE); | |
1399 staticpro (&Vfc_config_weak_list); | |
1400 #endif | |
1401 | |
3354 | 1402 DEFVAR_LISP("xft-xlfd-font-regexp", &Vxlfd_font_name_regexp /* |
1403 The regular expression used to match XLFD font names. */ | |
1404 ); | |
1405 Vxlfd_font_name_regexp = make_xlfd_font_regexp(); | |
1406 } | |
1407 | |
1408 void | |
1409 reinit_vars_of_font_mgr (void) | |
1410 { | |
1411 int i, size = (int) countof (fc_standard_properties); | |
1412 | |
1413 FcInit (); | |
1414 | |
1415 fc_property_name_hash_table = make_string_hash_table (size); | |
1416 for (i = 0; i < size; ++i) | |
1417 puthash (fc_standard_properties[i], NULL, fc_property_name_hash_table); | |
1418 } | |
1419 |