+2009-07-11 Taiki SUGAWARA <buzz.taiki@gmail.com>
+
+ * utf7.el (utf7-find-coding-system-without-bom): New Function.
+ (utf7-utf-16-coding-system): use no-BOM coding system.
+ (utf7-get-u16char-converter): remove workaround for BOM.
+
2009-05-26 Vitaly Mayatskikh <v.mayatskih@gmail.com>
* elmo-util.el (elmo-union): New function, make a union of two lists.
(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
+ ;; Mule-UCS
+ (utf7-find-coding-system-without-bom 'utf-16-be-no-signature)
+ ;; Emacs 21.3, Emacs 22
+ (utf7-find-coding-system-without-bom 'utf-16-be)
+ ;; Emacs 21.3, Emacs 22
+ (utf7-find-coding-system-without-bom 'utf-16be))
"Coding system which encodes big endian UTF-16.")
(defsubst utf7-imap-get-pad-length (len modulus)
(encode-coding-region (point-min)(point-max)
utf7-utf-16-coding-system)
(set-buffer-multibyte nil)
- (goto-char (point-min))
- ;; Remove BOM (Big-endian UTF-16 FE FF)
- (while (re-search-forward "\376\377" nil t)
- (delete-region (match-beginning 0)(match-end 0))))
+ (goto-char (point-min)))
(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)))))