annotate src/font-mgr.c @ 5518:3cc7470ea71c

gnuclient: if TMPDIR was set and connect failed, try again with /tmp 2011-06-03 Aidan Kehoe <kehoea@parhasard.net> * gnuslib.c (connect_to_unix_server): Retry with /tmp as a directory in which to search for Unix sockets if an attempt to connect with some other directory failed (which may be because gnuclient and gnuserv don't share an environment value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR turned off).
author Aidan Kehoe <kehoea@parhasard.net>
date Fri, 03 Jun 2011 18:40:57 +0100
parents 8d29f1c4bb98
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