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