root/trunk/lisp/gnus/deuglify.el
| Revision 4220, 16.9 kB (checked in by miyoshi, 9 months ago) |
|---|
| Line | |
|---|---|
| 1 | ;;; deuglify.el --- deuglify broken Outlook (Express) articles |
| 2 | |
| 3 | ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 |
| 4 | ;; Free Software Foundation, Inc. |
| 5 | |
| 6 | ;; Author: Raymond Scholz <rscholz@zonix.de> |
| 7 | ;; Thomas Steffen (unwrapping algorithm, |
| 8 | ;; based on an idea of Stefan Monnier) |
| 9 | ;; Keywords: mail, news |
| 10 | |
| 11 | ;; This file is part of GNU Emacs. |
| 12 | |
| 13 | ;; GNU Emacs is free software; you can redistribute it and/or modify |
| 14 | ;; it under the terms of the GNU General Public License as published by |
| 15 | ;; the Free Software Foundation; either version 3, or (at your option) |
| 16 | ;; any later version. |
| 17 | |
| 18 | ;; GNU Emacs is distributed in the hope that it will be useful, |
| 19 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 20 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 21 | ;; GNU General Public License for more details. |
| 22 | |
| 23 | ;; You should have received a copy of the GNU General Public License |
| 24 | ;; along with GNU Emacs; see the file COPYING. If not, write to the |
| 25 | ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 26 | ;; Boston, MA 02110-1301, USA. |
| 27 | |
| 28 | ;;; Commentary: |
| 29 | |
| 30 | ;; This file enables Gnus to repair broken citations produced by |
| 31 | ;; common user agents like MS Outlook (Express). It may repair |
| 32 | ;; articles of other user agents too. |
| 33 | ;; |
| 34 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 35 | |
| 36 | ;; |
| 37 | ;; Outlook sometimes wraps cited lines before sending a message as |
| 38 | ;; seen in this example: |
| 39 | ;; |
| 40 | ;; Example #1 |
| 41 | ;; ---------- |
| 42 | ;; |
| 43 | ;; John Doe wrote: |
| 44 | ;; |
| 45 | ;; > This sentence no verb. This sentence no verb. This sentence |
| 46 | ;; no |
| 47 | ;; > verb. This sentence no verb. This sentence no verb. This |
| 48 | ;; > sentence no verb. |
| 49 | ;; |
| 50 | ;; The function `gnus-article-outlook-unwrap-lines' tries to recognize those |
| 51 | ;; erroneously wrapped lines and will unwrap them. I.e. putting the |
| 52 | ;; wrapped parts ("no" in this example) back where they belong (at the |
| 53 | ;; end of the cited line above). |
| 54 | ;; |
| 55 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 56 | ;; |
| 57 | ;; Note that some people not only use broken user agents but also |
| 58 | ;; practice a bad citation style by omitting blank lines between the |
| 59 | ;; cited text and their own text. |
| 60 | ;: |
| 61 | ;; Example #2 |
| 62 | ;; ---------- |
| 63 | ;; |
| 64 | ;; John Doe wrote: |
| 65 | ;; |
| 66 | ;; > This sentence no verb. This sentence no verb. This sentence no |
| 67 | ;; You forgot in all your sentences. |
| 68 | ;; > verb. This sentence no verb. This sentence no verb. This |
| 69 | ;; > sentence no verb. |
| 70 | ;; |
| 71 | ;; Unwrapping "You forgot in all your sentences." would be invalid as |
| 72 | ;; this part wasn't intended to be cited text. |
| 73 | ;; `gnus-article-outlook-unwrap-lines' will only unwrap lines if the resulting |
| 74 | ;; citation line will be of a certain maximum length. You can control |
| 75 | ;; this by adjusting `gnus-outlook-deuglify-unwrap-max'. Also |
| 76 | ;; unwrapping will only be done if the line above the (possibly) |
| 77 | ;; wrapped line has a minimum length of `gnus-outlook-deuglify-unwrap-min'. |
| 78 | ;; |
| 79 | ;; Furthermore no unwrapping will be undertaken if the last character |
| 80 | ;; is one of the chars specified in |
| 81 | ;; `gnus-outlook-deuglify-unwrap-stop-chars'. Setting this to ".?!" |
| 82 | ;; inhibits unwrapping if the cited line ends with a full stop, |
| 83 | ;; question mark or exclamation mark. Note that this variable |
| 84 | ;; defaults to `nil', triggering a few false positives but generally |
| 85 | ;; giving you better results. |
| 86 | ;; |
| 87 | ;; Unwrapping works on every level of citation. Thus you will be able |
| 88 | ;; repair broken citations of broken user agents citing broken |
| 89 | ;; citations of broken user agents citing broken citations... |
| 90 | ;; |
| 91 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 92 | ;; |
| 93 | ;; Citations are commonly introduced with an attribution line |
| 94 | ;; indicating who wrote the cited text. Outlook adds superfluous |
| 95 | ;; information that can be found in the header of the message to this |
| 96 | ;; line and often wraps it. |
| 97 | ;; |
| 98 | ;; If that weren't enough, lots of people write their own text above |
| 99 | ;; the cited text and cite the complete original article below. |
| 100 | ;; |
| 101 | ;; Example #3 |
| 102 | ;; ---------- |
| 103 | ;; |
| 104 | ;; Hey, John. There's no in all your sentences! |
| 105 | ;; |
| 106 | ;; John Doe <john.doe@some.domain> wrote in message |
| 107 | ;; news:a87usw8$dklsssa$2@some.news.server... |
| 108 | ;; > This sentence no verb. This sentence no verb. This sentence |
| 109 | ;; no |
| 110 | ;; > verb. This sentence no verb. This sentence no verb. This |
| 111 | ;; > sentence no verb. |
| 112 | ;; > |
| 113 | ;; > Bye, John |
| 114 | ;; |
| 115 | ;; Repairing the attribution line will be done by function |
| 116 | ;; `gnus-article-outlook-repair-attribution which calls other function that |
| 117 | ;; try to recognize and repair broken attribution lines. See variable |
| 118 | ;; `gnus-outlook-deuglify-attrib-cut-regexp' for stuff that should be |
| 119 | ;; cut off from the beginning of an attribution line and variable |
| 120 | ;; `gnus-outlook-deuglify-attrib-verb-regexp' for the verbs that are |
| 121 | ;; required to be found in an attribution line. These function return |
| 122 | ;; the point where the repaired attribution line starts. |
| 123 | ;; |
| 124 | ;; Rearranging the article so that the cited text appears above the |
| 125 | ;; new text will be done by function |
| 126 | ;; `gnus-article-outlook-rearrange-citation'. This function calls |
| 127 | ;; `gnus-article-outlook-repair-attribution to find and repair an attribution |
| 128 | ;; line. |
| 129 | ;; |
| 130 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 131 | ;; |
| 132 | ;; Well, and that's what the message will look like after applying |
| 133 | ;; deuglification: |
| 134 | ;; |
| 135 | ;; Example #3 (deuglified) |
| 136 | ;; ----------------------- |
| 137 | ;; |
| 138 | ;; John Doe <john.doe@some.domain> wrote: |
| 139 | ;; |
| 140 | ;; > This sentence no verb. This sentence no verb. This sentence no |
| 141 | ;; > verb. This sentence no verb. This sentence no verb. This |
| 142 | ;; > sentence no verb. |
| 143 | ;; > |
| 144 | ;; > Bye, John |
| 145 | ;; |
| 146 | ;; Hey, John. There's no in all your sentences! |
| 147 | ;; |
| 148 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 149 | ;; |
| 150 | ;; Usage |
| 151 | ;; ----- |
| 152 | ;; |
| 153 | ;; Press `W k' in the Summary Buffer. |
| 154 | ;; |
| 155 | ;; Non recommended usage :-) |
| 156 | ;; --------------------- |
| 157 | ;; |
| 158 | ;; To automatically invoke deuglification on every article you read, |
| 159 | ;; put something like that in your .gnus: |
| 160 | ;; |
| 161 | ;; (add-hook 'gnus-article-decode-hook 'gnus-article-outlook-unwrap-lines) |
| 162 | ;; |
| 163 | ;; or _one_ of the following lines: |
| 164 | ;; |
| 165 | ;; ;; repair broken attribution lines |
| 166 | ;; (add-hook 'gnus-article-decode-hook 'gnus-article-outlook-repair-attribution) |
| 167 | ;; |
| 168 | ;; ;; repair broken attribution lines and citations |
| 169 | ;; (add-hook 'gnus-article-decode-hook 'gnus-article-outlook-rearrange-citation) |
| 170 | ;; |
| 171 | ;; Note that there always may be some false positives, so I suggest |
| 172 | ;; using the manual invocation. After deuglification you may want to |
| 173 | ;; refill the whole article using `W w'. |
| 174 | ;; |
| 175 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 176 | ;; |
| 177 | ;; Limitations |
| 178 | ;; ----------- |
| 179 | ;; |
| 180 | ;; As I said before there may (or will) be a few false positives on |
| 181 | ;; unwrapping cited lines with `gnus-article-outlook-unwrap-lines'. |
| 182 | ;; |
| 183 | ;; `gnus-article-outlook-repair-attribution will only fix the first |
| 184 | ;; attribution line found in the article. Furthermore it fixed to |
| 185 | ;; certain kinds of attributions. And there may be horribly many |
| 186 | ;; false positives, vanishing lines and so on -- so don't trust your |
| 187 | ;; eyes. Again I recommend manual invocation. |
| 188 | ;; |
| 189 | ;; `gnus-article-outlook-rearrange-citation' carries all the limitations of |
| 190 | ;; `gnus-article-outlook-repair-attribution. |
| 191 | ;; |
| 192 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 193 | ;; |
| 194 | ;; See ChangeLog for other changes. |
| 195 | ;; |
| 196 | ;; Revision 1.5 2002/01/27 14:39:17 rscholz |
| 197 | ;; * New variable `gnus-outlook-deuglify-no-wrap-chars' to inhibit |
| 198 | ;; unwrapping if one these chars is first in the possibly wrapped line. |
| 199 | ;; * Improved rearranging of the article. |
| 200 | ;; * New function `gnus-outlook-repair-attribution-block' for repairing |
| 201 | ;; those big "Original Message (following some headers)" attributions. |
| 202 | ;; |
| 203 | ;; Revision 1.4 2002/01/03 14:05:00 rscholz |
| 204 | ;; Renamed `gnus-outlook-deuglify-article' to |
| 205 | ;; `gnus-article-outlook-deuglify-article'. |
| 206 | ;; Made it easier to deuglify the article while being in Gnus' Article |
| 207 | ;; Edit Mode. (suggested by Phil Nitschke) |
| 208 | ;; |
| 209 | ;; |
| 210 | ;; Revision 1.3 2002/01/02 23:35:54 rscholz |
| 211 | ;; Fix a bug that caused succeeding long attribution lines to be |
| 212 | ;; unwrapped. Minor doc fixes and regular expression tuning. |
| 213 | ;; |
| 214 | ;; Revision 1.2 2001/12/30 20:14:34 rscholz |
| 215 | ;; Clean up source. |
| 216 | ;; |
| 217 | ;; Revision 1.1 2001/12/30 20:13:32 rscholz |
| 218 | ;; Initial revision |
| 219 | ;; |
| 220 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 221 | |
| 222 | ;;; Code: |
| 223 | |
| 224 | (require 'gnus-art) |
| 225 | (require 'gnus-sum) |
| 226 | |
| 227 | (defconst gnus-outlook-deuglify-version "1.5 Gnus version" |
| 228 | "Version of gnus-outlook-deuglify.") |
| 229 | |
| 230 | ;;; User Customizable Variables: |
| 231 | |
| 232 | (defgroup gnus-outlook-deuglify nil |
| 233 | "Deuglify articles generated by broken user agents like MS Outlook (Express)." |
| 234 | :version "22.1" |
| 235 | :group 'gnus) |
| 236 | |
| 237 | (defcustom gnus-outlook-deuglify-unwrap-min 45 |
| 238 | "Minimum length of the cited line above the (possibly) wrapped line." |
| 239 | :version "22.1" |
| 240 | :type 'integer |
| 241 | :group 'gnus-outlook-deuglify) |
| 242 | |
| 243 | (defcustom gnus-outlook-deuglify-unwrap-max 95 |
| 244 | "Maximum length of the cited line after unwrapping." |
| 245 | :version "22.1" |
| 246 | :type 'integer |
| 247 | :group 'gnus-outlook-deuglify) |
| 248 | |
| 249 | (defcustom gnus-outlook-deuglify-cite-marks ">|#%" |
| 250 | "Characters that indicate cited lines." |
| 251 | :version "22.1" |
| 252 | :type 'string |
| 253 | :group 'gnus-outlook-deuglify) |
| 254 | |
| 255 | (defcustom gnus-outlook-deuglify-unwrap-stop-chars nil ;; ".?!" or nil |
| 256 | "Characters that inhibit unwrapping if they are the last one on the cited line above the possible wrapped line." |
| 257 | :version "22.1" |
| 258 | :type '(radio (const :format "None " nil) |
| 259 | (string :value ".?!")) |
| 260 | :group 'gnus-outlook-deuglify) |
| 261 | |
| 262 | (defcustom gnus-outlook-deuglify-no-wrap-chars "`" |
| 263 | "Characters that inhibit unwrapping if they are the first one in the possibly wrapped line." |
| 264 | :version "22.1" |
| 265 | :type 'string |
| 266 | :group 'gnus-outlook-deuglify) |
| 267 | |
| 268 | (defcustom gnus-outlook-deuglify-attrib-cut-regexp |
| 269 | "\\(On \\|Am \\)?\\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\),[^,]+, " |
| 270 | "Regular expression matching the beginning of an attribution line that should be cut off." |
| 271 | :version "22.1" |
| 272 | :type 'string |
| 273 | :group 'gnus-outlook-deuglify) |
| 274 | |
| 275 | (defcustom gnus-outlook-deuglify-attrib-verb-regexp |
| 276 | "wrote\\|writes\\|says\\|schrieb\\|schreibt\\|meinte\\|skrev\\|a écrit\\|schreef\\|escribió" |
| 277 | "Regular expression matching the verb used in an attribution line." |
| 278 | :version "22.1" |
| 279 | :type 'string |
| 280 | :group 'gnus-outlook-deuglify) |
| 281 | |
| 282 | (defcustom gnus-outlook-deuglify-attrib-end-regexp |
| 283 | ": *\\|\\.\\.\\." |
| 284 | "Regular expression matching the end of an attribution line." |
| 285 | :version "22.1" |
| 286 | :type 'string |
| 287 | :group 'gnus-outlook-deuglify) |
| 288 | |
| 289 | (defcustom gnus-outlook-display-hook nil |
| 290 | "A hook called after an deuglified article has been prepared. |
| 291 | It is run after `gnus-article-prepare-hook'." |
| 292 | :version "22.1" |
| 293 | :type 'hook |
| 294 | :group 'gnus-outlook-deuglify) |
| 295 | |
| 296 | ;; Functions |
| 297 | |
| 298 | (defun gnus-outlook-display-article-buffer () |
| 299 | "Redisplay current buffer or article buffer." |
| 300 | (with-current-buffer (or gnus-article-buffer (current-buffer)) |
| 301 | ;; "Emulate" `gnus-article-prepare-display' without calling |
| 302 | ;; it. Calling `gnus-article-prepare-display' on an already |
| 303 | ;; prepared article removes all MIME parts. I'm unsure whether |
| 304 | ;; this is a bug or not. |
| 305 | (gnus-article-highlight t) |
| 306 | (gnus-treat-article nil) |
| 307 | (gnus-run-hooks 'gnus-article-prepare-hook |
| 308 | 'gnus-outlook-display-hook))) |
| 309 | |
| 310 | ;;;###autoload |
| 311 | (defun gnus-article-outlook-unwrap-lines (&optional nodisplay) |
| 312 | "Unwrap lines that appear to be wrapped citation lines. |
| 313 | You can control what lines will be unwrapped by frobbing |
| 314 | `gnus-outlook-deuglify-unwrap-min' and `gnus-outlook-deuglify-unwrap-max', |
| 315 | indicating the minimum and maximum length of an unwrapped citation line. If |
| 316 | NODISPLAY is non-nil, don't redisplay the article buffer." |
| 317 | (interactive "P") |
| 318 | (save-excursion |
| 319 | (let ((case-fold-search nil) |
| 320 | (inhibit-read-only t) |
| 321 | (cite-marks gnus-outlook-deuglify-cite-marks) |
| 322 | (no-wrap gnus-outlook-deuglify-no-wrap-chars) |
| 323 | (stop-chars gnus-outlook-deuglify-unwrap-stop-chars)) |
| 324 | (gnus-with-article-buffer |
| 325 | (article-goto-body) |
| 326 | (while (re-search-forward |
| 327 | (concat |
| 328 | "^\\([ \t" cite-marks "]*\\)" |
| 329 | "\\([" cite-marks "].*[^\n " stop-chars "]\\)[ \t]?\n" |
| 330 | "\\1\\([^\n " cite-marks no-wrap "]+.*\\)$") |
| 331 | nil t) |
| 332 | (let ((len12 (- (match-end 2) (match-beginning 1))) |
| 333 | (len3 (- (match-end 3) (match-beginning 3)))) |
| 334 | (if (and (> len12 gnus-outlook-deuglify-unwrap-min) |
| 335 | (< (+ len12 len3) gnus-outlook-deuglify-unwrap-max)) |
| 336 | (progn |
| 337 | (replace-match "\\1\\2 \\3") |
| 338 | (goto-char (match-beginning 0))))))))) |
| 339 | (unless nodisplay (gnus-outlook-display-article-buffer))) |
| 340 | |
| 341 | (defun gnus-outlook-rearrange-article (attr-start) |
| 342 | "Put the text from ATTR-START to the end of buffer at the top of the article buffer." |
| 343 | (save-excursion |
| 344 | (let ((inhibit-read-only t) |
| 345 | (cite-marks gnus-outlook-deuglify-cite-marks)) |
| 346 | (gnus-with-article-buffer |
| 347 | (article-goto-body) |
| 348 | ;; article does not start with attribution |
| 349 | (unless (= (point) attr-start) |
| 350 | (gnus-kill-all-overlays) |
| 351 | (let ((cur (point)) |
| 352 | ;; before signature or end of buffer |
| 353 | (to (if (gnus-article-search-signature) |
| 354 | (point) |
| 355 | (point-max)))) |
| 356 | ;; handle the case where the full quote is below the |
| 357 | ;; signature |
| 358 | (if (< to attr-start) |
| 359 | (setq to (point-max))) |
| 360 | (transpose-regions cur attr-start attr-start to))))))) |
| 361 | |
| 362 | ;; John Doe <john.doe@some.domain> wrote in message |
| 363 | ;; news:a87usw8$dklsssa$2@some.news.server... |
| 364 | |
| 365 | (defun gnus-outlook-repair-attribution-outlook () |
| 366 | "Repair a broken attribution line (Outlook)." |
| 367 | (save-excursion |
| 368 | (let ((case-fold-search nil) |
| 369 | (inhibit-read-only t) |
| 370 | (cite-marks gnus-outlook-deuglify-cite-marks)) |
| 371 | (gnus-with-article-buffer |
| 372 | (article-goto-body) |
| 373 | (if (re-search-forward |
| 374 | (concat "^\\([^" cite-marks "].+\\)" |
| 375 | "\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\)" |
| 376 | "\\(.*\n?[^\n" cite-marks "].*\\)?" |
| 377 | "\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$") |
| 378 | nil t) |
| 379 | (progn |
| 380 | (gnus-kill-all-overlays) |
| 381 | (replace-match "\\1\\2\\4") |
| 382 | (match-beginning 0))))))) |
| 383 | |
| 384 | |
| 385 | ;; ----- Original Message ----- |
| 386 | ;; From: "John Doe" <john.doe@some.domain> |
| 387 | ;; To: "Doe Foundation" <info@doefnd.org> |
| 388 | ;; Sent: Monday, November 19, 2001 12:13 PM |
| 389 | ;; Subject: More Doenuts |
| 390 | |
| 391 | (defun gnus-outlook-repair-attribution-block () |
| 392 | "Repair a big broken attribution block." |
| 393 | (save-excursion |
| 394 | (let ((case-fold-search nil) |
| 395 | (inhibit-read-only t) |
| 396 | (cite-marks gnus-outlook-deuglify-cite-marks)) |
| 397 | (gnus-with-article-buffer |
| 398 | (article-goto-body) |
| 399 | (if (re-search-forward |
| 400 | (concat "^[" cite-marks " \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n" |
| 401 | "[^\n:]+:[ \t]*\\([^\n]+\\)\n" |
| 402 | "\\([^\n:]+:[ \t]*[^\n]+\n\\)+") |
| 403 | nil t) |
| 404 | (progn |
| 405 | (gnus-kill-all-overlays) |
| 406 | (replace-match "\\1 wrote:\n") |
| 407 | (match-beginning 0))))))) |
| 408 | |
| 409 | ;; On Wed, 16 Jan 2002 23:23:30 +0100, John Doe <john.doe@some.domain> wrote: |
| 410 | |
| 411 | (defun gnus-outlook-repair-attribution-other () |
| 412 | "Repair a broken attribution line (other user agents than Outlook)." |
| 413 | (save-excursion |
| 414 | (let ((case-fold-search nil) |
| 415 | (inhibit-read-only t) |
| 416 | (cite-marks gnus-outlook-deuglify-cite-marks)) |
| 417 | (gnus-with-article-buffer |
| 418 | (article-goto-body) |
| 419 | (if (re-search-forward |
| 420 | (concat "^\\("gnus-outlook-deuglify-attrib-cut-regexp"\\)?" |
| 421 | "\\([^" cite-marks "].+\\)\n\\([^\n" cite-marks "].*\\)?" |
| 422 | "\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\).*" |
| 423 | "\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$") |
| 424 | nil t) |
| 425 | (progn |
| 426 | (gnus-kill-all-overlays) |
| 427 | (replace-match "\\4 \\5\\6\\7") |
| 428 | (match-beginning 0))))))) |
| 429 | |
| 430 | ;;;###autoload |
| 431 | (defun gnus-article-outlook-repair-attribution (&optional nodisplay) |
| 432 | "Repair a broken attribution line. |
| 433 | If NODISPLAY is non-nil, don't redisplay the article buffer." |
| 434 | (interactive "P") |
| 435 | (let ((attrib-start |
| 436 | (or |
| 437 | (gnus-outlook-repair-attribution-other) |
| 438 | (gnus-outlook-repair-attribution-block) |
| 439 | (gnus-outlook-repair-attribution-outlook)))) |
| 440 | (unless nodisplay (gnus-outlook-display-article-buffer)) |
| 441 | attrib-start)) |
| 442 | |
| 443 | (defun gnus-article-outlook-rearrange-citation (&optional nodisplay) |
| 444 | "Repair broken citations. |
| 445 | If NODISPLAY is non-nil, don't redisplay the article buffer." |
| 446 | (interactive "P") |
| 447 | (let ((attrib-start (gnus-article-outlook-repair-attribution 'nodisplay))) |
| 448 | ;; rearrange citations if an attribution line has been recognized |
| 449 | (if attrib-start |
| 450 | (gnus-outlook-rearrange-article attrib-start))) |
| 451 | (unless nodisplay (gnus-outlook-display-article-buffer))) |
| 452 | |
| 453 | ;;;###autoload |
| 454 | (defun gnus-outlook-deuglify-article (&optional nodisplay) |
| 455 | "Full deuglify of broken Outlook (Express) articles. |
| 456 | Treat dumbquotes, unwrap lines, repair attribution and rearrange citation. If |
| 457 | NODISPLAY is non-nil, don't redisplay the article buffer." |
| 458 | (interactive "P") |
| 459 | ;; apply treatment of dumb quotes |
| 460 | (gnus-article-treat-dumbquotes) |
| 461 | ;; repair wrapped cited lines |
| 462 | (gnus-article-outlook-unwrap-lines 'nodisplay) |
| 463 | ;; repair attribution line and rearrange citation. |
| 464 | (gnus-article-outlook-rearrange-citation 'nodisplay) |
| 465 | (unless nodisplay (gnus-outlook-display-article-buffer))) |
| 466 | |
| 467 | ;;;###autoload |
| 468 | (defun gnus-article-outlook-deuglify-article () |
| 469 | "Deuglify broken Outlook (Express) articles and redisplay." |
| 470 | (interactive) |
| 471 | (gnus-outlook-deuglify-article nil)) |
| 472 | |
| 473 | (provide 'deuglify) |
| 474 | |
| 475 | ;; Local Variables: |
| 476 | ;; coding: iso-8859-1 |
| 477 | ;; End: |
| 478 | |
| 479 | ;;; arch-tag: 5f895cc9-51a9-487c-b42e-28844d79eb73 |
| 480 | ;;; deuglify.el ends here |
| 481 |
Note: See TracBrowser for help on using the browser.
