- (forward-word 1)
- (skip-chars-backward " \t")
- (setq end (point))
- ;; Deal with encoding and leading space as for
- ;; quoted words.
- (goto-char start)
- (skip-chars-forward "\000-\177" end)
- (if (= end (point))
- (setq last-encoded nil)
- (when last-encoded
- (goto-char start)
- (skip-chars-backward " \t")
- (insert ? )
- (setq start (point)
- end (1+ end)))
- (rfc2047-encode start end)
- (setq last-encoded t)))))
+ (skip-chars-backward " \t\n")
+ (if (and (eq (char-before) ?\()
+ ;; Look for the end of parentheses.
+ (let ((string (buffer-substring (point)
+ (point-max)))
+ (default-major-mode 'fundamental-mode))
+ ;; Use `standard-syntax-table'.
+ (with-temp-buffer
+ (insert "(" string)
+ (goto-char (point-min))
+ (condition-case nil
+ (progn
+ (forward-list 1)
+ (setq end (- (point) 3)))
+ (error nil)))))
+ ;; Encode text as an unstructured field.
+ (let ((rfc2047-encoding-type 'mime))
+ (rfc2047-encode-region start (+ (point) end))
+ (forward-char))
+ ;; Skip one ASCII word, or encode continuous words
+ ;; in which all those contain non-ASCII characters.
+ (skip-chars-forward " \t\n")
+ (setq end nil)
+ (while (not end)
+ (when (looking-at "[\000-\177]+")
+ (setq end (match-end 0))
+ (if (re-search-forward "[ \t\n]\\|\\Sw" end t)
+ (goto-char (match-beginning 0))
+ (goto-char end)
+ (setq end nil)))
+ (unless end
+ (setq end t)
+ (when (looking-at "[^\000-\177]+")
+ (goto-char (match-end 0))
+ (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)")
+ (setq end (match-end 0))
+ (string-match "[^\000-\177]"
+ (match-string 1)))
+ (goto-char end))
+ (when (looking-at "[^ \t\n]+")
+ (setq end (match-end 0))
+ (if (re-search-forward "\\Sw+" end t)
+ ;; There are special characters better
+ ;; to be encoded so that MTAs may parse
+ ;; them safely.
+ (cond ((= end (point)))
+ ((looking-at "[^\000-\177]")
+ (setq end nil))
+ (t
+ (goto-char (1- (match-end 0)))
+ (unless (= (point) (match-beginning 0))
+ (insert " "))))
+ (goto-char end)
+ (skip-chars-forward " \t\n")
+ (if (and (looking-at "[^ \t\n]+")
+ (string-match "[^\000-\177]"
+ (match-string 0)))
+ (setq end nil)
+ (goto-char end)))))))
+ (skip-chars-backward " \t\n")
+ (setq end (point))
+ (goto-char start)
+ (skip-chars-forward "\000-\177" end)
+ (if (= end (point))
+ (setq last-encoded nil)
+ (rfc2047-encode start end)
+ (setq last-encoded t))))))