X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3ad114e53b4bca94ecf4ca968e19da11b077ad1e..c006623074918b4068bda65e3c5bcc076f2d8deb:/lisp/ps-bdf.el diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el index 0261ccbf55..750d724f9f 100644 --- a/lisp/ps-bdf.el +++ b/lisp/ps-bdf.el @@ -1,11 +1,13 @@ -;;; ps-bdf.el --- BDF font file handler for ps-print. +;;; ps-bdf.el --- BDF font file handler for ps-print -;; Copyright (C) 1998, 1999 Electrotechnical Laboratory, JAPAN. -;; Licensed to the Free Software Foundation. +;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; National Institute of Advanced Industrial Science and Technology (AIST) +;; Registration Number H14PRO021 ;; Keywords: wp, BDF, font, PostScript -;; Maintainer: Kenichi Handa -;; Time-stamp: <99/02/27 11:14:07 kenichi> +;; Maintainer: Kenichi Handa ;; This file is part of GNU Emacs. @@ -21,8 +23,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -31,24 +33,29 @@ ;;; 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 - (if (eq system-type 'ms-dos) + (if (memq system-type '(ms-dos windows-nt)) (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 users like to move the binary around after it's built, but -;; the value above is computed at loadup time. -(and (eq system-type 'ms-dos) +;; 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 (memq system-type '(ms-dos windows-nt)) (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) @@ -97,7 +104,12 @@ If BDFNAME doesn't exist, return nil." (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 @@ -124,7 +136,7 @@ If the cache file is not readable, this return 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) @@ -198,7 +210,7 @@ CODE-RANGE is a vector of minimum 1st byte, maximum 1st byte, minimum 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. @@ -212,7 +224,7 @@ CODE, where N and CODE are in the following relation: (relative-compose 'false) (baseline-offset 0) size - font-bounding-box + font-bounding-box default-char code-range offset-vector) @@ -240,7 +252,7 @@ CODE, where N and CODE are in the following relation: (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)) @@ -257,23 +269,25 @@ CODE, where N and CODE are in the following relation: (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)) (search-forward "\nENCODING") - (setq code (read (current-buffer)) - code0 (lsh code -8) - code1 (logand code 255) - min-code (min min-code code) - max-code (max max-code code) - min-code0 (min min-code0 code0) - max-code0 (max max-code0 code0) - min-code1 (min min-code1 code1) - max-code1 (max max-code1 code1)) - (search-forward "ENDCHAR") - (setq maxlen (max maxlen (- (point) offset)) - glyph-list (cons (cons code offset) glyph-list))) + (setq code (read (current-buffer))) + (if (< code 0) + (search-forward "ENDCHAR") + (setq code0 (lsh code -8) + code1 (logand code 255) + min-code (min min-code code) + max-code (max max-code code) + min-code0 (min min-code0 code0) + max-code0 (max max-code0 code0) + min-code1 (min min-code1 code1) + max-code1 (max max-code1 code1)) + (search-forward "ENDCHAR") + (setq maxlen (max maxlen (- (point) offset)) + glyph-list (cons (cons code offset) glyph-list)))) (setq code-range (vector min-code0 max-code0 min-code1 max-code1 @@ -340,15 +354,18 @@ on that file name." (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)) @@ -359,7 +376,8 @@ BITMAP-STRING is a string representing bits by hexadecimal digits." (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)) @@ -396,7 +414,7 @@ BBX is a bounding box of the glyph. 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))) @@ -439,4 +457,5 @@ BITMAP-STRING is a string representing bits by hexadecimal digits." (provide 'ps-bdf) +;;; arch-tag: 9b875ba8-565a-4ecf-acaa-30cee732c898 ;;; ps-bdf.el ends here