This commit was generated by cvs2svn to compensate for changes in r377,
[elisp/tm.git] / tm-ew-e.el
index 7c554ce..f500554 100644 (file)
@@ -6,7 +6,7 @@
 ;;; Copyright (C) 1993 .. 1996 MORIOKA Tomohiko
 ;;;
 ;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;;; Version: $Revision: 7.12 $
+;;; Version: $Revision: 7.18 $
 ;;; Keywords: mail, news, MIME, RFC 1522, multilingual, encoded-word
 ;;;
 ;;; This file is part of tm (Tools for MIME).
@@ -36,7 +36,7 @@
 ;;;
 
 (defconst tm-ew-e/RCS-ID
-  "$Id: tm-ew-e.el,v 7.12 1996/01/11 18:31:43 morioka Exp $")
+  "$Id: tm-ew-e.el,v 7.18 1996/05/09 18:08:47 morioka Exp $")
 (defconst mime-eword/encoder-version (get-version-string tm-ew-e/RCS-ID))
 
 
     ))
 
 (defun tm-eword::parse-lc-word (str)
-  (let* ((rest (string-to-char-list str))
-        (chr (car rest))
+  (let* ((chr (sref str 0))
         (lc (tm-eword::char-type chr))
-        (p (char-bytes chr))
+        (i (char-bytes chr))
+        (len (length str))
         )
-    (catch 'tag
-      (while (setq rest (cdr rest))
-       (setq chr (car rest))
-       (if (not (eq lc (tm-eword::char-type chr)))
-           (throw 'tag nil)
-         )
-       (setq p (+ p (char-bytes chr)))
-       ))
-    (cons (cons lc (substring str 0 p)) (substring str p))
+    (while (and (< i len)
+               (setq chr (sref str i))
+               (eq lc (tm-eword::char-type chr))
+               )
+      (setq i (+ i (char-bytes chr)))
+      )
+    (cons (cons lc (substring str 0 i)) (substring str i))
     ))
 
 (defun tm-eword::split-to-lc-words (str)
        ret)
     (setq ret
          (cond ((equal encoding "B")
-                (setq string
-                      (mime/convert-string-from-emacs string charset))
+                (setq string (mime-charset-encode-string string charset))
                 (base64-length string)
                 )
                ((equal encoding "Q")
-                (setq string
-                      (mime/convert-string-from-emacs string charset))
+                (setq string (mime-charset-encode-string string charset))
                 (q-encoding-length string)
                 )))
     (if ret
             )
            (t
             (setq string (car rword))
-            (let* ((ls (reverse (string-to-char-list string)))
-                   (sl (length string))
-                   (p sl) str)
-              (while (and ls
+            (let* ((sl (length string))
+                   (p 0) np
+                   (str "") nstr)
+              (while (and (< p len)
                           (progn
-                            (setq p (- p (char-bytes (car ls))))
-                            (setq str (substring string 0 p))
+                            (setq np (+ p (char-bytes (sref string p))))
+                            (setq nstr (substring string 0 np))
                             (setq ret (tm-eword::encoded-word-length
-                                       (cons str (cdr rword))
+                                       (cons nstr (cdr rword))
                                        ))
-                            (setq str (cdr ret))
+                            (setq nstr (cdr ret))
                             (setq len (+ (car ret) column))
-                            (> len 76)
+                            (<= len 76)
                             ))
-                (setq ls (cdr ls))
-                )
-              (if (and ls (not (string= str "")))
-                  (progn
-                    (setq rwl (cons (cons (substring string p) (cdr rword))
-                                    (cdr rwl)))
-                    (setq string
-                          (tm-eword::encode-encoded-text
-                           (nth 1 rword) (nth 2 rword) str))
-                    (setq len (+ (length string) column))
-                    )
-                (setq string "\n ")
-                (setq len 1)
+                (setq str nstr
+                      p np))
+              (if (string-equal str "")
+                  (setq string "\n "
+                        len 1)
+                (setq rwl (cons (cons (substring string p) (cdr rword))
+                                (cdr rwl)))
+                (setq string
+                      (tm-eword::encode-encoded-text
+                       (nth 1 rword) (nth 2 rword) str))
+                (setq len (+ (length string) column))
                 )
               )))
       )
 (defun mime/encode-field (str)
   (setq str (rfc822/unfolding-string str))
   (let ((ret (string-match rfc822/field-top-regexp str)))
-    (if ret
-       (let ((field-name (substring str 0 (match-end 1)))
-             (field-body (eliminate-top-spaces
-                          (substring str (match-end 0))))
-             fname)
-         (concat field-name ": "
-                 (cond ((string= field-body "") "")
-                       ((member (setq fname (downcase field-name))
-                                '("reply-to" "from" "sender"
-                                  "resent-reply-to" "resent-from"
-                                  "resent-sender" "to" "resent-to"
-                                  "cc" "resent-cc"
-                                  "bcc" "resent-bcc" "dcc")
-                                )
-                        (car (tm-eword::encode-address-list
-                              (+ (length field-name) 1) field-body))
-                        )
-                       (t
-                        (catch 'tag
-                          (let ((r mime/no-encoding-header-fields) fn)
-                            (while r
-                              (setq fn (car r))
-                              (if (string= (downcase fn) fname)
-                                  (throw 'tag field-body)
-                                )
-                              (setq r (cdr r))
-                              ))
-                          (car (tm-eword::encode-string
-                                (+ (length field-name) 1) field-body))
-                          ))
-                       ))
-         )
-      str)))
+    (or (if ret
+           (let ((field-name (substring str 0 (match-end 1)))
+                 (field-body (eliminate-top-spaces
+                              (substring str (match-end 0))))
+                 fname)
+             (if (setq ret
+                       (cond ((string= field-body "") "")
+                             ((member (setq fname (downcase field-name))
+                                      '("reply-to" "from" "sender"
+                                        "resent-reply-to" "resent-from"
+                                        "resent-sender" "to" "resent-to"
+                                        "cc" "resent-cc"
+                                        "bcc" "resent-bcc" "dcc")
+                                      )
+                              (car (tm-eword::encode-address-list
+                                    (+ (length field-name) 1) field-body))
+                              )
+                             (t
+                              (catch 'tag
+                                (let ((r mime/no-encoding-header-fields)
+                                      fn)
+                                  (while r
+                                    (setq fn (car r))
+                                    (if (string= (downcase fn) fname)
+                                        (throw 'tag field-body)
+                                      )
+                                    (setq r (cdr r))
+                                    ))
+                                (car (tm-eword::encode-string
+                                      (+ (length field-name) 1) field-body))
+                                ))
+                             ))
+                 (concat field-name ": " ret)
+               )))
+       (tm-eword::encode-string 0 str)
+       )))
 
 (defun mime/exist-encoded-word-in-subject ()
   (let ((str (rfc822/get-field-body "Subject")))
   (save-excursion
     (save-restriction
       (narrow-to-region (goto-char (point-min))
-                       (progn
-                         (re-search-forward
-                          (concat
-                           "^" (regexp-quote mail-header-separator) "$")
-                          nil t)
-                         (match-beginning 0)
-                         ))
+                       (if (re-search-forward
+                            (concat
+                             "^" (regexp-quote mail-header-separator) "$")
+                            nil t)
+                           (match-beginning 0)
+                         (point-max)))
       (goto-char (point-min))
       (let (beg end field)
        (while (re-search-forward rfc822/field-top-regexp nil t)