Mercurial > emacs
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) |