Mercurial > emacs
annotate lisp/gnus/nnweb.el @ 37678:ebec0594dece
(compile-files): Redirect output of chmod to
/dev/null.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Fri, 11 May 2001 10:53:56 +0000 |
| parents | db55e81c9ccf |
| children | 93f6c74a2f60 |
| rev | line source |
|---|---|
| 17493 | 1 ;;; nnweb.el --- retrieving articles via web search engines |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
2 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
3 ;; Free Software Foundation, Inc. |
| 17493 | 4 |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 17493 | 6 ;; Keywords: news |
| 7 | |
| 8 ;; This file is part of GNU Emacs. | |
| 9 | |
| 10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
| 11 ;; it under the terms of the GNU General Public License as published by | |
| 12 ;; the Free Software Foundation; either version 2, or (at your option) | |
| 13 ;; any later version. | |
| 14 | |
| 15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
| 16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 ;; GNU General Public License for more details. | |
| 19 | |
| 20 ;; You should have received a copy of the GNU General Public License | |
| 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
| 22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 23 ;; Boston, MA 02111-1307, USA. | |
| 24 | |
| 25 ;;; Commentary: | |
| 26 | |
| 27 ;; Note: You need to have `url' and `w3' installed for this | |
| 28 ;; backend to work. | |
| 29 | |
| 30 ;;; Code: | |
| 31 | |
|
19521
6f6cf9184e93
Require cl at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
17493
diff
changeset
|
32 (eval-when-compile (require 'cl)) |
|
6f6cf9184e93
Require cl at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
17493
diff
changeset
|
33 |
| 17493 | 34 (require 'nnoo) |
| 35 (require 'message) | |
| 36 (require 'gnus-util) | |
| 37 (require 'gnus) | |
| 38 (require 'nnmail) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
39 (require 'mm-util) |
|
23214
f075bf0ae873
(require): Wrap requirement of w3 and url in
Dave Love <fx@gnu.org>
parents:
19969
diff
changeset
|
40 (eval-when-compile |
|
f075bf0ae873
(require): Wrap requirement of w3 and url in
Dave Love <fx@gnu.org>
parents:
19969
diff
changeset
|
41 (ignore-errors |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
42 (require 'w3) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
43 (require 'url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
44 (require 'w3-forms))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
45 |
|
23214
f075bf0ae873
(require): Wrap requirement of w3 and url in
Dave Love <fx@gnu.org>
parents:
19969
diff
changeset
|
46 ;; Report failure to find w3 at load time if appropriate. |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
47 (unless noninteractive |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
48 (eval '(progn |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
49 (require 'w3) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
50 (require 'url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
51 (require 'w3-forms)))) |
| 17493 | 52 |
| 53 (nnoo-declare nnweb) | |
| 54 | |
| 55 (defvoo nnweb-directory (nnheader-concat gnus-directory "nnweb/") | |
| 56 "Where nnweb will save its files.") | |
| 57 | |
| 58 (defvoo nnweb-type 'dejanews | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
59 "What search engine type is being used. |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
60 Valid types include `dejanews', `dejanewsold', `reference', |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
61 and `altavista'.") |
| 17493 | 62 |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
63 (defvar nnweb-type-definition |
| 17493 | 64 '((dejanews |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
65 (article . ignore) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
66 (id . "http://search.dejanews.com/msgid.xp?MID=%s&fmt=text") |
| 17493 | 67 (map . nnweb-dejanews-create-mapping) |
| 68 (search . nnweb-dejanews-search) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
69 (address . "http://www.deja.com/=dnc/qs.xp") |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
70 (identifier . nnweb-dejanews-identity)) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
71 (dejanewsold |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
72 (article . ignore) |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
73 (map . nnweb-dejanews-create-mapping) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
74 (search . nnweb-dejanewsold-search) |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
75 (address . "http://www.deja.com/dnquery.xp") |
| 17493 | 76 (identifier . nnweb-dejanews-identity)) |
| 77 (reference | |
| 78 (article . nnweb-reference-wash-article) | |
| 79 (map . nnweb-reference-create-mapping) | |
| 80 (search . nnweb-reference-search) | |
| 81 (address . "http://www.reference.com/cgi-bin/pn/go") | |
| 82 (identifier . identity)) | |
| 83 (altavista | |
| 84 (article . nnweb-altavista-wash-article) | |
| 85 (map . nnweb-altavista-create-mapping) | |
| 86 (search . nnweb-altavista-search) | |
| 87 (address . "http://www.altavista.digital.com/cgi-bin/query") | |
| 88 (id . "/cgi-bin/news?id@%s") | |
| 89 (identifier . identity))) | |
| 90 "Type-definition alist.") | |
| 91 | |
| 92 (defvoo nnweb-search nil | |
| 93 "Search string to feed to DejaNews.") | |
| 94 | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
95 (defvoo nnweb-max-hits 999 |
| 17493 | 96 "Maximum number of hits to display.") |
| 97 | |
| 98 (defvoo nnweb-ephemeral-p nil | |
| 99 "Whether this nnweb server is ephemeral.") | |
| 100 | |
| 101 ;;; Internal variables | |
| 102 | |
| 103 (defvoo nnweb-articles nil) | |
| 104 (defvoo nnweb-buffer nil) | |
| 105 (defvoo nnweb-group-alist nil) | |
| 106 (defvoo nnweb-group nil) | |
| 107 (defvoo nnweb-hashtb nil) | |
| 108 | |
| 109 ;;; Interface functions | |
| 110 | |
| 111 (nnoo-define-basics nnweb) | |
| 112 | |
| 113 (deffoo nnweb-retrieve-headers (articles &optional group server fetch-old) | |
| 114 (nnweb-possibly-change-server group server) | |
| 115 (save-excursion | |
| 116 (set-buffer nntp-server-buffer) | |
| 117 (erase-buffer) | |
| 118 (let (article header) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
119 (mm-with-unibyte-current-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
120 (while (setq article (pop articles)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
121 (when (setq header (cadr (assq article nnweb-articles))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
122 (nnheader-insert-nov header)))) |
| 17493 | 123 'nov))) |
| 124 | |
| 125 (deffoo nnweb-request-scan (&optional group server) | |
| 126 (nnweb-possibly-change-server group server) | |
| 127 (funcall (nnweb-definition 'map)) | |
| 128 (unless nnweb-ephemeral-p | |
| 129 (nnweb-write-active) | |
| 130 (nnweb-write-overview group))) | |
| 131 | |
| 132 (deffoo nnweb-request-group (group &optional server dont-check) | |
| 133 (nnweb-possibly-change-server nil server) | |
| 134 (when (and group | |
| 135 (not (equal group nnweb-group)) | |
| 136 (not nnweb-ephemeral-p)) | |
| 137 (let ((info (assoc group nnweb-group-alist))) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
138 (when info |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
139 (setq nnweb-group group) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
140 (setq nnweb-type (nth 2 info)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
141 (setq nnweb-search (nth 3 info)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
142 (unless dont-check |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
143 (nnweb-read-overview group))))) |
| 17493 | 144 (cond |
| 145 ((not nnweb-articles) | |
| 146 (nnheader-report 'nnweb "No matching articles")) | |
| 147 (t | |
| 148 (let ((active (if nnweb-ephemeral-p | |
| 149 (cons (caar nnweb-articles) | |
| 150 (caar (last nnweb-articles))) | |
| 151 (cadr (assoc group nnweb-group-alist))))) | |
| 152 (nnheader-report 'nnweb "Opened group %s" group) | |
| 153 (nnheader-insert | |
| 154 "211 %d %d %d %s\n" (length nnweb-articles) | |
| 155 (car active) (cdr active) group))))) | |
| 156 | |
| 157 (deffoo nnweb-close-group (group &optional server) | |
| 158 (nnweb-possibly-change-server group server) | |
| 159 (when (gnus-buffer-live-p nnweb-buffer) | |
| 160 (save-excursion | |
| 161 (set-buffer nnweb-buffer) | |
| 162 (set-buffer-modified-p nil) | |
| 163 (kill-buffer nnweb-buffer))) | |
| 164 t) | |
| 165 | |
| 166 (deffoo nnweb-request-article (article &optional group server buffer) | |
| 167 (nnweb-possibly-change-server group server) | |
| 168 (save-excursion | |
| 169 (set-buffer (or buffer nntp-server-buffer)) | |
| 170 (let* ((header (cadr (assq article nnweb-articles))) | |
| 171 (url (and header (mail-header-xref header)))) | |
| 172 (when (or (and url | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
173 (mm-with-unibyte-current-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
174 (nnweb-fetch-url url))) |
| 17493 | 175 (and (stringp article) |
| 176 (nnweb-definition 'id t) | |
| 177 (let ((fetch (nnweb-definition 'id)) | |
| 178 art) | |
| 179 (when (string-match "^<\\(.*\\)>$" article) | |
| 180 (setq art (match-string 1 article))) | |
| 181 (and fetch | |
| 182 art | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
183 (mm-with-unibyte-current-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
184 (nnweb-fetch-url |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
185 (format fetch article))))))) |
| 17493 | 186 (unless nnheader-callback-function |
| 187 (funcall (nnweb-definition 'article)) | |
| 188 (nnweb-decode-entities)) | |
| 189 (nnheader-report 'nnweb "Fetched article %s" article) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
190 (cons group (and (numberp article) article)))))) |
| 17493 | 191 |
| 192 (deffoo nnweb-close-server (&optional server) | |
| 193 (when (and (nnweb-server-opened server) | |
| 194 (gnus-buffer-live-p nnweb-buffer)) | |
| 195 (save-excursion | |
| 196 (set-buffer nnweb-buffer) | |
| 197 (set-buffer-modified-p nil) | |
| 198 (kill-buffer nnweb-buffer))) | |
| 199 (nnoo-close-server 'nnweb server)) | |
| 200 | |
| 201 (deffoo nnweb-request-list (&optional server) | |
| 202 (nnweb-possibly-change-server nil server) | |
| 203 (save-excursion | |
| 204 (set-buffer nntp-server-buffer) | |
| 205 (nnmail-generate-active nnweb-group-alist) | |
| 206 t)) | |
| 207 | |
| 208 (deffoo nnweb-request-update-info (group info &optional server) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
209 (nnweb-possibly-change-server group server)) |
| 17493 | 210 |
| 211 (deffoo nnweb-asynchronous-p () | |
| 212 t) | |
| 213 | |
| 214 (deffoo nnweb-request-create-group (group &optional server args) | |
| 215 (nnweb-possibly-change-server nil server) | |
| 216 (nnweb-request-delete-group group) | |
| 217 (push `(,group ,(cons 1 0) ,@args) nnweb-group-alist) | |
| 218 (nnweb-write-active) | |
| 219 t) | |
| 220 | |
| 221 (deffoo nnweb-request-delete-group (group &optional force server) | |
| 222 (nnweb-possibly-change-server group server) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
223 (gnus-pull group nnweb-group-alist t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
224 (nnweb-write-active) |
| 17493 | 225 (gnus-delete-file (nnweb-overview-file group)) |
| 226 t) | |
| 227 | |
| 228 (nnoo-define-skeleton nnweb) | |
| 229 | |
| 230 ;;; Internal functions | |
| 231 | |
| 232 (defun nnweb-read-overview (group) | |
| 233 "Read the overview of GROUP and build the map." | |
| 234 (when (file-exists-p (nnweb-overview-file group)) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
235 (mm-with-unibyte-buffer |
| 17493 | 236 (nnheader-insert-file-contents (nnweb-overview-file group)) |
| 237 (goto-char (point-min)) | |
| 238 (let (header) | |
| 239 (while (not (eobp)) | |
| 240 (setq header (nnheader-parse-nov)) | |
| 241 (forward-line 1) | |
| 242 (push (list (mail-header-number header) | |
| 243 header (mail-header-xref header)) | |
| 244 nnweb-articles) | |
| 245 (nnweb-set-hashtb header (car nnweb-articles))))))) | |
| 246 | |
| 247 (defun nnweb-write-overview (group) | |
| 248 "Write the overview file for GROUP." | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
249 (with-temp-file (nnweb-overview-file group) |
| 17493 | 250 (let ((articles nnweb-articles)) |
| 251 (while articles | |
| 252 (nnheader-insert-nov (cadr (pop articles))))))) | |
| 253 | |
| 254 (defun nnweb-set-hashtb (header data) | |
| 255 (gnus-sethash (nnweb-identifier (mail-header-xref header)) | |
| 256 data nnweb-hashtb)) | |
| 257 | |
| 258 (defun nnweb-get-hashtb (url) | |
| 259 (gnus-gethash (nnweb-identifier url) nnweb-hashtb)) | |
| 260 | |
| 261 (defun nnweb-identifier (ident) | |
| 262 (funcall (nnweb-definition 'identifier) ident)) | |
| 263 | |
| 264 (defun nnweb-overview-file (group) | |
| 265 "Return the name of the overview file of GROUP." | |
| 266 (nnheader-concat nnweb-directory group ".overview")) | |
| 267 | |
| 268 (defun nnweb-write-active () | |
| 269 "Save the active file." | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
270 (gnus-make-directory nnweb-directory) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
271 (with-temp-file (nnheader-concat nnweb-directory "active") |
| 17493 | 272 (prin1 `(setq nnweb-group-alist ',nnweb-group-alist) (current-buffer)))) |
| 273 | |
| 274 (defun nnweb-read-active () | |
| 275 "Read the active file." | |
| 276 (load (nnheader-concat nnweb-directory "active") t t t)) | |
| 277 | |
| 278 (defun nnweb-definition (type &optional noerror) | |
| 279 "Return the definition of TYPE." | |
| 280 (let ((def (cdr (assq type (assq nnweb-type nnweb-type-definition))))) | |
| 281 (when (and (not def) | |
| 282 (not noerror)) | |
| 283 (error "Undefined definition %s" type)) | |
| 284 def)) | |
| 285 | |
| 286 (defun nnweb-possibly-change-server (&optional group server) | |
| 287 (nnweb-init server) | |
| 288 (when server | |
| 289 (unless (nnweb-server-opened server) | |
| 290 (nnweb-open-server server))) | |
| 291 (unless nnweb-group-alist | |
| 292 (nnweb-read-active)) | |
| 293 (when group | |
| 294 (when (and (not nnweb-ephemeral-p) | |
| 295 (not (equal group nnweb-group))) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
296 (setq nnweb-hashtb (gnus-make-hashtable 4095)) |
| 17493 | 297 (nnweb-request-group group nil t)))) |
| 298 | |
| 299 (defun nnweb-init (server) | |
| 300 "Initialize buffers and such." | |
| 301 (unless (gnus-buffer-live-p nnweb-buffer) | |
| 302 (setq nnweb-buffer | |
| 303 (save-excursion | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
304 (mm-with-unibyte |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
305 (nnheader-set-temp-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
306 (format " *nnweb %s %s %s*" |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
307 nnweb-type nnweb-search server)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
308 (current-buffer)))))) |
| 17493 | 309 |
| 310 (defun nnweb-fetch-url (url) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
311 (let (buf) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
312 (save-excursion |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
313 (if (not nnheader-callback-function) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
314 (progn |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
315 (with-temp-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
316 (mm-enable-multibyte) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
317 (let ((coding-system-for-read 'binary) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
318 (coding-system-for-write 'binary) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
319 (default-process-coding-system 'binary)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
320 (nnweb-insert url)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
321 (setq buf (buffer-string))) |
| 17493 | 322 (erase-buffer) |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
323 (insert buf) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
324 t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
325 (nnweb-url-retrieve-asynch |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
326 url 'nnweb-callback (current-buffer) nnheader-callback-function) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
327 t)))) |
| 17493 | 328 |
| 329 (defun nnweb-callback (buffer callback) | |
| 330 (when (gnus-buffer-live-p url-working-buffer) | |
| 331 (save-excursion | |
| 332 (set-buffer url-working-buffer) | |
| 333 (funcall (nnweb-definition 'article)) | |
| 334 (nnweb-decode-entities) | |
| 335 (set-buffer buffer) | |
| 336 (goto-char (point-max)) | |
| 337 (insert-buffer-substring url-working-buffer)) | |
| 338 (funcall callback t) | |
| 339 (gnus-kill-buffer url-working-buffer))) | |
| 340 | |
| 341 (defun nnweb-url-retrieve-asynch (url callback &rest data) | |
| 342 (let ((url-request-method "GET") | |
| 343 (old-asynch url-be-asynchronous) | |
| 344 (url-request-data nil) | |
| 345 (url-request-extra-headers nil) | |
| 346 (url-working-buffer (generate-new-buffer-name " *nnweb*"))) | |
| 347 (setq-default url-be-asynchronous t) | |
| 348 (save-excursion | |
| 349 (set-buffer (get-buffer-create url-working-buffer)) | |
| 350 (setq url-current-callback-data data | |
| 351 url-be-asynchronous t | |
| 352 url-current-callback-func callback) | |
|
33322
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
353 (url-retrieve url nil)) |
| 17493 | 354 (setq-default url-be-asynchronous old-asynch))) |
| 355 | |
|
33322
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
356 (if (fboundp 'url-retrieve-synchronously) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
357 (defun nnweb-url-retrieve-asynch (url callback &rest data) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
358 (url-retrieve url callback data))) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
359 |
| 17493 | 360 ;;; |
| 361 ;;; DejaNews functions. | |
| 362 ;;; | |
| 363 | |
| 364 (defun nnweb-dejanews-create-mapping () | |
| 365 "Perform the search and create an number-to-url alist." | |
| 366 (save-excursion | |
| 367 (set-buffer nnweb-buffer) | |
| 368 (erase-buffer) | |
| 369 (when (funcall (nnweb-definition 'search) nnweb-search) | |
| 370 (let ((i 0) | |
| 371 (more t) | |
| 372 (case-fold-search t) | |
| 373 (active (or (cadr (assoc nnweb-group nnweb-group-alist)) | |
| 374 (cons 1 0))) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
375 subject date from |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
376 map url parse a table group text) |
| 17493 | 377 (while more |
| 378 ;; Go through all the article hits on this page. | |
| 379 (goto-char (point-min)) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
380 (setq parse (w3-parse-buffer (current-buffer)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
381 table (nth 1 (nnweb-parse-find-all 'table parse))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
382 (dolist (row (nth 2 (car (nth 2 table)))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
383 (setq a (nnweb-parse-find 'a row) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
384 url (cdr (assq 'href (nth 1 a))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
385 text (nreverse (nnweb-text row))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
386 (when a |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
387 (setq subject (nth 4 text) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
388 group (nth 2 text) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
389 date (nth 1 text) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
390 from (nth 0 text)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
391 (if (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\)" date) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
392 (setq date (format "%s %s 00:00:00 %s" |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
393 (car (rassq (string-to-number |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
394 (match-string 2 date)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
395 parse-time-months)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
396 (match-string 3 date) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
397 (match-string 1 date))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
398 (setq date "Jan 1 00:00:00 0000")) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
399 (incf i) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
400 (setq url (concat url "&fmt=text")) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
401 (when (string-match "&context=[^&]+" url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
402 (setq url (replace-match "" t t url))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
403 (unless (nnweb-get-hashtb url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
404 (push |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
405 (list |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
406 (incf (cdr active)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
407 (make-full-mail-header |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
408 (cdr active) (concat subject " (" group ")") from date |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
409 (concat "<" (nnweb-identifier url) "@dejanews>") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
410 nil 0 0 url)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
411 map) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
412 (nnweb-set-hashtb (cadar map) (car map))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
413 ;; See whether there is a "Get next 20 hits" button here. |
| 17493 | 414 (goto-char (point-min)) |
| 415 (if (or (not (re-search-forward | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
416 "HREF=\"\\([^\"]+\\)\"[<>b]+Next result" nil t)) |
| 17493 | 417 (>= i nnweb-max-hits)) |
| 418 (setq more nil) | |
| 419 ;; Yup -- fetch it. | |
| 420 (setq more (match-string 1)) | |
| 421 (erase-buffer) | |
| 422 (url-insert-file-contents more))) | |
| 423 ;; Return the articles in the right order. | |
| 424 (setq nnweb-articles | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
425 (sort (nconc nnweb-articles map) 'car-less-than-car)))))) |
| 17493 | 426 |
| 427 (defun nnweb-dejanews-search (search) | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
428 (nnweb-insert |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
429 (concat |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
430 (nnweb-definition 'address) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
431 "?" |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
432 (nnweb-encode-www-form-urlencoded |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
433 `(("ST" . "PS") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
434 ("svcclass" . "dnyr") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
435 ("QRY" . ,search) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
436 ("defaultOp" . "AND") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
437 ("DBS" . "1") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
438 ("OP" . "dnquery.xp") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
439 ("LNG" . "ALL") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
440 ("maxhits" . "100") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
441 ("threaded" . "0") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
442 ("format" . "verbose2") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
443 ("showsort" . "date") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
444 ("agesign" . "1") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
445 ("ageweight" . "1"))))) |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
446 t) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
447 |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
448 (defun nnweb-dejanewsold-search (search) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
449 (nnweb-fetch-form |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
450 (nnweb-definition 'address) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
451 `(("query" . ,search) |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
452 ("defaultOp" . "AND") |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
453 ("svcclass" . "dnold") |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
454 ("maxhits" . "100") |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
455 ("format" . "verbose2") |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
456 ("threaded" . "0") |
|
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
457 ("showsort" . "date") |
| 17493 | 458 ("agesign" . "1") |
| 459 ("ageweight" . "1"))) | |
| 460 t) | |
| 461 | |
| 462 (defun nnweb-dejanews-identity (url) | |
| 463 "Return an unique identifier based on URL." | |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
464 (if (string-match "AN=\\([0-9]+\\)" url) |
| 17493 | 465 (match-string 1 url) |
| 466 url)) | |
| 467 | |
| 468 ;;; | |
| 469 ;;; InReference | |
| 470 ;;; | |
| 471 | |
| 472 (defun nnweb-reference-create-mapping () | |
| 473 "Perform the search and create an number-to-url alist." | |
| 474 (save-excursion | |
| 475 (set-buffer nnweb-buffer) | |
| 476 (erase-buffer) | |
| 477 (when (funcall (nnweb-definition 'search) nnweb-search) | |
| 478 (let ((i 0) | |
| 479 (more t) | |
| 480 (case-fold-search t) | |
| 481 (active (or (cadr (assoc nnweb-group nnweb-group-alist)) | |
| 482 (cons 1 0))) | |
| 483 Subject Score Date Newsgroups From Message-ID | |
| 484 map url) | |
| 485 (while more | |
| 486 ;; Go through all the article hits on this page. | |
| 487 (goto-char (point-min)) | |
| 488 (search-forward "</pre><hr>" nil t) | |
| 489 (delete-region (point-min) (point)) | |
| 490 (goto-char (point-min)) | |
| 491 (while (re-search-forward "^ +[0-9]+\\." nil t) | |
| 492 (narrow-to-region | |
| 493 (point) | |
| 494 (if (re-search-forward "^$" nil t) | |
| 495 (match-beginning 0) | |
| 496 (point-max))) | |
| 497 (goto-char (point-min)) | |
| 498 (when (looking-at ".*href=\"\\([^\"]+\\)\"") | |
| 499 (setq url (match-string 1))) | |
| 500 (nnweb-remove-markup) | |
| 501 (goto-char (point-min)) | |
| 502 (while (search-forward "\t" nil t) | |
| 503 (replace-match " ")) | |
| 504 (goto-char (point-min)) | |
| 505 (while (re-search-forward "^\\([^:]+\\): \\(.*\\)$" nil t) | |
| 506 (set (intern (match-string 1)) (match-string 2))) | |
| 507 (widen) | |
| 508 (search-forward "</pre>" nil t) | |
| 509 (incf i) | |
| 510 (unless (nnweb-get-hashtb url) | |
| 511 (push | |
| 512 (list | |
| 513 (incf (cdr active)) | |
| 514 (make-full-mail-header | |
| 515 (cdr active) (concat "(" Newsgroups ") " Subject) From Date | |
| 516 Message-ID | |
| 517 nil 0 (string-to-int Score) url)) | |
| 518 map) | |
| 519 (nnweb-set-hashtb (cadar map) (car map)))) | |
| 520 (setq more nil)) | |
| 521 ;; Return the articles in the right order. | |
| 522 (setq nnweb-articles | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
523 (sort (nconc nnweb-articles map) 'car-less-than-car)))))) |
| 17493 | 524 |
| 525 (defun nnweb-reference-wash-article () | |
| 526 (let ((case-fold-search t)) | |
| 527 (goto-char (point-min)) | |
| 528 (re-search-forward "^</center><hr>" nil t) | |
| 529 (delete-region (point-min) (point)) | |
| 530 (search-forward "<pre>" nil t) | |
| 531 (forward-line -1) | |
| 532 (let ((body (point-marker))) | |
| 533 (search-forward "</pre>" nil t) | |
| 534 (delete-region (point) (point-max)) | |
| 535 (nnweb-remove-markup) | |
| 536 (goto-char (point-min)) | |
| 537 (while (looking-at " *$") | |
| 538 (gnus-delete-line)) | |
| 539 (narrow-to-region (point-min) body) | |
| 540 (while (and (re-search-forward "^$" nil t) | |
| 541 (not (eobp))) | |
| 542 (gnus-delete-line)) | |
| 543 (goto-char (point-min)) | |
| 544 (while (looking-at "\\(^[^ ]+:\\) *") | |
| 545 (replace-match "\\1 " t) | |
| 546 (forward-line 1)) | |
| 547 (goto-char (point-min)) | |
| 548 (when (re-search-forward "^References:" nil t) | |
| 549 (narrow-to-region | |
| 550 (point) (if (re-search-forward "^$\\|^[^:]+:" nil t) | |
| 551 (match-beginning 0) | |
| 552 (point-max))) | |
| 553 (goto-char (point-min)) | |
| 554 (while (not (eobp)) | |
| 555 (unless (looking-at "References") | |
| 556 (insert "\t") | |
| 557 (forward-line 1))) | |
| 558 (goto-char (point-min)) | |
| 559 (while (search-forward "," nil t) | |
| 560 (replace-match " " t t))) | |
| 561 (widen) | |
| 562 (set-marker body nil)))) | |
| 563 | |
| 564 (defun nnweb-reference-search (search) | |
|
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
565 (url-insert-file-contents |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
566 (concat |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
567 (nnweb-definition 'address) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
568 "?" |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
569 (nnweb-encode-www-form-urlencoded |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
570 `(("search" . "advanced") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
571 ("querytext" . ,search) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
572 ("subj" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
573 ("name" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
574 ("login" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
575 ("host" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
576 ("organization" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
577 ("groups" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
578 ("keywords" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
579 ("choice" . "Search") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
580 ("startmonth" . "Jul") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
581 ("startday" . "25") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
582 ("startyear" . "1996") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
583 ("endmonth" . "Aug") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
584 ("endday" . "24") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
585 ("endyear" . "1996") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
586 ("mode" . "Quick") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
587 ("verbosity" . "Verbose") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
588 ("ranking" . "Relevance") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
589 ("first" . "1") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
590 ("last" . "25") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
591 ("score" . "50"))))) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
592 (setq buffer-file-name nil) |
| 17493 | 593 t) |
| 594 | |
| 595 ;;; | |
| 596 ;;; Alta Vista | |
| 597 ;;; | |
| 598 | |
| 599 (defun nnweb-altavista-create-mapping () | |
| 600 "Perform the search and create an number-to-url alist." | |
| 601 (save-excursion | |
| 602 (set-buffer nnweb-buffer) | |
| 603 (erase-buffer) | |
| 604 (let ((part 0)) | |
| 605 (when (funcall (nnweb-definition 'search) nnweb-search part) | |
| 606 (let ((i 0) | |
| 607 (more t) | |
| 608 (case-fold-search t) | |
| 609 (active (or (cadr (assoc nnweb-group nnweb-group-alist)) | |
| 610 (cons 1 0))) | |
| 611 subject date from id group | |
| 612 map url) | |
| 613 (while more | |
| 614 ;; Go through all the article hits on this page. | |
| 615 (goto-char (point-min)) | |
| 616 (search-forward "<dt>" nil t) | |
| 617 (delete-region (point-min) (match-beginning 0)) | |
| 618 (goto-char (point-min)) | |
| 619 (while (search-forward "<dt>" nil t) | |
| 620 (replace-match "\n<blubb>")) | |
| 621 (nnweb-decode-entities) | |
| 622 (goto-char (point-min)) | |
| 623 (while (re-search-forward "<blubb>.*href=\"\\([^\"]+\\)\"><strong>\\([^>]*\\)</strong></a><dd>\\([^-]+\\)- <b>\\([^<]+\\)<.*href=\"news:\\([^\"]+\\)\">.*\">\\(.+\\)</a><P>" | |
| 624 nil t) | |
| 625 (setq url (match-string 1) | |
| 626 subject (match-string 2) | |
| 627 date (match-string 3) | |
| 628 group (match-string 4) | |
| 629 id (concat "<" (match-string 5) ">") | |
| 630 from (match-string 6)) | |
| 631 (incf i) | |
| 632 (unless (nnweb-get-hashtb url) | |
| 633 (push | |
| 634 (list | |
| 635 (incf (cdr active)) | |
| 636 (make-full-mail-header | |
| 637 (cdr active) (concat "(" group ") " subject) from date | |
| 638 id nil 0 0 url)) | |
| 639 map) | |
| 640 (nnweb-set-hashtb (cadar map) (car map)))) | |
| 641 ;; See if we want more. | |
| 642 (when (or (not nnweb-articles) | |
| 643 (>= i nnweb-max-hits) | |
| 644 (not (funcall (nnweb-definition 'search) | |
| 645 nnweb-search (incf part)))) | |
| 646 (setq more nil))) | |
| 647 ;; Return the articles in the right order. | |
| 648 (setq nnweb-articles | |
|
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
23584
diff
changeset
|
649 (sort (nconc nnweb-articles map) 'car-less-than-car))))))) |
| 17493 | 650 |
| 651 (defun nnweb-altavista-wash-article () | |
| 652 (goto-char (point-min)) | |
| 653 (let ((case-fold-search t)) | |
| 654 (when (re-search-forward "^<strong>" nil t) | |
| 655 (delete-region (point-min) (match-beginning 0))) | |
| 656 (goto-char (point-min)) | |
| 657 (while (looking-at "<strong>\\([^ ]+\\) +</strong> +\\(.*\\)$") | |
| 658 (replace-match "\\1: \\2" t) | |
| 659 (forward-line 1)) | |
| 660 (when (re-search-backward "^References:" nil t) | |
| 661 (narrow-to-region (point) (progn (forward-line 1) (point))) | |
| 662 (goto-char (point-min)) | |
| 663 (while (re-search-forward "<A.*\\?id@\\([^\"]+\\)\">[0-9]+</A>" nil t) | |
| 664 (replace-match "<\\1> " t))) | |
| 665 (widen) | |
| 666 (nnweb-remove-markup))) | |
| 667 | |
| 668 (defun nnweb-altavista-search (search &optional part) | |
|
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
669 (url-insert-file-contents |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
670 (concat |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
671 (nnweb-definition 'address) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
672 "?" |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
673 (nnweb-encode-www-form-urlencoded |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
674 `(("pg" . "aq") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
675 ("what" . "news") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
676 ,@(when part `(("stq" . ,(int-to-string (* part 30))))) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
677 ("fmt" . "d") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
678 ("q" . ,search) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
679 ("r" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
680 ("d0" . "") |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
681 ("d1" . ""))))) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
682 (setq buffer-file-name nil) |
|
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19521
diff
changeset
|
683 t) |
| 17493 | 684 |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
685 ;;; |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
686 ;;; General web/w3 interface utility functions |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
687 ;;; |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
688 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
689 (defun nnweb-insert-html (parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
690 "Insert HTML based on a w3 parse tree." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
691 (if (stringp parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
692 (insert parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
693 (insert "<" (symbol-name (car parse)) " ") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
694 (insert (mapconcat |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
695 (lambda (param) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
696 (concat (symbol-name (car param)) "=" |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
697 (prin1-to-string |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
698 (if (consp (cdr param)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
699 (cadr param) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
700 (cdr param))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
701 (nth 1 parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
702 " ")) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
703 (insert ">\n") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
704 (mapcar 'nnweb-insert-html (nth 2 parse)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
705 (insert "</" (symbol-name (car parse)) ">\n"))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
706 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
707 (defun nnweb-encode-www-form-urlencoded (pairs) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
708 "Return PAIRS encoded for forms." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
709 (mapconcat |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
710 (function |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
711 (lambda (data) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
712 (concat (w3-form-encode-xwfu (car data)) "=" |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
713 (w3-form-encode-xwfu (cdr data))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
714 pairs "&")) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
715 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
716 (defun nnweb-fetch-form (url pairs) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
717 "Fetch a form from URL with PAIRS as the data using the POST method." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
718 (let ((url-request-data (nnweb-encode-www-form-urlencoded pairs)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
719 (url-request-method "POST") |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
720 (url-request-extra-headers |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
721 '(("Content-type" . "application/x-www-form-urlencoded")))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
722 (url-insert-file-contents url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
723 (setq buffer-file-name nil)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
724 t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
725 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
726 (defun nnweb-decode-entities () |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
727 "Decode all HTML entities." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
728 (goto-char (point-min)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
729 (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) |
|
33322
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
730 (let ((elem (if (eq (aref (match-string 1) 0) ?\#) |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
731 (let ((c |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
732 (string-to-number (substring |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
733 (match-string 1) 1)))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
734 (if (mm-char-or-char-int-p c) c 32)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
735 (or (cdr (assq (intern (match-string 1)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
736 w3-html-entities)) |
|
33322
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
737 ?#)))) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
738 (unless (stringp elem) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
739 (setq elem (char-to-string elem))) |
|
db55e81c9ccf
2000-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
Dave Love <fx@gnu.org>
parents:
31716
diff
changeset
|
740 (replace-match elem t t)))) |
|
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
741 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
742 (defun nnweb-decode-entities-string (str) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
743 (with-temp-buffer |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
744 (insert str) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
745 (nnweb-decode-entities) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
746 (buffer-substring (point-min) (point-max)))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
747 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
748 (defun nnweb-remove-markup () |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
749 "Remove all HTML markup, leaving just plain text." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
750 (goto-char (point-min)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
751 (while (search-forward "<!--" nil t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
752 (delete-region (match-beginning 0) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
753 (or (search-forward "-->" nil t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
754 (point-max)))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
755 (goto-char (point-min)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
756 (while (re-search-forward "<[^>]+>" nil t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
757 (replace-match "" t t))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
758 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
759 (defun nnweb-insert (url &optional follow-refresh) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
760 "Insert the contents from an URL in the current buffer. |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
761 If FOLLOW-REFRESH is non-nil, redirect refresh url in META." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
762 (let ((name buffer-file-name)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
763 (if follow-refresh |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
764 (save-restriction |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
765 (narrow-to-region (point) (point)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
766 (url-insert-file-contents url) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
767 (goto-char (point-min)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
768 (when (re-search-forward |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
769 "<meta[ \t\r\n]*http-equiv=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" nil t) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
770 (let ((url (match-string 1))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
771 (delete-region (point-min) (point-max)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
772 (nnweb-insert url t)))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
773 (url-insert-file-contents url)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
774 (setq buffer-file-name name))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
775 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
776 (defun nnweb-parse-find (type parse &optional maxdepth) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
777 "Find the element of TYPE in PARSE." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
778 (catch 'found |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
779 (nnweb-parse-find-1 type parse maxdepth))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
780 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
781 (defun nnweb-parse-find-1 (type contents maxdepth) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
782 (when (or (null maxdepth) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
783 (not (zerop maxdepth))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
784 (when (consp contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
785 (when (eq (car contents) type) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
786 (throw 'found contents)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
787 (when (listp (cdr contents)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
788 (dolist (element contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
789 (when (consp element) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
790 (nnweb-parse-find-1 type element |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
791 (and maxdepth (1- maxdepth))))))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
792 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
793 (defun nnweb-parse-find-all (type parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
794 "Find all elements of TYPE in PARSE." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
795 (catch 'found |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
796 (nnweb-parse-find-all-1 type parse))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
797 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
798 (defun nnweb-parse-find-all-1 (type contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
799 (let (result) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
800 (when (consp contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
801 (if (eq (car contents) type) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
802 (push contents result) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
803 (when (listp (cdr contents)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
804 (dolist (element contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
805 (when (consp element) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
806 (setq result |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
807 (nconc result (nnweb-parse-find-all-1 type element)))))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
808 result)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
809 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
810 (defvar nnweb-text) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
811 (defun nnweb-text (parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
812 "Return a list of text contents in PARSE." |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
813 (let ((nnweb-text nil)) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
814 (nnweb-text-1 parse) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
815 (nreverse nnweb-text))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
816 |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
817 (defun nnweb-text-1 (contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
818 (dolist (element contents) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
819 (if (stringp element) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
820 (push element nnweb-text) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
821 (when (and (consp element) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
822 (listp (cdr element))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
823 (nnweb-text-1 element))))) |
|
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
824 |
| 17493 | 825 (provide 'nnweb) |
| 826 | |
| 827 ;;; nnweb.el ends here |
