-;;; ps-bdf.el --- BDF font file handler for ps-print.
+;;; ps-bdf.el --- BDF font file handler for ps-print
-;; Copyright (C) 1998 Electrotechnical Laboratory, JAPAN.
+;; Copyright (C) 1998,99,2001 Electrotechnical Laboratory, JAPAN.
;; Licensed to the Free Software Foundation.
-;; Keywords: BDF, font, PostScript
-;; Maintainer: Kenichi Handa <handa@etl.go.jp>
-;; Time-stamp: <98/11/26 15:09:23 kenichi>
+;; Keywords: wp, BDF, font, PostScript
+;; Maintainer: Kenichi Handa <handa@etl.go.jp>
+;; Time-stamp: <2001-07-15 12:25:51 pavel>
;; This file is part of GNU Emacs.
;;; Code:
-(eval-when-compile (require 'ps-mule))
+(eval-and-compile
+ (require 'ps-mule)
+
+ ;; to avoid XEmacs compilation gripes
+ (defvar installation-directory nil)
+ (defvar coding-system-for-read nil))
;;;###autoload
(defvar bdf-directory-list
- nil
- "*List of directories to search for `BDF' font files.")
+ (if (and (memq system-type '(ms-dos windows-nt))
+ (boundp 'installation-directory))
+ (list (expand-file-name "fonts/bdf" installation-directory))
+ '("/usr/local/share/emacs/fonts/bdf"))
+ "*List of directories to search for `BDF' font files.
+The default value is '(\"/usr/local/share/emacs/fonts/bdf\").")
+
+;; MS-DOS and MS-Windows users like to move the binary around after
+;; it's built, but the value above is computed at load-up time.
+(and (and (memq system-type '(ms-dos windows-nt))
+ (boundp 'installation-directory))
+ (setq bdf-directory-list
+ (list (expand-file-name "fonts/bdf" installation-directory))))
(defun bdf-expand-file-name (bdfname)
- "Return an abosolute path name of a `BDF' font file BDFNAME.
+ "Return an absolute path name of a `BDF' font file BDFNAME.
It searches directories listed in the variable `bdf-directory-list'
for BDFNAME."
(if (file-name-absolute-p bdfname)
(insert-file-contents file-name)
buf)))))
-(defvar bdf-cache-file (convert-standard-filename "~/.bdfcache.el")
+(defvar bdf-cache-file (if (eq system-type 'ms-dos)
+ ;; convert-standard-filename doesn't
+ ;; guarantee that the .el extension will be
+ ;; preserved.
+ "~/_bdfcache.el"
+ (convert-standard-filename "~/.bdfcache.el"))
"Name of cache file which contains information of `BDF' font files.")
(defvar bdf-cache nil
(defun bdf-write-cache ()
"Write out cached information of `BDF' font file to a file.
The variable `bdf-cache-file' holds the cache file name.
-The file is written if and only if the file alreay exists and writable."
+The file is written if and only if the file already exists and writable."
(and bdf-cache
(file-exists-p bdf-cache-file)
(file-writable-p bdf-cache-file)
2nd byte, maximum 2nd byte, minimum code, maximum code, and default
code. For 1-byte fonts, the first two elements are 0.
-MAXLEN is a maximum bytes of one glyph informaion in the font file.
+MAXLEN is a maximum bytes of one glyph information in the font file.
OFFSET-VECTOR is a vector of a file position which starts bitmap data
of the glyph in the font file.
(relative-compose 'false)
(baseline-offset 0)
size
- font-bounding-box
+ font-bounding-box
default-char
code-range
offset-vector)
(setq size (read (current-buffer)))
;; The following kludgy code is t avoid bugs of several
;; fonts which have wrong SIZE record.
- (and (<= size (/ (aref font-bounding-box 1) 2))
+ (and (<= size (/ (aref font-bounding-box 1) 3))
(setq size (aref font-bounding-box 1)))
(setq default-char (bdf-search-and-read "\nDEFAULT_CHAR" nil))
(let ((min-code0 256) (min-code1 256) (min-code 65536)
(max-code0 0) (max-code1 0) (max-code 0)
- glyph glyph-list code0 code1 code bbx offset)
+ glyph glyph-list code0 code1 code offset)
(while (search-forward "\nSTARTCHAR" nil t)
(setq offset (line-beginning-position))
(bdf-get-font-info (or fname (car bdfnames)))))
(defun bdf-read-bitmap (bdfname offset maxlen)
- "Read `BDF' font file BDFNAME to get bitmap data at file poistion OFFSET.
-BDFNAME is an abosolute path name of the font file.
+ "Read `BDF' font file BDFNAME to get bitmap data at file position OFFSET.
+BDFNAME is an absolute path name of the font file.
MAXLEN specifies how many bytes we should read at least.
The value is a list of DWIDTH, BBX, and BITMAP-STRING.
DWIDTH is a pixel width of a glyph.
BBX is a bounding box of the glyph.
BITMAP-STRING is a string representing bits by hexadecimal digits."
- (let ((coding-system-for-read 'no-conversion)
- dwidth bbx height yoff bitmap-string)
+ (let* ((coding-system-for-read 'no-conversion)
+ (bbx (elt (bdf-get-font-info bdfname) 4))
+ (dwidth (elt bbx 0))
+ (bitmap-string "")
+ height yoff)
(condition-case nil
(with-temp-buffer
(insert-file-contents bdfname nil offset (+ offset maxlen))
(search-forward "\nBBX")
(setq bbx (vector (read (current-buffer)) (read (current-buffer))
(read (current-buffer)) (read (current-buffer)))
- height (aref bbx 1) yoff (aref bbx 3))
+ height (aref bbx 1)
+ yoff (aref bbx 3))
(search-forward "\nBITMAP")
(forward-line 1)
(delete-region (point-min) (point))
BITMAP-STRING is a string representing bits by hexadecimal digits."
(let* ((font-info (bdf-find-font-info bdfname))
(absolute-path (bdf-info-absolute-path font-info))
- (font-bounding-box (bdf-info-font-bounding-box font-info))
+ ;;(font-bounding-box (bdf-info-font-bounding-box font-info))
(maxlen (bdf-info-maxlen font-info))
(code-range (bdf-info-code-range font-info))
(offset-vector (bdf-info-offset-vector font-info)))