Synch to No Gnus 200412261345.
authoryamaoka <yamaoka>
Sun, 26 Dec 2004 13:48:19 +0000 (13:48 +0000)
committeryamaoka <yamaoka>
Sun, 26 Dec 2004 13:48:19 +0000 (13:48 +0000)
ChangeLog
GNUS-NEWS
lisp/ChangeLog
lisp/nnrss.el
texi/ChangeLog
texi/gnus-ja.texi
texi/gnus-news.texi
texi/gnus.texi

index def1b28..45ca335 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,53 @@
+2004-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * GNUS-NEWS: Generated.
+
+2004-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lisp/nnrss.el: Require nnheader instead of mm-util, mime-parse
+       instead of rfc2231; require eword-encode, mime-edit and mime-view;
+       reload nnheader when compiling to override mm-util macros.
+       (nnrss-file-coding-system): New variable.
+       (nnrss-format-string): Redefine it as an inline function.
+       (nnrss-decode-group-name): New function.
+       (nnrss-string-as-multibyte): Remove.
+       (nnrss-retrieve-headers): Decode group name; don't use
+       nnrss-format-string.
+       (nnrss-request-group): Decode group name.
+       (nnrss-body-presentation-method): New function.
+       (nnrss-request-article): Decode group name; allow a Message-ID as
+       well as an article number; encode group name; don't use
+       nnrss-format-string; replace whitespace with _ in Message-ID; use
+       nnrss-body-presentation-method and mime-edit-translate-body to
+       compose a MIME article.
+       (nnrss-request-expire-articles): Decode group name.
+       (nnrss-request-delete-group): Decode group name.
+       (nnrss-fetch): Clarify error message.
+       (nnrss-read-server-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-server-data): Bind coding-system-for-write to the
+       value of nnrss-file-coding-system; bind file-name-coding-system;
+       add coding cookie.
+       (nnrss-read-group-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-group-data): Bind coding-system-for-write to the
+       value of nnrss-file-coding-system; bind file-name-coding-system.
+       (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
+       make it work with non-ASCII text.
+       (nnrss-snarf-moreover-categories): Use mime-decode-parameters
+       instead of rfc2231-decode-encoded-string.
+       (nnrss-find-el): Make it work with old xml.el as well.
+
+2004-12-26  Tsuyoshi AKIHO  <akiho@kawachi.zaq.ne.jp>
+
+       * lisp/nnrss.el (nnrss-get-encoding): New function.
+       (nnrss-fetch): Use unibyte buffer initially; bind
+       coding-system-for-read while performing mm-url-insert; remove ^Ms;
+       decode contents according to the encoding attribute.
+       (nnrss-save-group-data): Add coding cookie.
+       (nnrss-mime-encode-string): New function.
+       (nnrss-check-group): Use it to encode subject and author.
+
 2004-12-23  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * texi/infohack.el (infohack-texi-format): Revert.
index b7d2657..8cd25d2 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
@@ -91,6 +91,9 @@ message-generate-hashcash t) to enable.
 ** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t'
 (`gnus-summary-sort-by-recipient').
 
+** The `nnrss' back end now supports multilingual text.  Non-ASCII group
+names for the `nnrss' groups are also supported.  *Note RSS::.
+
 \f
 * For older news, see Gnus info node "New Features".
 
index 55547f5..b9aa137 100644 (file)
@@ -1,3 +1,43 @@
+2004-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnrss.el: Require rfc2047 and mml.
+       (nnrss-file-coding-system): New variable.
+       (nnrss-format-string): Redefine it as an inline function.
+       (nnrss-decode-group-name): New function.
+       (nnrss-string-as-multibyte): Remove.
+       (nnrss-retrieve-headers): Decode group name; don't use
+       nnrss-format-string.
+       (nnrss-request-group): Decode group name.
+       (nnrss-request-article): Decode group name; allow a Message-ID as
+       well as an article number; don't use nnrss-format-string; encode a
+       Message-ID string which may contain non-ASCII characters; use
+       mml-to-mime to compose a MIME article.
+       (nnrss-request-expire-articles): Decode group name.
+       (nnrss-request-delete-group): Decode group name.
+       (nnrss-fetch): Clarify error message.
+       (nnrss-read-server-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-server-data): Bind coding-system-for-write to the
+       value of nnrss-file-coding-system; bind file-name-coding-system;
+       add coding cookie.
+       (nnrss-read-group-data): Use insert-file-contents instead of load;
+       bind file-name-coding-system; use multibyte buffer.
+       (nnrss-save-group-data): Bind coding-system-for-write to the
+       value of nnrss-file-coding-system; bind file-name-coding-system.
+       (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
+       make it work with non-ASCII text.
+       (nnrss-find-el): Make it work with old xml.el as well.
+
+2004-12-26  Tsuyoshi AKIHO  <akiho@kawachi.zaq.ne.jp>
+
+       * nnrss.el (nnrss-get-encoding): New function.
+       (nnrss-fetch): Use unibyte buffer initially; bind
+       coding-system-for-read while performing mm-url-insert; remove ^Ms;
+       decode contents according to the encoding attribute.
+       (nnrss-save-group-data): Add coding cookie.
+       (nnrss-mime-encode-string): New function.
+       (nnrss-check-group): Use it to encode subject and author.
+
 2004-12-23  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * spam.el (spam-check-BBDB): don't get the symbol-value of an
index 43bfcf0..171126b 100644 (file)
 (require 'nnoo)
 (require 'nnmail)
 (require 'message)
-(require 'mm-util)
+(require 'nnheader)
 (require 'gnus-util)
 (require 'time-date)
-(require 'rfc2231)
+(require 'mime-parse)
 (require 'mm-url)
+(require 'eword-encode)
+(require 'mime-edit)
+(require 'mime-view)
 (eval-when-compile
   (ignore-errors
     (require 'xml)))
 (eval '(require 'xml))
 
+;; Reload mm-util emulating macros for compiling.
+(eval-when-compile
+  (let ((features (delq 'mm-util (copy-sequence features))))
+    (load "nnheader" nil t)))
+
 (nnoo-declare nnrss)
 
 (defvoo nnrss-directory (nnheader-concat gnus-directory "rss/")
@@ -78,17 +86,23 @@ The arguments are (ENTRY GROUP ARTICLE).
 ENTRY is the record of the current headline.  GROUP is the group name.
 ARTICLE is the article number of the current headline.")
 
+(defvar nnrss-file-coding-system nnheader-auto-save-coding-system
+  "Coding system used when reading and writing files.")
+
 (nnoo-define-basics nnrss)
 
 ;;; Interface functions
 
-(eval-when-compile
-  (defmacro nnrss-string-as-multibyte (string)
-    (if (featurep 'xemacs)
-       string
-      `(string-as-multibyte ,string))))
+(defsubst nnrss-format-string (string)
+  (gnus-replace-in-string string " *\n *" " "))
+
+(defun nnrss-decode-group-name (group)
+  (if (and group (mm-coding-system-p 'utf-8))
+      (setq group (mm-decode-coding-string group 'utf-8))
+    group))
 
 (deffoo nnrss-retrieve-headers (articles &optional group server fetch-old)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (let (e)
     (save-excursion
@@ -97,21 +111,26 @@ ARTICLE is the article number of the current headline.")
       (dolist (article articles)
        (if (setq e (assq article nnrss-group-data))
            (insert (number-to-string (car e)) "\t" ;; number
-                   (if (nth 3 e)
-                       (nnrss-format-string (nth 3 e)) "")
-                   "\t" ;; subject
-                   (if (nth 4 e)
-                       (nnrss-format-string (nth 4 e))
-                     "(nobody)")
-                   "\t" ;;from
+                   ;; subject
+                   (or (nth 3 e) "")
+                   "\t"
+                   ;; from
+                   (or (nth 4 e) "(nobody)")
+                   "\t"
+                   ;; date
                    (or (nth 5 e) "")
-                   "\t" ;; date
+                   "\t"
+                   ;; id
                    (format "<%d@%s.nnrss>" (car e) group)
-                   "\t" ;; id
-                   "\t" ;; refs
-                   "-1" "\t" ;; chars
-                   "-1" "\t" ;; lines
-                   "" "\t" ;; Xref
+                   "\t"
+                   ;; refs
+                   "\t"
+                   ;; chars
+                   "-1" "\t"
+                   ;; lines
+                   "-1" "\t"
+                   ;; Xref
+                   "" "\t"
                    (if (and (nth 6 e)
                             (memq nnrss-description-field
                                   nnmail-extra-headers))
@@ -132,6 +151,7 @@ ARTICLE is the article number of the current headline.")
   'nov)
 
 (deffoo nnrss-request-group (group &optional server dont-check)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (if dont-check
       t
@@ -145,54 +165,81 @@ ARTICLE is the article number of the current headline.")
 (deffoo nnrss-close-group (group &optional server)
   t)
 
+(defun nnrss-body-presentation-method ()
+  "Return a body presentation method used with MIME-View.
+The return value will be `html' or `text'."
+  (in-calist-package 'mime-view)
+  (let ((default (cdr (assq 'body-presentation-method
+                           (car (ctree-find-calist
+                                 mime-preview-condition
+                                 '((type . text) (subtype . t)))))))
+       (html (cdr (assq 'body-presentation-method
+                        (car (ctree-find-calist
+                              mime-preview-condition
+                              '((type . text) (subtype . html))))))))
+    (if (or (not default)
+           (not html)
+           (eq default html))
+       'text
+      'html)))
+
 (deffoo nnrss-request-article (article &optional group server buffer)
+  (setq group (nnrss-decode-group-name group))
+  (when (stringp article)
+    (setq article (if (string-match "\\`<\\([0-9]+\\)@" article)
+                     (string-to-number (match-string 1 article))
+                   0)))
   (nnrss-possibly-change-group group server)
   (let ((e (assq article nnrss-group-data))
-       (boundary "=-=-=-=-=-=-=-=-=-")
        (nntp-server-buffer (or buffer nntp-server-buffer))
        post err)
     (when e
       (catch 'error
        (with-current-buffer nntp-server-buffer
          (erase-buffer)
-         (goto-char (point-min))
-         (insert "Mime-Version: 1.0\nContent-Type: multipart/alternative; boundary=\"" boundary "\"\n")
          (if group
-             (insert "Newsgroups: " group "\n"))
+             (mm-with-unibyte-current-buffer
+               (insert "Newsgroups: "
+                       (if (mm-coding-system-p 'utf-8)
+                           (mm-encode-coding-string group 'utf-8)
+                         group)
+                       "\n")))
          (if (nth 3 e)
-             (insert "Subject: " (nnrss-format-string (nth 3 e)) "\n"))
+             (insert "Subject: " (nth 3 e) "\n"))
          (if (nth 4 e)
-             (insert "From: " (nnrss-format-string (nth 4 e)) "\n"))
+             (insert "From: " (nth 4 e) "\n"))
          (if (nth 5 e)
              (insert "Date: " (nnrss-format-string (nth 5 e)) "\n"))
-         (insert "Message-ID: " (format "<%d@%s.nnrss>" (car e) group) "\n")
+         (insert (format "Message-ID: <%d@%s.nnrss>\n"
+                         (car e)
+                         (gnus-replace-in-string group "[\t\n ]+" "_")))
          (insert "\n")
          (let ((text (if (nth 6 e)
-                         (nnrss-string-as-multibyte (nth 6 e))))
-               (link (if (nth 2 e)
-                         (nth 2 e))))
-           (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n")
-           (let ((point (point)))
-             (when text
-               (insert text)
-               (goto-char point)
-               (while (search-forward "\n" nil t)
-                 (replace-match " "))
-               (goto-char (point-max))
-               (insert "\n\n"))
-             (when link
-               (insert link)))
-           (insert "\n\n--" boundary "\nContent-Type: text/html\n\n")
-           (let ((point (point)))
-             (when text
-               (insert "<html><head></head><body>\n" text "\n</body></html>")
-               (goto-char point)
-               (while (search-forward "\n" nil t)
-                 (replace-match " "))
-               (goto-char (point-max))
-               (insert "\n\n"))
-             (when link
-               (insert "<p><a href=\"" link "\">link</a></p>\n"))))
+                         (mapconcat 'identity
+                                    (delete "" (split-string (nth 6 e) "\n+"))
+                                    " ")))
+               (link (nth 2 e))
+               (mail-header-separator "")
+               mime-edit-insert-user-agent-field)
+           (when (or text link)
+             (if (eq 'html (nnrss-body-presentation-method))
+                 (progn
+                   (mime-edit-insert-text "html")
+                   (insert "<html><head></head><body>\n")
+                   (when text
+                     (insert text "\n"))
+                   (when link
+                     (insert "<p><a href=\"" link "\">link</a></p>\n"))
+                   (insert "</body></html>\n"))
+               (mime-edit-insert-text "plain")
+               (if text
+                   (progn
+                     (insert text "\n")
+                     (when link
+                       (insert "\n" link "\n")))
+                 (when link
+                   (insert link "\n"))))
+             (mime-edit-translate-body)))
          (when nnrss-content-function
            (funcall nnrss-content-function e group article)))))
     (cond
@@ -217,6 +264,7 @@ ARTICLE is the article number of the current headline.")
 
 (deffoo nnrss-request-expire-articles
     (articles group &optional server force)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (let (e days not-expirable changed)
     (dolist (art articles)
@@ -234,6 +282,7 @@ ARTICLE is the article number of the current headline.")
     not-expirable))
 
 (deffoo nnrss-request-delete-group (group &optional force server)
+  (setq group (nnrss-decode-group-name group))
   (nnrss-possibly-change-group group server)
   (setq nnrss-server-data
        (delq (assoc group nnrss-server-data) nnrss-server-data))
@@ -256,16 +305,41 @@ ARTICLE is the article number of the current headline.")
 
 ;;; Internal functions
 (eval-when-compile (defun xml-rpc-method-call (&rest args)))
+
+(defun nnrss-get-encoding ()
+  "Return an encoding attribute specified in the current xml contents."
+  (goto-char (point-min))
+  (mm-coding-system-p
+   (if (re-search-forward
+       "<\\?[^>]*encoding=\\(?:\"\\([^>]+\\)\"\\|'\\([^>]+\\)'\\)"
+       nil t)
+       (intern-soft (downcase (or (match-string-no-properties 1)
+                                 (match-string-no-properties 2))))
+     ;; The default encoding for xml.
+     'utf-8)))
+
 (defun nnrss-fetch (url &optional local)
   "Fetch URL and put it in a the expected Lisp structure."
-  (with-temp-buffer
+  (mm-with-unibyte-buffer
     ;;some CVS versions of url.el need this to close the connection quickly
-    (let (xmlform htmlform)
+    (let (cs xmlform htmlform)
       ;; bit o' work necessary for w3 pre-cvs and post-cvs
       (if local
          (let ((coding-system-for-read 'binary))
            (insert-file-contents url))
-       (mm-url-insert url))
+       (let (;; FIXME: shouldn't binding `coding-system-for-read' be
+             ;; moved to `mm-url-insert'?
+             (coding-system-for-read 'binary)
+             ;; mm-url will load mm-util.  d-e-m-c should be bound to
+             ;; t then, because of `mm-emacs-mule'.
+             (default-enable-multibyte-characters t))
+         (mm-url-insert url)))
+      (nnheader-remove-cr-followed-by-lf)
+      ;; Decode text according to the encoding attribute.
+      (when (setq cs (nnrss-get-encoding))
+       (mm-decode-coding-region (point-min) (point-max) cs)
+       (mm-enable-multibyte))
+      (goto-char (point-min))
 
       ;; Because xml-parse-region can't deal with anything that isn't
       ;; xml and w3-parse-buffer can't deal with some xml, we have to
@@ -274,15 +348,16 @@ ARTICLE is the article number of the current headline.")
       ;; why w3-parse-buffer fails to parse some well-formed xml and
       ;; fix it.
 
-      (condition-case nil
+      (condition-case err1
          (setq xmlform (xml-parse-region (point-min) (point-max)))
        (error
-        (condition-case err
+        (condition-case err2
             (setq htmlform (caddar (w3-parse-buffer
                                     (current-buffer))))
           (error
-           (message "nnrss: %s: Not valid XML and w3-parse doesn't work: %s"
-                    url err)))))
+           (message "\
+nnrss: %s: Not valid XML %s and w3-parse doesn't work %s"
+                    url err1 err2)))))
       (if htmlform
          htmlform
        xmlform))))
@@ -315,13 +390,21 @@ ARTICLE is the article number of the current headline.")
   (setq nnrss-server-data nil)
   (let ((file (nnrss-make-filename "nnrss" server)))
     (when (file-exists-p file)
-      (let ((coding-system-for-read 'binary))
-       (load file nil nil t)))))
+      ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+      ;; file names.  So, we use `insert-file-contents' instead.
+      (mm-with-multibyte-buffer
+       (let ((coding-system-for-read nnrss-file-coding-system)
+             (file-name-coding-system nnmail-pathname-coding-system))
+         (insert-file-contents file)
+         (eval-region (point-min) (point-max)))))))
 
 (defun nnrss-save-server-data (server)
   (gnus-make-directory nnrss-directory)
-  (let ((coding-system-for-write 'binary))
+  (let ((coding-system-for-write nnrss-file-coding-system)
+       (file-name-coding-system nnmail-pathname-coding-system))
     (with-temp-file (nnrss-make-filename "nnrss" server)
+      (insert (format ";; -*- coding: %s; -*-\n"
+                     nnrss-file-coding-system))
       (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist))
       (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data)))))
 
@@ -335,8 +418,13 @@ ARTICLE is the article number of the current headline.")
     (setq nnrss-group-min (+ nnrss-group-max 1)))
   (let ((file (nnrss-make-filename group server)))
     (when (file-exists-p file)
-      (let ((coding-system-for-read 'binary))
-       (load file nil t t))
+      ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
+      ;; file names.  So, we use `insert-file-contents' instead.
+      (mm-with-multibyte-buffer
+       (let ((coding-system-for-read nnrss-file-coding-system)
+             (file-name-coding-system nnmail-pathname-coding-system))
+         (insert-file-contents file)
+         (eval-region (point-min) (point-max))))
       (dolist (e nnrss-group-data)
        (puthash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb)
        (when (and (car e) (> nnrss-group-min (car e)))
@@ -346,8 +434,11 @@ ARTICLE is the article number of the current headline.")
 
 (defun nnrss-save-group-data (group server)
   (gnus-make-directory nnrss-directory)
-  (let ((coding-system-for-write 'binary))
+  (let ((coding-system-for-write nnrss-file-coding-system)
+       (file-name-coding-system nnmail-pathname-coding-system))
     (with-temp-file (nnrss-make-filename group server)
+      (insert (format ";; -*- coding: %s; -*-\n"
+                     nnrss-file-coding-system))
       (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data)))))
 
 (defun nnrss-make-filename (name server)
@@ -379,15 +470,30 @@ ARTICLE is the article number of the current headline.")
   (mm-with-unibyte-current-buffer
     (mm-url-insert url)))
 
-(defun nnrss-decode-entities-unibyte-string (string)
+(defun nnrss-decode-entities-string (string)
   (if string
-      (mm-with-unibyte-buffer
+      (mm-with-multibyte-buffer
        (insert string)
        (mm-url-decode-entities-nbsp)
        (buffer-string))))
 
 (defalias 'nnrss-insert 'nnrss-insert-w3)
 
+(defun nnrss-mime-encode-string (string)
+  (mm-with-multibyte-buffer
+    (insert string)
+    (mm-url-decode-entities-nbsp)
+    (goto-char (point-min))
+    (while (re-search-forward "[\t\n ]+" nil t)
+      (replace-match " "))
+    (goto-char (point-min))
+    (skip-chars-forward " ")
+    (delete-region (point-min) (point))
+    (goto-char (point-max))
+    (skip-chars-forward " ")
+    (delete-region (point) (point-max))
+    (eword-encode-string (buffer-string) (eval '(- -1 (lsh -1 -1))))))
+
 ;;; Snarf functions
 
 (defun nnrss-check-group (group server)
@@ -424,7 +530,7 @@ ARTICLE is the article number of the current headline.")
     (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
       (when (and (listp item)
                 (string= (concat rss-ns "item") (car item))
-                (if (setq url (nnrss-decode-entities-unibyte-string
+                (if (setq url (nnrss-decode-entities-string
                                (nnrss-node-text rss-ns 'link (cddr item))))
                     (not (gethash url nnrss-group-hashtb))
                   (setq extra (or (nnrss-node-text content-ns 'encoded item)
@@ -445,10 +551,10 @@ ARTICLE is the article number of the current headline.")
          (incf nnrss-group-max)
          (current-time)
          url
-         (and subject (nnrss-decode-entities-unibyte-string subject))
-         (and author (nnrss-decode-entities-unibyte-string author))
+         (and subject (nnrss-mime-encode-string subject))
+         (and author (nnrss-mime-encode-string author))
          date
-         (and extra (nnrss-decode-entities-unibyte-string extra)))
+         (and extra (nnrss-decode-entities-string extra)))
         nnrss-group-data)
        (puthash (or url extra) t nnrss-group-hashtb)
        (setq changed t))
@@ -540,8 +646,8 @@ It is useful when `(setq nnrss-use-local t)'."
            (setq category (match-string 1))
          (setq url (match-string 2)
                name (mm-url-decode-entities-string
-                     (rfc2231-decode-encoded-string
-                      (match-string 3))))
+                     (cadr (mime-decode-parameters
+                            (list "c*" (match-string 3))))))
          (if category
              (setq name (concat category "." name)))
          (unless (assoc name nnrss-server-data)
@@ -550,9 +656,6 @@ It is useful when `(setq nnrss-use-local t)'."
     (if changed
        (nnrss-save-server-data ""))))
 
-(defun nnrss-format-string (string)
-  (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " "))
-
 (defun nnrss-node-text (namespace local-name element)
   (let* ((node (assq (intern (concat namespace (symbol-name local-name)))
                     element))
@@ -577,6 +680,9 @@ Careful with this on large documents!"
     (mapc (lambda (bit)
            (when (car-safe bit)
              (when (equal tag (car bit))
+               ;; Old xml.el may return a list of string.
+               (when (consp (caddr bit))
+                 (setcar (cddr bit) (caaddr bit)))
                (setq found-list
                      (append found-list
                              (list bit))))
@@ -790,4 +896,3 @@ prefix), return the prefix."
 
 
 ;;; nnrss.el ends here
-
index 21cbfef..0917c8c 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-news.texi: Addition.
+
+       * gnus.texi (RSS): Addition.
+
 2004-12-24  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * Makefile.in (.texi): Set LANG=C to avoid NLS translations.
index 7e94c74..b34cb7f 100644 (file)
@@ -15137,13 +15137,31 @@ http://w3m.sourceforge.net/
 @acronym{RSS} \e$B$O$H$F$b5,B'E*$+$DNI<A$J%$%s%?!<%U%'!<%9$G!"\e(Bgnus \e$B$,%0%k!<\e(B
 \e$B%W$r>o$K?7$7$/$7$F$*$/$?$a$N>pJs$rF@$k$3$H$,$G$-$^$9!#\e(B
 
+\e$BCm\e(B: @code{utf-8} coding system \e$B$r%5%]!<%H$9$k\e(B Emacs \e$B$r;H$&$N$,NI$$$G$9!#\e(B
+@acronym{RSS} \e$B$O!"Hs\e(B-@acronym{ASCII} \e$B%F%-%9%H$r%(%s%3!<%I$9$k$?$a$K!"%G%#\e(B
+\e$B%U%)%k%H$G\e(B UTF-8 \e$B$r;H$&$+$i$G$9!#$=$l$O$^$?!"%G%#%U%)%k%H$G\e(B
+\e$BHs\e(B-@acronym{ASCII} \e$B%0%k!<%WL>$K$b;H$o$l$^$9!#\e(B
+
 @kindex G R (\e$B35N,\e(B)
 Feed \e$B$r9VFI$9$k$K$O!"35N,%P%C%U%!$+$i\e(B @kbd{G R} \e$B$r;H$C$F2<$5$$\e(B---feed \e$B$N\e(B
-\e$B=j:_$NF~NO$r5a$a$i$l$k$G$7$g$&!#\e(B
+\e$B=j:_!"%?%$%H%k$*$h$S@bL@$NF~NO$r5a$a$i$l$k$G$7$g$&!#%?%$%H%k$O$I$s$JJ8;z\e(B
+\e$B$G$b$h$/!"$=$l$O%0%k!<%WL>$H%0%k!<%W$N%G!<%?!&%U%!%$%k$NL>A0$K;H$o$l$^$9!#\e(B
+\e$B@bL@$O>JN,$G$-$^$9!#\e(B
 
 \e$B4JC1$K\e(B @code{nnrss} \e$B$r$O$8$a$kJ}K!$O!"%0%k!<%W%P%C%U%!$G\e(B @kbd{B nnrss
 RET y} \e$B$N$h$&$J$3$H$r>'$(!"$=$7$F%0%k!<%W$r9VFI$9$k$3$H$G$9!#\e(B
 
+@code{nnrss} \e$B%P%C%/%(%s%I$O!"$=$l$>$l$N\e(B @code{nnrss} \e$B%0%k!<%W$N$?$a$N%G!<\e(B
+\e$B%?!&%U%!%$%k$r\e(B @code{nnrss-directory} (\e$B2<5-;2>H\e(B) \e$B$KJ]B8$7$^$9!#\e(B
+\e$BHs\e(B-@acronym{ASCII} \e$BJ8;z$r4^$s$G$$$k%U%!%$%kL>\e(B
+\e$B$O!"\e(B@code{nnmail-pathname-coding-system} \e$BJQ?t$G;XDj$5$l$?\e(B coding
+system \e$B$G%(%s%3!<%I$5$l$^$9!#$=$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(BEmacs \e$B$G\e(B
+\e$B$O\e(B coding system \e$B$O%G%#%U%)%k%H\e(B
+\e$B$G\e(B @code{default-file-name-coding-system} \e$B$NCM$K$J$j$^$9!#$"$J$?\e(B
+\e$B$,\e(B XEmacs \e$B$r;H$C$F$$$F!"Hs\e(B-@acronym{ASCII} \e$B%0%k!<%WL>$r;H$$$?$1$l$P!"\e(B
+@code{nnmail-pathname-coding-system} \e$BJQ?t$NCM$rE,@Z$K@_Dj$7$J$1$l$P$J$j\e(B
+\e$B$^$;$s!#\e(B
+
 @cindex OPML
 \e$B$"$J$?$N9VFIL\O?$r\e(B @acronym{OPML} \e$B%U%)!<%^%C%H\e(B (Outline Processor Markup
 Language) \e$B$G%m!<%I\e(B/\e$B%;!<%V$9$k$?$a$K!"0J2<$N%3%^%s%I$r;H$&$3$H$b$G$-$^$9!#\e(B
@@ -15166,6 +15184,13 @@ Language) \e$B$G%m!<%I\e(B/\e$B%;!<%V$9$k$?$a$K!"0J2<$N%3%^%s%I$r;H$&$3$H$b$G$-$^$9
 @code{nnrss} \e$B$,%U%!%$%k$r=q$-9~$`%G%#%l%/%H%j!<$G!"%G%#%U%)%k%H\e(B
 \e$B$O\e(B @file{~/News/rss/} \e$B$G$9!#\e(B
 
+@item nnrss-file-coding-system
+@vindex nnrss-file-coding-system
+@code{nnrss} \e$B%0%k!<%W$N%G!<%?!&%U%!%$%k$rFI$_=q$-$9$k$H$-$K;H$o$l\e(B
+\e$B$k\e(B coding system \e$B$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{mm-universal-coding-system} \e$B$NCM\e(B (\e$B$=$N%G%#%U%)%k%H$O\e(B Emacs \e$B$G\e(B
+\e$B$O\e(B @code{emacs-mule}\e$B!"\e(BXEmacs \e$B$G$O\e(B @code{escape-quoted}) \e$B$G$9!#\e(B
+
 @item nnrss-use-local
 @vindex nnrss-use-local
 @findex nnrss-generate-download-script
index f8507ba..e67f352 100644 (file)
@@ -107,6 +107,10 @@ See the Gnus manual, section Hashcash, for more information.  Use
 @item Gnus supports a new sort command in the Summary buffer:
 @kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}).
 
+@item The @code{nnrss} back end now supports multilingual text.
+Non-@acronym{ASCII} group names for the @code{nnrss} groups are also
+supported.  @xref{RSS}.
+
 @end itemize
 
 @c gnus-news.texi ends here.
index 17ccace..118ece5 100644 (file)
@@ -16002,14 +16002,30 @@ changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}).
 @acronym{RSS} has a quite regular and nice interface, and it's
 possible to get the information Gnus needs to keep groups updated.
 
+Note: you had better use Emacs which supports the @code{utf-8} coding
+system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII}
+text by default.  It is also used by default for non-@acronym{ASCII}
+group names.
+
 @kindex G R (Summary)
-Use @kbd{G R} from the summary buffer to subscribe to a feed---you
-will be prompted for the location of the feed.
+Use @kbd{G R} from the summary buffer to subscribe to a feed---you will
+be prompted for the location, the title and the description of the feed.
+The title, which allows any characters, will be used for the group name
+and the name of the group data file.  The description can be omitted.
 
 An easy way to get started with @code{nnrss} is to say something like
 the following in the group buffer: @kbd{B nnrss RET y}, then
 subscribe to groups.
 
+The @code{nnrss} back end saves the group data file in
+@code{nnrss-directory} (see below) for each @code{nnrss} group.  File
+names containing non-@acronym{ASCII} characters will be encoded by the
+coding system specified with the @code{nnmail-pathname-coding-system}
+variable.  If it is @code{nil}, in Emacs the coding system defaults to
+the value of @code{default-file-name-coding-system}.  If you are using
+XEmacs and want to use non-@acronym{ASCII} group names, you should set
+the value for the @code{nnmail-pathname-coding-system} variable properly.
+
 @cindex OPML
 You can also use the following commands to import and export your
 subscriptions from a file in @acronym{OPML} format (Outline Processor
@@ -16033,6 +16049,13 @@ The following @code{nnrss} variables can be altered:
 The directory where @code{nnrss} stores its files.  The default is
 @file{~/News/rss/}.
 
+@item nnrss-file-coding-system
+@vindex nnrss-file-coding-system
+The coding system used when reading and writing the @code{nnrss} groups
+data files.  The default is the value of
+@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}
+in Emacs or @code{escape-quoted} in XEmacs).
+
 @item nnrss-use-local
 @vindex nnrss-use-local
 @findex nnrss-generate-download-script