* riece-coding.el (riece-coding-system-alist): New user option.
authorueno <ueno>
Sun, 28 Aug 2005 09:10:39 +0000 (09:10 +0000)
committerueno <ueno>
Sun, 28 Aug 2005 09:10:39 +0000 (09:10 +0000)
(riece-coding-system-for-prefix-server): New function.
(riece-encoded-string): New function.
(riece-decoded-string): New alias.
(riece-decoded-string-for-identity): New function.

lisp/ChangeLog
lisp/riece-coding.el
lisp/riece-handle.el

index 91be375..4357f38 100644 (file)
@@ -1,3 +1,11 @@
+2005-08-28  Daiki Ueno  <ueno@unixuser.org>
+
+       * riece-coding.el (riece-coding-system-alist): New user option.
+       (riece-coding-system-for-prefix-server): New function.
+       (riece-encoded-string): New function.
+       (riece-decoded-string): New alias.
+       (riece-decoded-string-for-identity): New function.
+
 2005-08-27  Daiki Ueno  <ueno@unixuser.org>
 
        * riece-addon.el (riece-uninstall-addon): Don't check the add-on
index a505f20..e46db0b 100644 (file)
@@ -44,6 +44,12 @@ specifying the coding systems for decoding and encoding respectively."
                 (const nil :tag "No conversion"))
   :group 'riece-coding)
 
+(defcustom riece-coding-system-alist nil
+  "An alist mapping from identities to coding-systems."
+  :type '(repeat (cons (string :tag "Identity")
+                      (symbol :tag "Coding system")))
+  :group 'riece-coding)
+
 (defun riece-encode-coding-string (string)
   (if (and (local-variable-p 'riece-coding-system (current-buffer))
           riece-coding-system)         ;should be nil on non-Mule environment
@@ -61,17 +67,6 @@ specifying the coding systems for decoding and encoding respectively."
                                      riece-coding-system))
     string))
 
-(defun riece-retry-decode-coding-string (string coding-system)
-  (if (eq (get-text-property 0 'riece-coding-decoded-coding-system string)
-         coding-system)
-      string
-    (riece-decode-coding-string-1
-     (get-text-property 0 'riece-coding-encoded-string string)
-     coding-system)))
-
-(defun riece-decoded-coding-system (string)
-  (get-text-property 0 'riece-coding-decoded-coding-system string))
-
 (defun riece-decode-coding-string-1 (string coding-system)
   (let* ((decoded (decode-coding-string string coding-system))
         (length (length decoded)))
@@ -81,6 +76,38 @@ specifying the coding systems for decoding and encoding respectively."
                       coding-system decoded)
     decoded))
 
+(defun riece-coding-system-for-prefix-server (prefix server)
+  (let ((alist riece-coding-system-alist)
+       identity)
+    (catch 'found
+      (while alist
+       (setq identity (riece-parse-identity (car (car alist))))
+       (if (and (equal (riece-identity-server identity)
+                       server)
+                (equal (riece-identity-prefix identity)
+                       prefix))
+           (throw 'found (cdr (car alist))))
+       (setq alist (cdr alist))))))
+
+(defun riece-decoded-coding-system (string)
+  (get-text-property 0 'riece-coding-decoded-coding-system string))
+
+(defun riece-encoded-string (string)
+  (get-text-property 0 'riece-coding-encoded-string string))
+
+(defalias 'riece-decoded-string 'identity)
+
+(defun riece-decoded-string-for-identity (string identity)
+  (let ((coding-system (riece-coding-system-for-prefix-server
+                       (riece-identity-prefix identity)
+                       (riece-identity-server identity))))
+    (if (and coding-system
+            (not (eq (riece-decoded-coding-system string)
+                     coding-system)))
+       (riece-decode-coding-string-1 (riece-encoded-string string)
+                                     coding-system)
+      string)))
+
 (provide 'riece-coding)
 
 ;;; riece-coding.el ends here
index e516689..dba185c 100644 (file)
 
 (defun riece-handle-privmsg-message (prefix string)
   (let* ((user (riece-prefix-nickname prefix))
-        (parameters (riece-split-parameters string))
-        (targets (split-string (car parameters) ","))
-        (coding-system (cdr (assoc (car targets) riece-coding-system-alist)))
-        (message (nth 1 parameters)))
-    (if (eq coding-system
-           (riece-decoded-coding-system string))
-       (riece-display-message
-        (riece-make-message (riece-make-identity user
-                                                 riece-server-name)
-                            (riece-make-identity (car targets)
-                                                 riece-server-name)
-                            message
-                            nil
-                            (riece-identity-equal-no-server
-                             user riece-real-nickname)))
-      (riece-handle-privmsg-message
-       prefix
-       (riece-retry-decode-coding-string string
-                                        coding-system)))))
+        (parameters (riece-split-parameters (riece-decoded-string string)))
+        (targets (split-string (car parameters) ",")))
+    (setq parameters (riece-split-parameters
+                     (riece-decoded-string-for-identity
+                      string
+                      (riece-make-identity (car targets) riece-server-name)))
+         message (nth 1 parameters))
+    (riece-display-message
+     (riece-make-message (riece-make-identity user
+                                             riece-server-name)
+                        (riece-make-identity (car targets)
+                                             riece-server-name)
+                        message
+                        nil
+                        (riece-identity-equal-no-server
+                         user riece-real-nickname)))))
 
 (defun riece-handle-notice-message (prefix string)
   (let* ((user (if prefix