annotate src/font-mgr.c @ 5438:8d29f1c4bb98

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