X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;ds=sidebyside;f=lisp%2Fnnweb.el;h=eb393bb3a9771fbf9b4d25ae5e834566a34ae9da;hb=d9e124f855025b9053a8a90f023911a30328ebcb;hp=7b4f175800f837c0682a399f204ad862d6cbd575;hpb=7e09e13fc3097a876dc0a97e6492374c1c6e9c44;p=gnus diff --git a/lisp/nnweb.el b/lisp/nnweb.el index 7b4f17580..eb393bb3a 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -187,7 +187,7 @@ and `altavista'.") (funcall (nnweb-definition 'article)) (nnweb-decode-entities)) (nnheader-report 'nnweb "Fetched article %s" article) - t)))) + (cons group (and (numberp article) article)))))) (deffoo nnweb-close-server (&optional server) (when (and (nnweb-server-opened server) @@ -719,12 +719,21 @@ and `altavista'.") (defun nnweb-decode-entities () "Decode all HTML entities." (goto-char (point-min)) - (while (re-search-forward "&\\([a-z]+\\);" nil t) - (replace-match (char-to-string (or (cdr (assq (intern (match-string 1)) - w3-html-entities)) - ?#)) + (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) + (replace-match (char-to-string + (if (eq (aref (match-string 1) 0) ?\#) + (string-to-number (substring (match-string 1) 1)) + (or (cdr (assq (intern (match-string 1)) + w3-html-entities)) + ?#))) t t))) +(defun nnweb-decode-entities-string (str) + (with-temp-buffer + (insert str) + (nnweb-decode-entities) + (buffer-substring (point-min) (point-max)))) + (defun nnweb-remove-markup () "Remove all HTML markup, leaving just plain text." (goto-char (point-min)) @@ -736,10 +745,21 @@ and `altavista'.") (while (re-search-forward "<[^>]+>" nil t) (replace-match "" t t))) -(defun nnweb-insert (url) - "Insert the contents from an URL in the current buffer." +(defun nnweb-insert (url &optional follow-refresh) + "Insert the contents from an URL in the current buffer. +If FOLLOW-REFRESH is non-nil, redirect refresh url in META." (let ((name buffer-file-name)) - (url-insert-file-contents url) + (if follow-refresh + (save-restriction + (narrow-to-region (point) (point)) + (url-insert-file-contents url) + (goto-char (point-min)) + (when (re-search-forward + "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" nil t) + (let ((url (match-string 1))) + (delete-region (point-min) (point-max)) + (nnweb-insert url t)))) + (url-insert-file-contents url)) (setq buffer-file-name name))) (defun nnweb-parse-find (type parse &optional maxdepth)