Mercurial > hg > xemacs-beta
annotate src/font-mgr.c @ 5090:0ca81354c4c7
Further frame-geometry cleanups
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-03-03 Ben Wing <ben@xemacs.org>
* internals/internals.texi (Intro to Window and Frame Geometry):
* internals/internals.texi (The Paned Area):
* internals/internals.texi (The Displayable Area):
Update to make note of e.g. the fact that the bottom gutter is
actually above the minibuffer.
src/ChangeLog addition:
2010-03-03 Ben Wing <ben@xemacs.org>
* emacs.c:
* emacs.c (assert_equal_failed):
* lisp.h:
* lisp.h (assert_equal):
New fun assert_equal, asserting that two values == each other, and
printing out both values upon failure.
* frame-gtk.c (gtk_initialize_frame_size):
* frame-impl.h:
* frame-impl.h (FRAME_TOP_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_BOTTOM_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_LEFT_INTERNAL_BORDER_START):
* frame-impl.h (FRAME_PANED_TOP_EDGE):
* frame-impl.h (FRAME_NONPANED_SIZE):
* frame-x.c (x_initialize_frame_size):
* frame.c:
* gutter.c (get_gutter_coords):
* gutter.c (calculate_gutter_size):
* gutter.h:
* gutter.h (WINDOW_REAL_TOP_GUTTER_BOUNDS):
* gutter.h (FRAME_TOP_GUTTER_BOUNDS):
* input-method-xlib.c:
* input-method-xlib.c (XIM_SetGeometry):
* redisplay-output.c (clear_left_border):
* redisplay-output.c (clear_right_border):
* redisplay-output.c (redisplay_output_pixmap):
* redisplay-output.c (redisplay_clear_region):
* redisplay-output.c (redisplay_clear_top_of_window):
* redisplay-output.c (redisplay_clear_to_window_end):
* redisplay-xlike-inc.c (XLIKE_clear_frame):
* redisplay.c:
* redisplay.c (UPDATE_CACHE_RETURN):
* redisplay.c (pixel_to_glyph_translation):
* toolbar.c (update_frame_toolbars_geometry):
* window.c (Fwindow_pixel_edges):
Get rid of some redundant macros. Consistently use the
FRAME_TOP_*_START, FRAME_RIGHT_*_END, etc. format. Rename
FRAME_*_BORDER_* to FRAME_*_INTERNAL_BORDER_*. Comment out
FRAME_BOTTOM_* for gutters and the paned area due to the
uncertainty over where the paned area actually begins. (Eventually
we should probably move the gutters outside the minibuffer so that
the paned area is contiguous.) Use FRAME_PANED_* more often in the
code to make things clearer.
Update the diagram to show that the bottom gutter is inside the
minibuffer (!) and that there are "junk boxes" when you have left
and/or right gutters (dead boxes that are mistakenly left uncleared,
unlike the corresponding scrollbar dead boxes). Update the text
appropriately to cover the bottom gutter position, etc.
Rewrite gutter-geometry code to use the FRAME_*_GUTTER_* in place of
equivalent expressions referencing other frame elements, to make the
code more portable in case we move around the gutter location.
Cleanup FRAME_*_GUTTER_BOUNDS() in gutter.h.
Add some #### GEOM! comments where I think code is incorrect --
typically, it wasn't fixed up properly when the gutter was added.
Some cosmetic changes.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 03 Mar 2010 05:07:47 -0600 |
parents | 3c3c1d139863 |
children | b5df3737028a 8b2f75cecb89 |
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" | |
44 #include "objects-x.h" | |
45 #include "objects-x-impl.h" | |
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 |