Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

(lbt-to-string): New inline function.

(encode-mime-charset-region): Add new optional argument `lbt'.
(encode-mime-charset-string): Ditto.
(decode-mime-charset-region): Use `lbt-to-string'.
(decode-mime-charset-string): Ditto.
  • Loading branch information...
commit 3ef4197d6b7d0ef96dd1d4568df321300fde4dce 1 parent 069ba57
keiichi authored
Showing with 50 additions and 20 deletions.
  1. +50 −20 mcs-om.el
70 mcs-om.el
View
@@ -26,22 +26,38 @@
(require 'poem)
-(defun encode-mime-charset-region (start end charset)
+(defsubst lbt-to-string (lbt)
+ (cdr (assq lbt '((nil . nil)
+ (CRLF . "\r\n")
+ (CR . "\r")
+ (dos . "\r\n")
+ (mac . "\r"))))
+ )
+
+(defun encode-mime-charset-region (start end charset &optional lbt)
"Encode the text between START and END as MIME CHARSET."
- (let ((cs (mime-charset-to-coding-system charset)))
+ (let ((cs (mime-charset-to-coding-system charset lbt)))
(if cs
(code-convert start end *internal* cs)
- )))
+ (if (and lbt (setq cs (mime-charset-to-coding-system charset)))
+ (let ((newline (lbt-to-string lbt)))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (code-convert (point-min) (point-max) *internal* cs)
+ (if newline
+ (goto-char (point-min))
+ (while (search-forward "\n" nil t)
+ (replace-match newline))))))))))
(defun decode-mime-charset-region (start end charset &optional lbt)
"Decode the text between START and END as MIME CHARSET."
- (let ((cs (mime-charset-to-coding-system charset lbt))
- newline)
+ (let ((cs (mime-charset-to-coding-system charset lbt)))
(if cs
(code-convert start end cs *internal*)
(if (and lbt (setq cs (mime-charset-to-coding-system charset)))
- (progn
- (if (setq newline (cdr (assq lbt '((CRLF . "\r\n") (CR . "\r")))))
+ (let ((newline (lbt-to-string lbt)))
+ (if newline
(save-excursion
(save-restriction
(narrow-to-region start end)
@@ -51,29 +67,39 @@
(code-convert (point-min) (point-max) cs *internal*))
(code-convert start end cs *internal*)))))))
-(defun encode-mime-charset-string (string charset)
+(defun encode-mime-charset-string (string charset &optional lbt)
"Encode the STRING as MIME CHARSET."
- (let ((cs (mime-charset-to-coding-system charset)))
+ (let ((cs (mime-charset-to-coding-system charset lbt)))
(if cs
(code-convert-string string *internal* cs)
- string)))
+ (if (and lbt (setq cs (mime-charset-to-coding-system charset)))
+ (let ((newline (lbt-to-string lbt)))
+ (if newline
+ (with-temp-buffer
+ (insert string)
+ (code-convert (point-min) (point-max) *internal* cs)
+ (goto-char (point-min))
+ (while (search-forward "\n" nil t)
+ (replace-match newline))
+ (buffer-string))
+ (decode-coding-string string cs)))
+ string))))
(defun decode-mime-charset-string (string charset &optional lbt)
"Decode the STRING which is encoded in MIME CHARSET."
- (let ((cs (mime-charset-to-coding-system charset lbt))
- newline)
+ (let ((cs (mime-charset-to-coding-system charset lbt)))
(if cs
(decode-coding-string string cs)
(if (and lbt (setq cs (mime-charset-to-coding-system charset)))
- (progn
- (if (setq newline (cdr (assq lbt '((CRLF . "\r\n") (CR . "\r")))))
+ (let ((newline (lbt-to-string lbt)))
+ (if newline
(with-temp-buffer
- (insert string)
- (goto-char (point-min))
- (while (search-forward newline nil t)
- (replace-match "\n"))
- (code-convert (point-min) (point-max) cs *internal*)
- (buffer-string))
+ (insert string)
+ (goto-char (point-min))
+ (while (search-forward newline nil t)
+ (replace-match "\n"))
+ (code-convert (point-min) (point-max) cs *internal*)
+ (buffer-string))
(decode-coding-string string cs)))
string))))
@@ -119,6 +145,10 @@
))
(defsubst mime-charset-to-coding-system (charset &optional lbt)
+ "Return coding-system corresponding with CHARSET.
+CHARSET is a symbol whose name is MIME charset.
+If optional argument LBT (`CRLF', `LF', `CR', `unix', `dos' or `mac')
+is specified, it is used as line break code type of coding-system."
(if (stringp charset)
(setq charset (intern (downcase charset)))
)
Please sign in to comment.
Something went wrong with that request. Please try again.