1998-12-01 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus.el (gnus-version-number): Update to 6.10.044.
+
+ * Sync up with Pterodactyl Gnus 0.58.
+
+1998-12-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
* lisp/gnus.el (gnus-version-number): Update to 6.10.043.
* Sync up with Pterodactyl Gnus 0.57.
* T-gnus 6.8.20 is the last version Gnus 5.6 base.
After this , T-gnus 6.10 - this is based on Pterodactyl Gnus.
- The latest T-gnus is T-gnus 6.10.043 (Based on pgnus-0.57).
+ The latest T-gnus is T-gnus 6.10.044 (Based on pgnus-0.58).
+Tue Dec 1 00:46:20 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Pterodactyl Gnus v0.58 is released.
+
+1998-11-30 Hrvoje Niksic <hniksic@srce.hr>
+
+ * mm-decode.el (mm-get-image): Return a glyph, not an image
+ specifier.
+
+1998-11-29 Hrvoje Niksic <hniksic@srce.hr>
+
+ * rfc2047.el (rfc2047-decode): Bind mm-default-charset.
+
+1998-12-01 01:23:35 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mail-parse.el (rfc2045): Required.
+
+1998-12-01 00:59:53 William M. Perry <wmperry@aventail.com>
+
+ * mm-view.el (mm-inline-text): Remove props.
+
+1998-12-01 00:18:47 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mm-view.el (mm-setup-w3): Protect url-misc.
+
+ * message.el (message-ignored-resent-headers): Remove
+ Gnus-Warning.
+
+ * mml.el (mml-insert-mime-headers): Use encoding.
+ (mml-parameter-string): Ditto.
+
+ * rfc2045.el: New file.
+ (rfc2045-encode-string): New function.
+
+1998-11-30 23:11:22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mail-parse.el (mail-header-encode-parameter): New function.
+
+ * rfc2231.el (rfc2231-encode-string): New function.
+
+Mon Nov 30 13:52:50 1998 Shenghuo ZHU <zsh@cs.rochester.edu>
+
+ * mm-bodies.el (mm-decode-string): New function.
+ * mm-view.el (mm-inline-text): Use mm-decode-string.
+
Mon Nov 30 21:57:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Pterodactyl Gnus v0.57 is released.
(defconst gnus-product-name "T-gnus"
"Product name of this version of gnus.")
-(defconst gnus-version-number "6.10.043"
+(defconst gnus-version-number "6.10.044"
"Version number for this version of gnus.")
-(defconst gnus-original-version-number "0.57"
+(defconst gnus-original-version-number "0.58"
"Version number for this version of Gnus.")
(defconst gnus-original-product-name "Pterodactyl Gnus"
((= i (length token))
(push (mm-make-char 'ascii c) out))
(t
+ (when b
+ (push (mm-make-char 'ascii b) out))
(setq b c))))
(nreverse out)))
(require 'ietf-drums)
(require 'rfc2231)
(require 'rfc2047)
+(require 'rfc2045)
(defalias 'mail-header-parse-content-type 'rfc2231-parse-string)
(defalias 'mail-header-parse-content-disposition 'rfc2231-parse-string)
(defalias 'mail-content-type-get 'rfc2231-get-value)
+(defalias 'mail-header-encode-parameter 'rfc2045-encode-string)
(defalias 'mail-header-remove-comments 'ietf-drums-remove-comments)
(defalias 'mail-header-remove-whitespace 'ietf-drums-remove-whitespace)
:group 'message-forwarding
:type 'boolean)
-(defcustom message-ignored-resent-headers "^Return-receipt\\|^X-Gnus"
+(defcustom message-ignored-resent-headers "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:"
"*All headers that match this regexp will be deleted when resending a message."
:group 'message-interface
:type 'regexp)
(eval-and-compile
(or (fboundp 'base64-decode-region)
- (require 'base64)))
+ (require 'base64))
+ (autoload 'binhex-decode-region "binhex"))
(require 'mm-util)
(require 'rfc2047)
(defun mm-body-encoding ()
"Return the encoding of the current buffer."
- (cond ((not (featurep 'mule))
- (if (save-excursion
+ (cond
+ ((not (featurep 'mule))
+ (if (save-excursion
+ (goto-char (point-min))
+ (re-search-forward mm-8bit-char-regexp nil t))
+ '8bit
+ '7bit))
+ (t
+ ;; Mule version
+ (if (and (null (delq 'ascii (find-charset-region (point-min) (point-max))))
+ ;;!!!The following is necessary because the function
+ ;;!!!above seems to return the wrong result under
+ ;;!!!Emacs 20.3. Sometimes.
+ (save-excursion
(goto-char (point-min))
- (re-search-forward mm-8bit-char-regexp nil t))
- '8bit
- '7bit))
- (t
- ;; Mule version
- (if (and (null (delq 'ascii (find-charset-region (point-min) (point-max))))
- ;;!!!The following is necessary because the function
- ;;!!!above seems to return the wrong result under
- ;;!!!Emacs 20.3. Sometimes.
- (save-excursion
- (goto-char (point-min))
- (skip-chars-forward "\0-\177")
- (eobp)))
- '7bit
- '8bit))))
+ (skip-chars-forward "\0-\177")
+ (eobp)))
+ '7bit
+ '8bit))))
;;;
;;; Functions for decoding
(setq mule-charset rfc2047-default-charset)))
(mm-decode-coding-region (point-min) (point-max) mule-charset))))))
+(defun mm-decode-string (string charset)
+ "Decode STRING with CHARSET."
+ (setq charset (or charset rfc2047-default-charset))
+ (when (featurep 'mule)
+ (let (mule-charset)
+ (when (and charset
+ (setq mule-charset (mm-charset-to-coding-system charset))
+ enable-multibyte-characters
+ (or (not (eq mule-charset 'ascii))
+ (setq mule-charset rfc2047-default-charset)))
+ (mm-decode-coding-string string mule-charset)))))
+
(provide 'mm-bodies)
;; mm-bodies.el ends here
(car (mm-handle-type handle)))
(prog1
(setq spec
- (make-image-specifier
- (vector (intern type) :data (buffer-string))))
+ (make-glyph `[,(intern type) :data ,(buffer-string)]))
(mm-handle-set-cache handle spec))))))
(defun mm-image-fit-p (handle)
"Say whether the image in HANDLE will fit the current window."
- (let ((image (make-annotation (mm-get-image handle))))
- (and (< (glyph-width (annotation-glyph image))
- (window-pixel-width))
- (< (glyph-height (annotation-glyph image))
- (window-pixel-height)))))
+ (let ((image (mm-get-image handle)))
+ (and (< (glyph-width image) (window-pixel-width))
+ (< (glyph-height image) (window-pixel-height)))))
(provide 'mm-decode)
(w3-do-setup)
(require 'url)
(require 'w3-vars)
- (load "url-misc.el")
+ (condition-case ()
+ (load "url-misc.el")
+ (error nil))
(setq mm-w3-setup t)))
(defun mm-inline-text (handle)
(cond
((equal type "plain")
(setq text (mm-get-part handle))
- (let ((b (point)))
- (insert text)
+ (let ((b (point))
+ (charset (mail-content-type-get
+ (mm-handle-type handle) 'charset)))
+ (insert (mm-decode-string text charset))
(save-restriction
(narrow-to-region b (point))
- (let ((charset (mail-content-type-get
- (mm-handle-type handle) 'charset)))
- (mm-decode-body charset nil))
(mm-handle-set-undisplayer
handle
`(lambda ()
handle
`(lambda ()
(let (buffer-read-only)
+ (mapc (lambda (prop)
+ (remove-specifier
+ (face-property 'default prop) (current-buffer)))
+ '(background background-pixmap foreground))
(delete-region
,(set-marker (make-marker) (point-min))
,(set-marker (make-marker) (point-max)))))))))
(when name
(setq name (mml-parse-file-name name))
(if (stringp name)
- (insert ";\n name=\"" (prin1-to-string name)
+ (insert ";\n " (mail-header-encode-parameter "name" name)
"\";\n access-type=local-file")
(insert
- (format ";\n name=%S;\n site=%S;\n directory=%S"
- (file-name-nondirectory (nth 2 name))
- (nth 1 name)
- (file-name-directory (nth 2 name))))
+ (format ";\n "
+ (mail-header-encode-parameter
+ "name" (file-name-nondirectory (nth 2 name)))
+ (mail-header-encode-parameter "site" (nth 1 name))
+ (mail-header-encode-parameter
+ "directory" (file-name-directory (nth 2 name)))))
(insert ";\n access-type="
(if (member (nth 0 name) '("ftp@" "anonymous@"))
"anon-ftp"
(not (equal type "text/plain")))
(insert "Content-Type: " type)
(when charset
- (insert (format "; charset=\"%s\"" charset)))
+ (insert "; " (mail-header-encode-parameter
+ "charset" (symbol-name charset))))
(when parameters
(insert parameters))
(insert "\n"))
(unless (eq encoding '7bit)
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(when (setq description (cdr (assq 'description cont)))
- (insert "Content-Description: " description "\n"))
- ))
+ (insert "Content-Description: " description "\n"))))
(defun mml-parameter-string (cont types)
(let ((string "")
value type)
(while (setq type (pop types))
(when (setq value (cdr (assq type cont)))
- (setq string (concat string ";\n " (symbol-name type) "="
- (if (string-match "[^_0-9A-Za-z]" value)
- (prin1-to-string value)
- value)))))
+ (setq string (concat string ";\n "
+ (mail-header-encode-parameter
+ (symbol-name type) value)))))
(when (not (zerop (length string)))
string)))
"Decode STRING that uses CHARSET with ENCODING.
Valid ENCODINGs are \"B\" and \"Q\".
If your Emacs implementation can't decode CHARSET, it returns nil."
- (let ((cs (mm-charset-to-coding-system charset)))
+ (let ((cs (let ((mm-default-charset rfc2047-default-charset))
+ (mm-charset-to-coding-system charset))))
(when cs
(when (eq cs 'ascii)
(setq cs rfc2047-default-charset))
attribute value type subtype number encoded
prev-attribute)
(ietf-drums-init (mail-header-remove-whitespace
- (mail-header-remove-comments string)))
+ (mail-header-remove-comments string)))
(let ((table (copy-syntax-table ietf-drums-syntax-table)))
(modify-syntax-entry ?\' "w" table)
(set-syntax-table table))
(intern (car elems))))
(buffer-string))))
+(defun rfc2231-encode-string (param value)
+ "Return and PARAM=VALUE string encoded according to RFC2231."
+ (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)
+ spacep encodep charsetp charset broken)
+ (with-temp-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)))
+ (cond
+ ((or encodep charsetp)
+ (goto-char (point-min))
+ (while (not (eobp))
+ (when (> (current-column) 60)
+ (insert "\n")
+ (setq broken t))
+ (if (or (not (memq (following-char) ascii))
+ (memq (following-char) control)
+ (memq (following-char) tspecial)
+ (memq (following-char) special)
+ (eq (following-char) ? ))
+ (progn
+ (insert "%" (format "%02x" (following-char)))
+ (delete-char 1))
+ (forward-char 1)))
+ (goto-char (point-min))
+ (insert (or charset "ascii") "''")
+ (goto-char (point-min))
+ (if (not broken)
+ (insert param "*=")
+ (while (not (eobp))
+ (insert 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))))
+
(provide 'rfc2231)
;;; rfc2231.el ends here
+1998-12-01 00:27:04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * emacs-mime.texi (rfc2045): New.
+
1998-11-29 00:03:43 Lars Magne Ingebrigtsen <larsi@gnus.org>
* emacs-mime.texi (Composing): New chapter.
@result{} "b980912.gif"
@end example
+@item mail-header-encode-parameter
+@findex mail-header-encode-parameter
+Takes a parameter string and returns an encoded version of the string.
+This is used for parameters in headers like @code{Content-Type} and
+@code{Content-Disposition}.
+
@item mail-header-remove-comments
@findex mail-header-remove-comments
Return a comment-free version of a header.
(@pxref{Decoding and Viewing}).
@menu
+* rfc2045:: Encoding @code{Content-Type} headers.
* rfc2231:: Parsing @code{Content-Type} headers.
* ietf-drums:: Handling mail headers defined by RFC822bis.
* rfc2047:: En/decoding encoded words in headers.
@end menu
+@node rfc2045
+@section rfc2045
+
+RFC2045 is the ``main'' @sc{mime} document, and as such, one would
+imagine that there would be a lot to implement. But there isn't, since
+most of the implementation details are delegated to the subsequent
+RFCs.
+
+So @file{rfc2045.el} has only a single function:
+
+@table @code
+@item rfc2045-encode-string
+@findex rfc2045-encode-string
+Takes a parameter and a value and returns a @samp{PARAM=VALUE} string.
+@var{value} will be quoted if there are non-safe characters in it.
+@end table
+
+
@node rfc2231
@section rfc2231
@item rfc2231-get-value
@findex rfc2231-get-value
-Takes one of the lists on the format above and return
+Takes one of the lists on the format above and returns
the value of the specified attribute.
+@item rfc2231-encode-string
+@findex rfc2231-encode-string
+Encode a parameter in headers likes @code{Content-Type} and
+@code{Content-Disposition}.
+
@end table
\input texinfo @c -*-texinfo-*-
@setfilename gnus-ja
-@settitle Semi-gnus 6.10.043 Manual
+@settitle Semi-gnus 6.10.044 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.10.043 Manual
+@title Semi-gnus 6.10.044 Manual
@author by Lars Magne Ingebrigtsen
@author by members of Semi-gnus mailing-list
\e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
\e$B$*BT$A$/$@$5$$!#\e(B
-\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.043 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.044 \e$B$KBP1~$7$^$9!#\e(B
@end ifinfo
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.10.043 Manual
+@settitle Semi-gnus 6.10.044 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.10.043 Manual
+@title Semi-gnus 6.10.044 Manual
@author by Lars Magne Ingebrigtsen
@page
API. So Semi-gnus does not discriminate various language communities.
Oh, if you are a Klingon, please wait Unicode Next Generation.
-This manual corresponds to Semi-gnus 6.10.043.
+This manual corresponds to Semi-gnus 6.10.044.
@end ifinfo
\input texinfo @c -*-texinfo-*-
@setfilename message-ja
-@settitle Message 6.10.043 Manual
+@settitle Message 6.10.044 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 6.10.043 Manual
+@title Message 6.10.044 Manual
@author by Lars Magne Ingebrigtsen
@translated by members of Semi-gnus mailing-list
* Key Index:: \e$B%a%C%;!<%8%b!<%I%-!<$N0lMw!#\e(B
@end menu
-\e$B$3$N%^%K%e%"%k$O\e(B Message 6.10.043 \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e%"%k$H\e(B
+\e$B$3$N%^%K%e%"%k$O\e(B Message 6.10.044 \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e%"%k$H\e(B
\e$BF1$8HGHV9f$N\e(B Gnus \e$B$NG[I[$H6&$KG[I[$5$l$^$9!#\e(B
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 6.10.043 Manual
+@settitle Message 6.10.044 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 6.10.043 Manual
+@title Message 6.10.044 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 6.10.043. Message is
+This manual corresponds to Message 6.10.044. Message is
distributed with the Gnus distribution bearing the same version number
as this manual.