annotate src/objects-xlike-inc.c @ 5015:d95c102a96d3

cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings) -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-08 Ben Wing <ben@xemacs.org> * faces.c: * faces.c (face_property_matching_instance): * faces.c (ensure_face_cachel_contains_charset): * faces.h (FACE_FONT): * lisp.h: * lisp.h (enum font_specifier_matchspec_stages): * objects-msw.c: * objects-msw.c (mswindows_font_spec_matches_charset): * objects-msw.c (mswindows_find_charset_font): * objects-tty.c: * objects-tty.c (tty_font_spec_matches_charset): * objects-tty.c (tty_find_charset_font): * objects-xlike-inc.c: * objects-xlike-inc.c (XFUN): * objects-xlike-inc.c (xft_find_charset_font): * objects.c: * objects.c (font_instantiate): * objects.c (FROB): * specifier.c: * specifier.c (charset_matches_specifier_tag_set_p): * specifier.c (call_charset_predicate): * specifier.c (define_specifier_tag): * specifier.c (Fdefine_specifier_tag): * specifier.c (setup_charset_initial_specifier_tags): * specifier.c (specifier_instance_from_inst_list): * specifier.c (FROB): * specifier.c (vars_of_specifier): * specifier.h: Rename the specifier-font-matching stages in preparation for eliminating shadowed warnings, some other related fixes from ben-unicode-internal. 1. Rename raw enums: initial -> STAGE_INITIAL final -> STAGE_FINAL impossible -> NUM_MATCHSPEC_STAGES 2. Move `enum font_specifier_matchspec_stages' from specifier.h to lisp.h. 3. Whitespace changes to match coding standards. 4. Eliminate unused second argument STAGE in charset predicates that don't use it -- the code that calls the charset predicates is now smart enough to supply the right number of arguments automatically. 5. Add some long(ish) comments and authorial notices, esp. in objects.c. 6. In specifier.c, change Vcharset_tag_lists from a vector over leading bytes to a hash table over charsets. This change is unnecessary currently but doesn't hurt and will be required when we merge in Unicode-internal. 7. In specifier.c, extract out the code that calls charset predicates into a function call_charset_predicate().
author Ben Wing <ben@xemacs.org>
date Mon, 08 Feb 2010 16:51:25 -0600
parents 4aebb0131297
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
1 /* Common code between X and GTK -- fonts and colors.
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
2 Copyright (C) 1991-5, 1997 Free Software Foundation, Inc.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
3 Copyright (C) 1995 Sun Microsystems, Inc.
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
4 Copyright (C) 1996, 2001, 2002, 2003, 2010 Ben Wing.
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
5
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
6 This file is part of XEmacs.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
7
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
11 later version.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
12
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
16 for more details.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
17
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
22
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
23 /* Synched up with: Not in FSF. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
24
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
25 /* Before including this file, you need to define either THIS_IS_X or
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
26 THIS_IS_GTK. */
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
27
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
28 /* See comment at top of console-xlike-inc.h for an explanation of
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
29 how this file works. */
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
30
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
31 /* Pango is ready for prime-time now, as far as I understand it. The GTK
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
32 people should be using that. Oh well. (Aidan Kehoe, Sat Nov 4 12:41:12
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
33 CET 2006) */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
34
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
35 #include "console-xlike-inc.h"
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
36
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
37 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
38
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
39 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
40 # define DEBUG_OBJECTS(FORMAT, ...) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
41 do { if (debug_x_objects) stderr_out(FORMAT, __VA_ARGS__); } while (0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
42 #else /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
43 # define DEBUG_OBJECTS(format, ...)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
44 #endif /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
45
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
46 #elif defined(__GNUC__)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
47
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
48 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
49 # define DEBUG_OBJECTS(format, args...) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
50 do { if (debug_x_objects) stderr_out(format, args ); } while (0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
51 #else /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
52 # define DEBUG_OBJECTS(format, args...)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
53 #endif /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
54
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
55 #else /* defined(__STDC_VERSION__) [...] */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
56 # define DEBUG_OBJECTS (void)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
57 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
58
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
59 #ifdef MULE
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
60
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
61 /* For some code it's reasonable to have only one copy and conditionalize
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
62 at run-time. For other code it isn't. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
63
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
64 static int
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
65 count_hyphens(const Ibyte *str, Bytecount length, Ibyte **last_hyphen)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
66 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
67 int hyphen_count = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
68 const Ibyte *hyphening = str;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
69 const Ibyte *new_hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
70
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
71 for (hyphen_count = 0;
4124
9a633a00c3f2 [xemacs-hg @ 2007-08-17 08:08:05 by crestani]
crestani
parents: 3841
diff changeset
72 NULL != (new_hyphening = (Ibyte *) memchr((const void *)hyphening, '-', length));
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
73 hyphen_count++)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
74 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
75 ++new_hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
76 length -= new_hyphening - hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
77 hyphening = new_hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
78 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
79
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
80 if (NULL != last_hyphen)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
81 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
82 *last_hyphen = (Ibyte *)hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
83 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
84
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
85 return hyphen_count;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
86 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
87
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
88 static int
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
89 XFUN (font_spec_matches_charset) (struct device * USED_IF_XFT (d),
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
90 Lisp_Object charset,
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
91 const Ibyte *nonreloc, Lisp_Object reloc,
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
92 Bytecount offset, Bytecount length,
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
93 enum font_specifier_matchspec_stages stage)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
94 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
95 Lisp_Object registries = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
96 long i, registries_len;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
97 const Ibyte *the_nonreloc;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
98 Bytecount the_length;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
99
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
100 the_nonreloc = nonreloc;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
101 the_length = length;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
102
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
103 if (!the_nonreloc)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
104 the_nonreloc = XSTRING_DATA (reloc);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
105 fixup_internal_substring (nonreloc, reloc, offset, &the_length);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
106 the_nonreloc += offset;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
107
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
108 #ifdef USE_XFT
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
109 if (stage == STAGE_FINAL)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
110 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
111 Display *dpy = DEVICE_X_DISPLAY (d);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
112 Extbyte *extname;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
113 XftFont *rf;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
114 const Ibyte *the_nonreloc;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
115
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
116 if (!NILP(reloc))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
117 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
118 the_nonreloc = XSTRING_DATA (reloc);
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
119 extname = LISP_STRING_TO_EXTERNAL (reloc, Qx_font_name_encoding);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
120 rf = xft_open_font_by_name (dpy, extname);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
121 return 0; /* #### maybe this will compile and run ;) */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
122 /* Jesus, Stephen, what the fuck? */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
123 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
124 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
125 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
126
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
127 /* Hmm, this smells bad. */
4353
4143b78d0df0 Merge an old patch of Ben's, involving font instantiation and charsets.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4124
diff changeset
128 if (NILP (charset))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
129 return 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
130
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
131 /* Hack! Short font names don't have the registry in them,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
132 so we just assume the user knows what they're doing in the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
133 case of ASCII. For other charsets, you gotta give the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
134 long form; sorry buster.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
135 #### FMH: this screws fontconfig/Xft?
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
136 STRATEGY: use fontconfig's ability to hack languages and character
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
137 sets (lang and charset properties).
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
138 #### Maybe we can use the fontconfig model to eliminate the difference
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
139 between faces and fonts? No - it looks like that would be an abuse
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
140 (fontconfig doesn't know about colors, although Xft does).
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
141 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
142 if (EQ (charset, Vcharset_ascii) &&
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
143 (!memchr (the_nonreloc, '*', the_length))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
144 && (5 > (count_hyphens(the_nonreloc, the_length, NULL))))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
145 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
146 return 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
147 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
148
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
149 if (STAGE_FINAL == stage)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
150 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
151 registries = Qunicode_registries;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
152 }
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
153 else if (STAGE_INITIAL == stage)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
154 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
155 registries = XCHARSET_REGISTRIES (charset);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
156 if (NILP(registries))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
157 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
158 return 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
159 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
160 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
161 else assert(0);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
162
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
163 CHECK_VECTOR (registries);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
164 registries_len = XVECTOR_LENGTH(registries);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
165
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
166 for (i = 0; i < registries_len; ++i)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
167 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
168 if (!(STRINGP(XVECTOR_DATA(registries)[i]))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
169 || (XSTRING_LENGTH(XVECTOR_DATA(registries)[i]) > the_length))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
170 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
171 continue;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
172 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
173
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
174 /* Check if the font spec ends in the registry specified. X11 says
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
175 this comparison is case insensitive: XLFD, section 3.11:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
176
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
177 "Alphabetic case distinctions are allowed but are for human
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
178 readability concerns only. Conforming X servers will perform
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
179 matching on font name query or open requests independent of case." */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
180 if (0 == qxestrcasecmp(XSTRING_DATA(XVECTOR_DATA(registries)[i]),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
181 the_nonreloc + (the_length -
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
182 XSTRING_LENGTH
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
183 (XVECTOR_DATA(registries)[i]))))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
184 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
185 return 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
186 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
187 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
188 return 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
189 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
190
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
191 static Lisp_Object
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
192 xlistfonts_checking_charset (Lisp_Object device, const Extbyte *xlfd,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
193 Lisp_Object charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
194 enum font_specifier_matchspec_stages stage)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
195 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
196 Extbyte **names;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
197 Lisp_Object result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
198 int count = 0, i;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
199 DECLARE_EISTRING(ei_single_result);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
200
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
201 names = XListFonts (GET_XLIKE_DISPLAY (XDEVICE (device)),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
202 xlfd, MAX_FONT_COUNT, &count);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
203
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
204 for (i = 0; i < count; ++i)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
205 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
206 eireset(ei_single_result);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
207 eicpy_ext(ei_single_result, names[i], Qx_font_name_encoding);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
208
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
209 if (DEVMETH_OR_GIVEN(XDEVICE (device), font_spec_matches_charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
210 (XDEVICE (device), charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
211 eidata(ei_single_result), Qnil, 0,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
212 -1, stage), 0))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
213 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
214 result = eimake_string(ei_single_result);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
215 DEBUG_OBJECTS ("in xlistfonts_checking_charset, returning %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
216 eidata(ei_single_result));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
217 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
218 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
219 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
220
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
221 if (names)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
222 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
223 XFreeFontNames (names);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
224 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
225
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
226 return result;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
227 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
228
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
229 #ifdef USE_XFT
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
230 /* #### debug functions: find a better place for us */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
231 const char *FcResultToString (FcResult r);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
232 const char *
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
233 FcResultToString (FcResult r)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
234 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
235 static char buffer[256];
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
236 switch (r)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
237 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
238 case FcResultMatch:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
239 return "FcResultMatch";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
240 case FcResultNoMatch:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
241 return "FcResultNoMatch";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
242 case FcResultTypeMismatch:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
243 return "FcResultTypeMismatch";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
244 case FcResultNoId:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
245 return "FcResultNoId";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
246 default:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
247 snprintf (buffer, 255, "FcResultUndocumentedValue (%d)", r);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
248 return buffer;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
249 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
250 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
251
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
252 const char *FcTypeOfValueToString (FcValue v);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
253 const char *
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
254 FcTypeOfValueToString (FcValue v)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
255 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
256 static char buffer[256];
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
257 switch (v.type)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
258 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
259 case FcTypeMatrix:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
260 return "FcTypeMatrix";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
261 case FcTypeString:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
262 return "FcTypeString";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
263 case FcTypeVoid:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
264 return "FcTypeVoid";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
265 case FcTypeDouble:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
266 return "FcTypeDouble";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
267 case FcTypeInteger:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
268 return "FcTypeInteger";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
269 case FcTypeBool:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
270 return "FcTypeBool";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
271 case FcTypeCharSet:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
272 return "FcTypeCharSet";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
273 case FcTypeLangSet:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
274 return "FcTypeLangSet";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
275 /* #### There is no union member of this type, but there are void* and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
276 FcPattern* members, as of fontconfig.h FC_VERSION 10002 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
277 case FcTypeFTFace:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
278 return "FcTypeFTFace";
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
279 default:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
280 snprintf (buffer, 255, "FcTypeUndocumentedType (%d)", v.type);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
281 return buffer;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
282 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
283 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
284
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
285 static FcCharSet *
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
286 mule_to_fc_charset (Lisp_Object cs)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
287 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
288 int ucode, i, j;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
289 FcCharSet *fccs;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
290
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
291 CHECK_CHARSET (cs);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
292 fccs = FcCharSetCreate ();
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
293 /* #### do we also need to deal with 94 vs. 96 charsets?
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
294 ie, how are SP and DEL treated in ASCII? non-graphic should return -1 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
295 if (1 == XCHARSET_DIMENSION (cs))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
296 /* Unicode tables are indexed by offsets from ASCII SP, not by ASCII */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
297 for (i = 0; i < 96; i++)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
298 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
299 ucode = ((int *) XCHARSET_TO_UNICODE_TABLE (cs))[i];
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
300 if (ucode >= 0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
301 /* #### should check for allocation failure */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
302 FcCharSetAddChar (fccs, (FcChar32) ucode);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
303 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
304 else if (2 == XCHARSET_DIMENSION (cs))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
305 /* Unicode tables are indexed by offsets from ASCII SP, not by ASCII */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
306 for (i = 0; i < 96; i++)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
307 for (j = 0; j < 96; j++)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
308 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
309 ucode = ((int **) XCHARSET_TO_UNICODE_TABLE (cs))[i][j];
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
310 if (ucode >= 0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
311 /* #### should check for allocation failure */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
312 FcCharSetAddChar (fccs, (FcChar32) ucode);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
313 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
314 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
315 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
316 FcCharSetDestroy (fccs);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
317 fccs = NULL;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
318 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
319 return fccs;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
320 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
321
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
322 struct charset_reporter {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
323 Lisp_Object *charset;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
324 /* This is a debug facility, require ASCII. */
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
325 const Ascbyte *language; /* ASCII, please */
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
326 /* Technically this is FcChar8, but fsckin' GCC 4 bitches.
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
327 RFC 3066 is a combination of ISO 639 and ISO 3166. */
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
328 const Ascbyte *rfc3066; /* ASCII, please */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
329 };
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
330
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
331 static struct charset_reporter charset_table[] =
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
332 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
333 /* #### It's my branch, my favorite charsets get checked first!
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
334 That's a joke, Son.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
335 Ie, I don't know what I'm doing, so my charsets first is as good as
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
336 any other arbitrary order. If you have a better idea, speak up! */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
337 { &Vcharset_ascii, "English", "en" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
338 { &Vcharset_japanese_jisx0208, "Japanese", "ja" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
339 { &Vcharset_japanese_jisx0212, "Japanese", "ja" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
340 { &Vcharset_katakana_jisx0201, "Japanese", "ja" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
341 { &Vcharset_latin_jisx0201, "Japanese", "ja" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
342 { &Vcharset_japanese_jisx0208_1978, "Japanese", "ja" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
343 { &Vcharset_greek_iso8859_7, "Greek", "el" },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
344 /* #### all the Chinese need checking
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
345 Damn the blood-sucking ISO anyway. */
4756
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
346 { &Vcharset_chinese_gb2312, "simplified Chinese", "zh-cn" },
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
347 { &Vcharset_korean_ksc5601, "Korean", "ko" },
4756
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
348 { &Vcharset_chinese_cns11643_1, "traditional Chinese", "zh-tw" },
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
349 { &Vcharset_chinese_cns11643_2, "traditional Chinese", "zh-tw" },
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
350 /* #### not obvious how to handle these
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
351 We could (for experimental purposes) make the last element into
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
352 an array of ISO 639 codes, and check for all of them. If a font
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
353 provides some but not others, warn. */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
354 { &Vcharset_latin_iso8859_1, NULL, NULL },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
355 { &Vcharset_latin_iso8859_2, NULL, NULL },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
356 { &Vcharset_latin_iso8859_3, NULL, NULL },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
357 { &Vcharset_latin_iso8859_4, NULL, NULL },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
358 { &Vcharset_latin_iso8859_9, NULL, NULL },
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
359 { &Vcharset_latin_iso8859_15, NULL, NULL },
4756
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
360 { &Vcharset_thai_tis620, "Thai", "th" },
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
361 /* We don't have an arabic charset. bidi issues, I guess? */
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
362 /* { &Vcharset_arabic_iso8859_6, "Arabic", "ar" }, */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
363 { &Vcharset_hebrew_iso8859_8, "Hebrew", "he" },
4756
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
364 /* #### probably close enough for Ukraine? */
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
365 { &Vcharset_cyrillic_iso8859_5, "Russian", "ru" },
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
366 /* #### these probably are not quite right */
4756
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
367 { &Vcharset_chinese_big5_1, "traditional Chinese", "zh-tw" },
5d67242595a8 Update charset_table used by Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4494
diff changeset
368 { &Vcharset_chinese_big5_2, "traditional Chinese", "zh-tw" },
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
369 { NULL, NULL, NULL }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
370 };
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
371
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
372 /* Choose appropriate font name for debug messages.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
373 Use only in the top half of next function (enforced with #undef). */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
374 #define DECLARE_DEBUG_FONTNAME(__xemacs_name) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
375 Eistring *__xemacs_name; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
376 do \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
377 { \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
378 __xemacs_name = debug_xft > 2 ? eistr_fullname \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
379 : debug_xft > 1 ? eistr_longname \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
380 : eistr_shortname; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
381 } while (0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
382
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
383 static Lisp_Object
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
384 xft_find_charset_font (Lisp_Object font, Lisp_Object charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
385 enum font_specifier_matchspec_stages stage)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
386 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
387 const Extbyte *patternext;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
388 Lisp_Object result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
389
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
390 /* #### with Xft need to handle second stage here -- sjt
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
391 Hm. Or maybe not. That would be cool. :-) */
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
392 if (stage == STAGE_FINAL)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
393 return Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
394
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
395 /* Fontconfig converts all FreeType names to UTF-8 before passing them
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
396 back to callers---see fcfreetype.c (FcFreeTypeQuery).
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
397 I don't believe this is documented. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
398
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
399 DEBUG_XFT1 (1, "confirming charset for font instance %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
400 XSTRING_DATA(font));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
401
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
402 /* #### this looks like a fair amount of work, but the basic design
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
403 has never been rethought, and it should be
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
404
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
405 what really should happen here is that we use FcFontSort (FcFontList?)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
406 to get a list of matching fonts, then pick the first (best) one that
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
407 gives language or repertoire coverage.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
408 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
409
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
410 FcInit (); /* No-op if already initialized.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
411 In fontconfig 2.3.2, this cannot return
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
412 failure, but that looks like a bug. We
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
413 check for it with FcGetCurrentConfig(),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
414 which *can* fail. */
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
415 if (!FcConfigGetCurrent())
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
416 stderr_out ("Failed fontconfig initialization\n");
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
417 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
418 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
419 FcPattern *fontxft; /* long-lived, freed at end of this block */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
420 FcResult fcresult;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
421 FcConfig *fcc;
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
422 const Ascbyte *lang = "en";
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
423 FcCharSet *fccs = NULL;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
424 DECLARE_EISTRING (eistr_shortname); /* user-friendly nickname */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
425 DECLARE_EISTRING (eistr_longname); /* omit FC_LANG and FC_CHARSET */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
426 DECLARE_EISTRING (eistr_fullname); /* everything */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
427
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
428 patternext = LISP_STRING_TO_EXTERNAL (font, Qfc_font_name_encoding);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
429 fcc = FcConfigGetCurrent ();
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
430
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
431 /* parse the name, do the substitutions, and match the font */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
432
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
433 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
434 FcPattern *p = FcNameParse ((FcChar8 *) patternext);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
435 PRINT_XFT_PATTERN (3, "FcNameParse'ed name is %s\n", p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
436 /* #### Next two return FcBool, but what does the return mean? */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
437 /* The order is correct according the fontconfig docs. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
438 FcConfigSubstitute (fcc, p, FcMatchPattern);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
439 PRINT_XFT_PATTERN (2, "FcConfigSubstitute'ed name is %s\n", p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
440 FcDefaultSubstitute (p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
441 PRINT_XFT_PATTERN (3, "FcDefaultSubstitute'ed name is %s\n", p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
442 /* #### check fcresult of following match? */
4809
0d3ccd5a2509 Initialize the result variable passed to FcFontMatch. See xemacs-patches
Jerry James <james@xemacs.org>
parents: 4758
diff changeset
443 fcresult = FcResultMatch;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
444 fontxft = FcFontMatch (fcc, p, &fcresult);
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
445 switch (fcresult)
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
446 {
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
447 /* case FcResultOutOfMemory: */
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
448 case FcResultNoMatch:
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
449 case FcResultTypeMismatch:
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
450 case FcResultNoId:
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
451 break;
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
452 case FcResultMatch:
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
453 /* this prints the long fontconfig name */
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
454 PRINT_XFT_PATTERN (1, "FcFontMatch'ed name is %s\n", fontxft);
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
455 break;
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
456 }
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
457 FcPatternDestroy (p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
458 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
459
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
460 /* heuristic to give reasonable-length names for debug reports
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
461
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
462 I considered #ifdef SUPPORT_FULL_FONTCONFIG_NAME etc but that's
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
463 pointless. We're just going to remove this code once the font/
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
464 face refactoring is done, but until then it could be very useful.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
465 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
466 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
467 FcPattern *p = FcFontRenderPrepare (fcc, fontxft, fontxft);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
468 Extbyte *name;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
469
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
470 /* full name, including language coverage and repertoire */
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
471 name = (Extbyte *) FcNameUnparse (p);
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
472 eicpy_ext (eistr_fullname,
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
473 (name ? name : "NOT FOUND"),
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
474 Qfc_font_name_encoding);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
475 if (name) free (name);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
476
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
477 /* long name, omitting coverage and repertoire, plus a number
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
478 of rarely useful properties */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
479 FcPatternDel (p, FC_CHARSET);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
480 FcPatternDel (p, FC_LANG);
3841
5989b9bbb612 [xemacs-hg @ 2007-02-22 16:19:40 by stephent]
stephent
parents: 3680
diff changeset
481 #ifdef FC_WIDTH
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
482 FcPatternDel (p, FC_WIDTH);
3841
5989b9bbb612 [xemacs-hg @ 2007-02-22 16:19:40 by stephent]
stephent
parents: 3680
diff changeset
483 #endif
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
484 FcPatternDel (p, FC_SPACING);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
485 FcPatternDel (p, FC_HINTING);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
486 FcPatternDel (p, FC_VERTICAL_LAYOUT);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
487 FcPatternDel (p, FC_AUTOHINT);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
488 FcPatternDel (p, FC_GLOBAL_ADVANCE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
489 FcPatternDel (p, FC_INDEX);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
490 FcPatternDel (p, FC_SCALE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
491 FcPatternDel (p, FC_FONTVERSION);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
492 name = (Extbyte *) FcNameUnparse (p);
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
493 eicpy_ext (eistr_longname,
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
494 (name ? name : "NOT FOUND"),
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
495 Qfc_font_name_encoding);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
496 if (name) free (name);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
497
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
498 /* nickname, just family and size, but
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
499 "family" names usually have style, slant, and weight */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
500 FcPatternDel (p, FC_FOUNDRY);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
501 FcPatternDel (p, FC_STYLE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
502 FcPatternDel (p, FC_SLANT);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
503 FcPatternDel (p, FC_WEIGHT);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
504 FcPatternDel (p, FC_PIXEL_SIZE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
505 FcPatternDel (p, FC_OUTLINE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
506 FcPatternDel (p, FC_SCALABLE);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
507 FcPatternDel (p, FC_DPI);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
508 name = (Extbyte *) FcNameUnparse (p);
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
509 eicpy_ext (eistr_shortname,
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
510 (name ? name : "NOT FOUND"),
4757
a23ac8f90a49 Improve warning and error messages from Xft.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4756
diff changeset
511 Qfc_font_name_encoding);
4758
75975fd0b7fc Implement more of the fontconfig API.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4757
diff changeset
512 if (name) free (name);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
513
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
514 FcPatternDestroy (p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
515 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
516
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
517 /* The language approach may better in the long run, but we can't use
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
518 it based on Mule charsets; fontconfig doesn't provide a way to test
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
519 for unions of languages, etc. That will require support from the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
520 text module.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
521
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
522 Optimization: cache the generated FcCharSet in the Mule charset.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
523 Don't forget to destroy it if the Mule charset gets deallocated. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
524
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
525 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
526 /* This block possibly should be a function, but it generates
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
527 multiple values. I find the "pass an address to return the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
528 value in" idiom opaque, so prefer a block. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
529 struct charset_reporter *cr;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
530 for (cr = charset_table;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
531 cr->charset && !EQ (*(cr->charset), charset);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
532 cr++)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
533 ;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
534
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
535 if (cr->rfc3066)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
536 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
537 DECLARE_DEBUG_FONTNAME (name);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
538 CHECKING_LANG (0, eidata(name), cr->language);
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
539 lang = cr->rfc3066;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
540 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
541 else if (cr->charset)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
542 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
543 /* what the hey, build 'em on the fly */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
544 /* #### in the case of error this could return NULL! */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
545 fccs = mule_to_fc_charset (charset);
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
546 /* #### Bad idea here */
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
547 lang = (const Ascbyte *) XSTRING_DATA (XSYMBOL (XCHARSET_NAME
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
548 (charset))->name);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
549 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
550 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
551 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
552 /* OK, we fell off the end of the table */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
553 warn_when_safe_lispobj (intern ("xft"), intern ("alert"),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
554 list2 (build_ascstring ("unchecked charset"),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
555 charset));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
556 /* default to "en"
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
557 #### THIS IS WRONG, WRONG, WRONG!!
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
558 It is why we never fall through to XLFD-checking. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
559 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
560
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
561 ASSERT_ASCTEXT_ASCII (lang);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
562
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
563 if (fccs)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
564 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
565 /* check for character set coverage */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
566 int i = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
567 FcCharSet *v;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
568 FcResult r = FcPatternGetCharSet (fontxft, FC_CHARSET, i, &v);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
569
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
570 if (r == FcResultTypeMismatch)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
571 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
572 DEBUG_XFT0 (0, "Unexpected type return in charset value\n");
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
573 result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
574 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
575 else if (r == FcResultMatch && FcCharSetIsSubset (fccs, v))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
576 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
577 /* The full pattern with the bitmap coverage is massively
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
578 unwieldy, but the shorter names are just *wrong*. We
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
579 should have the full thing internally as truename, and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
580 filter stuff the client doesn't want to see on output.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
581 Should we just store it into the truename right here? */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
582 DECLARE_DEBUG_FONTNAME (name);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
583 DEBUG_XFT2 (0, "Xft font %s supports %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
584 eidata(name), lang);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
585 #ifdef RETURN_LONG_FONTCONFIG_NAMES
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
586 result = eimake_string(eistr_fullname);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
587 #else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
588 result = eimake_string(eistr_longname);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
589 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
590 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
591 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
592 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
593 DECLARE_DEBUG_FONTNAME (name);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
594 DEBUG_XFT2 (0, "Xft font %s doesn't support %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
595 eidata(name), lang);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
596 result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
597 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
598
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
599 /* clean up */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
600 FcCharSetDestroy (fccs);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
601 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
602 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
603 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
604 /* check for language coverage */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
605 int i = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
606 FcValue v;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
607 /* the main event */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
608 FcResult r = FcPatternGet (fontxft, FC_LANG, i, &v);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
609
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
610 if (r == FcResultMatch)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
611 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
612 if (v.type != FcTypeLangSet) /* excessive paranoia */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
613 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
614 ASSERT_ASCTEXT_ASCII(FcTypeOfValueToString(v));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
615 /* Urk! Fall back and punt to core font. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
616 DEBUG_XFT1 (0, "Unexpected type of lang value (%s)\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
617 FcTypeOfValueToString (v));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
618 result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
619 }
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
620 else if (FcLangSetHasLang (v.u.l, (FcChar8 *) lang)
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
621 != FcLangDifferentLang)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
622 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
623 DECLARE_DEBUG_FONTNAME (name);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
624 DEBUG_XFT2 (0, "Xft font %s supports %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
625 eidata(name), lang);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
626 #ifdef RETURN_LONG_FONTCONFIG_NAMES
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
627 result = eimake_string(eistr_fullname);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
628 #else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
629 result = eimake_string(eistr_longname);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
630 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
631 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
632 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
633 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
634 DECLARE_DEBUG_FONTNAME (name);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
635 DEBUG_XFT2 (0, "Xft font %s doesn't support %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
636 eidata(name), lang);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
637 result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
638 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
639 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
640 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
641 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
642 ASSERT_ASCTEXT_ASCII(FcResultToString(r));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
643 DEBUG_XFT1 (0, "Getting lang: unexpected result=%s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
644 FcResultToString (r));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
645 result = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
646 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
647 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
648
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
649 /* clean up and maybe return */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
650 FcPatternDestroy (fontxft);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
651 if (!UNBOUNDP (result))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
652 return result;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
653 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
654 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
655 return Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
656 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
657 #undef DECLARE_DEBUG_FONTNAME
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
658
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
659 #endif /* USE_XFT */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
660
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
661 /* find a font spec that matches font spec FONT and also matches
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
662 (the registry of) CHARSET. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
663 static Lisp_Object
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
664 XFUN (find_charset_font) (Lisp_Object device, Lisp_Object font,
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
665 Lisp_Object charset,
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4809
diff changeset
666 enum font_specifier_matchspec_stages stage)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
667 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
668 Lisp_Object result = Qnil, registries = Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
669 int j, hyphen_count, registries_len = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
670 Ibyte *hyphening, *new_hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
671 Bytecount xlfd_length;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
672
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
673 DECLARE_EISTRING(ei_xlfd_without_registry);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
674 DECLARE_EISTRING(ei_xlfd);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
675
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
676 #ifdef USE_XFT
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
677 result = xft_find_charset_font(font, charset, stage);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
678 if (!NILP(result))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
679 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
680 return result;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
681 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
682 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
683
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
684 switch (stage)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
685 {
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
686 case STAGE_INITIAL:
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
687 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
688 if (!(NILP(XCHARSET_REGISTRIES(charset)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
689 && VECTORP(XCHARSET_REGISTRIES(charset)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
690 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
691 registries_len = XVECTOR_LENGTH(XCHARSET_REGISTRIES(charset));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
692 registries = XCHARSET_REGISTRIES(charset);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
693 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
694 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
695 }
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 4981
diff changeset
696 case STAGE_FINAL:
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
697 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
698 registries_len = 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
699 registries = Qunicode_registries;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
700 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
701 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
702 default:
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
703 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
704 assert(0);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
705 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
706 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
707 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
708
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
709 eicpy_lstr(ei_xlfd, font);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
710 hyphening = eidata(ei_xlfd);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
711 xlfd_length = eilen(ei_xlfd);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
712
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
713 /* Count the hyphens in the string, moving new_hyphening to just after the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
714 last one. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
715 hyphen_count = count_hyphens(hyphening, xlfd_length, &new_hyphening);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
716
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
717 if (0 == registries_len || (5 > hyphen_count &&
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
718 !(1 == xlfd_length && '*' == *hyphening)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
719 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
720 /* No proper XLFD specified, or we can't modify the pattern to change
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
721 the registry and encoding to match what we want, or we have no
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
722 information on the registry needed. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
723 eito_external(ei_xlfd, Qx_font_name_encoding);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
724 DEBUG_OBJECTS ("about to xlistfonts_checking_charset, XLFD %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
725 eidata(ei_xlfd));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
726 result = xlistfonts_checking_charset (device, eiextdata(ei_xlfd),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
727 charset, stage);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
728 /* No need to loop through the available registries; return
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
729 immediately. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
730 return result;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
731 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
732 else if (1 == xlfd_length && '*' == *hyphening)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
733 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
734 /* It's a single asterisk. We can add the registry directly to the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
735 end. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
736 eicpy_ch(ei_xlfd_without_registry, '*');
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
737 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
738 else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
739 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
740 /* It's a fully-specified XLFD. Work out where the registry and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
741 encoding are, and initialise ei_xlfd_without_registry to the string
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
742 without them. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
743
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
744 /* count_hyphens has set new_hyphening to just after the last
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
745 hyphen. Move back to just after the hyphen before it. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
746
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
747 for (new_hyphening -= 2; new_hyphening > hyphening
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
748 && '-' != *new_hyphening; --new_hyphening)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
749 ;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
750 ++new_hyphening;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
751
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
752 eicpy_ei(ei_xlfd_without_registry, ei_xlfd);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
753
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
754 /* Manipulate ei_xlfd_without_registry, using the information about
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
755 ei_xlfd, to which it's identical. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
756 eidel(ei_xlfd_without_registry, new_hyphening - hyphening, -1,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
757 eilen(ei_xlfd) - (new_hyphening - hyphening), -1);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
758
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
759 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
760
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
761 /* Now, loop through the registries and encodings defined for this
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
762 charset, doing an XListFonts each time with the pattern modified to
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
763 specify the regisry and encoding. This avoids huge amounts of IPC and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
764 duplicated searching; now we use the searching the X server was doing
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
765 anyway, where before the X server did its search, transferred huge
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
766 amounts of data, and then we proceeded to do a regexp search on that
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
767 data. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
768 for (j = 0; j < registries_len && NILP(result); ++j)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
769 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
770 eireset(ei_xlfd);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
771 eicpy_ei(ei_xlfd, ei_xlfd_without_registry);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
772
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
773 eicat_lstr(ei_xlfd, XVECTOR_DATA(registries)[j]);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
774
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
775 eito_external(ei_xlfd, Qx_font_name_encoding);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
776
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
777 DEBUG_OBJECTS ("about to xlistfonts_checking_charset, XLFD %s\n",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
778 eidata(ei_xlfd));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
779 result = xlistfonts_checking_charset (device, eiextdata(ei_xlfd),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
780 charset, stage);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
781 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
782
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
783 /* In the event that the charset is ASCII and we haven't matched
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
784 anything up to now, even with a pattern of "*", add "iso8859-1"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
785 to the charset's registry and try again. Not returning a result
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
786 for ASCII means our frame geometry calculations are
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
787 inconsistent, and that we may crash. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
788
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
789 if (1 == xlfd_length && EQ(charset, Vcharset_ascii) && NILP(result)
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
790 && ('*' == eigetch(ei_xlfd_without_registry, 0)))
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
791
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
792 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
793 int have_latin1 = 0;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
794
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
795 /* Set this to, for example, is08859-1 if you want to see the
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
796 error behaviour. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
797
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
798 #define FALLBACK_ASCII_REGISTRY "iso8859-1"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
799
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
800 for (j = 0; j < registries_len; ++j)
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
801 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
802 if (0 == qxestrcasecmp(XSTRING_DATA(XVECTOR_DATA(registries)[j]),
4124
9a633a00c3f2 [xemacs-hg @ 2007-08-17 08:08:05 by crestani]
crestani
parents: 3841
diff changeset
803 (Ibyte *) FALLBACK_ASCII_REGISTRY))
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
804 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
805 have_latin1 = 1;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
806 break;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
807 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
808 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
809
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
810 if (!have_latin1)
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
811 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
812 Lisp_Object new_registries = make_vector(registries_len + 1, Qnil);
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
813
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
814 XVECTOR_DATA(new_registries)[0]
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
815 = build_ascstring(FALLBACK_ASCII_REGISTRY);
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
816
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
817 memcpy(XVECTOR_DATA(new_registries) + 1,
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
818 XVECTOR_DATA(registries),
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
819 sizeof XVECTOR_DATA(registries)[0] *
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
820 XVECTOR_LENGTH(registries));
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
821
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
822 /* Calling set_charset_registries instead of overwriting the
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
823 value directly, to allow the charset font caches to be
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
824 invalidated and a change to the default face to be
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
825 noted. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
826 set_charset_registries(charset, new_registries);
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
827
3680
efca49973324 [xemacs-hg @ 2006-11-15 21:12:13 by aidan]
aidan
parents: 3676
diff changeset
828 warn_when_safe (Qface, Qwarning,
efca49973324 [xemacs-hg @ 2006-11-15 21:12:13 by aidan]
aidan
parents: 3676
diff changeset
829 "Your ASCII charset registries contain nothing "
efca49973324 [xemacs-hg @ 2006-11-15 21:12:13 by aidan]
aidan
parents: 3676
diff changeset
830 "sensible. Adding `" FALLBACK_ASCII_REGISTRY "'.");
efca49973324 [xemacs-hg @ 2006-11-15 21:12:13 by aidan]
aidan
parents: 3676
diff changeset
831
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
832 /* And recurse. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
833 result =
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
834 DEVMETH_OR_GIVEN (XDEVICE (device), find_charset_font,
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
835 (device, font, charset, stage),
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
836 result);
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
837 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
838 else
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
839 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
840 DECLARE_EISTRING (ei_connection_name);
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
841
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
842 /* We preserve a copy of the connection name for the error message
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
843 after the device is deleted. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
844 eicpy_lstr (ei_connection_name,
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
845 DEVICE_CONNECTION (XDEVICE(device)));
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
846
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
847 stderr_out ("Cannot find a font for ASCII, deleting device on %s\n",
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
848 eidata (ei_connection_name));
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
849
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
850 io_error_delete_device (device);
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
851
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
852 /* Do a normal warning in the event that we have other, non-X
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
853 frames available. (If we don't, io_error_delete_device will
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
854 have exited.) */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
855 warn_when_safe
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
856 (Qface, Qerror,
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
857 "Cannot find a font for ASCII, deleting device on %s.\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
858 "\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
859 "Your X server fonts appear to be inconsistent; fix them, or\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
860 "the next frame you create on that DISPLAY will crash this\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
861 "XEmacs. At a minimum, provide one font with an XLFD ending\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
862 "in `" FALLBACK_ASCII_REGISTRY "', so we can work out what size\n"
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
863 "a frame should be. ",
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
864 eidata (ei_connection_name));
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
865 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
866
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
867 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
868
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
869 /* This function used to return the font spec, in the case where a font
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
870 didn't exist on the X server but it did match the charset. We're not
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
871 doing that any more, because none of the other platform code does, and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
872 the old behaviour was badly-judged in other respects, so I don't trust
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
873 the original author to have had a good reason for it. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
874
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
875 return result;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
876 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
877
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents:
diff changeset
878 #endif /* MULE */