comparison lisp/ps-mule.el @ 26115:314173e121ee

Doc fix, define functions properly if mule package is loaded or not. (ccl-encode-ethio-unicode, ps-mule-encode-ethiopic): Define properly if mule package is loaded or not. File dependence fix. (ps-multibyte-buffer): Moved to ps-print-def.
author Kenichi Handa <handa@m17n.org>
date Wed, 20 Oct 1999 01:07:33 +0000
parents 55e4513821f8
children f8035e82cde3
comparison
equal deleted inserted replaced
26114:c19849fe02b5 26115:314173e121ee
1 ;;; ps-mule.el --- Provide multi-byte character facility to ps-print. 1 ;;; ps-mule.el --- Provide multi-byte character facility to ps-print.
2 2
3 ;; Copyright (C) 1998 Free Software Foundation, Inc. 3 ;; Copyright (C) 1998, 1999 Free Software Foundation, Inc.
4 4
5 ;; Author: Vinicius Jose Latorre <vinicius@cpqd.com.br> 5 ;; Author: Vinicius Jose Latorre <vinicius@cpqd.com.br>
6 ;; Author: Kenichi Handa <handa@etl.go.jp> (multi-byte characters) 6 ;; Author: Kenichi Handa <handa@etl.go.jp> (multi-byte characters)
7 ;; Maintainer: Kenichi Handa <handa@etl.go.jp> (multi-byte characters) 7 ;; Maintainer: Kenichi Handa <handa@etl.go.jp> (multi-byte characters)
8 ;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.com.br> 8 ;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.com.br>
9 ;; Keywords: print, PostScript, multibyte, mule 9 ;; Keywords: wp, print, PostScript, multibyte, mule
10 ;; Time-stamp: <99/02/19 13:15:52 vinicius> 10 ;; Time-stamp: <99/06/24 23:07:11 vinicius>
11 11
12 ;; This file is part of GNU Emacs. 12 ;; This file is part of GNU Emacs.
13 13
14 ;; GNU Emacs is free software; you can redistribute it and/or modify 14 ;; GNU Emacs is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by 15 ;; it under the terms of the GNU General Public License as published by
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, 26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
27 ;; Boston, MA 02111-1307, USA. 27 ;; Boston, MA 02111-1307, USA.
28 28
29 ;;; Commentary: 29 ;;; Commentary:
30 30
31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 31 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
32 ;; 32 ;;
33 ;; About ps-mule 33 ;; About ps-mule
34 ;; ------------- 34 ;; -------------
35 ;; 35 ;;
36 ;; This package is used for ps-print to print multi-byte buffer. 36 ;; This package is used for ps-print to print multi-byte buffer.
44 ;; The variable `ps-multibyte-buffer' specifies the ps-print multi-byte buffer 44 ;; The variable `ps-multibyte-buffer' specifies the ps-print multi-byte buffer
45 ;; handling. 45 ;; handling.
46 ;; 46 ;;
47 ;; Valid values for `ps-multibyte-buffer' are: 47 ;; Valid values for `ps-multibyte-buffer' are:
48 ;; 48 ;;
49 ;; nil This is the value to use when you are printing 49 ;; nil This is the value to use the default settings which
50 ;; buffer with only ASCII and Latin characters. 50 ;; is by default for printing buffer with only ASCII
51 ;; and Latin characters. The default setting can be
52 ;; changed by setting the variable
53 ;; `ps-mule-font-info-database-default' differently.
54 ;; The initial value of this variable is
55 ;; `ps-mule-font-info-database-latin' (see
56 ;; documentation).
51 ;; 57 ;;
52 ;; `non-latin-printer' This is the value to use when you have a japanese 58 ;; `non-latin-printer' This is the value to use when you have a japanese
53 ;; or korean PostScript printer and want to print 59 ;; or korean PostScript printer and want to print
54 ;; buffer with ASCII, Latin-1, Japanese (JISX0208 and 60 ;; buffer with ASCII, Latin-1, Japanese (JISX0208 and
55 ;; JISX0201-Kana) and Korean characters. At present, 61 ;; JISX0201-Kana) and Korean characters. At present,
78 ;; 84 ;;
79 ;; Any other value is treated as nil. 85 ;; Any other value is treated as nil.
80 ;; 86 ;;
81 ;; The default is nil. 87 ;; The default is nil.
82 ;; 88 ;;
83 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 89 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
84 90
85 ;;; Code: 91 ;;; Code:
86 92
87 (eval-and-compile (require 'ps-print)) 93 (eval-and-compile (require 'ps-print))
88 94
89 ;;;###autoload 95
90 (defcustom ps-multibyte-buffer nil 96 (require 'ps-print-def) ; Common definitions
91 "*Specifies the multi-byte buffer handling. 97
92 98
93 Valid values are: 99 ;;;; `ps-multibyte-buffer' definition should be placed in `ps-mule' but due to
94 100 ;;;; compilation and customization gripes it was moved to `ps-print-def'.
95 nil This is the value to use the default settings which 101 ;;
96 is by default for printing buffer with only ASCII 102 ;;(defcustom ps-multibyte-buffer nil
97 and Latin characters. The default setting can be 103 ;; "*Specifies the multi-byte buffer handling.
98 changed by setting the variable 104 ;;
99 `ps-mule-font-info-database-default' differently. 105 ;;Valid values are:
100 The initial value of this variable is 106 ;;
101 `ps-mule-font-info-database-latin' (which see). 107 ;; nil This is the value to use the default settings which
102 108 ;; is by default for printing buffer with only ASCII
103 `non-latin-printer' This is the value to use when you have a Japanese 109 ;; and Latin characters. The default setting can be
104 or Korean PostScript printer and want to print 110 ;; changed by setting the variable
105 buffer with ASCII, Latin-1, Japanese (JISX0208 and 111 ;; `ps-mule-font-info-database-default' differently.
106 JISX0201-Kana) and Korean characters. At present, 112 ;; The initial value of this variable is
107 it was not tested the Korean characters printing. 113 ;; `ps-mule-font-info-database-latin' (see
108 If you have a korean PostScript printer, please, 114 ;; documentation).
109 test it. 115 ;;
110 116 ;; `non-latin-printer' This is the value to use when you have a Japanese
111 `bdf-font' This is the value to use when you want to print 117 ;; or Korean PostScript printer and want to print
112 buffer with BDF fonts. BDF fonts include both latin 118 ;; buffer with ASCII, Latin-1, Japanese (JISX0208 and
113 and non-latin fonts. BDF (Bitmap Distribution 119 ;; JISX0201-Kana) and Korean characters. At present,
114 Format) is a format used for distributing X's font 120 ;; it was not tested the Korean characters printing.
115 source file. BDF fonts are included in 121 ;; If you have a korean PostScript printer, please,
116 `intlfonts-1.1' which is a collection of X11 fonts 122 ;; test it.
117 for all characters supported by Emacs. In order to 123 ;;
118 use this value, be sure to have installed 124 ;; `bdf-font' This is the value to use when you want to print
119 `intlfonts-1.1' and set the variable 125 ;; buffer with BDF fonts. BDF fonts include both latin
120 `bdf-directory-list' appropriately (see ps-bdf.el for 126 ;; and non-latin fonts. BDF (Bitmap Distribution
121 documentation of this variable). 127 ;; Format) is a format used for distributing X's font
122 128 ;; source file. BDF fonts are included in
123 `bdf-font-except-latin' This is like `bdf-font' except that it is used 129 ;; `intlfonts-1.1' which is a collection of X11 fonts
124 PostScript default fonts to print ASCII and Latin-1 130 ;; for all characters supported by Emacs. In order to
125 characters. This is convenient when you want or 131 ;; use this value, be sure to have installed
126 need to use both latin and non-latin characters on 132 ;; `intlfonts-1.1' and set the variable
127 the same buffer. See `ps-font-family', 133 ;; `bdf-directory-list' appropriately (see ps-bdf.el for
128 `ps-header-font-family' and `ps-font-info-database'. 134 ;; documentation of this variable).
129 135 ;;
130 Any other value is treated as nil." 136 ;; `bdf-font-except-latin' This is like `bdf-font' except that it is used
131 :type '(choice (const non-latin-printer) (const bdf-font) 137 ;; PostScript default fonts to print ASCII and Latin-1
132 (const bdf-font-except-latin) (other :tag "nil" nil)) 138 ;; characters. This is convenient when you want or
133 :group 'ps-print-font) 139 ;; need to use both latin and non-latin characters on
140 ;; the same buffer. See `ps-font-family',
141 ;; `ps-header-font-family' and `ps-font-info-database'.
142 ;;
143 ;;Any other value is treated as nil."
144 ;; :type '(choice (const non-latin-printer) (const bdf-font)
145 ;; (const bdf-font-except-latin) (other :tag "nil" nil))
146 ;; :group 'ps-print-font)
147
134 148
135 ;; For Emacs 20.2 and the earlier version. 149 ;; For Emacs 20.2 and the earlier version.
136 (eval-and-compile 150 (eval-and-compile
137 (if (not (string< mule-version "4.0")) 151 (if (and (boundp 'mule-version) ; only if mule package is loaded
152 (not (string< mule-version "4.0")))
138 (progn 153 (progn
139 (defalias 'ps-mule-next-point '1+) 154 (defalias 'ps-mule-next-point '1+)
140 (defalias 'ps-mule-chars-in-string 'length) 155 (defalias 'ps-mule-chars-in-string 'length)
141 (defalias 'ps-mule-string-char 'aref) 156 (defalias 'ps-mule-string-char 'aref)
142 (defsubst ps-mule-next-index (str i) (1+ i))) 157 (defsubst ps-mule-next-index (str i) (1+ i)))
146 (/ (length string) 161 (/ (length string)
147 (charset-bytes (char-charset (string-to-char string))))) 162 (charset-bytes (char-charset (string-to-char string)))))
148 (defun ps-mule-string-char (string idx) 163 (defun ps-mule-string-char (string idx)
149 (string-to-char (substring string idx))) 164 (string-to-char (substring string idx)))
150 (defun ps-mule-next-index (string i) 165 (defun ps-mule-next-index (string i)
151 (+ i (charset-bytes (char-charset (string-to-char string)))))) 166 (+ i (charset-bytes (char-charset (string-to-char string)))))))
152 )
153 167
154 (defvar ps-mule-font-info-database 168 (defvar ps-mule-font-info-database
155 nil 169 nil
156 "Alist of charsets with the corresponding font information. 170 "Alist of charsets with the corresponding font information.
157 Each element has the form: 171 Each element has the form:
196 (defconst ps-mule-font-info-database-latin 210 (defconst ps-mule-font-info-database-latin
197 '((latin-iso8859-1 211 '((latin-iso8859-1
198 (normal nil nil iso-latin-1))) 212 (normal nil nil iso-latin-1)))
199 "Sample setting of `ps-mule-font-info-database' to use latin fonts.") 213 "Sample setting of `ps-mule-font-info-database' to use latin fonts.")
200 214
201 (defvar ps-mule-font-info-database-default 215 (defcustom ps-mule-font-info-database-default
202 ps-mule-font-info-database-latin 216 ps-mule-font-info-database-latin
203 "The default setting to use if `ps-multibyte-buffer' (which see) is nil.") 217 "*The default setting to use if `ps-multibyte-buffer' is nil."
218 :type '(repeat :tag "Multi-Byte Buffer Database Font Default"
219 (list (symbol :tag "Charset")
220 (repeat :inline t
221 (list (choice :tag "Font Type"
222 (const normal) (const bold)
223 (const italic) (const bold-italic))
224 (choice :tag "Font Source"
225 (const builtin) (const ps-bdf)
226 (const vflib)
227 (other :tag "nil" nil))
228 (list (string :tag "Font Name"))
229 (function :tag "Encoding")
230 (integer :tag "Bytes")))))
231 :group 'ps-print-font)
204 232
205 (defconst ps-mule-font-info-database-ps 233 (defconst ps-mule-font-info-database-ps
206 '((katakana-jisx0201 234 '((katakana-jisx0201
207 (normal builtin "Ryumin-Light.Katakana" ps-mule-encode-7bit 1) 235 (normal builtin "Ryumin-Light.Katakana" ps-mule-encode-7bit 1)
208 (bold builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1) 236 (bold builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1)
364 (setq i (ps-mule-next-index string i) 392 (setq i (ps-mule-next-index string i)
365 j (+ j 2))))) 393 j (+ j 2)))))
366 str)) 394 str))
367 395
368 ;; Special encoding function for Ethiopic. 396 ;; Special encoding function for Ethiopic.
369 (define-ccl-program ccl-encode-ethio-unicode 397 (if (boundp 'mule-version) ; only if mule package is loaded
370 `(1 398 (define-ccl-program ccl-encode-ethio-unicode
371 ((read r2) 399 `(1
372 (loop 400 ((read r2)
373 (if (r2 == ,leading-code-private-22) 401 (loop
374 ((read r0) 402 (if (r2 == ,leading-code-private-22)
375 (if (r0 == ,(charset-id 'ethiopic)) 403 ((read r0)
376 ((read r1 r2) 404 (if (r0 == ,(charset-id 'ethiopic))
377 (r1 &= 127) (r2 &= 127) 405 ((read r1 r2)
378 (call ccl-encode-ethio-font) 406 (r1 &= 127) (r2 &= 127)
379 (write r1) 407 (call ccl-encode-ethio-font)
380 (write-read-repeat r2)) 408 (write r1)
381 ((write r2 r0) 409 (write-read-repeat r2))
382 (repeat)))) 410 ((write r2 r0)
383 (write-read-repeat r2)))))) 411 (repeat))))
384 412 (write-read-repeat r2))))))
385 (defun ps-mule-encode-ethiopic (string) 413 ;; to avoid compilation gripes
386 (ccl-execute-on-string (symbol-value 'ccl-encode-ethio-unicode) 414 (defvar ccl-encode-ethio-unicode nil))
387 (make-vector 9 nil) 415
388 string)) 416 (if (boundp 'mule-version)
417 ;; bound mule-version
418 (defun ps-mule-encode-ethiopic (string)
419 (ccl-execute-on-string (symbol-value 'ccl-encode-ethio-unicode)
420 (make-vector 9 nil)
421 string))
422 ;; unbound mule-version
423 (defun ps-mule-encode-ethiopic (string)
424 string))
389 425
390 ;; A charset which we are now processing. 426 ;; A charset which we are now processing.
391 (defvar ps-mule-current-charset nil) 427 (defvar ps-mule-current-charset nil)
392 428
393 (defun ps-mule-get-font-spec (charset font-type) 429 (defun ps-mule-get-font-spec (charset font-type)