annotate lisp/msw-font-menu.el @ 1315:70921960b980

[xemacs-hg @ 2003-02-20 08:19:28 by ben] check in makefile fixes et al Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory into src/. Simplify the dependencies -- everything in src/ is dependent on the single entry `src' in MAKE_SUBDIRS. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. mule/mule-msw-init.el: Removed. Delete this file. mule/mule-win32-init.el: New file, with stuff from mule-msw-init.el -- not just for MS Windows native, boys and girls! bytecomp.el: Change code inserted to catch trying to load a Mule-only .elc file in a non-Mule XEmacs. Formerly you got the rather cryptic "The required feature `mule' cannot be provided". Now you get "Loading this file requires Mule support". finder.el: Remove dependency on which directory this function is invoked from. update-elc.el: Don't mess around with ../src/BYTECOMPILE_CHANGE. Now that Makefile.in.in and xemacs.mak are in sync, both of them use NEEDTODUMP and the other one isn't used. dumped-lisp.el: Rewrite in terms of `list' and `nconc' instead of assemble-list, so we can have arbitrary forms, not just `when-feature'. very-early-lisp.el: Nuke this file. finder-inf.el, packages.el, update-elc.el, update-elc-2.el, loadup.el, make-docfile.el: Eliminate references to very-early-lisp. msw-glyphs.el: Comment clarification. xemacs.mak: Add macros DO_TEMACS, DO_XEMACS, and a few others; this macro section is now completely in sync with src/Makefile.in.in. Copy check-features, load-shadows, and rebuilding finder-inf.el from src/Makefile.in.in. The main build/dump/recompile process is now synchronized with src/Makefile.in.in. Change `WARNING' to `NOTE' and `error checking' to `error-checking' TO avoid tripping faux warnings and errors in the VC++ IDE. Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory from top-level Makefile.in.in to here. Simplify the dependencies. Rearrange into logical subsections. Synchronize the main compile/dump/build-elcs section with xemacs.mak, which is already clean and in good working order. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. Add additional levels of macros \(e.g. DO_TEMACS, DO_XEMACS, TEMACS_BATCH, XEMACS_BATCH, XEMACS_BATCH_PACKAGES) to factor out duplicated stuff. Clean up handling of "HEAP_IN_DATA" (Cygwin) so it doesn't need to ignore the return value from dumping. Add .NO_PARALLEL since various aspects of building and dumping must be serialized but do not always have dependencies between them (this is impossible in some cases). Everything related to src/ now gets built in one pass in this directory by just running `make' (except the Makefiles themselves and config.h, paths.h, Emacs.ad.h, and other generated .h files). console.c: Update list of possibly valid console types. emacs.c: Rationalize the specifying and handling of the type of the first frame. This was originally prompted by a workspace in which I got GTK to compile under C++ and in the process fixed it so it could coexist with X in the same build -- hence, a combined TTY/X/MS-Windows/GTK build is now possible under Cygwin. (However, you can't simultaneously *display* more than one kind of device connection -- but getting that to work is not that difficult. Perhaps a project for a bored grad student. I (ben) would do it but don't see the use.) To make sense of this, I added new switches that can be used to specifically indicate the window system: -x [aka --use-x], -tty \[aka --use-tty], -msw [aka --use-ms-windows], -gtk [aka --use-gtk], and -gnome [aka --use-gnome, same as --use-gtk]. -nw continues as an alias for -tty. When none have been given, XEmacs checks for other parameters implying particular device types (-t -> tty, -display -> x [or should it have same treatment as DISPLAY below?]), and has ad-hoc logic afterwards: if env var DISPLAY is set, use x (or gtk? perhaps should check whether gnome is running), else MS Windows if it exsits, else TTY if it exists, else stream, and you must be running in batch mode. This also fixes an existing bug whereby compiling with no x, no mswin, no tty, when running non- interactively (e.g. to dump) I get "sorry, must have TTY support". emacs.c: Turn on Vstack_trace_on_error so that errors are debuggable even when occurring extremely early in reinitialization. emacs.c: Try to make sure that the user can see message output under Windows (i.e. it doesn't just disappear right away) regardless of when it occurs, e.g. in the middle of creating the first frame. emacs.c: Define new function `emacs-run-status', indicating whether XEmacs is noninteractive or interactive, whether raw, post-dump/pdump-load or run-temacs, whether we are dumping, whether pdump is in effect. event-stream.c: It's "mommas are fat", not "momas are fat". Fix other typo. event-stream.c: Conditionalize in_menu_callback check on HAVE_MENUBARS, because it won't exist on w/o menubar support, lisp.h: More hackery on RETURN_NOT_REACHED. Cygwin v3.2 DOES complain here if RETURN_NOT_REACHED() is blank, as it is for GCC 2.5+. So make it blank only for GCC 2.5 through 2.999999999999999. Declare Vstack_trace_on_error. profile.c: Need to include "profile.h" to fix warnings. sheap.c: Don't fatal() when need to rerun Make, just stderr_out() and exit(0). That way we can distinguish between a dumping failing expectedly (due to lack of stack space, triggering another dump) and unexpectedly, in which case, we want to stop building. (or go on, if -K is given) syntax.c, syntax.h: Use ints where they belong, and enum syntaxcode's where they belong, and fix warnings thereby. syntax.h: Fix crash caused by an edge condition in the syntax-cache macros. text.h: Spacing fixes. xmotif.h: New file, to get around shadowing warnings. EmacsManager.c, event-Xt.c, glyphs-x.c, gui-x.c, input-method-motif.c, xmmanagerp.h, xmprimitivep.h: Include xmotif.h. alloc.c: Conditionalize in_malloc on ERROR_CHECK_MALLOC. config.h.in, file-coding.h, fileio.c, getloadavg.c, select-x.c, signal.c, sysdep.c, sysfile.h, systime.h, text.c, unicode.c: Eliminate HAVE_WIN32_CODING_SYSTEMS, use WIN32_ANY instead. Replace defined (WIN32_NATIVE) || defined (CYGWIN) with WIN32_ANY. lisp.h: More futile attempts to walk and chew gum at the same time when dealing with subr's that don't return.
author ben
date Thu, 20 Feb 2003 08:19:44 +0000
parents 79c6ff3eef26
children 491f8cf78a9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1 ;; msw-font-menu.el --- Managing menus of mswindows fonts.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
2
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
3 ;; Copyright (C) 1999 Free Software Foundation, Inc.
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
4 ;; Copyright (C) 2002 Ben Wing.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
5
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
6 ;; Adapted from x-font-menu.el by Andy Piper <andy@xemacs.org>
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
7
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
9
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
10 ;; XEmacs is free software; you can redistribute it and/or modify it
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
11 ;; under the terms of the GNU General Public License as published by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
13 ;; any later version.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
14
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
18 ;; General Public License for more details.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
19
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
21 ;; along with XEmacs; see the file COPYING. If not, write to the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
22 ;; Free Software Foundation, 59 Temple Place - Suite 330,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
24
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
25 ;;; Known Problems:
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
26 ;;; ===============
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
27 ;;; There is knowledge here about the regexp match numbers in
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
28 ;;; `mswindows-font-regexp' and `mswindows-font-regexp-foundry-and-family' defined in
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
29 ;;; mswindows-faces.el.
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
30 ;;;
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
31
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
32 ;;; mswindows fonts look like:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
33 ;;; fontname[:[weight][ style][:pointsize[:effects]]][:charset]
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
34 ;;; ie:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
35 ;;; Lucida Console:Regular:10
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
36 ;;; minimal:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
37 ;;; Courier New
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
38 ;;; maximal:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
39 ;;; Courier New:Bold Italic:10:underline strikeout:western
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
40
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
41 ;;; Code:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
42
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
43 ;; #### - implement these...
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
44 ;;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
45 ;;; (defvar font-menu-ignore-proportional-fonts nil
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
46 ;;; "*If non-nil, then the font menu will only show fixed-width fonts.")
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
47
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
48 (require 'font-menu)
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
49 (globally-declare-boundp 'mswindows-font-regexp)
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
50
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
51 (defvar mswindows-font-menu-junk-families
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 398
diff changeset
52 (mapconcat
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 398
diff changeset
53 #'identity
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 398
diff changeset
54 '("Symbol"
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 398
diff changeset
55 )
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 398
diff changeset
56 "\\|")
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
57 "A regexp matching font families which are uninteresting (e.g. cursor fonts).")
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
58
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
59 (defvar mswindows-font-regexp-ascii nil
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
60 "This is used to filter out font families that can't display ASCII text.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
61 It must be set at run-time.")
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
62
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
63 ;;;###autoload
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
64 (defun mswindows-reset-device-font-menus (device &optional debug)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
65 "Generates the `Font', `Size', and `Weight' submenus for the Options menu.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
66 This is run the first time that a font-menu is needed for each device.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
67 If you don't like the lazy invocation of this function, you can add it to
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
68 `create-device-hook' and that will make the font menus respond more quickly
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
69 when they are selected for the first time. If you add fonts to your system,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
70 or if you change your font path, you can call this to re-initialize the menus."
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
71 (unless mswindows-font-regexp-ascii
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 502
diff changeset
72 (setq mswindows-font-regexp-ascii "Western"))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
73 (let ((case-fold-search t)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
74 family size weight entry
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
75 dev-cache cache families sizes weights)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
76 (dolist (name (cond ((null debug) ; debugging kludge
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
77 (list-fonts "::::" device))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
78 ((stringp debug) (split-string debug "\n"))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
79 (t debug)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
80 (when (and (string-match mswindows-font-regexp-ascii name)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
81 (string-match mswindows-font-regexp name))
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
82 (setq weight (capitalize (car (mswindows-parse-font-style
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
83 (match-string 2 name))))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
84 size (string-to-int (match-string 3 name))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
85 family (match-string 1 name))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
86 (unless (string-match mswindows-font-menu-junk-families family)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
87 (setq entry (or (vassoc name cache)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
88 (car (setq cache
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
89 (cons (vector family nil nil t)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
90 cache)))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
91 (or (member family families) (push family families))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
92 (or (member weight weights) (push weight weights))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
93 (or (member size sizes) (push size sizes))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
94 (or (member weight (aref entry 1)) (push weight (aref entry 1)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
95 (or (member size (aref entry 2)) (push size (aref entry 2))))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
96 ;;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
97 ;; Hack scalable fonts.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
98 ;; Some fonts come only in scalable versions (the only size is 0)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
99 ;; and some fonts come in both scalable and non-scalable versions
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
100 ;; (one size is 0). If there are any scalable fonts at all, make
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
101 ;; sure that the union of all point sizes contains at least some
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
102 ;; common sizes - it's possible that some sensible sizes might end
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
103 ;; up not getting mentioned explicitly.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
104 ;;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
105 (if (member 0 sizes)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
106 (let ((common '(6 8 10 12 14 16 18 24)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
107 (while common
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
108 (or;;(member (car common) sizes) ; not enough slack
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
109 (let ((rest sizes)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
110 (done nil))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
111 (while (and (not done) rest)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
112 (if (and (> (car common) (- (car rest) 1))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
113 (< (car common) (+ (car rest) 1)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
114 (setq done t))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
115 (setq rest (cdr rest)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
116 done)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
117 (setq sizes (cons (car common) sizes)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
118 (setq common (cdr common)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
119 (setq sizes (delq 0 sizes))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
120
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
121 (setq families (sort families 'string-lessp)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
122 weights (sort weights 'string-lessp)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
123 sizes (sort sizes '<))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
124
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
125 (dolist (entry cache)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
126 (aset entry 1 (sort (aref entry 1) 'string-lessp))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
127 (aset entry 2 (sort (aref entry 2) '<)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
128
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
129 (setq dev-cache (assq device device-fonts-cache))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
130 (or dev-cache
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
131 (setq dev-cache (car (push (list device) device-fonts-cache))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
132 (setcdr
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
133 dev-cache
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
134 (vector
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
135 cache
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
136 (mapcar (lambda (x)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
137 (vector x
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
138 (list 'font-menu-set-font x nil nil)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
139 ':style 'radio ':active nil ':selected nil))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
140 families)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
141 (mapcar (lambda (x)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
142 (vector (int-to-string x)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
143 (list 'font-menu-set-font nil nil x)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
144 ':style 'radio ':active nil ':selected nil))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
145 sizes)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
146 (mapcar (lambda (x)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
147 (vector x
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
148 (list 'font-menu-set-font nil x nil)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
149 ':style 'radio ':active nil ':selected nil))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
150 weights)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
151 (cdr dev-cache)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
152
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
153 ;; Extract font information from a face. We examine both the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
154 ;; user-specified font name and the canonical (`true') font name.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
155 ;; These can appear to have totally different properties.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
156
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
157 ;; We use the user-specified one if possible, else use the truename.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
158 ;; If the user didn't specify one get the truename and use the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
159 ;; possibly suboptimal data from that.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
160 ;;;###autoload
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
161 (defun* mswindows-font-menu-font-data (face dcache)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
162 (let* ((case-fold-search t)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
163 (domain (if font-menu-this-frame-only-p
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
164 (selected-frame)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
165 (selected-device)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
166 (name (font-instance-name (face-font-instance face domain)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
167 (truename (font-instance-truename
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
168 (face-font-instance face domain
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
169 (if (featurep 'mule) 'ascii))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
170 family size weight entry slant)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
171 (when (string-match mswindows-font-regexp name)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
172 (setq family (match-string 1 name))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
173 (setq entry (vassoc family (aref dcache 0))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
174 (when (and (null entry)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
175 (string-match mswindows-font-regexp truename))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
176 (setq family (match-string 1 truename))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
177 (setq entry (vassoc family (aref dcache 0))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
178 (when (null entry)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
179 (return-from mswindows-font-menu-font-data (make-vector 5 nil)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
180
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
181 (when (string-match mswindows-font-regexp name)
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
182 (setq weight (car (mswindows-parse-font-style (match-string 2 name))))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
183 (setq size (string-to-int (match-string 3 name))))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
184
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
185 (when (string-match mswindows-font-regexp truename)
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
186 (destructuring-bind (newweight . slant)
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
187 (mswindows-parse-font-style (match-string 2 truename))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
188 (when (not (member weight (aref entry 1)))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
189 (setq weight newweight))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
190 (when (not (member size (aref entry 2)))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
191 (setq size (string-to-int (match-string 3 truename))))))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
192
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
193 (vector entry family size weight slant)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
194
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
195 (defun mswindows-font-menu-load-font (family weight size slant resolution)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
196 "Try to load a font with the requested properties.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
197 The weight, slant and resolution are only hints."
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
198 (when (integerp size) (setq size (int-to-string size)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
199 (let (font)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
200 (catch 'got-font
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
201 (dolist (weight (list weight ""))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
202 (dolist (slant
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
203 ;; oblique is not currently implemented
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
204 (cond ((string-equal slant "Oblique") '("Italic" ""))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
205 ((string-equal slant "Italic") '("Italic" ""))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
206 (t (list slant ""))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
207 (when (setq font
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
208 (make-font-instance
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
209 (concat
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
210 family ":"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
211 (mswindows-construct-font-style weight slant) ":"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
212 size "::")
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
213 nil t))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
214 (throw 'got-font font)))))))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
215
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
216 (provide 'mswindows-font-menu)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
217
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
218 ;;; msw-font-menu.el ends here