annotate lisp/ps-bdf.el @ 92016:4a8a943b5b75

(decode_mode_spec): New arg string. (display_mode_element): Adjusted for the above change.
author Kenichi Handa <handa@m17n.org>
date Thu, 21 Feb 2008 07:03:56 +0000
parents dca6485ff374
children ab068ffc7048
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38240
diff changeset
1 ;;; ps-bdf.el --- BDF font file handler for ps-print
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
2
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78299
diff changeset
3 ;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
74544
43cc94d955c2 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74417
diff changeset
4 ;; Free Software Foundation, Inc.
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78299
diff changeset
5 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78299
diff changeset
6 ;; 2008
67658
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64645
diff changeset
7 ;; National Institute of Advanced Industrial Science and Technology (AIST)
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64645
diff changeset
8 ;; Registration Number H14PRO021
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
9
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
10 ;; Copyright (C) 2003
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
11 ;; National Institute of Advanced Industrial Science and Technology (AIST)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
12 ;; Registration Number H13PRO009
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
13
26116
9eb84d5ffd61 Doc fix.
Kenichi Handa <handa@m17n.org>
parents: 24467
diff changeset
14 ;; Keywords: wp, BDF, font, PostScript
74327
78c65b1a07f6 Fix maintainer email. Emacs 20/21 compatibility.
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 68651
diff changeset
15 ;; Maintainer: Kenichi Handa <handa@m17n.org>
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
16
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
17 ;; This file is part of GNU Emacs.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
18
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
19 ;; GNU Emacs is free software; you can redistribute it and/or modify
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
20 ;; it under the terms of the GNU General Public License as published by
78299
101aee30491c Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75347
diff changeset
21 ;; the Free Software Foundation; either version 3, or (at your option)
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
22 ;; any later version.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
23
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
24 ;; GNU Emacs is distributed in the hope that it will be useful,
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
25 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
26 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
27 ;; GNU General Public License for more details.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
28
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
29 ;; You should have received a copy of the GNU General Public License
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
30 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
31 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
32 ;; Boston, MA 02110-1301, USA.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
33
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
34 ;;; Commentary:
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
35
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
36 ;; Functions for getting bitmap information from X's BDF font file are
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
37 ;; provided.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
38
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
39 ;;; Code:
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
40
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
41 (eval-and-compile
90736
ef1369583937 Split XEmacs/Emacs definitions and sample setup code into separate files
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 90735
diff changeset
42 (require 'ps-mule))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
43
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
44 ;;;###autoload
24449
2428731823fd (bdf-directory-list): Different value for ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents: 24416
diff changeset
45 (defvar bdf-directory-list
51875
5488bfe4b6be copyright line fix & bdf-directory-list init fix
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 49597
diff changeset
46 (if (memq system-type '(ms-dos windows-nt))
24450
60d1fad41645 (bdf-directory-list): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24449
diff changeset
47 (list (expand-file-name "fonts/bdf" installation-directory))
24449
2428731823fd (bdf-directory-list): Different value for ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents: 24416
diff changeset
48 '("/usr/local/share/emacs/fonts/bdf"))
24416
3d446442b6a0 (bdf-directory-list): Initialize it to '("/usr/local/share/emacs/fonts/bdf").
Kenichi Handa <handa@m17n.org>
parents: 24087
diff changeset
49 "*List of directories to search for `BDF' font files.
24467
4d5aae556ba8 (bdf-directory-list): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 24450
diff changeset
50 The default value is '(\"/usr/local/share/emacs/fonts/bdf\").")
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
51
38236
ec872cb65bc3 (bdf-directory-list): Use the value relative to
Eli Zaretskii <eliz@gnu.org>
parents: 37136
diff changeset
52 ;; MS-DOS and MS-Windows users like to move the binary around after
ec872cb65bc3 (bdf-directory-list): Use the value relative to
Eli Zaretskii <eliz@gnu.org>
parents: 37136
diff changeset
53 ;; it's built, but the value above is computed at load-up time.
51875
5488bfe4b6be copyright line fix & bdf-directory-list init fix
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 49597
diff changeset
54 (and (memq system-type '(ms-dos windows-nt))
24450
60d1fad41645 (bdf-directory-list): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24449
diff changeset
55 (setq bdf-directory-list
60d1fad41645 (bdf-directory-list): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24449
diff changeset
56 (list (expand-file-name "fonts/bdf" installation-directory))))
60d1fad41645 (bdf-directory-list): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24449
diff changeset
57
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
58 (defun bdf-expand-file-name (bdfname)
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
59 "Return an absolute path name of a `BDF' font file BDFNAME.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
60 It searches directories listed in the variable `bdf-directory-list'
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
61 for BDFNAME."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
62 (if (file-name-absolute-p bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
63 (and (file-readable-p bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
64 bdfname)
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
65 (catch 'tag
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
66 (dolist (dir bdf-directory-list)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
67 (let ((absolute-path (expand-file-name bdfname dir)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
68 (if (file-readable-p absolute-path)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
69 (throw 'tag absolute-path)))))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
70
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
71 (defsubst bdf-file-mod-time (filename)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
72 "Return modification time of FILENAME.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
73 The value is a list of two integers, the first integer has high-order
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
74 16 bits, the second has low 16 bits."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
75 (nth 5 (file-attributes filename)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
76
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
77 (defun bdf-file-newer-than-time (filename mod-time)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
78 "Return non-nil if and only if FILENAME is newer than MOD-TIME.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
79 MOD-TIME is a modification time as a list of two integers, the first
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
80 integer has high-order 16 bits, the second has low 16 bits."
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
81 (let* ((new-mod-time (bdf-file-mod-time filename))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
82 (new-time (car new-mod-time))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
83 (time (car mod-time)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
84 (or (> new-time time)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
85 (and (= new-time time)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
86 (> (nth 1 new-mod-time) (nth 1 mod-time))))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
87
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
88 (defun bdf-find-file (bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
89 "Return a buffer visiting a bdf file BDFNAME.
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
90 BDFNAME must be an absolute file name.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
91 If BDFNAME doesn't exist, return nil."
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
92 (and (file-readable-p bdfname)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
93 (let ((buf (generate-new-buffer " *bdf-work*"))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
94 (coding-system-for-read 'no-conversion))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
95 (save-excursion
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
96 (set-buffer buf)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
97 (insert-file-contents bdfname)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
98 buf))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
99
39307
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
100 (defvar bdf-cache-file (if (eq system-type 'ms-dos)
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
101 ;; convert-standard-filename doesn't
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
102 ;; guarantee that the .el extension will be
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
103 ;; preserved.
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
104 "~/_bdfcache.el"
9861030de063 (bdf-cache-file) <ms-dos>: Use _bdfcache.el, since
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
105 (convert-standard-filename "~/.bdfcache.el"))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
106 "Name of cache file which contains information of `BDF' font files.")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
107
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
108 (defvar bdf-cache nil
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
109 "Cached information of `BDF' font files. It is a list of FONT-INFO.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
110 FONT-INFO is a list of the following format:
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
111 (ABSOLUTE-FILE-NAME MOD-TIME SIZE FONT-BOUNDING-BOX
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
112 RELATIVE-COMPOSE BASELINE-OFFSET CODE-RANGE MAXLEN OFFSET-VECTOR)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
113 See the documentation of the function `bdf-read-font-info' for more detail.")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
114
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
115 (defun bdf-read-cache ()
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
116 "Return a cached information about `BDF' font files from a cache file.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
117 The variable `bdf-cache-file' holds the cache file name.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
118 If the cache file is not readable, this return nil."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
119 (setq bdf-cache nil)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
120 (condition-case nil
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
121 (and (file-readable-p bdf-cache-file)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
122 (progn
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
123 (load-file bdf-cache-file)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
124 (if (listp bdf-cache)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
125 bdf-cache
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
126 (setq bdf-cache nil))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
127 (error nil)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
128
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
129 (defun bdf-write-cache ()
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
130 "Write out cached information of `BDF' font file to a file.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
131 The variable `bdf-cache-file' holds the cache file name.
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
132 The file is written if and only if the file already exists and writable."
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
133 (and bdf-cache
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
134 (file-exists-p bdf-cache-file)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
135 (file-writable-p bdf-cache-file)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
136 (write-region (format "(setq bdf-cache '%S)\n" bdf-cache)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
137 nil bdf-cache-file)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
138
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
139 (defun bdf-set-cache (font-info)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
140 "Cache FONT-INFO as information about one `BDF' font file.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
141 FONT-INFO is a list of the following format:
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
142 (ABSOLUTE-FILE-NAME MOD-TIME SIZE FONT-BOUNDING-BOX
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
143 RELATIVE-COMPOSE BASELINE-OFFSET CODE-RANGE MAXLEN OFFSET-VECTOR)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
144 See the documentation of the function `bdf-read-font-info' for more detail."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
145 (let ((slot (assoc (car font-info) bdf-cache)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
146 (if slot
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
147 (setcdr slot (cdr font-info))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
148 (setq bdf-cache (cons font-info bdf-cache)))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
149
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
150 (defun bdf-initialize ()
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
151 "Initialize `bdf' library."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
152 (and (bdf-read-cache)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
153 (add-hook 'kill-emacs-hook 'bdf-write-cache)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
154
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
155 (defun bdf-compact-code (code code-range)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
156 (if (or (< code (aref code-range 4))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
157 (> code (aref code-range 5)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
158 (setq code (aref code-range 6)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
159 (+ (* (- (lsh code -8) (aref code-range 0))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
160 (1+ (- (aref code-range 3) (aref code-range 2))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
161 (- (logand code 255) (aref code-range 2))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
162
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
163 (defun bdf-expand-code (code code-range)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
164 (let ((code0-range (1+ (- (aref code-range 3) (aref code-range 2)))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
165 (+ (* (+ (/ code code0-range) (aref code-range 0)) 256)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
166 (+ (% code code0-range) (aref code-range 2)))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
167
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
168 (defun bdf-search-and-read (match limit)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
169 (goto-char (point-min))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
170 (and (search-forward match limit t)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
171 (progn
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
172 (goto-char (match-end 0))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
173 (read (current-buffer)))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
174
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
175 (defun bdf-read-font-info (bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
176 "Read `BDF' font file BDFNAME and return information (FONT-INFO) of the file.
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
177 BDFNAME must be an absolute file name.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
178 FONT-INFO is a list of the following format:
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
179 (BDFFILE MOD-TIME FONT-BOUNDING-BOX
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
180 RELATIVE-COMPOSE BASELINE-OFFSET CODE-RANGE MAXLEN OFFSET-VECTOR)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
181
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
182 MOD-TIME is last modification time as a list of two integers, the
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
183 first integer has high-order 16 bits, the second has low 16 bits.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
184
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
185 SIZE is a size of the font on 72 dpi device. This value is got
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
186 from SIZE record of the font.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
187
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
188 FONT-BOUNDING-BOX is the font bounding box as a list of four integers,
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
189 BBX-WIDTH, BBX-HEIGHT, BBX-XOFF, and BBX-YOFF.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
190
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
191 RELATIVE-COMPOSE is an integer value of the font's property
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
192 `_MULE_RELATIVE_COMPOSE'. If the font doesn't have this property, the
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
193 value is 0.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
194
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
195 BASELINE-OFFSET is an integer value of the font's property
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
196 `_MULE_BASELINE_OFFSET'. If the font doesn't have this property, the
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
197 value is 0.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
198
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
199 CODE-RANGE is a vector of minimum 1st byte, maximum 1st byte, minimum
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
200 2nd byte, maximum 2nd byte, minimum code, maximum code, and default
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
201 code. For 1-byte fonts, the first two elements are 0.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
202
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
203 MAXLEN is a maximum bytes of one glyph information in the font file.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
204
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
205 OFFSET-VECTOR is a vector of a file position which starts bitmap data
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
206 of the glyph in the font file.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
207
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
208 Nth element of OFFSET-VECTOR is a file position for the glyph of code
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
209 CODE, where N and CODE are in the following relation:
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
210 (bdf-compact-code CODE) => N, (bdf-expand-code N) => CODE"
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
211 (let* ((buf (bdf-find-file bdfname))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
212 (maxlen 0)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
213 (relative-compose 'false)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
214 (baseline-offset 0)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
215 size
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
216 dpi
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 39346
diff changeset
217 font-bounding-box
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
218 default-char
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
219 code-range
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
220 offset-vector)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
221 (if buf
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
222 (message "Reading %s..." bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
223 (error "BDF file %s doesn't exist" bdfname))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
224 (unwind-protect
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
225 (save-excursion
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
226 (set-buffer buf)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
227 (goto-char (point-min))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
228 (search-forward "\nFONTBOUNDINGBOX")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
229 (setq font-bounding-box
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
230 (vector (read (current-buffer)) (read (current-buffer))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
231 (read (current-buffer)) (read (current-buffer))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
232 ;; The following kludgy code is to avoid bugs of fonts
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
233 ;; jiskan16.bdf and jiskan24.bdf distributed with X.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
234 ;; They contain wrong FONTBOUNDINGBOX.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
235 (and (> (aref font-bounding-box 3) 0)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
236 (string-match "jiskan\\(16\\|24\\)" bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
237 (aset font-bounding-box 3
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
238 (- (aref font-bounding-box 3))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
239
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
240 (goto-char (point-min))
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
241 (search-forward "\nFONT ")
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
242 (if (looking-at "-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-\\([0-9]+\\)")
91429
dca6485ff374 (bdf-read-font-info): Use string-to-number rather than string-to-int.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
243 (setq size (string-to-number (match-string 1)))
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
244 (search-forward "\nSIZE ")
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
245 (setq size (read (current-buffer)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
246 ;; The following kludgy code is t avoid bugs of several
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
247 ;; fonts which have wrong SIZE record.
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
248 (and (string-match "jiskan" bdfname)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
249 (<= size (/ (aref font-bounding-box 1) 3))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
250 (setq size (aref font-bounding-box 1)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
251 (setq dpi (read (current-buffer)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
252 (if (and (> dpi 0) (/= dpi 72))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
253 (setq size (/ (* size dpi) 72))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
254
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
255 (setq default-char (bdf-search-and-read "\nDEFAULT_CHAR" nil))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
256
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
257 (search-forward "\nSTARTCHAR")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
258 (forward-line -1)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
259 (let ((limit (point)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
260 (setq relative-compose
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
261 (or (bdf-search-and-read "\n_MULE_RELATIVE_COMPOSE" limit)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
262 'false)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
263 baseline-offset
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
264 (or (bdf-search-and-read "\n_MULE_BASELINE_OFFSET" limit)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
265 0)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
266
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
267 (let ((min-code0 256) (min-code1 256) (min-code 65536)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
268 (max-code0 0) (max-code1 0) (max-code 0)
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
269 glyph glyph-list code0 code1 code offset)
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
270
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
271 (while (search-forward "\nSTARTCHAR" nil t)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
272 (setq offset (line-beginning-position))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
273 (search-forward "\nENCODING")
64645
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
274 (setq code (read (current-buffer)))
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
275 (if (< code 0)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
276 (search-forward "ENDCHAR")
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
277 (setq code0 (lsh code -8)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
278 code1 (logand code 255)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
279 min-code (min min-code code)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
280 max-code (max max-code code)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
281 min-code0 (min min-code0 code0)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
282 max-code0 (max max-code0 code0)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
283 min-code1 (min min-code1 code1)
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
284 max-code1 (max max-code1 code1))
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
285 (search-forward "ENDCHAR")
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
286 (setq maxlen (max maxlen (- (point) offset))
e4b9a37feb33 (bdf-read-font-info): Ignore glyphs whose ENCODING is
Kenichi Handa <handa@m17n.org>
parents: 64091
diff changeset
287 glyph-list (cons (cons code offset) glyph-list))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
288
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
289 (setq code-range
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
290 (vector min-code0 max-code0 min-code1 max-code1
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
291 min-code max-code (or default-char min-code))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
292 offset-vector
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
293 (make-vector (1+ (bdf-compact-code max-code code-range))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
294 nil))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
295
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
296 (while glyph-list
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
297 (setq glyph (car glyph-list)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
298 glyph-list (cdr glyph-list))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
299 (aset offset-vector
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
300 (bdf-compact-code (car glyph) code-range)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
301 (cdr glyph)))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
302
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
303 (kill-buffer buf))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
304 (message "Reading %s...done" bdfname)
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
305 (list bdfname (bdf-file-mod-time bdfname)
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
306 size font-bounding-box relative-compose baseline-offset
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
307 code-range maxlen offset-vector)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
308
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
309 (defsubst bdf-info-absolute-path (font-info) (nth 0 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
310 (defsubst bdf-info-mod-time (font-info) (nth 1 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
311 (defsubst bdf-info-size (font-info) (nth 2 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
312 (defsubst bdf-info-font-bounding-box (font-info) (nth 3 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
313 (defsubst bdf-info-relative-compose (font-info) (nth 4 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
314 (defsubst bdf-info-baseline-offset (font-info) (nth 5 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
315 (defsubst bdf-info-code-range (font-info) (nth 6 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
316 (defsubst bdf-info-maxlen (font-info) (nth 7 font-info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
317 (defsubst bdf-info-offset-vector (font-info) (nth 8 font-info))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
318
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
319 (defun bdf-get-font-info (bdfname)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
320 "Return information about `BDF' font file BDFNAME.
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
321 BDFNAME must be an absolute file name.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
322 The value FONT-INFO is a list of the following format:
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
323 (BDFNAME MOD-TIME SIZE FONT-BOUNDING-BOX
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
324 RELATIVE-COMPOSE BASELINE-OFFSET CODE-RANGE MAXLEN OFFSET-VECTOR)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
325 See the documentation of the function `bdf-read-font-info' for more detail."
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
326 (or bdf-cache
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
327 (bdf-read-cache))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
328 (let ((font-info (assoc bdfname bdf-cache)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
329 (if (or (not font-info)
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
330 (not (file-readable-p bdfname))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
331 (bdf-file-newer-than-time bdfname (bdf-info-mod-time font-info)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
332 (progn
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
333 (setq font-info (bdf-read-font-info bdfname))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
334 (bdf-set-cache font-info)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
335 font-info))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
336
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
337 (defun bdf-read-bitmap (bdfname offset maxlen relative-compose)
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
338 "Read `BDF' font file BDFNAME to get bitmap data at file position OFFSET.
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
339 BDFNAME is an absolute path name of the font file.
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
340 MAXLEN specifies how many bytes we should read at least.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
341 The value is a list of DWIDTH, BBX, and BITMAP-STRING.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
342 DWIDTH is a pixel width of a glyph.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
343 BBX is a bounding box of the glyph.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
344 BITMAP-STRING is a string representing bits by hexadecimal digits."
39346
aa9501b93334 (bdf-read-bitmap): Initialize returned values to
Gerd Moellmann <gerd@gnu.org>
parents: 39307
diff changeset
345 (let* ((coding-system-for-read 'no-conversion)
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
346 (bbx (bdf-info-font-bounding-box (bdf-get-font-info bdfname)))
39346
aa9501b93334 (bdf-read-bitmap): Initialize returned values to
Gerd Moellmann <gerd@gnu.org>
parents: 39307
diff changeset
347 (dwidth (elt bbx 0))
aa9501b93334 (bdf-read-bitmap): Initialize returned values to
Gerd Moellmann <gerd@gnu.org>
parents: 39307
diff changeset
348 (bitmap-string "")
aa9501b93334 (bdf-read-bitmap): Initialize returned values to
Gerd Moellmann <gerd@gnu.org>
parents: 39307
diff changeset
349 height yoff)
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
350 (condition-case nil
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
351 (with-temp-buffer
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
352 (insert-file-contents bdfname nil offset (+ offset maxlen))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
353 (goto-char (point-min))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
354 (search-forward "\nDWIDTH")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
355 (setq dwidth (read (current-buffer)))
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
356 (if (= dwidth 0)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
357 (setq dwidth 0.1))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
358 (goto-char (point-min))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
359 (search-forward "\nBBX")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
360 (setq bbx (vector (read (current-buffer)) (read (current-buffer))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
361 (read (current-buffer)) (read (current-buffer)))
37136
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
362 height (aref bbx 1)
422bd2e720f2 XEmacs compatibility. Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34313
diff changeset
363 yoff (aref bbx 3))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
364 (search-forward "\nBITMAP")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
365 (forward-line 1)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
366 (delete-region (point-min) (point))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
367 (and (looking-at "\\(0+\n\\)+")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
368 (progn
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
369 (setq height (- height (count-lines (point) (match-end 0))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
370 (delete-region (point) (match-end 0))))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
371 (or (looking-at "ENDCHAR")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
372 (progn
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
373 (search-forward "ENDCHAR" nil 'move)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
374 (forward-line -1)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
375 (while (looking-at "0+$")
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
376 (setq yoff (1+ yoff)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
377 height (1- height))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
378 (forward-line -1))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
379 (forward-line 1)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
380 (aset bbx 1 height)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
381 (aset bbx 3 yoff)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
382 (delete-region (point) (point-max))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
383 (goto-char (point-min))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
384 (while (not (eobp))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
385 (end-of-line)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
386 (delete-char 1))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
387 (setq bitmap-string (buffer-string)))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
388 (error nil))
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
389 (vector dwidth (aref bbx 0) (aref bbx 1) (aref bbx 2) (aref bbx 3)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
390 (concat "<" bitmap-string ">")
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
391 (or relative-compose 'false))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
392
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
393 (defun bdf-get-bitmap (bdfname code)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
394 "Return bitmap information of glyph of CODE in `BDF' font file BDFNAME.
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
395 CODE is an encoding number of glyph in the file.
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
396 The value is a list (DWIDTH BBX BITMAP-STRING).
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
397 DWIDTH is a pixel width of a glyph.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
398 BBX is a bounding box of the glyph.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
399 BITMAP-STRING is a string representing bits by hexadecimal digits."
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
400 (let* ((info (bdf-get-font-info bdfname))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
401 (maxlen (bdf-info-maxlen info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
402 (code-range (bdf-info-code-range info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
403 (offset-vector (bdf-info-offset-vector info)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
404 (bdf-read-bitmap bdfname
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
405 (aref offset-vector (bdf-compact-code code code-range))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
406 maxlen (bdf-info-relative-compose info))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
407
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
408 ;;; Interface to ps-mule.el
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
409
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
410 ;; Called from ps-mule-init-external-library.
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
411 (defun bdf-generate-prologue ()
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
412 (or bdf-cache
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
413 (bdf-initialize))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
414 (ps-mule-generate-bitmap-prologue))
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
415
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
416 ;; Called from ps-mule-check-font.
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
417 (defun bdf-check-font (font-spec)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
418 (let ((font-name-list (ps-mule-font-spec-name font-spec)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
419 (ps-mule-font-spec-set-name
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
420 font-spec
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
421 (if (stringp font-name-list)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
422 (bdf-expand-file-name font-name-list)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
423 (catch 'tag
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
424 (dolist (font-name font-name-list)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
425 (setq font-name (bdf-expand-file-name font-name))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
426 (if font-name
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
427 (throw 'tag font-name))))))))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
428
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
429 ;; Called from ps-mule-generate-font.
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
430 (defun bdf-generate-font (font-spec)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
431 (let ((info (bdf-get-font-info (ps-mule-font-spec-name font-spec))))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
432 (ps-mule-font-spec-set-extra
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
433 font-spec (bdf-info-absolute-path info))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
434 (ps-mule-generate-bitmap-font font-spec
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
435 (bdf-info-size info)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
436 (bdf-info-relative-compose info)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
437 (bdf-info-baseline-offset info)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
438 (bdf-info-font-bounding-box info))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
439
89530
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
440 ;; Called from ps-mule-generate-glyph.
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
441 (defun bdf-generate-glyph (font-spec char)
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
442 (let ((font-name (ps-mule-font-spec-extra font-spec))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
443 (code (ps-mule-encode-char char font-spec)))
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
444 (ps-mule-generate-bitmap-glyph font-spec char code
498e5353548a Mostly re-written.
Kenichi Handa <handa@m17n.org>
parents: 88123
diff changeset
445 (bdf-get-bitmap font-name code))))
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
446
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
447 (provide 'ps-bdf)
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
448
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51875
diff changeset
449 ;;; arch-tag: 9b875ba8-565a-4ecf-acaa-30cee732c898
23896
c0c441b28347 File name changed from bdf.el. Provide ps-bdf
Kenichi Handa <handa@m17n.org>
parents: 23895
diff changeset
450 ;;; ps-bdf.el ends here