* mime-play.el (mime-view-caesar): Use `enable-character-translation'
[elisp/semi.git] / mime-play.el
index 25610c0..7cccb51 100644 (file)
@@ -29,9 +29,9 @@
 (require 'mime-view)
 (require 'alist)
 (require 'filename)
+(require 'ccl)
 
 (eval-when-compile
-  (require 'mime-text)
   (condition-case nil
       (require 'bbdb)
     (error (defvar bbdb-buffer-name nil)))
@@ -51,7 +51,7 @@
           (erase-buffer)
           (insert ";;; " (file-name-nondirectory file) "\n")
           (insert "\n;; This file is generated automatically by "
-                  mime-view-version-string "\n\n")
+                  mime-view-version "\n\n")
          (insert ";;; Code:\n\n")
          (pp `(setq mime-acting-situation-example-list
                     ',mime-acting-situation-example-list)
@@ -229,7 +229,7 @@ specified, play as it.  Default MODE is \"play\"."
        (if (cdr ret)
            (let ((rest ret)
                  (max-score 0)
-                 max-escore
+                 (max-escore 0)
                  max-examples
                  max-situations)
              (while rest
@@ -325,9 +325,9 @@ specified, play as it.  Default MODE is \"play\"."
              (name (mime-entity-safe-filename entity)))
          (setq name
                (if (and name (not (string= name "")))
-                   (expand-file-name name mime-temp-directory)
+                   (expand-file-name name temporary-file-directory)
                  (make-temp-name
-                  (expand-file-name "EMI" mime-temp-directory))
+                  (expand-file-name "EMI" temporary-file-directory))
                  ))
           (mime-write-entity-content entity name)
          (message "External method is starting...")
@@ -352,7 +352,8 @@ specified, play as it.  Default MODE is \"play\"."
   (remove-alist 'mime-mailcap-method-filename-alist process)
   (message (format "%s %s" process event)))
 
-(defvar mime-echo-window-is-shared-with-bbdb t
+(defvar mime-echo-window-is-shared-with-bbdb
+  (module-installed-p 'bbdb)
   "*If non-nil, mime-echo window is shared with BBDB window.")
 
 (defvar mime-echo-window-height
@@ -370,23 +371,22 @@ window.")
   "Show mime-echo buffer to display MIME-playing information."
   (get-buffer-create mime-echo-buffer-name)
   (let ((the-win (selected-window))
-       (win (get-buffer-window mime-echo-buffer-name))
+       (win (get-buffer-window mime-echo-buffer-name)))
+    (unless win
+      (unless (and mime-echo-window-is-shared-with-bbdb
+                  (condition-case nil
+                      (setq win (get-buffer-window bbdb-buffer-name))
+                    (error nil)))
+       (select-window (get-buffer-window mime-preview-buffer))
+       (setq win (split-window-vertically
+                  (- (window-height)
+                     (if (functionp mime-echo-window-height)
+                         (funcall mime-echo-window-height)
+                       mime-echo-window-height)
+                     )))
        )
-    (or win
-       (if (and mime-echo-window-is-shared-with-bbdb
-                (boundp 'bbdb-buffer-name)
-                (setq win (get-buffer-window bbdb-buffer-name))
-                )
-           (set-window-buffer win mime-echo-buffer-name)
-         (select-window (get-buffer-window mime-preview-buffer))
-         (setq win (split-window-vertically
-                    (- (window-height)
-                       (if (functionp mime-echo-window-height)
-                           (funcall mime-echo-window-height)
-                         mime-echo-window-height)
-                       )))
-         (set-window-buffer win mime-echo-buffer-name)
-         ))
+      (set-window-buffer win mime-echo-buffer-name)
+      )
     (select-window win)
     (goto-char (point-max))
     (if forms
@@ -544,7 +544,7 @@ It is registered to variable `mime-preview-quitting-method-alist'."
   (goto-char (mime-entity-point-min entity))
   (let* ((root-dir
          (expand-file-name
-          (concat "m-prts-" (user-login-name)) mime-temp-directory))
+          (concat "m-prts-" (user-login-name)) temporary-file-directory))
         (id (cdr (assoc "id" cal)))
         (number (cdr (assoc "number" cal)))
         (total (cdr (assoc "total" cal)))
@@ -680,7 +680,7 @@ It is registered to variable `mime-preview-quitting-method-alist'."
     (search-forward name)
     ))
 
-(defvar mime-raw-browse-url-function (function mime-browse-url))
+(defvar mime-raw-browse-url-function mime-browse-url-function)
 
 (defun mime-view-message/external-url (entity cal)
   (let ((url (cdr (assoc "url" cal))))
@@ -691,6 +691,14 @@ It is registered to variable `mime-preview-quitting-method-alist'."
 ;;; @ rot13-47
 ;;;
 
+(define-ccl-program translate-string
+  '(4
+    (loop
+     (read-multibyte-character r1 r2)
+     (translate-character r0 r1 r2)
+     (write-multibyte-character r1 r2)
+     (repeat))))
+
 (defun mime-view-caesar (entity situation)
   "Internal method for mime-view to display ROT13-47-48 message."
   (let* ((new-name (format "%s-%s" (buffer-name)
@@ -705,8 +713,27 @@ It is registered to variable `mime-preview-quitting-method-alist'."
       )
     (setq buffer-read-only nil)
     (erase-buffer)
-    (mime-text-insert-decoded-body entity)
+    (let ((enable-character-translation nil))
+      (mime-insert-text-content entity))
     (mule-caesar-region (point-min) (point-max))
+    (let ((str (buffer-string))
+         (status (make-vector 9 nil))
+         (table
+          (catch 'tbl
+            (let ((i 0) e)
+              (while (and (< i (length translation-table-vector))
+                          (setq e (aref translation-table-vector i)))
+                (if (eq (cdr e) standard-translation-table-for-decode)
+                    (throw 'tbl i))
+                (setq i (1+ i)))
+              nil))))
+      (when table
+       (aset status 0 table)
+       (delete-region (point-min) (point-max))
+       (insert (ccl-execute-on-string
+                'translate-string
+                status
+                str))))
     (set-buffer-modified-p nil)
     (set-buffer mother)
     (view-buffer new-name)