Function: rfc2231-encode-string
rfc2231-encode-string is a byte-compiled function defined in
rfc2231.el.gz.
Signature
(rfc2231-encode-string PARAM VALUE)
Documentation
Return a PARAM=VALUE string encoded according to RFC2231.
Use mml-insert-parameter or mml-insert-parameter-string to insert
the result of this function.
Source Code
;; Defined in /usr/src/emacs/lisp/mail/rfc2231.el.gz
(defun rfc2231-encode-string (param value)
"Return a PARAM=VALUE string encoded according to RFC2231.
Use `mml-insert-parameter' or `mml-insert-parameter-string' to insert
the result of this function."
(let ((control (ietf-drums-token-to-list ietf-drums-no-ws-ctl-token))
(tspecial (ietf-drums-token-to-list ietf-drums-tspecials))
(special (ietf-drums-token-to-list "*'%\n\t"))
(ascii (ietf-drums-token-to-list ietf-drums-text-token))
(num -1)
;; Don't make lines exceeding 76 column.
(limit (- 74 (length param)))
spacep encodep charsetp charset broken)
(mm-with-multibyte-buffer
(insert value)
(goto-char (point-min))
(while (not (eobp))
(cond
((or (memq (following-char) control)
(memq (following-char) tspecial)
(memq (following-char) special))
(setq encodep t))
((eq (following-char) ? )
(setq spacep t))
((not (memq (following-char) ascii))
(setq charsetp t)))
(forward-char 1))
(when charsetp
(setq charset (mm-encode-body)))
(mm-disable-multibyte)
(cond
((or encodep charsetp
(progn
(end-of-line)
(> (current-column) (if spacep (- limit 2) limit))))
(setq limit (- limit 6))
(goto-char (point-min))
(insert (symbol-name (or charset 'us-ascii)) "''")
(while (not (eobp))
(if (or (not (memq (following-char) ascii))
(memq (following-char) control)
(memq (following-char) tspecial)
(memq (following-char) special)
(eq (following-char) ? ))
(progn
(when (>= (current-column) (1- limit))
(insert ";\n")
(setq broken t))
(insert "%" (format "%02x" (following-char)))
(delete-char 1))
(when (> (current-column) limit)
(insert ";\n")
(setq broken t))
(forward-char 1)))
(goto-char (point-min))
(if (not broken)
(insert param "*=")
(while (not (eobp))
(insert (if (>= num 0) " " "")
param "*" (format "%d" (incf num)) "*=")
(forward-line 1))))
(spacep
(goto-char (point-min))
(insert param "=\"")
(goto-char (point-max))
(insert "\""))
(t
(goto-char (point-min))
(insert param "=")))
(buffer-string))))