Mercurial > emacs
annotate lisp/gnus/shr.el @ 110774:276ecc27ad6b
Merge changes made in Gnus trunk.
sieve-manage.el (sieve-manage-default-stream): Make default stream customizable.
gnus-html.el (gnus-html-wash-tags): Decode URL entities to avoid broken links.
nnimap.el (nnimap-open-connection): Give an error if nnimap-stream is unknown.
shr.el (shr-tag-em): Add <EM> tag.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Tue, 05 Oct 2010 10:46:15 +0000 |
parents | 0333270eb3dc |
children | 895607aec71e |
rev | line source |
---|---|
110698
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
1 ;;; shr.el --- Simple HTML Renderer |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
2 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
3 ;; Copyright (C) 2010 Free Software Foundation, Inc. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
4 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
6 ;; Keywords: html |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
7 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
8 ;; This file is part of GNU Emacs. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
9 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
11 ;; it under the terms of the GNU General Public License as published by |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
12 ;; the Free Software Foundation, either version 3 of the License, or |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
13 ;; (at your option) any later version. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
14 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
15 ;; GNU Emacs is distributed in the hope that it will be useful, |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
18 ;; GNU General Public License for more details. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
19 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
20 ;; You should have received a copy of the GNU General Public License |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
22 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
23 ;;; Commentary: |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
24 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
25 ;; This package takes a HTML parse tree (as provided by |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
26 ;; libxml-parse-html-region) and renders it in the current buffer. It |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
27 ;; does not do CSS, JavaScript or anything advanced: It's geared |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
28 ;; towards rendering typical short snippets of HTML, like what you'd |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
29 ;; find in HTML email and the like. |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
30 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
31 ;;; Code: |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
32 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
33 (require 'browse-url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
34 |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
35 (defgroup shr nil |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
36 "Simple HTML Renderer" |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
37 :group 'mail) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
38 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
39 (defcustom shr-max-image-proportion 0.9 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
40 "How big pictures displayed are in relation to the window they're in. |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
41 A value of 0.7 means that they are allowed to take up 70% of the |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
42 width and height of the window. If they are larger than this, |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
43 and Emacs supports it, then the images will be rescaled down to |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
44 fit these criteria." |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
45 :version "24.1" |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
46 :group 'shr |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
47 :type 'float) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
48 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
49 (defcustom shr-blocked-images nil |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
50 "Images that have URLs matching this regexp will be blocked." |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
51 :version "24.1" |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
52 :group 'shr |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
53 :type 'regexp) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
54 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
55 (defvar shr-folding-mode nil) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
56 (defvar shr-state nil) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
57 (defvar shr-start nil) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
58 (defvar shr-indentation 0) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
59 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
60 (defvar shr-width 70) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
61 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
62 (defvar shr-map |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
63 (let ((map (make-sparse-keymap))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
64 (define-key map "a" 'shr-show-alt-text) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
65 (define-key map "i" 'shr-browse-image) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
66 (define-key map "I" 'shr-insert-image) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
67 (define-key map "u" 'shr-copy-url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
68 (define-key map "v" 'shr-browse-url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
69 (define-key map "\r" 'shr-browse-url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
70 map)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
71 |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
72 (defun shr-transform-dom (dom) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
73 (let ((result (list (pop dom)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
74 (dolist (arg (pop dom)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
75 (push (cons (intern (concat ":" (symbol-name (car arg))) obarray) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
76 (cdr arg)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
77 result)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
78 (dolist (sub dom) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
79 (if (stringp sub) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
80 (push (cons :text sub) result) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
81 (push (shr-transform-dom sub) result))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
82 (nreverse result))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
83 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
84 ;;;###autoload |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
85 (defun shr-insert-document (dom) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
86 (let ((shr-state nil) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
87 (shr-start nil)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
88 (shr-descend (shr-transform-dom dom)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
89 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
90 (defun shr-descend (dom) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
91 (let ((function (intern (concat "shr-tag-" (symbol-name (car dom))) obarray))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
92 (if (fboundp function) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
93 (funcall function (cdr dom)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
94 (shr-generic (cdr dom))))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
95 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
96 (defun shr-generic (cont) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
97 (dolist (sub cont) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
98 (cond |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
99 ((eq (car sub) :text) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
100 (shr-insert (cdr sub))) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
101 ((listp (cdr sub)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
102 (shr-descend sub))))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
103 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
104 (defun shr-tag-p (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
105 (shr-ensure-paragraph) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
106 (shr-generic cont) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
107 (shr-ensure-paragraph)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
108 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
109 (defun shr-ensure-paragraph () |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
110 (unless (bobp) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
111 (if (bolp) |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
112 (unless (save-excursion |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
113 (forward-line -1) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
114 (looking-at " *$")) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
115 (insert "\n")) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
116 (if (save-excursion |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
117 (beginning-of-line) |
110755
5c603f558199
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110754
diff
changeset
|
118 (looking-at " *$")) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
119 (insert "\n") |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
120 (insert "\n\n"))))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
121 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
122 (defun shr-tag-b (cont) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
123 (shr-fontize-cont cont 'bold)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
124 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
125 (defun shr-tag-i (cont) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
126 (shr-fontize-cont cont 'italic)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
127 |
110774
276ecc27ad6b
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110765
diff
changeset
|
128 (defun shr-tag-em (cont) |
276ecc27ad6b
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110765
diff
changeset
|
129 (shr-fontize-cont cont 'bold)) |
276ecc27ad6b
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110765
diff
changeset
|
130 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
131 (defun shr-tag-u (cont) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
132 (shr-fontize-cont cont 'underline)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
133 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
134 (defun shr-tag-s (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
135 (shr-fontize-cont cont 'strike-through)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
136 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
137 (defun shr-fontize-cont (cont &rest types) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
138 (let (shr-start) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
139 (shr-generic cont) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
140 (dolist (type types) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
141 (shr-add-font (or shr-start (point)) (point) type)))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
142 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
143 (defun shr-add-font (start end type) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
144 (let ((overlay (make-overlay start end))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
145 (overlay-put overlay 'face type))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
146 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
147 (defun shr-tag-a (cont) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
148 (let ((url (cdr (assq :href cont))) |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
149 (start (point)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
150 shr-start) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
151 (shr-generic cont) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
152 (widget-convert-button |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
153 'link (or shr-start start) (point) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
154 :help-echo url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
155 (put-text-property (or shr-start start) (point) 'keymap shr-map) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
156 (put-text-property (or shr-start start) (point) 'shr-url url))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
157 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
158 (defun shr-browse-url () |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
159 "Browse the URL under point." |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
160 (interactive) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
161 (let ((url (get-text-property (point) 'shr-url))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
162 (if (not url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
163 (message "No link under point") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
164 (browse-url url)))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
165 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
166 (defun shr-copy-url () |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
167 "Copy the URL under point to the kill ring. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
168 If called twice, then try to fetch the URL and see whether it |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
169 redirects somewhere else." |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
170 (interactive) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
171 (let ((url (get-text-property (point) 'shr-url))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
172 (cond |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
173 ((not url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
174 (message "No URL under point")) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
175 ;; Resolve redirected URLs. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
176 ((equal url (car kill-ring)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
177 (url-retrieve |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
178 url |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
179 (lambda (a) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
180 (when (and (consp a) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
181 (eq (car a) :redirect)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
182 (with-temp-buffer |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
183 (insert (cadr a)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
184 (goto-char (point-min)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
185 ;; Remove common tracking junk from the URL. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
186 (when (re-search-forward ".utm_.*" nil t) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
187 (replace-match "" t t)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
188 (message "Copied %s" (buffer-string)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
189 (copy-region-as-kill (point-min) (point-max))))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
190 ;; Copy the URL to the kill ring. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
191 (t |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
192 (with-temp-buffer |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
193 (insert url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
194 (copy-region-as-kill (point-min) (point-max)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
195 (message "Copied %s" url)))))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
196 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
197 (defun shr-tag-img (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
198 (when (and (> (current-column) 0) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
199 (not (eq shr-state 'image))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
200 (insert "\n")) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
201 (let ((start (point-marker))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
202 (let ((alt (cdr (assq :alt cont))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
203 (url (cdr (assq :src cont)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
204 (when (zerop (length alt)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
205 (setq alt "[img]")) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
206 (cond |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
207 ((and shr-blocked-images |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
208 (string-match shr-blocked-images url)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
209 (insert alt)) |
110765
0333270eb3dc
shr.el: Revert last change.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110764
diff
changeset
|
210 ((url-is-cached (browse-url-url-encode-chars url "[&)$ ]")) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
211 (shr-put-image (shr-get-image-data url) (point) alt)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
212 (t |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
213 (insert alt) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
214 (url-retrieve url 'shr-image-fetched |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
215 (list (current-buffer) start (point-marker)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
216 t))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
217 (insert " ") |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
218 (put-text-property start (point) 'keymap shr-map) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
219 (put-text-property start (point) 'shr-alt alt) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
220 (put-text-property start (point) 'shr-image url) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
221 (setq shr-state 'image)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
222 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
223 (defun shr-show-alt-text () |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
224 "Show the ALT text of the image under point." |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
225 (interactive) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
226 (let ((text (get-text-property (point) 'shr-alt))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
227 (if (not text) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
228 (message "No image under point") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
229 (message "%s" text)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
230 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
231 (defun shr-browse-image () |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
232 "Browse the image under point." |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
233 (interactive) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
234 (let ((url (get-text-property (point) 'shr-image))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
235 (if (not url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
236 (message "No image under point") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
237 (message "Browsing %s..." url) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
238 (browse-url url)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
239 |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
240 (defun shr-image-fetched (status buffer start end) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
241 (when (and (buffer-name buffer) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
242 (not (plist-get status :error))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
243 (url-store-in-cache (current-buffer)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
244 (when (or (search-forward "\n\n" nil t) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
245 (search-forward "\r\n\r\n" nil t)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
246 (let ((data (buffer-substring (point) (point-max)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
247 (with-current-buffer buffer |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
248 (let ((alt (buffer-substring start end)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
249 (inhibit-read-only t)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
250 (delete-region start end) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
251 (shr-put-image data start alt)))))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
252 (kill-buffer (current-buffer))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
253 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
254 (defun shr-put-image (data point alt) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
255 (if (not (display-graphic-p)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
256 (insert alt) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
257 (let ((image (ignore-errors |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
258 (shr-rescale-image data)))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
259 (when image |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
260 (put-image image point alt))))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
261 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
262 (defun shr-rescale-image (data) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
263 (if (or (not (fboundp 'imagemagick-types)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
264 (not (get-buffer-window (current-buffer)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
265 (create-image data nil t) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
266 (let* ((image (create-image data nil t)) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
267 (size (image-size image t)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
268 (width (car size)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
269 (height (cdr size)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
270 (edges (window-inside-pixel-edges |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
271 (get-buffer-window (current-buffer)))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
272 (window-width (truncate (* shr-max-image-proportion |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
273 (- (nth 2 edges) (nth 0 edges))))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
274 (window-height (truncate (* shr-max-image-proportion |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
275 (- (nth 3 edges) (nth 1 edges))))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
276 scaled-image) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
277 (when (> height window-height) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
278 (setq image (or (create-image data 'imagemagick t |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
279 :height window-height) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
280 image)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
281 (setq size (image-size image t))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
282 (when (> (car size) window-width) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
283 (setq image (or |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
284 (create-image data 'imagemagick t |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
285 :width window-width) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
286 image))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
287 image))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
288 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
289 (defun shr-tag-pre (cont) |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
290 (let ((shr-folding-mode 'none)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
291 (shr-ensure-newline) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
292 (shr-generic cont) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
293 (shr-ensure-newline))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
294 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
295 (defun shr-tag-blockquote (cont) |
110757
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
296 (shr-ensure-paragraph) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
297 (let ((shr-indentation (+ shr-indentation 4))) |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
298 (shr-generic cont)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
299 (shr-ensure-paragraph)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
300 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
301 (defun shr-ensure-newline () |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
302 (unless (zerop (current-column)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
303 (insert "\n"))) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
304 |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
305 (defun shr-insert (text) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
306 (when (eq shr-state 'image) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
307 (insert "\n") |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
308 (setq shr-state nil)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
309 (cond |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
310 ((eq shr-folding-mode 'none) |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
311 (insert text)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
312 (t |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
313 (let ((first t) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
314 column) |
110754
fa69a70cd62e
shr.el (shr-insert): Use string anchors instead of line anchors.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110747
diff
changeset
|
315 (when (and (string-match "\\`[ \t\n]" text) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
316 (not (bolp))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
317 (insert " ")) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
318 (dolist (elem (split-string text)) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
319 (setq column (current-column)) |
110740
ed9ff0bf7851
Avoid using plusp; cl may not be loaded.
Chong Yidong <cyd@stupidchicken.com>
parents:
110708
diff
changeset
|
320 (when (> column 0) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
321 (cond |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
322 ((and (or (not first) |
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
323 (eq shr-state 'space)) |
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
324 (> (+ column (length elem) 1) shr-width)) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
325 (insert "\n")) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
326 ((not first) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
327 (insert " ")))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
328 (setq first nil) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
329 (when (and (bolp) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
330 (> shr-indentation 0)) |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
331 (shr-indent)) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
332 ;; The shr-start is a special variable that is used to pass |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
333 ;; upwards the first point in the buffer where the text really |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
334 ;; starts. |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
335 (unless shr-start |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
336 (setq shr-start (point))) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
337 (insert elem)) |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
338 (setq shr-state nil) |
110754
fa69a70cd62e
shr.el (shr-insert): Use string anchors instead of line anchors.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110747
diff
changeset
|
339 (when (and (string-match "[ \t\n]\\'" text) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
340 (not (bolp))) |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
341 (insert " ") |
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
342 (setq shr-state 'space)))))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
343 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
344 (defun shr-indent () |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
345 (insert (make-string shr-indentation ? ))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
346 |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
347 (defun shr-get-image-data (url) |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
348 "Get image data for URL. |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
349 Return a string with image data." |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
350 (with-temp-buffer |
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
351 (mm-disable-multibyte) |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
352 (when (ignore-errors |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
353 (url-cache-extract (url-cache-create-filename url)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
354 t) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
355 (when (or (search-forward "\n\n" nil t) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
356 (search-forward "\r\n\r\n" nil t)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
357 (buffer-substring (point) (point-max)))))) |
110708
4c31586ca1ca
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110704
diff
changeset
|
358 |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
359 (defvar shr-list-mode nil) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
360 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
361 (defun shr-tag-ul (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
362 (shr-ensure-paragraph) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
363 (let ((shr-list-mode 'ul)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
364 (shr-generic cont))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
365 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
366 (defun shr-tag-ol (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
367 (let ((shr-list-mode 1)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
368 (shr-generic cont))) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
369 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
370 (defun shr-tag-li (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
371 (shr-ensure-newline) |
110757
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
372 (let* ((bullet |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
373 (if (numberp shr-list-mode) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
374 (prog1 |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
375 (format "%d " shr-list-mode) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
376 (setq shr-list-mode (1+ shr-list-mode))) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
377 "* ")) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
378 (shr-indentation (+ shr-indentation (length bullet)))) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
379 (insert bullet) |
d3001fd75795
shr.el (shr-tag-li): Get <li> indentation right.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110756
diff
changeset
|
380 (shr-generic cont))) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
381 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
382 (defun shr-tag-br (cont) |
110756
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
383 (unless (bobp) |
9070b77b4a28
shr.el (shr-insert): Tweak line breaking.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110755
diff
changeset
|
384 (insert "\n")) |
110747
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
385 (shr-generic cont)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
386 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
387 (defun shr-tag-h1 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
388 (shr-heading cont 'bold 'underline)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
389 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
390 (defun shr-tag-h2 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
391 (shr-heading cont 'bold)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
392 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
393 (defun shr-tag-h3 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
394 (shr-heading cont 'italic)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
395 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
396 (defun shr-tag-h4 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
397 (shr-heading cont)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
398 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
399 (defun shr-tag-h5 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
400 (shr-heading cont)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
401 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
402 (defun shr-tag-h6 (cont) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
403 (shr-heading cont)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
404 |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
405 (defun shr-heading (cont &rest types) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
406 (shr-ensure-paragraph) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
407 (apply #'shr-fontize-cont cont types) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
408 (shr-ensure-paragraph)) |
0defef1647a5
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110740
diff
changeset
|
409 |
110763
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
410 (defun shr-tag-table (cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
411 (shr-ensure-paragraph) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
412 (setq cont (or (cdr (assq 'tbody cont)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
413 cont)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
414 (let* ((columns (shr-column-specs cont)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
415 (suggested-widths (shr-pro-rate-columns columns)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
416 (sketch (shr-make-table cont suggested-widths)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
417 (sketch-widths (shr-table-widths sketch (length suggested-widths)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
418 (shr-insert-table (shr-make-table cont sketch-widths t) sketch-widths))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
419 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
420 (defun shr-insert-table (table widths) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
421 (shr-insert-table-ruler widths) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
422 (dolist (row table) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
423 (let ((start (point)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
424 (height (let ((max 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
425 (dolist (column row) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
426 (setq max (max max (cadr column)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
427 max))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
428 (dotimes (i height) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
429 (shr-indent) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
430 (insert "|\n")) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
431 (dolist (column row) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
432 (goto-char start) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
433 (let ((lines (split-string (nth 2 column) "\n"))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
434 (dolist (line lines) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
435 (when (> (length line) 0) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
436 (end-of-line) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
437 (insert line "|") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
438 (forward-line 1))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
439 ;; Add blank lines at padding at the bottom of the TD, |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
440 ;; possibly. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
441 (dotimes (i (- height (length lines))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
442 (end-of-line) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
443 (insert (make-string (length (car lines)) ? ) "|") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
444 (forward-line 1))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
445 (shr-insert-table-ruler widths))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
446 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
447 (defun shr-insert-table-ruler (widths) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
448 (shr-indent) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
449 (insert "+") |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
450 (dotimes (i (length widths)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
451 (insert (make-string (aref widths i) ?-) ?+)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
452 (insert "\n")) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
453 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
454 (defun shr-table-widths (table length) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
455 (let ((widths (make-vector length 0))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
456 (dolist (row table) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
457 (let ((i 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
458 (dolist (column row) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
459 (aset widths i (max (aref widths i) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
460 (car column))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
461 (incf i)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
462 widths)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
463 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
464 (defun shr-make-table (cont widths &optional fill) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
465 (let ((trs nil)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
466 (dolist (row cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
467 (when (eq (car row) 'tr) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
468 (let ((i 0) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
469 (tds nil)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
470 (dolist (column (cdr row)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
471 (when (memq (car column) '(td th)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
472 (push (shr-render-td (cdr column) (aref widths i) fill) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
473 tds) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
474 (setq i (1+ i)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
475 (push (nreverse tds) trs)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
476 (nreverse trs))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
477 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
478 (defun shr-render-td (cont width fill) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
479 (with-temp-buffer |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
480 (let ((shr-width width) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
481 (shr-indentation 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
482 (shr-generic cont)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
483 (while (re-search-backward "\n *$" nil t) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
484 (delete-region (match-beginning 0) (match-end 0))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
485 (goto-char (point-min)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
486 (let ((max 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
487 (while (not (eobp)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
488 (end-of-line) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
489 (setq max (max max (current-column))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
490 (forward-line 1)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
491 (when fill |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
492 (goto-char (point-min)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
493 (while (not (eobp)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
494 (end-of-line) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
495 (when (> (- width (current-column)) 0) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
496 (insert (make-string (- width (current-column)) ? ))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
497 (forward-line 1))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
498 (list max (count-lines (point-min) (point-max)) (buffer-string))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
499 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
500 (defun shr-pro-rate-columns (columns) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
501 (let ((total-percentage 0) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
502 (widths (make-vector (length columns) 0))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
503 (dotimes (i (length columns)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
504 (incf total-percentage (aref columns i))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
505 (setq total-percentage (/ 1.0 total-percentage)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
506 (dotimes (i (length columns)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
507 (aset widths i (max (truncate (* (aref columns i) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
508 total-percentage |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
509 shr-width)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
510 10))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
511 widths)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
512 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
513 ;; Return a summary of the number and shape of the TDs in the table. |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
514 (defun shr-column-specs (cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
515 (let ((columns (make-vector (shr-max-columns cont) 1))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
516 (dolist (row cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
517 (when (eq (car row) 'tr) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
518 (let ((i 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
519 (dolist (column (cdr row)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
520 (when (memq (car column) '(td th)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
521 (let ((width (cdr (assq :width (cdr column))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
522 (when (and width |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
523 (string-match "\\([0-9]+\\)%" width)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
524 (aset columns i |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
525 (/ (string-to-number (match-string 1 width)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
526 100.0))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
527 (setq i (1+ i)))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
528 columns)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
529 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
530 (defun shr-count (cont elem) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
531 (let ((i 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
532 (dolist (sub cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
533 (when (eq (car sub) elem) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
534 (setq i (1+ i)))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
535 i)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
536 |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
537 (defun shr-max-columns (cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
538 (let ((max 0)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
539 (dolist (row cont) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
540 (when (eq (car row) 'tr) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
541 (setq max (max max (shr-count (cdr row) 'td))))) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
542 max)) |
0fe64d68a522
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
110757
diff
changeset
|
543 |
110704
016990bf37ad
lisp/gnus/shr.el (shr): Fix typo in provide call.
Juanma Barranquero <lekktu@gmail.com>
parents:
110698
diff
changeset
|
544 (provide 'shr) |
110698
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
545 |
74bad2d7bddd
Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents:
diff
changeset
|
546 ;;; shr.el ends here |