* wl-fldmgr.el (wl-fldmgr-make-indent): Change from macro to function.
[elisp/wanderlust.git] / elmo / utf7.el
index c6081e8..30fdb74 100644 (file)
   (concat utf7-direct-encoding-chars "+\\~")
   "Character ranges which do not need escaping in the IMAP variant of UTF-7.")
 
-(defconst utf7-utf-16-coding-system (and (fboundp 'find-coding-system)
-                                        (find-coding-system 'utf-16-be))
+
+(eval-and-compile
+  (defun utf7-find-coding-system-without-bom (cs)
+    (and (fboundp 'find-coding-system)
+        (find-coding-system cs)
+        ;; Avoid versions with BOM.
+        (= 2 (length (encode-coding-string "a" cs)))
+        cs)))
+
+(defconst utf7-utf-16-coding-system
+  (or
+   ;; Emacs 22, Emacs 23
+   (utf7-find-coding-system-without-bom 'utf-16be)
+   ;;
+   (utf7-find-coding-system-without-bom 'utf-16-be)
+   ;; Mule-UCS
+   (utf7-find-coding-system-without-bom 'utf-16-be-no-signature))
   "Coding system which encodes big endian UTF-16.")
 
 (defsubst utf7-imap-get-pad-length (len modulus)
@@ -196,13 +211,11 @@ Use IMAP modification if FOR-IMAP is non-nil."
                                  utf7-utf-16-coding-system)
            (set-buffer-multibyte nil)
            (goto-char (point-min))
-           ;; Remove BOM (Big-endian UTF-16 FE FF)
+           ;; Remove BOM (Big-endian UTF-16 FE FF) for Mule-UCS
            (while (re-search-forward "\376\377" nil t)
-             (delete-region (match-beginning 0)(match-end 0))))
+             (delete-region (match-beginning 0) (match-end 0))))
        (lambda ()
          (goto-char (point-min))
-         ;; Add BOM (Big-endian UTF-16 FE FF)
-         (insert "\376\377")
          (decode-coding-region (point-min) (point-max)
                                utf7-utf-16-coding-system)))))