Date UT
[elisp/mu-cite.git] / mu-register.el
index 5488dd3..0081088 100644 (file)
@@ -1,6 +1,6 @@
 ;;; mu-register.el --- registration feature of mu-cite
-
-;; Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;;        Free Software Foundation, Inc.
 
 ;; Author: MINOURA Makoto <minoura@netlaputa.or.jp>
 ;;         MORIOKA Tomohiko <tomo@m17n.org>
@@ -22,8 +22,8 @@
 
 ;; 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.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
   :type 'integer
   :group 'mu-cite)
 
-(defcustom mu-registration-file-coding-system-for-read nil
-  "Coding system used when reading a registration file."
+(defcustom mu-registration-file-coding-system-for-write
+  (static-if (boundp 'MULE)
+      '*iso-2022-jp*
+    'iso-2022-7bit)
+  "Coding-system used when writing a registration file.  If you set this
+to nil, the value of `mu-registration-file-coding-system' will be used
+for writing a file."
   :group 'mu-cite)
 
 (defcustom mu-cite-allow-null-string-registration nil
-  "If non-nil, null-string citation-name is registered."
+  "If non-nil, null-string citation-name can be registered."
   :type 'boolean
   :group 'mu-cite)
 
 (defvar mu-registration-symbol 'mu-citation-name-alist
   "*Name of the variable to register citation prefix strings.")
 
+(defvar mu-registration-file-coding-system-for-read nil
+  "*Coding-system used when reading a registration file.  Normally, you
+have no need to set this option.  If you have many friends in various
+countries and the file contains their names in various languages, you
+may avoid mis-decoding them by setting this option to `iso-2022-7bit'
+or the other universal coding-system.  Note that when you change this
+value, you should save the file manually using the same coding-system
+in advance.")
+
 (defvar mu-registration-file-coding-system nil
-  "Coding system used when writing a current registration file.")
+  "Internal variable used to keep a default coding-system for writing
+a current registration file.  The value will be renewed whenever a
+registration file is read.")
 
 (defvar mu-register-history nil)
 
-(static-when (featurep 'xemacs)
-  (define-obsolete-variable-alias
-    'mu-cite/registration-file 'mu-registration-file)
-
-  (define-obsolete-variable-alias
-    'mu-cite/allow-null-string-registration
-    'mu-cite-allow-null-string-registration)
-
-  (define-obsolete-variable-alias
-    'mu-cite/registration-symbol 'mu-registration-symbol)
-  )
-
 
 ;;; @ load / save registration file
 ;;;
@@ -81,6 +85,7 @@
 (defun mu-cite-load-registration-file ()
   (if (file-readable-p mu-registration-file)
       (with-temp-buffer
+       (set-buffer-multibyte t)
        (if mu-registration-file-coding-system-for-read
            (insert-file-contents-as-coding-system
             mu-registration-file-coding-system-for-read
 
 (defun mu-cite-save-registration-file ()
   (with-temp-buffer
-    (insert ";;; " (file-name-nondirectory mu-registration-file) "\n")
-    (insert ";;; This file is generated automatically by mu-cite "
-           mu-cite-version "\n\n")
-    (insert "(setq "
-           (symbol-name mu-registration-symbol)
-           "\n      '(")
-    (insert (mapconcat
-            (function prin1-to-string)
-            (symbol-value mu-registration-symbol) "\n        "))
-    (insert "\n        ))\n\n")
-    (insert ";;; "
-           (file-name-nondirectory mu-registration-file)
-           " ends here.\n")
-    (write-region-as-coding-system mu-registration-file-coding-system
-                                  (point-min)(point-max)
-                                  mu-registration-file nil 'nomsg)
-    (condition-case nil
-       (set-file-modes mu-registration-file mu-registration-file-modes)
-      (error nil))))
+    (set-buffer-multibyte t)
+    (let ((name (file-name-nondirectory mu-registration-file))
+         (coding-system (or mu-registration-file-coding-system-for-write
+                            mu-registration-file-coding-system)))
+      (insert (format "\
+;;; %s  -*- mode: emacs-lisp; coding: %s -*-
+;; This file is generated automatically by MU-CITE v%s.
+
+"
+                     name coding-system mu-cite-version))
+      (insert "(setq "
+             (symbol-name mu-registration-symbol)
+             "\n      '(")
+      (insert (mapconcat
+              (function
+               (lambda (elem)
+                 (format "(%s . %s)"
+                         (prin1-to-string
+                          (mu-cite-remove-text-properties (car elem)))
+                         (prin1-to-string
+                          (mu-cite-remove-text-properties (cdr elem))))))
+              (symbol-value mu-registration-symbol) "\n\t"))
+      (insert "))\n\n")
+      (insert ";;; " name " ends here\n")
+      (write-region-as-coding-system coding-system
+                                    (point-min) (point-max)
+                                    mu-registration-file nil 'nomsg)
+      (condition-case nil
+         (set-file-modes mu-registration-file mu-registration-file-modes)
+       (error nil)))))
 
 
 ;;; @ database accessors
 (defun mu-cite-get-prefix-register-method ()
   (let ((addr (mu-cite-get-value 'address)))
     (or (mu-register-get-citation-name addr)
-       (let ((return
-              (read-string "Citation name? "
-                           (or (mu-cite-get-value 'x-attribution)
-                               (mu-cite-get-value 'full-name))
-                           'mu-register-history)))
-         (when (and (or mu-cite-allow-null-string-registration
-                        (not (string-equal return "")))
-                    (y-or-n-p (format "Register \"%s\"? " return)))
-           (mu-register-add-citation-name return addr))
+       (let* ((minibuffer-allow-text-properties nil)
+              (return
+               (mu-cite-remove-text-properties
+                (read-string "Citation name? "
+                             (or (mu-cite-get-value 'x-attribution)
+                                 (mu-cite-get-value 'x-cite-me)
+                                 (mu-cite-get-value 'full-name))
+                             'mu-register-history))))
+
+         (if (and (or mu-cite-allow-null-string-registration
+                      (not (string-equal return "")))
+                  (y-or-n-p (format "Register \"%s\"? " return)))
+             (mu-register-add-citation-name return addr))
          return))))
 
 ;;;###autoload
 (defun mu-cite-get-prefix-register-verbose-method ()
   (let* ((addr (mu-cite-get-value 'address))
         (return1 (mu-register-get-citation-name addr))
-        (return (read-string "Citation name? "
-                             (or return1
-                                 (mu-cite-get-value 'x-attribution)
-                                 (mu-cite-get-value 'full-name))
-                             'mu-register-history)))
-    (when (and (or mu-cite-allow-null-string-registration
-                  (not (string-equal return "")))
-              (not (string-equal return return1))
-              (y-or-n-p (format "Register \"%s\"? " return)))
-      (mu-register-add-citation-name return addr))
+        (minibuffer-allow-text-properties nil)
+        (return (mu-cite-remove-text-properties
+                 (read-string "Citation name? "
+                              (or return1
+                                  (mu-cite-get-value 'x-attribution)
+                                  (mu-cite-get-value 'x-cite-me)
+                                  (mu-cite-get-value 'full-name))
+                              'mu-register-history))))
+    (if (and (or mu-cite-allow-null-string-registration
+                (not (string-equal return "")))
+            (not (string-equal return return1))
+            (y-or-n-p (format "Register \"%s\"? " return)))
+       (mu-register-add-citation-name return addr))
     return))