annotate lisp/w3/w3-draw.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;; w3-draw.el,v --- Emacs-W3 drawing functions for new display engine
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;; Author: wmperry
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;; Created: 1996/06/03 16:59:57
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 ;; Version: 1.365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;; Keywords: faces, help, hypermedia
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;;; Copyright (c) 1993, 1994, 1995 by William M. Perry (wmperry@spry.com)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;;; This file is not part of GNU Emacs, but the same permissions apply.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ;;; GNU Emacs is free software; you can redistribute it and/or modify
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;; it under the terms of the GNU General Public License as published by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ;;; the Free Software Foundation; either version 2, or (at your option)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;;; any later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;;; GNU Emacs is distributed in the hope that it will be useful,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;;; GNU General Public License for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 ;;; You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 ;;; along with GNU Emacs; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 ;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 ;;; This function will take a stream of HTML from w3-preparse-buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 ;;; and draw it out
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 (require 'w3-vars)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 (require 'w3-imap)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 (require 'w3-widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 (require 'widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 (require 'cl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 (if (featurep 'mule) (fset 'string-width 'length))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 (defmacro w3-get-state (tag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 (or (symbolp tag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 (error "Bad argument: %s" tag))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 (let ((index (length (memq tag w3-state-locator-variable))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 (` (aref w3-state-vector (, index)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 (put 'w3-get-state 'edebug-form-spec '(symbolp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 (defmacro w3-put-state (tag val)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (or (symbolp tag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (error "Bad argument: %s" tag))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 (let ((index (length (memq tag w3-state-locator-variable))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 (` (aset w3-state-vector (, index) (, val)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 (put 'w3-put-state 'edebug-form-spec '(symbolp form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 (defsubst w3-push-alignment (align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (if align
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 (w3-put-state :align (cons (cons tag align) (w3-get-state :align)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (defsubst w3-pop-alignment ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (let ((flubber (memq (assq tag (w3-get-state :align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 (w3-get-state :align))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 ((null flubber) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 ((cdr flubber)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 (w3-put-state :align (cdr flubber)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 (t (w3-put-state :align nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (defsubst w3-current-alignment ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (cdr-safe (car-safe (w3-get-state :align))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 (defconst w3-fill-prefixes-vector
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 (let ((len 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 (prefix-vector (make-vector 80 nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 (while (< len 80)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 (aset prefix-vector len (make-string len ? ))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 (setq len (1+ len)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 prefix-vector))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 (defsubst w3-set-fill-prefix-length (len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 (let ((len len))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (setq fill-prefix (if (< len 80)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 (aref w3-fill-prefixes-vector len)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 (make-string len ? )))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 (defsubst w3-get-default-style-info (info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 (and w3-current-stylesheet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 (or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 ;; Check for tag/class first!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 (cdr-safe (assq info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (assoc (cdr-safe (assq 'class args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (assq tag w3-current-stylesheet))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 ;; Then for global stuff with 'class'
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (cdr-safe (assq info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 (assoc (cdr-safe (assq 'class args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 (assq 'doc w3-current-stylesheet))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 ;; Fall back on the default styles for just this tag.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 (cdr-safe (assq info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 (assq 'internal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 (assq tag w3-current-stylesheet)))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 (defun w3-normalize-color (color)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 ((valid-color-name-p color)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 color)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 ((valid-color-name-p (concat "#" color))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 (concat "#" color))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 ((string-match "[ \t\r\n]" color)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 (w3-normalize-color
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 (mapconcat (function (lambda (x) (if (memq x '(?\t ?\r ?\n ? )) ""
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 (char-to-string x)))) color "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 (w3-warn 'html (format "Bad color specification: %s" color))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (defun w3-pause ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 (w3-running-FSF19 (sit-for 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 (w3-running-xemacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (if (and (not (sit-for 0)) (input-pending-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 (dispatch-event (next-command-event))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 (error nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (t (sit-for 0))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (defvar w3-end-tags
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 '((/ul . ul)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 (/lit . lit)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 (/li . li)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (/h1 . h1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 (/h2 . h2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (/h3 . h3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (/h4 . h4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 (/h5 . h5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (/h6 . h6)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (/font0 . font0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (/font1 . font1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 (/font2 . font2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (/font3 . font3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 (/font4 . font4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 (/font5 . font5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 (/font6 . font6)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 (/font7 . font7)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (/ol . ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (/dl . dl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (/menu . menu)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (/dir . dir)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 (/a . a)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (defvar w3-face-cache nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 "Cache for w3-face-for-element")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 ;; This is just for if we don't have Emacspeak loaded so we do not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 ;; get compile/run-time errors.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (defvar dtk-voice-table nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 "Association between symbols and strings to set dtk voices.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 The string can set any dtk parameter. ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (defsubst w3-valid-voice-p (voice)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 (cadr (assq voice dtk-voice-table)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 (defsubst w3-voice-for-element ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (let ((temporary-voice (w3-get-default-style-info 'voice-spec)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 (and temporary-voice (w3-valid-voice-p temporary-voice)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 (cons tag temporary-voice))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (defsubst w3-face-for-element ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 (let* ((font-spec (w3-get-default-style-info 'font-spec))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 (foreground (w3-get-default-style-info 'color))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 (background (w3-get-default-style-info 'background))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 ;;(pixmap (w3-get-default-style-info 'pixmap))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 (descr (list font-spec foreground background))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (face (cdr-safe (assoc descr w3-face-cache))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (if (or face (not (or foreground background font-spec)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 nil ; Do nothing, we got it already
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 (setq face (intern (format "%s" descr)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 ((not (fboundp 'make-face)) nil) ; Do nothing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 ((and (fboundp 'face-property) ; XEmacs 19.14
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (not (get 'face-property 'sysdep-defined-this)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (setq face (make-face face
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 "An Emacs-W3 face... don't edit by hand." t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 (t (make-face face)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 (and font-spec (set-face-font face font-spec))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 (and foreground (set-face-foreground face foreground))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 (and background (set-face-background face background))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 ;(set-face-background-pixmap face pixmap)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (setq w3-face-cache (cons (cons descr face) w3-face-cache)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (cons tag face)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (defun w3-handle-single-tag (tag &optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (and w3-draw-buffer (set-buffer w3-draw-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 (let ((opos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 (id (and (listp args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 (or (cdr-safe (assq 'name args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 (cdr-safe (assq 'id args))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 ;; This allows _ANY_ tag, whether it is known or not, to be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 ;; the target of a # reference in a URL
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 (if id
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 (setq w3-id-positions (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 (cons (intern id)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 (set-marker (make-marker)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 (point-max)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 w3-id-positions))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 (if (and (w3-get-state :next-break)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 (not (memq tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 '(p h1 h2 h3 h4 h5 h6 ol ul dl menu dir pre))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 (w3-handle-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 (w3-put-state :next-break nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 (setq w3-current-formatter (get tag 'w3-formatter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 ((eq 'w3-handle-text w3-current-formatter)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 (w3-handle-text args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 (let ((data-before nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 (data-after nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 (if (and (not (eq tag 'text)) w3-current-stylesheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 (setq data-before (w3-get-default-style-info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 'insert.before))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 (let ((tag (cdr-safe (assq tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 (setq data-after (and tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 (w3-get-default-style-info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 'insert.after))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 (if data-before (w3-handle-single-tag 'text data-before))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 (setq w3-current-formatter (get tag 'w3-formatter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 ((eq w3-current-formatter 'ack) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 ((null w3-current-formatter) (w3-handle-unknown-tag tag args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 (t (funcall w3-current-formatter args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 (if data-after (w3-handle-single-tag 'text data-after)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 (if (not (eq tag 'text))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 (setq w3-last-tag tag))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 (goto-char opos))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 ;;; Set up basic fonts/stuff
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 (defun w3-init-state ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 ;; Reset the state of an HTML drawing buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 (setq w3-state-vector (copy-sequence w3-state-vector))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 (setq w3-current-stylesheet (copy-tree w3-user-stylesheet))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 (let* ((tag 'html)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 (args nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 (face (cdr (w3-face-for-element))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 (and face
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 (if (not (fboundp 'valid-specifier-locale-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 (w3-my-safe-copy-face face 'default (current-buffer)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 (setq w3-form-labels nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 (make-local-variable 'w3-image-widgets-waiting)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 (make-local-variable 'w3-active-voices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 (make-local-variable 'inhibit-read-only)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 (setq w3-image-widgets-waiting nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 inhibit-read-only t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 (if (not (get 'w3-state 'init)) (w3-draw-setup))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 (fillarray w3-state-vector 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 (w3-put-state :bogus nil) ; Make all fake ones return nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 (w3-put-state :text-mangler nil) ; Any text mangling routine
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 (w3-put-state :next-break nil) ; Next item needs a paragraph break
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 (w3-put-state :background nil) ; Netscapism - gag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 (w3-put-state :table nil) ; Table args
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 (w3-put-state :figdata nil) ; Data for <fig> tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 (w3-put-state :figalt nil) ; Alt data for <fig> tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 (w3-put-state :pre-start nil) ; Where current <pre> seg starts
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 (w3-put-state :zone nil) ; Zone of current href?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 (w3-put-state :center nil) ; netscape tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 (w3-put-state :select nil) ; Data for current select field
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 (w3-put-state :options nil) ; Options in current select field
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 (w3-put-state :nofill nil) ; non-nil if in pre or xmp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 (w3-put-state :nowrap nil) ; non-nil if in <p nowrap>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 (w3-put-state :href nil) ; Current link destination
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 (w3-put-state :name nil) ; Current link ID tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 (w3-put-state :image nil) ; Current image destination
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 (w3-put-state :mpeg nil) ; Current mpeg destination
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288 (w3-put-state :form nil) ; Current form information
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 (w3-put-state :optarg nil) ; Option arguments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 (w3-put-state :w3-graphic nil) ; Image stuff for non-xemacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 (w3-put-state :lists '()) ; Types of list currently in.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 (w3-put-state :align nil) ; Current alignment of paragraphs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 (w3-put-state :title nil) ; Whether we can have a title or not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 (w3-put-state :seen-this-url nil) ; whether we have seen this url or not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 (w3-put-state :needspace 'never) ; Spacing info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 (setq w3-active-faces nil) ; Face attributes to use
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 (setq w3-active-voices nil) ; voice attributes to use
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 (defun w3-draw-setup ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 (put 'w3-state 'init t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 (w3-init-state))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 ;;; Mapping HTML tags to functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 (put 'lit 'w3-formatter 'w3-handle-pre)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 (put '/lit 'w3-formatter 'w3-handle-/pre)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 (put 'li 'w3-formatter 'w3-handle-list-item)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 (put 'ul 'w3-formatter 'w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 (put 'ol 'w3-formatter 'w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 (put 'dl 'w3-formatter 'w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 (put '/dl 'w3-formatter 'w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 (put '/ul 'w3-formatter 'w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 (put '/ol 'w3-formatter 'w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 (put 'menu 'w3-formatter 'w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 (put '/menu 'w3-formatter 'w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 (put 'dir 'w3-formatter 'w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 (put '/dir 'w3-formatter 'w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321 (put 'dt 'w3-formatter 'w3-handle-table-term)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 (put 'dd 'w3-formatter 'w3-handle-table-definition)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 (put 'a 'w3-formatter 'w3-handle-hyperlink)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 (put '/a 'w3-formatter 'w3-handle-hyperlink-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 (put 'h1 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 (put 'h2 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 (put 'h3 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 (put 'h4 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 (put 'h5 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 (put 'h6 'w3-formatter 'w3-handle-header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 (put '/h1 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 (put '/h2 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 (put '/h3 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 (put '/h4 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 (put '/h5 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 (put '/h6 'w3-formatter 'w3-handle-header-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 (put 'img 'w3-formatter 'w3-handle-image)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 (put 'kill_sgml 'w3-formatter 'w3-handle-kill-sgml)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 ;;; The main drawing routines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 (defun w3-handle-unknown-tag (tag args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 ;; A generic formatter for an unkown HTML tag. This will only be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 ;; called if a formatter was not found in TAGs property list.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 ;; If a function named `w3-handle-TAG' is defined, then it will be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 ;; stored in TAGs property list, so it will be found next time
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 ;; the tag is run across.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 (let ((handler (intern-soft (concat "w3-handle-" (symbol-name tag))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 (end-tag-p (= (string-to-char (symbol-name tag)) ?/)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 ;; This stores the info in w3-end-tags for future use by the display
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 ;; engine.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 (if end-tag-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 (setq w3-end-tags (cons (cons tag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 (intern (substring (symbol-name tag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 w3-end-tags)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 ;; For proper use of stylesheets, if no tag is found, then we should
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 ;; at least call w3-handle-emphasis
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 ((and handler (fboundp handler))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365 (put tag 'w3-formatter handler)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 (funcall handler args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 (end-tag-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 (put tag 'w3-formatter 'w3-handle-emphasis-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 (put tag 'w3-formatter 'w3-handle-emphasis)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 (defun w3-handle-text (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 ;; This is the main workhorse of the display engine.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 ;; It will figure out how a chunk of text should be displayed and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 ;; put all the necessary extents/overlays/regions around it."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 (or args (error "Impossible"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 (if (string= args "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 (w3-put-state :needspace nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 (let ((st (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 (mangler (w3-get-state :text-mangler))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 (sym nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 (insert args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 ;;(goto-char st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 (cond ((w3-get-state :nofill)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 (goto-char st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 (if (not (search-forward "\n" nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 (subst-char-in-region st (point-max) ?\r ?\n)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 (subst-char-in-region st (point-max) ?\r ? ))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 (goto-char (point-max)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 (goto-char st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 (while (re-search-forward
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 " [ \t\n\r]+\\|[\t\n\r][ \t\n\r]*"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 nil 'move)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 (replace-match " "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 (goto-char st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 (if (and (= ? (following-char))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 (or (bolp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 (eq 'never (w3-get-state :needspace))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400 (delete-char 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 (goto-char (point-max))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 (and mangler w3-delimit-emphasis
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 (fboundp mangler) (funcall mangler st (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 (let ((faces nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405 (todo w3-active-faces)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 (voices w3-active-voices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 (val nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 (cur nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 (while todo
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410 (setq cur (car todo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 todo (cdr todo))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 ((symbolp cur)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 ((listp (cdr-safe cur))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 (let ((x (cdr cur)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 (while x
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 (if (not (memq (car x) faces))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 (setq faces (cons (car x) faces)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 (setq x (cdr x)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 ((and (consp cur) (not (memq (cdr cur) faces)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 (setq faces (cons (cdr cur) faces)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423 (t nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 (add-text-properties st (point) (list 'face faces))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425 (if (car voices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 (add-text-properties st (point) (list 'personality (car voices))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428 (if (not (memq (char-after (1- (point))) '(? ?.)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 (w3-put-state :needspace t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 (defun w3-handle-plaintext (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433 (let ((x (w3-get-state :nofill)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 (w3-put-state :nofill t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 (and args (cdr-safe (assq 'data args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 (w3-handle-text (cdr-safe (assq 'data args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 (setq w3-last-fill-pos (point))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439 (defun w3-handle-/plaintext (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 (w3-put-state :nofill nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 ;;; Paragraph breaks, and other things that can cause linebreaks and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445 ;;; alignment changes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 (defun w3-handle-header (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448 ;; Handle the creation of a header (of any level). Causes a full
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 ;; paragraph break.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 (w3-handle-emphasis args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451 (let ((name (or (cdr-safe (assq 'name args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 (cdr-safe (assq 'id args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453 (align (cdr-safe (assq 'align args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 (mangler (nth 2 (cdr-safe (assq tag w3-header-chars-assoc)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456 (if align
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 (setq align (intern (downcase align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 (setq align (w3-get-default-style-info 'align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459 (let ((tag 'p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 (w3-pop-alignment))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 (w3-push-alignment align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 (w3-put-state :text-mangler mangler)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 (if name (w3-put-state :name name))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465 (defun w3-handle-header-end (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466 ;; Handle the closing of a header (of any level). Causes a full
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467 ;; paragraph break.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468 (w3-handle-emphasis-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 (let ((mangler (w3-get-state :text-mangler)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470 (and mangler (funcall mangler nil nil t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471 (w3-put-state :text-mangler nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474 (let* ((info (car-safe (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 (type (and info (car-safe info))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 (if (and type fill-prefix)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 (insert fill-prefix (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 ((memq type '(ol dl)) " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 (t " ")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 (let ((tag (cdr-safe (assoc tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481 (w3-pop-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 (defun w3-handle-pre (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484 ;; Marks the start of a preformatted section of text. No paragraph
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485 ;; filling should be done from this point until a matching /pre has
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486 ;; been encountered.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 (w3-put-state :nofill t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 (w3-put-state :needspace t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490 (w3-put-state :pre-start (set-marker (make-marker) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 (defun w3-handle-xmp (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494 ;; Marks the start of a preformatted section of text. No paragraph
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495 ;; filling should be done from this point until a matching /pre has
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 ;; been encountered.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 (w3-put-state :nofill t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 (w3-put-state :needspace t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 (w3-put-state :pre-start (set-marker (make-marker) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501 (if (and args (cdr-safe (assq 'data args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 (w3-handle-text (cdr-safe (assq 'data args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 (w3-handle-/xmp))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 (defun w3-handle-/pre (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507 (if (not (w3-get-state :nofill))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509 (w3-put-state :nofill nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510 (let* ((info (car-safe (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511 (type (and info (car-safe info)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 (st (w3-get-state :pre-start)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513 (if (not (bolp)) (insert "\n"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514 (if (and type fill-prefix st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517 (goto-char st)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 (while (re-search-forward "^" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 (insert fill-prefix (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520 ((memq type '(ol dl)) " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 (t " ")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522 (setq w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523 (insert fill-prefix (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524 ((memq type '(ol dl)) " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 (t " "))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 (setq w3-last-fill-pos (point))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527 (let ((tag 'p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 (w3-handle-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529 (setq w3-active-faces nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530 (w3-put-state :pre-start nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
532 (fset 'w3-handle-/xmp 'w3-handle-/pre)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
533
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
534 (defun w3-handle-blockquote (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
535 ;; Start a section of quoted text. This is done by causing the text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
536 ;; to be indented from the right and left margins. Nested
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
537 ;; blockquotes will cause further indentation.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538 (let ((align (or (w3-get-default-style-info 'align) 'indent)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
539 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
540 (w3-push-alignment align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
541 (w3-put-state :fillcol fill-column)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
542 (setq fill-column (max (- (or fill-column
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
543 (1- (or w3-strict-width (window-width)))) 8)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
544 10)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
545
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
546 (defun w3-handle-/blockquote (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
547 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
548 (let ((tag (cdr-safe (assoc tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
549 (w3-pop-alignment))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
550 (setq fill-column (or (w3-get-state :fillcol) (1- (or w3-strict-width
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
551 (window-width)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
552 (w3-put-state :fillcol nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
553
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
554 (defun w3-handle-align (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
555 ;; Cause a single line break (like <BR>) and replace the current
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
556 ;; alignment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
557 (let ((align (intern (or (cdr-safe (assq 'role args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
558 (cdr-safe (assq 'align args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
559 (cdr-safe (assq 'style args))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
560 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
561 (w3-push-alignment align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
562
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
563 (defun w3-handle-/align (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
564 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
565 (w3-pop-alignment))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
566
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
567 (defun w3-handle-hr (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
568 ;; Cause a line break and insert a horizontal rule across the page.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
569 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
570 (let* ((perc (or (cdr-safe (assq 'width args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
571 (w3-get-default-style-info 'width)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
572 "100%"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
573 (old-align (w3-current-alignment))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
574 (talign (or (cdr-safe (assq 'textalign args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
575 (cdr-safe (assq 'text-align args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
576 (w3-get-default-style-info 'textalign)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
577 (w3-get-default-style-info 'text-align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
578 (and old-align (symbol-name old-align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
579 "center"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
580 (text (cdr-safe (assq 'label args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
581 (align (or (cdr-safe (assq 'align args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
582 (w3-get-default-style-info 'align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
583 old-align
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
584 'center))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
585 (rule nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
586 (width nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
587 (if (stringp talign)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
588 (setq talign (intern (downcase talign))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
589 (if (stringp align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
590 (setq align (intern (downcase align))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
591 (w3-push-alignment align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
592
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
593 (setq perc (min (string-to-int perc) 100)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
594 width (/ (* (- (or w3-strict-width
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
595 (window-width))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
596 w3-right-border) perc) 100))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
597 (if text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
598 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
599 ((>= (length text) width)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
600 (setq rule (concat "-" text "-")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
601 ((eq talign 'right)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
602 (setq rule (concat (make-string (- width 1 (length text))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
603 w3-horizontal-rule-char)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
604 text "-")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
605 ((eq talign 'center)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
606 (let ((half (make-string (/ (- width (length text)) 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
607 w3-horizontal-rule-char)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
608 (setq rule (concat half text half))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
609 ((eq talign 'left)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
610 (setq rule (concat "-" text (make-string (- width 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
611 (length text))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
612 w3-horizontal-rule-char)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
613 (setq rule (make-string width w3-horizontal-rule-char)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
614 (w3-handle-text rule)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
615 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
616 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
617 (error nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
618 (w3-pop-alignment)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
619 (setq w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
620 (let* ((info (car-safe (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
621 (type (and info (car-safe info)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
622 (cur (w3-current-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
623 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
624 ;;((eq cur 'indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
625 ;;(insert (make-string w3-indent-level ? )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
626 ((and type fill-prefix (eq w3-last-tag 'dt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
627 (insert fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
628 ((and type fill-prefix)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
629 (insert fill-prefix (if (eq type 'ol) " " " ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
630 (t nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
631
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
632 (defun w3-handle-/p (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
633 ;; Marks the end of a paragraph. Only causes a paragraph break if
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
634 ;; it is not followed by another paragraph or similar markup
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
635 ;; (headers, list openings, etc) that will already cause a new
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
636 ;; paragraph to be started.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
637 (w3-handle-emphasis-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
638 (let ((tag (cdr-safe (assoc tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
639 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
640 (w3-pop-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
641
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
642 (defun w3-handle-p (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
643 (if (or (not (memq w3-last-tag '(li dt dd)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
644 (memq tag '(ol ul dl menu dir)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645 (let ((name (or (cdr-safe (assq 'name args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
646 (cdr-safe (assq 'id args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
647 (align (cdr-safe (assoc 'align args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
648 (w3-handle-emphasis-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
649 (w3-handle-emphasis args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
650 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
651 (w3-put-state :nowrap (assq 'nowrap args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
652 (setq align (if align
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
653 (intern (downcase align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
654 (w3-get-default-style-info 'align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
655 (and (eq tag 'p) (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
656 (w3-pop-alignment)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
657 (w3-push-alignment align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
658 (if (not (bobp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
659 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
660 (insert (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
661 ((and (eolp) (bolp)) "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
662 ((eolp) "\n\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
663 (t "\n")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
664 (setq w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
665 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
666 ((null fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
667 ((string= fill-prefix ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
668 ((eq (car (car (w3-get-state :lists))) 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
669 (insert fill-prefix " "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
670 (t (insert fill-prefix " ")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
671 (if name (w3-put-state :name name)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
672
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
673 (defun w3-handle-br (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
674 ;; Cause a single line break.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
675 ;; The alignment will only effect the chunk of text (generally to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
676 ;; the last <br> or <p> tag) immediately before the <br>. After
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
677 ;; that, the alignment will revert to the containers alignment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
678 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
679 (let* ((info (car-safe (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
680 (type (and info (car-safe info)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
681 (cur (w3-current-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
682 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
683 ;;((eq cur 'indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
684 ;;(insert (make-string w3-indent-level ? )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
685 ((and type fill-prefix (eq w3-last-tag 'dt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
686 (insert fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
687 ((and type fill-prefix)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
688 (insert fill-prefix (if (eq type 'ol) " " " ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
689 (t nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
690
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
691 (defun w3-handle-paragraph (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
692 (if (not (bobp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
693 (let ((align (w3-current-alignment))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
694 (fill-prefix fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
695 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
696 ((eq align 'indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
697 (w3-set-fill-prefix-length
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
698 (+ (length fill-prefix);; works even if fill-prefix is nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
699 w3-indent-level)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
700 ((null fill-prefix)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
701 (setq fill-prefix ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
702 ((string= fill-prefix ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
703 ((eq (car (car (w3-get-state :lists))) 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
704 (w3-set-fill-prefix-length (+ 4 (length fill-prefix))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
705 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
706 (w3-set-fill-prefix-length (+ 2 (length fill-prefix)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
707 (if (eq align 'indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
708 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
709 (goto-char w3-last-fill-pos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
710 (insert fill-prefix)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
711 (goto-char (point-max))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
712 (if (and (> (current-column) fill-column)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
713 (not (w3-get-state :nowrap))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
714 (not (w3-get-state :nofill)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
715 (fill-region-as-paragraph w3-last-fill-pos (point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
716 (eq align 'justify)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
717 (if (not w3-last-fill-pos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
718 (setq w3-last-fill-pos (point-min)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
719 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
720 (skip-chars-backward " \t\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
721 (delete-region (point) (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
722 (if (< w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
723 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
724 ((or (eq align 'center) (w3-get-state :center))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
725 (center-region w3-last-fill-pos (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
726 ((eq align 'right)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
727 (let ((x (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
728 (catch 'fill-exit
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
729 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
730 (goto-char w3-last-fill-pos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
731 (while (re-search-forward "$" x t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
732 (if (/= (current-column) fill-column)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
733 (let ((buff (- fill-column (current-column))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
734 (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
735 (setq x (+ x buff))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
736 (if (> buff 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
737 (insert (make-string buff ? )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
738 (end-of-line))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
739 (end-of-line))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
740 (if (eobp) (throw 'fill-exit t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
741 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
742 (forward-char 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
743 (error (throw 'fill-exit t))))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
744 (insert "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
745 (setq w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
746 (w3-put-state :needspace 'never))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
747
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
748 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
749 ;;; List handling code
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
750 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
751 (defun w3-handle-list-ending (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
752 ;; Handles all the list terminators (/ol /ul /dl).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
753 ;; This just fills the last paragrpah, then reduces the depth in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
754 ;; `w3-state' and truncates `fill-prefix'"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
755 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
756 (w3-put-state :depth (max 0 (1- (w3-get-state :depth))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
757 (w3-put-state :next-break t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
758 (w3-set-fill-prefix-length (* (w3-get-state :depth) w3-indent-level))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
759 (w3-put-state :lists (cdr (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
760 (if (/= 0 (length fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
761 (insert fill-prefix " ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
762
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
763 (defun w3-handle-list-opening (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
764 ;; Handles all the list openers (ol ul dl).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
765 ;; This just fills the last paragraph, then increases the depth in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
766 ;; `w3-state' and adds to `fill-prefix'
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
767 (w3-handle-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
768 (let ((style (and (not (assq 'style args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
769 (w3-get-default-style-info 'style))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
770 (if style
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
771 (setq args (cons (cons 'style style) args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
772 ;; Default VALUE attribute for OL is 1.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
773 (if (eq tag 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
774 (or (assq 'value args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
775 (setq args (cons (cons 'value 1) args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
776 (w3-put-state :depth (1+ (w3-get-state :depth)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
777 (w3-set-fill-prefix-length (* (w3-get-state :depth) w3-indent-level))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
778 (insert "\n\n" fill-prefix " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
779 (w3-put-state :lists (cons (cons tag (copy-alist args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
780 (w3-get-state :lists))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
781
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
782 (defun w3-handle-table-definition (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
783 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
784 (insert fill-prefix " "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
785
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
786 (defun w3-handle-table-term (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
787 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
788 (insert "\n" fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
789
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
790 (defun w3-handle-list-item (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
791 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
792 (let* ((info (car (w3-get-state :lists)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
793 (type (car info))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
794 (endr (or (nth (1- (or (w3-get-state :depth) 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
795 (cdr (or (assoc type w3-list-chars-assoc)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
796 (car w3-list-chars-assoc))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
797 "*")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
798 (setq info (cdr info))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
799 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
800 ((assq 'plain info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
801 ;; We still need to indent from the left margin for lists without
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
802 ;; bullets. This is especially important with nested lists.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
803 ;; Question: Do we want this to be equivalent to replacing the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
804 ;; bullet by a space (" ") or by indenting so that the text starts
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
805 ;; where the bullet would have been? I've chosen the latter after
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
806 ;; looking at both kinds of output.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
807 (insert fill-prefix))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
808 ((eq type 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
809 (let ((next (or (assq 'seqnum info) (assq 'value info)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
810 (type (cdr-safe (assq 'style info)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
811 (uppr (assq 'upper info))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
812 (tokn nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
813 (if (stringp (cdr next)) (setcdr next (string-to-int (cdr next))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
814 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
815 ((or (assq 'roman info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
816 (member type '("i" "I")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
817 (setq tokn (concat
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
818 (w3-pad-string (w3-decimal-to-roman (cdr next)) 3 ?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
819 'left)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
820 endr)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
821 ((or (assq 'arabic info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
822 (member type '("a" "A")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
823 (setq tokn (concat (w3-pad-string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
824 (w3-decimal-to-alpha (cdr next)) 3 ? 'left)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
825 endr)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
826 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
827 (setq tokn (concat (w3-pad-string (int-to-string (cdr next))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
828 2 ? 'left)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
829 endr))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
830 (if (assq 'uppercase info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
831 (setq tokn (upcase tokn)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
832 (insert fill-prefix tokn " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
833 (setcdr next (1+ (cdr next)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
834 (w3-put-state :needspace 'never)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
835 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
836 (insert fill-prefix endr " ")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
837
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
838 (defun w3-pad-string (str len pad side)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
839 ;; Pads a string STR to a certain length LEN, using fill character
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
840 ;; PAD by concatenating PAD to SIDE of the string.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
841 (let ((strlen (length str)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
842 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
843 ((>= strlen len) str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
844 ((eq side 'right) (concat str (make-string (- len strlen) pad)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
845 ((eq side 'left) (concat (make-string (- len strlen) pad) str)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
846
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
847 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
848 ;;; Routines to handle character-level formatting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
849 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
850 (defun w3-handle-q (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
851 (w3-handle-emphasis)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
852 (w3-handle-text (or (w3-get-default-style-info 'startquote) "\"")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
853
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
854 (defun w3-handle-/q (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
855 (let ((tag (cdr-safe (assoc tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
856 (w3-handle-text (or (w3-get-default-style-info 'endquote) "\"")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
857 (w3-handle-emphasis-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
858
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
859 (defun w3-handle-emphasis (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
860 ;; Generic handler for character-based emphasis. Increments the state
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
861 ;; of TAG (which must be bound by the calling procedure). This
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
862 ;; checks all the various stylesheet mechanisms that may cause an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
863 ;; alignment shift as well.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
864 (let ((align (or (w3-get-default-style-info 'align)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
865 (and (eq tag 'address) w3-right-justify-address 'right))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
866 (if (and align (not (memq tag '(h1 h2 h3 h4 h5 h6))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
867 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
868 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
869 (w3-push-alignment align))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
870 (let* ((spec (and w3-delimit-emphasis (assoc tag w3-style-tags-assoc)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
871 (class (cdr-safe (assq 'class args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
872 (face (w3-face-for-element))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
873 (voice (w3-voice-for-element))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
874 (beg (and spec (car (cdr spec)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
875 (if spec
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
876 (insert beg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
877 (if voice
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
878 (setq w3-active-voices (cons voice w3-active-voices)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
879 (if face
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
880 (setq w3-active-faces (cons face w3-active-faces)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
881
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
882 (defun w3-handle-emphasis-end (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
883 ;; Generic handler for ending character-based emphasis. Decrements
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
884 ;; the state of TAG (which must be bound by the calling procedure).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
885 ;; Stylesheet mechanisms may cause arbitrary alignment changes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
886 (let* ((tag (cdr-safe (assq tag w3-end-tags)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
887 (spec (and w3-delimit-emphasis (assq tag w3-style-tags-assoc)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
888 (end (and spec (cdr (cdr spec)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
889 (if (assq tag w3-active-voices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
890 (setq w3-active-voices (cdr (memq (assq tag w3-active-voices)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
891 w3-active-voices)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
892 (setq w3-active-voices (delq tag w3-active-voices)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
893 (if (assq tag w3-active-faces)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
894 (setq w3-active-faces (cdr (memq (assq tag w3-active-faces)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
895 w3-active-faces)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
896 (setq w3-active-faces (delq tag w3-active-faces)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
897 (if spec (insert end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
898 (if (eq tag 'address)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
899 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
900 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
901 (w3-pop-alignment)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
902
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
903 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
904 ;;; HTML 3.0 compliance
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
905 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
906 (defun w3-handle-math (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
907 (w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
908 (w3-handle-text "[START MATH - Not Implemented (Yet)]")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
909 (w3-handle-br))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
910
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
911 (defun w3-handle-/math (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
912 (w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
913 (w3-handle-text "[END MATH]")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
914 (w3-handle-br))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
915
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
916 (defun w3-handle-table (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
917 (w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
918 (w3-handle-text "[START TABLE - Not Implemented (Yet)]")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
919 (w3-handle-br))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
920
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
921 (defun w3-handle-/table (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
922 (w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
923 (w3-handle-text "[END TABLE]")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
924 (w3-handle-br))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
925
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
926 (defun w3-handle-div (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
927 (let ((align (cdr-safe (assq 'align args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
928 (w3-handle-emphasis args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
929 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
930 (setq align (and align (intern (downcase align))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
931 (w3-push-alignment align)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
932
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
933 (defun w3-handle-/div (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
934 (w3-handle-emphasis-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
935 (let ((tag (cdr-safe (assq tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
936 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
937 (w3-pop-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
938
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
939 (defun w3-handle-note (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
940 (w3-handle-emphasis)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
941 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
942 (let ((align (or (w3-get-default-style-info 'align) 'indent)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
943 (w3-push-alignment align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
944 (w3-handle-text (concat (or (cdr-safe (assq 'role args)) "CAUTION") ":")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
945
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
946 (defun w3-handle-/note (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
947 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
948 (w3-handle-emphasis-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
949 (let ((tag (cdr-safe (assoc tag w3-end-tags))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
950 (w3-pop-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
951
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
952 (defun w3-handle-fig (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
953 (w3-put-state :figdata args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
954 (w3-put-state :figalt (set-marker (make-marker) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
955 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
956
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
957 (defun w3-handle-caption (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
958 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
959
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
960 (defun w3-handle-/caption (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
961 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
962
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
963 (defun w3-handle-/fig (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
964 (let* ((data (w3-get-state :figdata))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
965 (src (cdr-safe (assq 'src data)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
966 (aln (cdr-safe (assq 'align data)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
967 (alt (if (w3-get-state :figalt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
968 (prog1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
969 (buffer-substring (w3-get-state :figalt) (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
970 (delete-region (w3-get-state :figalt) (point)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
971 (ack nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
972 (setq w3-last-fill-pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
973 (if (not src)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
974 (w3-warn 'html "Malformed <fig> tag.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
975 (setq ack (list (cons 'src src)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
976 (cons 'alt alt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
977 (cons 'align aln)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
978 (w3-handle-pre nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
979 (w3-handle-image ack)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
980 (w3-handle-/pre nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
981
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
982 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
983 ;;; Netscape Compatibility
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
984 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
985 ; For some reason netscape treats </br> like <br> - ugh.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
986 (fset 'w3-handle-/br 'w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
987
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
988 (defun w3-handle-font (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
989 (let* ((sizearg (cdr-safe (assq 'size args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
990 (sizenum (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
991 ((null sizearg) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
992 ((= ?+ (string-to-char sizearg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
993 (min (+ 3 (string-to-int (substring sizearg 1))) 7))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
994 ((= ?- (string-to-char sizearg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
995 (max (- 3 (string-to-int (substring sizearg 1))) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
996 ((string= sizearg (int-to-string (string-to-int sizearg)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
997 (string-to-int sizearg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
998 (t nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
999 (color (cdr-safe (assq 'color args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1000 (normcolor (if color (w3-normalize-color color)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1001 (w3-current-stylesheet (` ((font
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1002 (internal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1003 (font-size-index . (, sizenum))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1004 (foreground . (, normcolor))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1005 (w3-generate-stylesheet-faces w3-current-stylesheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1006 (w3-handle-emphasis args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1007
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1008 (defun w3-handle-/font (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1009 (w3-handle-emphasis-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1010
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1011 (defun w3-handle-center (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1012 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1013 (w3-push-alignment 'center))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1014
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1015 (defun w3-handle-/center (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1016 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1017 (let ((tag 'center))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1018 (w3-pop-alignment)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1019
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1020 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1021 ;;; Bonus HTML Tags just for fun :)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1022 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1023 (defun w3-handle-embed (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1024 (let* ((buf (url-generate-new-buffer-name " *embed*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1025 (w3-draw-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1026 (url-working-buffer buf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1027 (data (cdr-safe (assq 'data args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1028 (href (and (not data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1029 (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1030 (or (cdr-safe (assq 'src args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1031 (cdr-safe (assq 'href args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1032 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1033 w3-base-alist)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1034 (type (or (cdr-safe (assq 'type args)) "text/plain"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1035 (parse nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1036 (if (and href (not (string= type "video/mpeg")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1037 ;; MPEG movies can be _HUGE_, delay loading them as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1038 ;; long as possible
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1039 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1040 (set-buffer (get-buffer-create buf))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1041 (setq url-be-asynchronous nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1042 (url-retrieve href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1043 (setq data (buffer-string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1044 (kill-buffer (current-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1045 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1046 ((string= type "text/plain")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1047 (insert data))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1048 ((string-match "^text/html" type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1049 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1050 (set-buffer (get-buffer-create
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1051 (url-generate-new-buffer-name " *embed*")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1052 (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1053 (insert data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1054 (setq parse (w3-preparse-buffer (current-buffer) t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1055 (kill-buffer (current-buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1056 (while parse
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1057 (w3-handle-single-tag (car (car parse)) (cdr (car parse)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1058 (setq parse (cdr parse))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1059 ((string= type "video/mpeg")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1060 (let ((width (cdr-safe (assq 'width args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1061 (height (cdr-safe (assq 'height args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1062 (setq width (if width (string-to-int width))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1063 height (if height (string-to-int height)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1064 (w3-add-delayed-mpeg href (point) width height))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1065
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1066 (defun w3-handle-blink (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1067 ;; Keep track of all the buffers with blinking in them, and do GC
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1068 ;; of this list whenever a new <blink> tag is encountered. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1069 ;; timer checks this list to see if any of the buffers are visible,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1070 ;; and only blinks the face if there are any visible. This cuts
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1071 ;; down tremendously on the amount of X traffic, and frame !@#!age
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1072 ;; due to lots of face munging.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1073 (w3-handle-emphasis args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1074 (let ((buffs w3-blinking-buffs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1075 (name1 (buffer-name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1076 (name2 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1077 (add t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1078 (setq w3-blinking-buffs nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1079 ;; Get rid of old buffers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1080 (while buffs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1081 (setq name2 (buffer-name (car buffs)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1082 (if (null name2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1083 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1084 (setq w3-blinking-buffs (cons (car buffs) w3-blinking-buffs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1085 (if (string= name1 name2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1086 (setq add nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1087 (setq buffs (cdr buffs)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1088 (if add
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1089 (setq w3-blinking-buffs (cons (current-buffer) w3-blinking-buffs)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1090
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1091 (defun w3-handle-/blink (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1092 (w3-handle-emphasis-end args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1093
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1094 (defun w3-handle-peek (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1095 ;; Handle the peek tag. Valid attributes are:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1096 ;; VARIABLE:: any valid lisp variable
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1097 ;; If VARIABLE is bound and non-nil, then the value of the variable is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1098 ;; inserted at point. This can handle variables whos values are any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1099 ;; arbitrary lisp type.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1100 (let* ((var-name (cdr-safe (assq 'variable args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1101 (var-sym (and var-name (intern var-name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1102 (val (and var-sym (boundp var-sym) (symbol-value var-sym))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1103 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1104 ((null val) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1105 ((stringp val) (w3-handle-text val))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1106 (t (w3-handle-text (format "%S" val))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1107
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1108 (defun w3-rotate-region (st nd &optional rotation)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1109 "Ceasar rotate a region between ST and ND using ROTATION as the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1110 amount to rotate the text. Defaults to caesar (13)."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1111 (setq rotation (or rotation 13))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1112 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1113 (let (x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1114 (while (< st nd)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1115 (setq x (char-after st))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1116 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1117 ((and (>= x ?a) (<= x ?z))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1118 (setq x (- x ?a)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1119 x (char-to-string (+ (% (+ x rotation) 26) ?a))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1120 ((and (>= x ?A) (<= x ?Z))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1121 (setq x (- x ?A)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1122 x (char-to-string (+ (% (+ x rotation) 26) ?A))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1123 (t (setq x nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1124 (if x (progn (goto-char st) (delete-char 1) (insert x)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1125 (setq st (1+ st))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1126
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1127 (defun w3-handle-kill-sgml (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1128 (w3-handle-text "SGML is the spawn of evil! It must be stopped!"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1129
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1130 (defun w3-handle-secret (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1131 (if (fboundp 'valid-specifier-locale-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1132 (let ((tag 'rot13))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1133 (w3-handle-emphasis))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1134 (w3-put-state :secret (set-marker (make-marker) (point)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1135
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1136 (defun w3-handle-/secret (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1137 "Close a secret region of text."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1138 (if (fboundp 'valid-specifier-locale-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1139 (let ((tag '/rot13))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1140 (w3-handle-emphasis-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1141 (if (integer-or-marker-p (w3-get-state :secret))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1142 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1143 (w3-rotate-region (w3-get-state :secret) (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1144 (w3-put-state :secret nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1145
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1146 (defun w3-handle-hype (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1147 (if (and (or (featurep 'nas-sound) (featurep 'native-sound))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1148 (assoc 'hype sound-alist))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1149 (play-sound 'hype 100)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1150 (w3-handle-text "Hey, has Marca A. told you how cool he is?")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1151
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1152 (defun w3-handle-yogsothoth (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1153 (w3-handle-image (list (cons 'src "href-to-yogsothoth-pic")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1154 (cons 'alt "YOGSOTHOTH LIVES!!!"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1155
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1156 (defun w3-handle-roach (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1157 (w3-handle-text "Man, I am so wasted..."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1158
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1159 (defun w3-handle-/roach (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1160 (w3-handle-text (concat "So, you wanna get some "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1161 (or (cdr-safe (assq 'munchy args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1162 "nachos") "? ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1163
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1164 (defun w3-invert-face (face)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1165 (let ((buffs w3-blinking-buffs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1166 (blink nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1167 (buff nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1168 (if buffs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1169 (while buffs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1170 (setq buff (car buffs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1171 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1172 ((bufferp buff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1173 (if (buffer-name buff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1174 (setq buff (car buffs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1175 (setq buff nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1176 ((stringp buff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1177 (setq buff (get-buffer buff)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1178 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1179 (setq buff nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1180 (setq buffs (cdr buffs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1181 buff (and buff (get-buffer-window buff 'visible))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1182 buff (and buff (window-live-p buff)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1183 (if buff (setq buffs nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1184 blink t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1185 (if blink (invert-face face))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1186
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1187 (autoload 'sentence-ify "flame")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1188 (autoload 'string-ify "flame")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1189 (autoload '*flame "flame")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1190 (if (not (fboundp 'flatten)) (autoload 'flatten "flame"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1192 (defvar w3-cookie-cache nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1193
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1194 (defun w3-handle-cookie (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1195 (if (not (fboundp 'cookie))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1196 (w3-handle-text "Sorry, no cookies today.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1197 (let* ((url-working-buffer (url-generate-new-buffer-name " *cookie*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1198 (href (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1199 (or (cdr-safe (assq 'src args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1200 (cdr-safe (assq 'href args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1201 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1202 w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1203 (fname (or (cdr-safe (assoc href w3-cookie-cache))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1204 (url-generate-unique-filename "%s.cki")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1205 (st (or (cdr-safe (assq 'start args)) "Loading cookies..."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1206 (nd (or (cdr-safe (assq 'end args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1207 "Loading cookies... done.")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1208 (if (not (assoc href w3-cookie-cache))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1209 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1210 (url-clear-tmp-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1211 (setq url-be-asynchronous nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1212 (url-retrieve href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1213 (url-uncompress)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1214 (write-region (point-min) (point-max) fname 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1215 (setq w3-cookie-cache (cons (cons href fname) w3-cookie-cache))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1216 (w3-handle-text (cookie fname st nd)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1217
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1218 (defun w3-handle-flame (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1219 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1220 (w3-handle-text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1221 (concat
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1222 (sentence-ify
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1223 (string-ify
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1224 (append-suffixes-hack (flatten (*flame)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1225 (error nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1226
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1227 (defun w3-handle-pinhead (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1228 (if (fboundp 'yow)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1229 (w3-handle-text (yow))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1230
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1231 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1232 ;;; Client-side Imagemaps
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1233 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1234 (defun w3-handle-map (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1235 (w3-put-state :map (cons (or (cdr-safe (assq 'name args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1236 (cdr-safe (assq 'id args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1237 "unnamed") nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1238
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1239 (defun w3-handle-/map (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1240 (and (w3-get-state :map)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1241 (setq w3-imagemaps (cons (w3-get-state :map) w3-imagemaps)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1242 (w3-put-state :map nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1243
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1244 (defun w3-decode-area-coords (str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1245 (let (retval)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1246 (while (string-match "\\([ \t0-9]+\\),\\([ \t0-9]+\\)" str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1247 (setq retval (cons (vector (string-to-int (match-string 1 str))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1248 (string-to-int (match-string 2 str))) retval)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1249 str (substring str (match-end 0) nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1250 (if (string-match "\\([0-9]+\\)" str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1251 (setq retval (cons (vector (+ (aref (car retval) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1252 (string-to-int (match-string 1 str)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1253 (aref (car retval) 1)) retval)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1254 (nreverse retval)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1255
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1256 (defun w3-handle-area (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1257 (let ((type (downcase (or (cdr-safe (assq 'shape args)) "rect")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1258 (coords (w3-decode-area-coords (or (cdr-safe (assq 'coords args)) "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1259 (alt (cdr-safe (assq 'alt args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1260 (href (if (assq 'nohref args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1261 t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1262 (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1263 (or (cdr-safe (assq 'src args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1264 (cdr-safe (assq 'href args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1265 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1266 w3-base-alist)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1267 (map (w3-get-state :map)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1268 ;; data structure in storage is a vector
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1269 ;; if (href == t) then no action should be taken
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1270 ;; [ type coordinates href (hopefully)descriptive-text]
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1271 (setcdr map (cons (vector type coords href alt) (cdr map)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1272
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1273 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1274 ;;; Tags that don't really get drawn, etc.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1275 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1276 (defun w3-handle-body (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1277 (if (not w3-user-colors-take-precedence)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1278 (let* ((vlink (cdr-safe (assq 'vlink args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1279 (alink (cdr-safe (assq 'alink args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1280 (link (cdr-safe (assq 'link args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1281 (text (cdr-safe (assq 'text args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1282 (backg (cdr-safe (assq 'background args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1283 (rgb (or (cdr-safe (assq 'bgcolor args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1284 (cdr-safe (assq 'rgb args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1285 (temp-face nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1286 (sheet ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1287 (setq backg (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1288 backg
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1289 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1290 w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1291 (if (or text rgb backg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1292 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1293 (setq sheet "html {")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1294 (if text (setq sheet (format "%scolor: %s; " sheet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1295 (w3-normalize-color text))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1296 (if rgb (setq sheet (format "%sbackground: %s; "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1297 sheet (w3-normalize-color rgb))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1298 (if backg (setq sheet (format "%sbackdrop: %s; "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1299 sheet backg)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1300 (setq sheet (concat sheet " }\n"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1301 (if link
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1302 (setq sheet (format "%sa.link { color: %s }\n" sheet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1303 (w3-normalize-color link))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1304 (if vlink
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1305 (setq sheet (format "%sa.visited { color: %s }\n" sheet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1306 (w3-normalize-color vlink))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1307 (if alink
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1308 (setq sheet (format "%sa.active { color: %s }\n" sheet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1309 (w3-normalize-color alink))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1310 (if (/= (length sheet) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1311 (w3-handle-style (list (cons 'data sheet)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1312 (cons 'notation "css")))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1313
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1314 (defun w3-handle-cryptopts (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1315 (put 'text 'w3-formatter 'ack))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1316
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1317 (defun w3-handle-/cryptopts (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1318 (put 'text 'w3-formatter nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1319
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1320 (defun w3-handle-certs (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1321 (put 'text 'w3-formatter 'ack))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1322
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1323 (defun w3-handle-/certs (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1324 (put 'text 'w3-formatter nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1325
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1326 (defun w3-handle-base (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1327 (setq w3-base-alist (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1328 (cons (or (cdr-safe (assq 'name args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1329 (cdr-safe (assq 'id args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1330 (or (cdr-safe (assq 'href args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1331 (cdr-safe (assq 'src args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1332 (url-view-url t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1333 w3-base-alist)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1334
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1335 (defun w3-handle-isindex (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1336 (let ((prompt (or (cdr-safe (assq 'prompt args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1337 "Search on (+ separates keywords): "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1338 action)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1339 (setq action (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1340 (or (cdr-safe (assq 'src args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1341 (cdr-safe (assq 'href args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1342 (url-view-url t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1343 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1344 w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1345 (if (and prompt (string-match "[^: \t-]+$" prompt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1346 (setq prompt (concat prompt ": ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1347 (if w3-use-forms-index
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1348 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1349 (w3-handle-hr)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1350 (w3-handle-form (list (cons 'action action)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1351 (cons 'enctype "application/x-w3-isindex")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1352 (cons 'method "get")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1353 (w3-handle-text (concat prompt " "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1354 (w3-handle-input (list (cons 'type "text")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1355 (cons 'name "isindex")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1356 (setq w3-current-isindex (cons action prompt))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1357
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1358 (defun w3-handle-meta (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1359 (let* ((equiv (cdr-safe (assq 'http-equiv args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1360 (value (cdr-safe (assq 'content args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1361 (node (and equiv (assoc (setq equiv (downcase equiv))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1362 url-current-mime-headers))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1363 (if equiv
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1364 (setq url-current-mime-headers (cons (cons equiv value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1365 url-current-mime-headers)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1366 ;; Special-case the Set-Cookie header
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1367 (if (and equiv (string= (downcase equiv) "set-cookie"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1368 (url-cookie-handle-set-cookie value))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1369 ;; Special-case the refresh header
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1370 (if (and equiv (string= (downcase equiv) "refresh"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1371 (url-handle-refresh-header value))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1372
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1373 (defun w3-handle-link (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1374 (let* ((dest (cdr-safe (assq 'href args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1375 (type (if (assq 'rel args) "Parent of" "Child of"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1376 (desc (or (cdr-safe (assq 'rel args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1377 (cdr-safe (assq 'rev args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1378 (node-1 (assoc type w3-current-links))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1379 (node-2 (and node-1 desc (assoc desc (cdr node-1))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1380 (base (cdr-safe (assq 'base args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1381 (if dest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1382 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1383 (setq dest (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1384 dest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1385 (cdr-safe (assoc base w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1386 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1387 (node-2 ; Add to old value
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1388 (setcdr node-2 (cons dest (cdr node-2))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1389 (node-1 ; first rel/rev
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1390 (setcdr node-1 (cons (cons desc (list dest)) (cdr node-1))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1391 (t (setq w3-current-links
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1392 (cons (cons type (list (cons desc (list dest))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1393 w3-current-links))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1394 (if (and dest desc (member (downcase desc)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1395 '("style" "stylesheet")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1396 (w3-handle-style (list (cons 'src dest))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1397
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1398 (defun w3-maybe-start-image-download (widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1399 (let* ((src (widget-get widget 'src))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1400 (cached-glyph (w3-image-cached-p src)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1401 (if (and cached-glyph (w3-glyphp cached-glyph))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1402 (setq w3-image-widgets-waiting (cons widget
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1403 w3-image-widgets-waiting))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1404 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1405 ((or w3-delay-image-loads (not (fboundp 'valid-specifier-domain-p)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1406 nil) ; Do nothing, cannot do images
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1407 ((not (w3-image-loadable-p src nil)) ; Hey, we can't load it!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1408 (w3-warn 'images (format "Skipping image %s" (url-basepath src t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1409 (t ; Grab the images
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1410 (let (
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1411 (url-request-method "GET")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1412 (old-asynch url-be-asynchronous)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1413 (url-request-data nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1414 (url-request-extra-headers nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1415 (url-source t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1416 (url-mime-accept-string (substring
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1417 (mapconcat
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1418 (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1419 (lambda (x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1420 (if x
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1421 (concat (car x) ",")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1422 "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1423 w3-allowed-image-types "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1424 0 -1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1425 (url-working-buffer (generate-new-buffer-name " *W3GRAPH*")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1426 (setq-default url-be-asynchronous t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1427 (setq w3-graphics-list (cons (cons src (make-glyph))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1428 w3-graphics-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1429 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1430 (set-buffer (get-buffer-create url-working-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1431 (setq url-current-callback-data (list widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1432 url-be-asynchronous t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1433 url-current-callback-func 'w3-finalize-image-download)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1434 (url-retrieve src))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1435 (setq-default url-be-asynchronous old-asynch)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1436
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1437 (defun w3-finalize-image-download (widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1438 (let ((glyph nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1439 (url (widget-get widget 'src))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1440 (node nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1441 (buffer (widget-get widget 'buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1442 (message "Enhancing image...")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1443 (setq glyph (image-normalize (cdr-safe (assoc url-current-mime-type
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1444 w3-image-mappings))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1445 (buffer-string)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1446 (message "Enhancing image... done")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1447 (kill-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1448 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1449 ((w3-image-invalid-glyph-p glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1450 (w3-warn 'image (format "Reading of %s failed." url)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1451 ((eq (aref glyph 0) 'xbm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1452 (let ((temp-fname (url-generate-unique-filename "%s.xbm")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1453 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1454 (set-buffer (generate-new-buffer " *xbm-garbage*"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1455 (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1456 (insert (aref glyph 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1457 (setq glyph temp-fname)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1458 (write-region (point-min) (point-max) temp-fname)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1459 (kill-buffer (current-buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1460 (setq glyph (make-glyph (list (cons 'x glyph))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1461 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1462 (delete-file temp-fname)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1463 (error nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1464 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1465 (setq glyph (make-glyph glyph))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1466 (setq node (assoc url w3-graphics-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1467 (if node
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1468 (set-glyph-image (cdr node) (glyph-image glyph))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1469 (setq w3-graphics-list (cons (cons url glyph) w3-graphics-list)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1470
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1471 (if (and (buffer-name buffer) ; Dest. buffer exists
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1472 (w3-glyphp glyph)) ; got a valid glyph
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1473 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1474 (set-buffer buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1475 (if (eq major-mode 'w3-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1476 (widget-value-set widget glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1477 (setq w3-image-widgets-waiting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1478 (cons widget w3-image-widgets-waiting)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1479
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1480 (defun w3-handle-image (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1481 (let* ((parms args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1482 (height (cdr-safe (assq 'height parms)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1483 (width (cdr-safe (assq 'width parms)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1484 (src (or (cdr-safe (assq 'src parms))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1485 "Error Image"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1486 (our-alt (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1487 ((null w3-auto-image-alt) "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1488 ((eq t w3-auto-image-alt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1489 (concat "[IMAGE(" (url-basepath src t) ")] "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1490 ((stringp w3-auto-image-alt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1491 (format w3-auto-image-alt (url-basepath src t)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1492 (alt (or (cdr-safe (assq 'alt parms))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1493 our-alt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1494 (ismap (and (assq 'ismap args) 'ismap))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1495 (usemap (cdr-safe (assq 'usemap args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1496 (dest (w3-get-state :href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1497 (base (cdr-safe (assq 'base args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1498 (widget nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1499 (zone (w3-get-state :zone))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1500 (align (intern (or (cdr-safe (assq 'align parms)) "middle"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1501 (setq src (url-expand-file-name src
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1502 (cdr-safe (assoc base w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1503 (if dest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1504 (w3-handle-hyperlink-end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1505 (setq widget
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1506 (widget-create 'image
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1507 'src src ; Where to load the image from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1508 'alt alt ; Textual replacement
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1509 'ismap ismap ; Is it a server-side map?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1510 'usemap usemap ; Is it a client-side map?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1511 'href dest ; Hyperlink destination
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1512 ))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1513 (widget-put widget 'buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1514 (w3-maybe-start-image-download widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1515 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1516 (if dest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1517 (w3-handle-hyperlink (list (cons 'href dest))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1518
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1519 (defun w3-handle-title (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1520 (if (w3-get-state :title)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1521 (w3-put-state :title nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1522 (put 'text 'w3-formatter 'w3-handle-title-text))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1523
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1524 (defun w3-handle-title-text (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1525 (w3-put-state :title
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1526 (concat (w3-get-state :title) args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1527
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1528 (defun w3-handle-/title (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1529 (put 'text 'w3-formatter nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1530 (let ((ttl (w3-get-state :title)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1531 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1532 ((and (symbolp ttl) (eq ttl t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1533 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1534 ((stringp ttl)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1535 (setq ttl (w3-fix-spaces ttl))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1536 (if (and ttl (string= ttl ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1537 (setq ttl (w3-fix-spaces (url-view-url t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1538 (rename-buffer (url-generate-new-buffer-name ttl))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1539 ;; Make the URL show in list-buffers output
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1540 (make-local-variable 'list-buffers-directory)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1541 (setq list-buffers-directory (url-view-url t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1542 (w3-put-state :title t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1543 (t nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1544
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1545 (fset 'w3-handle-/head 'w3-handle-/title)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1546
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1547 (defun w3-handle-hyperlink (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1548 (let* ((href-node (assq 'href args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1549 (href (cdr href-node))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1550 (title (cdr-safe (assq 'title args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1551 (base (cdr-safe (assq 'base args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1552 (name (or (cdr-safe (assq 'id args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1553 (cdr-safe (assq 'name args)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1554 (if href
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1555 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1556 (setq href (url-expand-file-name href (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1557 (assoc base w3-base-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1558 (setcdr href-node href)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1559 (w3-put-state :seen-this-url (url-have-visited-url href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1560 (if (and w3-delimit-links (not (eq w3-delimit-links 'linkname)) href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1561 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1562 (if (w3-get-state :seen-this-url)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1563 (w3-handle-text (cdr w3-link-start-delimiter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1564 (w3-handle-text (car w3-link-start-delimiter)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1565 (w3-put-state :needspace 'never)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1566 (w3-put-state :zone (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1567 (w3-put-state :link-args args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1568 (if title (w3-put-state :link-title title))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1569 (if href (w3-put-state :href href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1570 (if name (w3-put-state :name name))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1571
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1572 (defun w3-follow-hyperlink (widget &rest ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1573 (let ((target (widget-get widget 'target))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1574 (href (widget-get widget 'href)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1575 (if target (setq target (intern (downcase target))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1576 (case target
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1577 ((_blank external)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1578 (w3-fetch-other-frame href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1579 (_top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1580 (delete-other-windows)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1581 (w3-fetch href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1582 (otherwise
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1583 (w3-fetch href)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1584
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1585 (defun w3-handle-hyperlink-end (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1586 (let* ((href (w3-get-state :href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1587 (old-args (w3-get-state :link-args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1588 (name (w3-get-state :name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1589 (zone (w3-get-state :zone))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1590 (btdt (and href (w3-get-state :seen-this-url)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1591 (tag 'a)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1592 (args (list (cons 'class (if btdt "visited" "link"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1593 (face (cdr (w3-face-for-element)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1594 (old-face (and zone (get-text-property zone 'face)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1595 (faces (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1596 ((and old-face (consp old-face)) (cons face old-face))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1597 (old-face (cons face (list old-face)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1598 (t (list face)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1599 (if (not href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1600 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1601 (add-text-properties zone (point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1602 (list 'mouse-face 'highlight
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1603 'button
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1604 (append
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1605 (list 'push :args nil :value "" :tag ""
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1606 :notify 'w3-follow-hyperlink
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1607 :from (set-marker (make-marker) zone)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1608 :to (set-marker (make-marker) (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1609 :help-echo (case w3-echo-link
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1610 (text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1611 (buffer-substring
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1612 zone (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1613 (url href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1614 (otherwise nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1615 (alist-to-plist old-args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1616 'face faces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1617 'title (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1618 (set-marker (make-marker) zone)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1619 (set-marker (make-marker) (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1620 'help-echo href))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1621 (w3-put-state :zone nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1622 (w3-put-state :href nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1623 (w3-put-state :name nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1624
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1625 (if (and w3-delimit-links href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1626 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1627 (delete-region (point) (progn (skip-chars-backward " ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1628 (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1629 (if (eq w3-delimit-links 'linkname)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1630 (w3-handle-text (concat (if btdt (cdr w3-link-start-delimiter)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1631 (car w3-link-start-delimiter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1632 (or name "noname")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1633 (if btdt (cdr w3-link-end-delimiter)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1634 (car w3-link-end-delimiter))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1635 (if btdt
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1636 (w3-handle-text (cdr w3-link-end-delimiter))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1637 (w3-handle-text (car w3-link-end-delimiter)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1638 (goto-char (point-max)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1639 (if (and w3-link-info-display-function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1640 (fboundp w3-link-info-display-function))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1641 (let ((info (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1642 (funcall w3-link-info-display-function href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1643 (error nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1644 (if (and info (stringp info))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1645 (w3-handle-text info)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1646
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1647 (defvar w3-tab-alist nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1648 "An assoc list of tab stops and their respective IDs")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1649 (make-variable-buffer-local 'w3-tab-alist)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1650
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1651 (defun w3-handle-tab (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1652 (let* ((id (cdr-safe (assq 'id args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1653 (to (cdr-safe (assq 'to args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1654 (pos (cdr-safe (assoc to w3-tab-alist))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1655 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1656 (id ; Define a new tab stop
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1657 (setq w3-tab-alist (cons (cons id (current-column)) w3-tab-alist)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1658 ((and to pos) ; Go to a currently defined tabstop
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1659 (while (<= (current-column) pos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1660 (insert " ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1661 (to ; Tabstop 'to' is no defined yet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1662 (w3-warn 'html (format "Unkown tab stop -- `%s'" to)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1663 (t ; Just do a tab
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1664 (insert (make-string w3-indent-level ? ))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1665
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1666 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1667 ;;; Some bogus shit for pythia
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1668 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1669 (defun w3-handle-margin (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1670 (if (assq 'reset args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1671 (w3-handle-/blockquote nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1672 (w3-handle-blockquote nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1673
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1674 (fset 'w3-handle-l 'w3-handle-br)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1675
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1676 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1677 ;;; Guts of the forms interface for the new display engine
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1678 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1679 (defun w3-handle-form (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1680 (let ((actn (cdr-safe (assq 'action args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1681 (enct (cdr-safe (assq 'enctype args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1682 (meth (cdr-safe (assq 'method args))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1683 (if (not meth) (setq args (cons (cons 'method "GET") args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1684 (if (not actn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1685 (setq args (cons (cons 'action
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1686 (or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1687 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1688 w3-base-alist))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1689 (url-view-url t))) args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1690 (setcdr (assq 'action args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1691 (url-expand-file-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1692 actn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1693 (cdr-safe (assoc (cdr-safe (assq 'base args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1694 w3-base-alist)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1695 (if (not enct)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1696 (setq args
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1697 (cons (cons 'enctype "application/x-www-form-urlencoded")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1698 args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1699 (w3-put-state :form args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1700
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1701 (defun w3-handle-/form (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1702 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1703 (w3-put-state :form nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1704 (w3-put-state :formnum (1+ (w3-get-state :formnum)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1705 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1706
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1707 (defun w3-handle-keygen (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1708 (w3-form-add-element 'keygen
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1709 (or (cdr-safe (assq 'name args)) "")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1710 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1711 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1712 1000
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1713 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1714 (w3-get-state :form)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1715 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1716 (w3-get-state :formnum)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1717 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1718 (w3-face-for-element)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1719
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1720 (defun w3-handle-input (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1721 (if (or (not (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1722 (w3-get-state :select))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1723 (w3-warn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1724 'html
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1725 "<input> outside of a <form> or inside <select> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1726 (let* ((type (intern (downcase (or (cdr-safe (assq 'type args)) "text"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1727 (name (cdr-safe (assq 'name args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1728 (value (or (cdr-safe (assq 'value args)) ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1729 (size (string-to-int (or (cdr-safe (assq 'size args)) "20")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1730 (maxlength (cdr (assoc 'maxlength args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1731 (default value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1732 (action (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1733 (options)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1734 (num (w3-get-state :formnum))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1735 (id (cdr-safe (assq 'id args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1736 (checked (assq 'checked args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1737 (face (w3-face-for-element)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1738 (if (and (string-match "^[ \t\n\r]+$" value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1739 (not (eq type 'hidden)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1740 (setq value ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1741 (if maxlength (setq maxlength (string-to-int maxlength)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1742 (if (and name (string-match "[\r\n]" name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1743 (setq name (mapconcat (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1744 (lambda (x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1745 (if (memq x '(?\r ?\n))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1746 ""
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1747 (char-to-string x))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1748 name "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1749 (if (memq type '(checkbox radio)) (setq default checked))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1750 (if (and (eq type 'checkbox) (string= value ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1751 (setq value "on"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1752 (w3-form-add-element type name value size maxlength default action
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1753 options num id checked face))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1754
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1755 (defun w3-handle-/select (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1756 (if (not (and (w3-get-state :form)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1757 (w3-get-state :select)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1758 (w3-warn 'html
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1759 "</select> outside of a <form> or <select> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1760 (put 'text 'w3-formatter 'w3-handle-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1761 (let* ((args (w3-get-state :select))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1762 (tag 'input)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1763 (face (w3-face-for-element))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1764 (opts (w3-get-state :options))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1765 (form (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1766 (max-size nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1767 (type "OPTION")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1768 (default nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1769 (tmp nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1770 (id (cdr-safe (assq 'id args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1771 (checked nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1772 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1773 (setq tmp (reverse opts))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1774 (if (assq 'multiple args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1775 (let ((tag 'ul) ; Convert to a list of checkboxes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1776 (nam (or (cdr-safe (assq 'name args)) "option"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1777 (old (w3-get-state :align))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1778 (first nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1779 (w3-put-state :options nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1780 (w3-put-state :select nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1781 (w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1782 (w3-put-state :align nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1783 (while tmp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1784 (w3-handle-list-item)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1785 (w3-handle-input (list (cons 'type "checkbox")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1786 (cons 'name nam)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1787 (cons 'value
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1788 (or (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1789 (assq 'value (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1790 (cdr-safe
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1791 (assoc 'ack (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1792 "unknown"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1793 (if (or (assq 'checked (car tmp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1794 (assq 'selected (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1795 (cons 'checked "checked"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1796 (w3-handle-text (concat " " (or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1797 (cdr-safe (assq 'ack (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1798 "unknown")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1799 (setq tmp (cdr tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1800 (w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1801 (w3-put-state :align old))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1802 (while (and (not default) tmp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1803 (if (or (assq 'checked (car tmp))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1804 (assq 'selected (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1805 (setq default (car tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1806 (setq tmp (cdr tmp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1807 (setq default (cdr (assq 'ack (or default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1808 (nth (1- (length opts)) opts))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1809 checked (mapcar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1810 (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1811 (lambda (x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1812 (cons (cdr-safe (assq 'ack x))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1813 (or (cdr-safe (assq 'value x))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1814 (cdr-safe (assq 'ack x))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1815 opts)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1816 max-size (car (sort (mapcar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1817 (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1818 (lambda (x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1819 (length (cdr-safe (assq 'ack x)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1820 opts)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1821 '>)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1822 (if (and form args opts)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1823 (let ((pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1824 (siz (max max-size
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1825 (string-to-int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1826 (or (cdr-safe (assq 'size args)) "0")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1827 (w3-form-add-element 'option
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1828 (or (cdr-safe (assq 'name args)) "option")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1829 default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1830 siz
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1831 (string-to-int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1832 (or (cdr-safe (assq 'maxlength args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1833 "1000"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1834 default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1835 (w3-get-state :form)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1836 checked
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1837 (w3-get-state :formnum)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1838 nil checked face)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1839 (w3-put-state :options nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1840 (w3-put-state :select nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1841
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1842 (defun w3-handle-option-data (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1843 (let ((text (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1844 ((null args) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1845 ((stringp args) args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1846 ((listp args) (mapconcat 'identity args " ")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1847 (if text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1848 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1849 (setq text (url-strip-leading-spaces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1850 (url-eat-trailing-space text)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1851 (w3-put-state :options (cons (cons (cons 'ack text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1852 (w3-get-state :optargs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1853 (w3-get-state :options))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1854 (put 'text 'w3-formatter 'w3-handle-text))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1855
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1856 (defun w3-handle-option (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1857 (if (not (and (w3-get-state :form)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1858 (w3-get-state :select)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1859 (w3-warn 'html
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1860 "<option> outside of a <form> or <select> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1861 (w3-put-state :optargs args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1862 (put 'text 'w3-formatter 'w3-handle-option-data)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1863
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1864 (defun w3-handle-select (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1865 (if (not (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1866 (w3-warn 'html "<select> outside of a <FORM> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1867 (w3-put-state :select args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1868 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1869
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1870 (defun w3-handle-textarea (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1871 (if (not (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1872 (w3-warn 'html "<textarea> outside of a <FORM> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1873 (let ((node (assq 'maxlength args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1874 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1875 ((null node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1876 (setq args (cons (cons 'maxlength nil) args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1877 ((null (cdr-safe node))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1878 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1879 ((string= (downcase (cdr-safe node)) "unlimited")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1880 (setcdr node nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1881 (let* (
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1882 (face (let ((tag 'input)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1883 (args nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1884 (w3-face-for-element)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1885 (value (cdr-safe (assq 'data args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1886 (type "TEXTAREA")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1887 (name (cdr-safe (assq 'name args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1888 (size (string-to-int (or (cdr-safe (assq 'size args)) "20")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1889 (maxlength (string-to-int
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1890 (or (cdr (assq 'maxlength args)) "10000")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1891 (default nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1892 (action (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1893 (options)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1894 (pos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1895 (num (w3-get-state :formnum))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1896 (id (cdr-safe (assq 'id args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1897 (checked (assq 'checked args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1898 (setq default value
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1899 pos (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1900 (put 'text 'w3-formatter 'w3-handle-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1901 (w3-form-add-element 'multiline name value size maxlength default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1902 action options num id checked face))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1903
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1904 (defun w3-handle-label-text (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1905 (setcdr (w3-get-state :label-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1906 (concat (cdr (w3-get-state :label-text)) args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1907 (w3-handle-text args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1908
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1909 (defun w3-handle-/label (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1910 (let ((num (w3-get-state :formnum))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1911 (dat (w3-get-state :label-text)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1912 (setq w3-form-labels (cons (cons (format "%d:%s" num (car dat))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1913 (cdr dat))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1914 w3-form-labels))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1915 (put 'text 'w3-formatter 'w3-handle-text)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1916
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1917 (defun w3-handle-label (&optional args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1918 (if (not (w3-get-state :form))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1919 (w3-warn 'html "<label> outside of a <FORM> construct - ERROR!!")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1920 (put 'text 'w3-formatter 'w3-handle-label-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1921 (w3-put-state :label-text (cons (or (cdr-safe (assq 'for args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1922 "Unknown label") ""))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1923
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1924 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1925 ;;; For displaying the buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1926 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1927 (defun w3-show-buffer ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1928 (let ((potential-title
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1929 (and (not (w3-get-state :title))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1930 (url-generate-new-buffer-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1931 (url-basepath url-current-file t)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1932 (if (and potential-title (string= potential-title ""))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1933 (setq potential-title
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1934 (url-generate-new-buffer-name url-current-file)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1935 (if (and potential-title (not (string= potential-title "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1936 (rename-buffer potential-title)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1937 (setq inhibit-read-only nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1938 (if url-find-this-link
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1939 (w3-find-specific-link url-find-this-link))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1940 (let* ((tag 'html)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1941 (args nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1942 (face (cdr (w3-face-for-element))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1943 (and face
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1944 (if (not (fboundp 'valid-specifier-locale-p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1945 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1946 (w3-my-safe-copy-face face 'default (current-buffer))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1947
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1948 (defun w3-parse-header-link-items ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1949 ;; Parse `url-current-mime-headers' and look for any <link> items
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1950 (let ((items url-current-mime-headers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1951 (node nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1952 (url nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1953 (type nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1954 (args nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1955 (title nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1956 (label nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1957 (while items
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1958 (setq node (car items)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1959 items (cdr items))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1960 (if (string= (car node) "link")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1961 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1962 (setq args (mm-parse-args (cdr node))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1963 type (if (assoc "rel" args) "rel" "rev")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1964 label (cdr-safe (assoc type args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1965 title (cdr-safe (assoc "title" args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1966 url (car-safe (rassoc nil args)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1967 (if (string-match "^<.*>$" url)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1968 (setq url (substring url 1 -1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1969 (and url label type
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1970 (w3-handle-link (list (cons "href" url)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1971 (cons type label)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1972 (cons "title" title)))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1973
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1974 (defun w3-refresh-buffer (&rest args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1975 "Redraw the current buffer - this does not refetch or reparse the current
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1976 document, but uses the stored parse data."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1977 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1978 (let ((buffer-read-only nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1979 (if (get-buffer url-working-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1980 (kill-buffer url-working-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1981 (error "Not yet reimplemented... sorry.")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1982
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1983 (defun w3-prepare-buffer (&rest args)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1984 ;; The text/html viewer - does all the drawing and displaying of the buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1985 ;; that is necessary to go from raw HTML to a good presentation.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1986 (let ((active-minibuffer-window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1987 (if (minibuffer-window-active-p (minibuffer-window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1988 (minibuffer-window))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1989 (let ((pop-up-windows nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1990 (if active-minibuffer-window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1991 (let* ((current-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1992 (window (get-buffer-window current-buffer t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1993 (cond (window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1994 (and (fboundp 'select-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1995 (fboundp 'window-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1996 (select-frame (window-frame window)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1997 (select-window window))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1998 ((and (fboundp 'selected-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1999 (fboundp 'window-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2000 (eq (selected-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2001 (window-frame (minibuffer-window))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2002 ;; on minibuffer-only-frame
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2003 (select-frame (previous-frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2004 (select-window (frame-first-window (selected-frame))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2005 ((fboundp 'frame-first-window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2006 (select-window (frame-first-window))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2007 (set-buffer current-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2008 (let* ((source (buffer-string))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2009 (parse (w3-preparse-buffer (current-buffer)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2010 (buff (car parse)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2011 (set-buffer-modified-p nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2012 (kill-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2013 (set-buffer buff)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2014 (setq w3-current-source source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2015 w3-current-parse w3-last-parse-tree)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2016 (w3-parse-header-link-items)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2017 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2018 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2019 (w3-handle-paragraph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2020 (if (and (boundp 'w3-image-widgets-waiting) w3-image-widgets-waiting)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2021 (let (url glyph widget)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2022 (while w3-image-widgets-waiting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2023 (setq widget (car w3-image-widgets-waiting)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2024 w3-image-widgets-waiting (cdr w3-image-widgets-waiting)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2025 url (widget-get widget 'src)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2026 glyph (cdr-safe (assoc url w3-graphics-list)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2027 (widget-value-set widget glyph))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2028 (w3-mode)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2029 (w3-handle-annotations)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2030 (w3-handle-headers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2031 (set-buffer-modified-p nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2032 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2033 (switch-to-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2034 (or active-minibuffer-window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2035 (let ((window nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2036 (pop-up-windows nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2037 (display-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2038 (if (or w3-running-FSF19 w3-running-xemacs)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2039 (setq window (get-buffer-window (current-buffer) t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2040 (setq window (get-buffer-window (current-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2041 (select-window window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2042 (if (and (fboundp 'select-frame)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2043 (fboundp 'window-frame))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2044 (select-frame (window-frame window)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2045 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2046 (w3-show-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2047 (if url-keep-history
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2048 (let ((url (url-view-url t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2049 (if (not (url-hashtablep url-history-list))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2050 (setq url-history-list (url-make-hashtable 131)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2051 (url-puthash url (buffer-name) url-history-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2052 (if (fboundp 'w3-shuffle-history-menu)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2053 (w3-shuffle-history-menu)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2054 (cond (active-minibuffer-window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2055 (select-window active-minibuffer-window)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2056 (sit-for 0)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2057
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2058 (defun w3-handle-headers ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2059 ;; Insert any headers the user wants to see into the current buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2060 (let ((show w3-show-headers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2061 (cur nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2062 (hdrs nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2063 (tag 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2064 (header nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2065 (w3-last-fill-pos (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2066 (val nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2067 (first t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2068 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2069 (if (eq show t) (setq show '(".*")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2070 (while show
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2071 (setq cur (car show)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2072 show (cdr show)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2073 hdrs url-current-mime-headers)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2074 (while hdrs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2075 (setq header (car (car hdrs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2076 val (cdr (car hdrs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2077 hdrs (cdr hdrs))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2078 (if (numberp val) (setq val (int-to-string val)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2079 (if (and (/= 0 (length header))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2080 (string-match cur header))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2081 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2082 (if first
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2083 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2084 (w3-handle-hr)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2085 (w3-handle-list-opening '(("value" . 1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2086 (setq tag 'li
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2087 first nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2088 (w3-handle-list-item)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2089 (w3-handle-text (concat (capitalize header)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2090 ": " val))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2091 (if (not first) ; We showed some headers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2092 (setq tag '/ol
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2093 tag (w3-handle-list-ending)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2094
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2095 (defun w3-handle-annotations ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2096 ;; Insert personal annotations into the current buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2097 (let ((annos (w3-fetch-personal-annotations))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2098 (tag nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2099 (if (not annos)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2100 nil ; No annotations
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2101 (goto-char (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2102 ((eq w3-annotation-position 'bottom) (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2103 ((eq w3-annotation-position 'top) (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2104 (t (message "Bad value for w3-annotation-position")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2105 (point-max))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2106 (w3-handle-div '((class . "annotations")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2107 (w3-handle-hr '((width . "75%")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2108 (label . " Personal Annotations ")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2109 (align . "center")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2110 (setq tag 'ol)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2111 (w3-handle-list-opening)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2112 (while annos
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2113 (w3-handle-list-item)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2114 (w3-handle-hyperlink (list (cons 'href (car (car annos)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2115 (w3-handle-text (cdr (car annos)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2116 (w3-handle-hyperlink-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2117 (setq annos (cdr annos)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2118 (w3-handle-list-ending)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2119 (w3-handle-hr '((width . "75%")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2120 (align . "center")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2121 (w3-handle-/div)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2122 )))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2123
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2124 (defun w3-fetch-personal-annotations ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2125 ;; Grab any personal annotations for the current url
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2126 (let ((url (url-view-url t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2127 (anno w3-personal-annotations)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2128 (annolist nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2129 (if (assoc url anno)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2130 (while anno
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2131 (if (equal (car (car anno)) url)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2132 (setq annolist
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2133 (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2134 (cons
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2135 (format "file:%s%s/PAN-%s.html"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2136 (if (= ?/ (string-to-char
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2137 w3-personal-annotation-directory)) ""
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2138 "/")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2139 w3-personal-annotation-directory
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2140 (car (car (cdr (car anno)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2141 (car (cdr (car (cdr (car anno))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2142 annolist)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2143 (setq anno (cdr anno))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2144 annolist))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2145
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2146 (defun w3-normalize-spaces (string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2147 ;; nuke spaces at the beginning
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2148 (if (string-match "^[ \t\r\n]+" string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2149 (setq string (substring string (match-end 0))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2150
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2151 ;; nuke spaces in the middle
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2152 (while (string-match "[ \t\r\n][ \r\t\n]+" string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2153 (setq string (concat (substring string 0 (1+ (match-beginning 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2154 (substring string (match-end 0)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2155
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2156 ;; nuke spaces at the end
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2157 (if (string-match "[ \t\n\r]+$" string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2158 (setq string (substring string 0 (match-beginning 0))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2159 string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2160
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2161 (defun w3-upcase-region (st nd &optional end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2162 (and st nd (upcase-region st nd)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2163
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2164 (provide 'w3-draw)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2165