update.
[elisp/apel.git] / emu-mule.el
index 2fd7140..2f6f107 100644 (file)
+;;; emu-mule.el --- emu module for Mule 1.* and Mule 2.*
+
+;; Copyright (C) 1995,1996,1997,1998 MORIOKA Tomohiko
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;         Katsumi Yamaoka <yamaoka@jpl.org>
+;; Keywords: emulation, compatibility, Mule
+
+;; This file is part of emu.
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; 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.
+
+;;; Code:
+
+(require 'poem)
+
+
+;;; @ binary access
 ;;;
-;;; emu-mule: Mule 2.* emulation module for Mule
+
+(defalias 'insert-binary-file-contents 'insert-file-contents-as-binary)
+(make-obsolete 'insert-binary-file-contents 'insert-file-contents-as-binary)
+
+(defun insert-binary-file-contents-literally (filename
+                                             &optional visit beg end replace)
+  "Like `insert-file-contents-literally', q.v., but don't code conversion.
+A buffer may be modified in several ways after reading into the buffer due
+to advanced Emacs features, such as file-name-handlers, format decoding,
+find-file-hooks, etc.
+  This function ensures that none of these modifications will take place."
+  (as-binary-input-file
+   ;; Returns list absolute file name and length of data inserted.
+   (insert-file-contents-literally filename visit beg end replace)))
+
+
+;;; @ regulation
 ;;;
-;;; $Id: emu-mule.el,v 6.1 1995/08/26 18:07:55 morioka Exp $
+
+(defun regulate-latin-char (chr)
+  (cond ((and (<= ?\e$B#A\e(B chr)(<= chr ?\e$B#Z\e(B))
+        (+ (- chr ?\e$B#A\e(B) ?A))
+       ((and (<= ?\e$B#a\e(B chr)(<= chr ?\e$B#z\e(B))
+        (+ (- chr ?\e$B#a\e(B) ?a))
+       ((eq chr ?\e$B!%\e(B) ?.)
+       ((eq chr ?\e$B!$\e(B) ?,)
+       (t chr)))
+
+(defun regulate-latin-string (str)
+  (let ((len (length str))
+       (i 0)
+       chr (dest ""))
+    (while (< i len)
+      (setq chr (sref str i))
+      (setq dest (concat dest
+                        (char-to-string (regulate-latin-char chr))))
+      (setq i (+ i (char-bytes chr))))
+    dest))
+
+
+;;; @ CCL
 ;;;
+(eval-when-compile (require 'ccl))
+
+(defconst ccl-use-symbol-as-program nil
+  "t if CCL related builtins accept symbol as CCL program.
+(20.2 with ExCCL, 20.3 or later)
+Otherwise nil (20.2 without ExCCL or former).
 
-(defun some-element (pred seq)
-  "Return the first element of sequence SEQ
-whose return value applied function PRED is not nil.
-[emu-mule; tl-list function]"
- (let ((i 0)(len (length seq)) element)
-   (catch 'tag
-     (while (< i len)
-       (if (funcall pred (setq element (elt seq i)))
-          (throw 'tag element)
-        )
-       (setq i (+ i 1))
-       ))
-   ))
-
-(defun get-lc (chr)
-  "Return leading character of CHAR or LEADING-CHARACTER."
-  (if (< chr 128)
-      lc-ascii
-    chr))
-
-
-(if (not (boundp 'emacs-major-version))
-    (defconst emacs-major-version (string-to-int emacs-version))
+Because emu provides functions accepting symbol as CCL program,
+user programs should not refer this variable.")
+
+(defun make-ccl-coding-system
+  (coding-system mnemonic doc-string decoder encoder)
+  "Define a new CODING-SYSTEM (symbol) by CCL programs
+DECODER (symbol) and ENCODER (symbol)."
+  (setq decoder (symbol-value decoder)
+       encoder (symbol-value encoder))
+  (make-coding-system coding-system 4 mnemonic doc-string
+                     nil ; Mule takes one more optional argument: EOL-TYPE.
+                     (cons decoder encoder)))
+
+(eval-when-compile
+  (define-ccl-program test-ccl-eof-block
+    '(1
+      (read r0)
+      (write "[EOF]")))
+
+  (make-ccl-coding-system
+   'test-ccl-eof-block-cs ?T "CCL_EOF_BLOCK tester"
+   'test-ccl-eof-block 'test-ccl-eof-block)
   )
 
-(cond ((>= emacs-major-version 19)
-       (defun fontset-pixel-size (fontset)
-        (elt
-         (get-font-info
-          (some-element
-           (function
-            (lambda (n)
-              (not (= n -1))
-              ))
-           (cdr (get-fontset-info fontset))
-           )) 5))
-       )
-      (t (require 'emu-18)))
+(defconst ccl-encoder-eof-block-is-broken
+  (eval-when-compile
+    (not (equal (encode-coding-string "" 'test-ccl-eof-block-cs)
+               "[EOF]")))
+  "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
+encoding.")
+
+(defconst ccl-decoder-eof-block-is-broken
+  (eval-when-compile
+    (not (equal (decode-coding-string "" 'test-ccl-eof-block-cs)
+               "[EOF]")))
+  "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
+decoding.")
+
+(defconst ccl-eof-block-is-broken
+  (or ccl-encoder-eof-block-is-broken
+      ccl-decoder-eof-block-is-broken))
+
+(defun ccl-execute (ccl-prog reg)
+  "Execute CCL-PROG with registers initialized by REGISTERS.
+If CCL-PROG is symbol, it is dereferenced.
+\[Emacs 20.3 emulating function]"
+  (exec-ccl
+   (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
+   reg))
+
+(defun ccl-execute-on-string (ccl-prog status string &optional contin)
+  "Execute CCL-PROG with initial STATUS on STRING.
+If CCL-PROG is symbol, it is dereferenced.
+\[Emacs 20.3 emulating function]"
+  (exec-ccl-string
+   (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
+   status string))
+
+
+;;; @ end
+;;;
 
 (provide 'emu-mule)
+
+;;; emu-mule.el ends here