1 ;;; emu-e20.el --- emu API implementation for Emacs 20.1 and 20.2
3 ;; Copyright (C) 1996,1997,1998 Free Software Foundation, Inc.
5 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
6 ;; Keywords: emulation, compatibility, Mule
8 ;; This file is part of emu.
10 ;; This program is free software; you can redistribute it and/or
11 ;; modify it under the terms of the GNU General Public License as
12 ;; published by the Free Software Foundation; either version 2, or (at
13 ;; your option) any later version.
15 ;; This program is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
27 ;; This module requires Emacs 20.1 and 20.2.
33 (defun fontset-pixel-size (fontset)
34 (let* ((info (fontset-info fontset))
35 (height (aref info 1))
37 (cond ((> height 0) height)
38 ((string-match "-\\([0-9]+\\)-" fontset)
40 (substring fontset (match-beginning 1)(match-end 1))
50 ;; (defalias 'charset-columns 'charset-width)
52 (defun find-non-ascii-charset-string (string)
53 "Return a list of charsets in the STRING except ascii."
54 (delq 'ascii (find-charset-string string))
57 (defun find-non-ascii-charset-region (start end)
58 "Return a list of charsets except ascii
59 in the region between START and END."
60 (delq 'ascii (find-charset-string (buffer-substring start end)))
67 (defsubst-maybe find-coding-system (obj)
68 "Return OBJ if it is a coding-system."
69 (if (coding-system-p obj)
72 (defalias 'set-process-input-coding-system 'set-process-coding-system)
78 (defsubst encode-mime-charset-region (start end charset)
79 "Encode the text between START and END as MIME CHARSET."
81 (if (and enable-multibyte-characters
82 (setq cs (mime-charset-to-coding-system charset)))
83 (encode-coding-region start end cs)
86 (defsubst decode-mime-charset-region (start end charset &optional lbt)
87 "Decode the text between START and END as MIME CHARSET."
89 (if (and enable-multibyte-characters
90 (setq cs (mime-charset-to-coding-system charset lbt)))
91 (decode-coding-region start end cs)
94 (defsubst encode-mime-charset-string (string charset)
95 "Encode the STRING as MIME CHARSET."
97 (if (and enable-multibyte-characters
98 (setq cs (mime-charset-to-coding-system charset)))
99 (encode-coding-string string cs)
102 (defsubst decode-mime-charset-string (string charset &optional lbt)
103 "Decode the STRING as MIME CHARSET."
105 (if (and enable-multibyte-characters
106 (setq cs (mime-charset-to-coding-system charset lbt)))
107 (decode-coding-string string cs)
111 (defvar charsets-mime-charset-alist
112 '(((ascii) . us-ascii)
113 ((ascii latin-iso8859-1) . iso-8859-1)
114 ((ascii latin-iso8859-2) . iso-8859-2)
115 ((ascii latin-iso8859-3) . iso-8859-3)
116 ((ascii latin-iso8859-4) . iso-8859-4)
117 ;;; ((ascii cyrillic-iso8859-5) . iso-8859-5)
118 ((ascii cyrillic-iso8859-5) . koi8-r)
119 ((ascii arabic-iso8859-6) . iso-8859-6)
120 ((ascii greek-iso8859-7) . iso-8859-7)
121 ((ascii hebrew-iso8859-8) . iso-8859-8)
122 ((ascii latin-iso8859-9) . iso-8859-9)
123 ((ascii latin-jisx0201
124 japanese-jisx0208-1978 japanese-jisx0208) . iso-2022-jp)
125 ((ascii latin-jisx0201
126 katakana-jisx0201 japanese-jisx0208) . shift_jis)
127 ((ascii korean-ksc5601) . euc-kr)
128 ((ascii chinese-gb2312) . cn-gb-2312)
129 ((ascii chinese-big5-1 chinese-big5-2) . cn-big5)
130 ((ascii latin-iso8859-1 greek-iso8859-7
131 latin-jisx0201 japanese-jisx0208-1978
132 chinese-gb2312 japanese-jisx0208
133 korean-ksc5601 japanese-jisx0212) . iso-2022-jp-2)
134 ((ascii latin-iso8859-1 greek-iso8859-7
135 latin-jisx0201 japanese-jisx0208-1978
136 chinese-gb2312 japanese-jisx0208
137 korean-ksc5601 japanese-jisx0212
138 chinese-cns11643-1 chinese-cns11643-2) . iso-2022-int-1)
139 ((ascii latin-iso8859-1 latin-iso8859-2
140 cyrillic-iso8859-5 greek-iso8859-7
141 latin-jisx0201 japanese-jisx0208-1978
142 chinese-gb2312 japanese-jisx0208
143 korean-ksc5601 japanese-jisx0212
144 chinese-cns11643-1 chinese-cns11643-2
145 chinese-cns11643-3 chinese-cns11643-4
146 chinese-cns11643-5 chinese-cns11643-6
147 chinese-cns11643-7) . iso-2022-int-1)
154 ;;; @@ Mule emulating aliases
156 ;;; You should not use them.
158 (defun char-category (character)
159 "Return string of category mnemonics for CHAR in TABLE.
160 CHAR can be any multilingual character
161 TABLE defaults to the current buffer's category table."
162 (category-set-mnemonics (char-category-set character))
170 (defconst ccl-use-symbol-as-program
172 (define-ccl-program ew-ccl-identity-program
173 '(1 ((read r0) (loop (write-read-repeat r0)))))
177 'ew-ccl-identity 4 ?I
178 "Identity coding system for byte-compile time checking"
179 '(ew-ccl-identity-program . ew-ccl-identity-program))
182 "t if CCL related builtins accept symbol as CCL
183 program. (20.2 with ExCCL, 20.3 or later)
184 Otherwise nil (20.2 without ExCCL or former).
186 Because emu provides functions accepting symbol as CCL program,
187 user programs should not refer this variable.")
189 (defun make-ccl-coding-system
190 (coding-system mnemonic doc-string decoder encoder)
191 "Define a new CODING-SYSTEM (symbol) by CCL programs
192 DECODER (symbol) and ENCODER (symbol)."
193 (unless ccl-use-symbol-as-program
194 (setq decoder (symbol-value decoder))
195 (setq encoder (symbol-value encoder)))
196 (make-coding-system coding-system 4 mnemonic doc-string
197 (cons decoder encoder)))
201 (define-ccl-program test-ccl-eof-block
206 (make-ccl-coding-system 'test-ccl-eof-block-cs ?T
207 "CCL_EOF_BLOCK tester"
212 (defconst ccl-encoder-eof-block-is-broken
214 (not (equal (encode-coding-string "" 'test-ccl-eof-block-cs)
216 "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
219 (defconst ccl-decoder-eof-block-is-broken
221 (not (equal (decode-coding-string "" 'test-ccl-eof-block-cs)
223 "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
226 (defconst ccl-eof-block-is-broken
227 (or ccl-encoder-eof-block-is-broken
228 ccl-decoder-eof-block-is-broken))
230 (unless ccl-use-symbol-as-program
232 (when (subrp (symbol-function 'ccl-execute))
233 (fset 'ccl-vector-program-execute
234 (symbol-function 'ccl-execute))
235 (defun ccl-execute (ccl-prog reg)
236 "Execute CCL-PROG `ccl-vector-program-execute'.
237 If CCL-PROG is symbol, it is dereferenced.
238 \[Emacs 20.3 emulating function]"
239 (ccl-vector-program-execute
240 (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
243 (when (subrp (symbol-function 'ccl-execute-on-string))
244 (fset 'ccl-vector-program-execute-on-string
245 (symbol-function 'ccl-execute-on-string))
246 (defun ccl-execute-on-string (ccl-prog status &optional contin)
247 "Execute CCL-PROG `ccl-vector-program-execute-on-string'.
248 If CCL-PROG is symbol, it is dereferenced.
249 \[Emacs 20.3 emulating function]"
250 (ccl-vector-program-execute-on-string
251 (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
263 (defalias 'insert-binary-file-contents 'insert-file-contents-as-binary)
264 (make-obsolete 'insert-binary-file-contents 'insert-file-contents-as-binary)
266 (defalias 'insert-binary-file-contents-literally
267 'insert-file-contents-literally)
269 (if (and (fboundp 'set-buffer-multibyte)
270 (subrp (symbol-function 'set-buffer-multibyte)))
271 (require 'emu-e20_3) ; for Emacs 20.3
272 (require 'emu-e20_2) ; for Emacs 20.1 and 20.2
278 ;;; emu-e20.el ends here