annotate lisp/w3/w3-imap.el @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents 0293115a14e9
children 1ce6082ce73f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
1 ;;; w3-imap.el --- Imagemap functions
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;; Author: wmperry
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
3 ;; Created: 1996/06/30 18:07:16
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
4 ;; Version: 1.2
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;; Keywords: 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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
8 ;;; Copyright (c) 1996 by William M. Perry (wmperry@cs.indiana.edu)
0
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 part of GNU Emacs.
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
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
23 ;;; along with GNU Emacs; see the file COPYING. If not, write to
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
24 ;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
0
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 (require 'w3-vars)
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
28 (require 'widget)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents: 16
diff changeset
29 (require 'widget-edit)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 (eval-when-compile
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 (defmacro x-coord (pt) (list 'aref pt 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 (defmacro y-coord (pt) (list 'aref pt 1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 (defun w3-point-in-rect (point coord1 coord2 &rest ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 "Return t iff POINT is within a rectangle defined by COORD1 and COORD2.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 All arguments are vectors of [X Y] coordinates."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 ;; D'uhhh, this is hard.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 (and (>= (x-coord point) (x-coord coord1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 (<= (x-coord point) (x-coord coord2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 (>= (y-coord point) (y-coord coord1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 (<= (y-coord point) (y-coord coord2))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 (defun w3-point-in-circle (point coord1 coord2 &rest ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 "Return t iff POINT is within a circle defined by COORD1 and COORD2.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 All arguments are vectors of [X Y] coordinates."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 ;; D'uhhh, this is (barely) slightly harder.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (let (radius1 radius2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (setq radius1 (+
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 (*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 (- (y-coord coord1) (y-coord coord2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 (- (y-coord coord1) (y-coord coord2)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 (*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 (- (x-coord coord1) (x-coord coord2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (- (x-coord coord1) (x-coord coord2)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 radius2 (+
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (- (y-coord coord1) (y-coord point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 (- (y-coord coord1) (y-coord point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 (- (x-coord coord1) (x-coord point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 (- (x-coord coord1) (x-coord point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 (<= radius2 radius1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 ;; A polygon is a vector
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 ;; poly[0] = # of sides
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 ;; poly[1] = # of sides used
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 ;; poly[2] = vector of X coords
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 ;; poly[3] = vector of Y coords
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 (defsubst w3-image-poly-nsegs (p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 (aref p 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 (defsubst w3-image-poly-used-segs (p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 (aref p 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (defsubst w3-image-poly-x-coords (p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 (aref p 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 (defsubst w3-image-poly-y-coords (p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 (aref p 3))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 (defsubst w3-image-poly-x-coord (p n)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 (aref (w3-image-poly-x-coords p) n))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 (defsubst w3-image-poly-y-coord (p n)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (aref (w3-image-poly-y-coords p) n))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (defun w3-image-poly-alloc (n)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 (if (< n 3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 (error "w3-image-poly-alloc: invalid number of sides (%d)" n))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (vector n 0 (make-vector n nil) (make-vector n nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 (defun w3-image-poly-assign (p x y)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 (if (>= (w3-image-poly-used-segs p) (w3-image-poly-nsegs p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 (error "w3-image-poly-assign: out of space in the w3-image-polygon"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 (aset (w3-image-poly-x-coords p) (w3-image-poly-used-segs p) x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 (aset (w3-image-poly-y-coords p) (w3-image-poly-used-segs p) y)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (aset p 1 (1+ (w3-image-poly-used-segs p))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 (defun w3-image-ccw (p0 p1 p2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 (let (dx1 dx2 dy1 dy2 retval)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 (setq dx1 (- (x-coord p1) (x-coord p0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 dy1 (- (y-coord p1) (y-coord p0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 dx2 (- (x-coord p2) (x-coord p0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 dy2 (- (y-coord p2) (y-coord p0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 ((> (* dx1 dy2) (* dy1 dx2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 (setq retval 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 ((< (* dx1 dy2) (* dy1 dx2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 (setq retval -1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 ((or (< (* dx1 dx2) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 (< (* dy1 dy2) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (setq retval -1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 ((< (+ (* dx1 dx1) (* dy1 dy1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 (+ (* dx2 dx2) (* dy2 dy2)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 (setq retval 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (t
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 (setq retval 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 retval))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (defun w3-image-line-intersect (l1 l2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 (and (<= (* (w3-image-ccw (car l1) (cdr l1) (car l2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 (w3-image-ccw (car l1) (cdr l1) (cdr l2))) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 (<= (* (w3-image-ccw (car l2) (cdr l2) (car l1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (w3-image-ccw (car l2) (cdr l2) (cdr l1))) 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 (defun w3-point-in-poly (point &rest pgon)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 "Return t iff POINT is within a polygon defined by the list of points PGON.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 All arguments are either vectors of [X Y] coordinates or lists of such
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 vectors."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 ;; Right now, this fails on some points that are right on a line segment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 ;; but it works for everything else (I think)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (if (< (length pgon) 3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 ;; Malformed polygon!!!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (let ((p (w3-image-poly-alloc (length pgon)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (hitcount 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (i 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 (ip1 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (l1 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 (l2 (cons (vector (x-coord point) (1+ (y-coord point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 (vector (x-coord point) (y-coord point))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 )
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 (while pgon
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (w3-image-poly-assign p (x-coord (car pgon)) (y-coord (car pgon)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (setq pgon (cdr pgon)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (while (< i (w3-image-poly-nsegs p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 ;; Check for wraparound
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 (setq ip1 (1+ i))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 (if (= ip1 (w3-image-poly-nsegs p))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (setq ip1 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 (setq l1 (cons (vector (w3-image-poly-x-coord p i)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 (w3-image-poly-y-coord p i))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 (vector (w3-image-poly-x-coord p ip1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (w3-image-poly-y-coord p ip1))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 (if (w3-image-line-intersect l1 l2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 (setq hitcount (1+ hitcount)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (setq i (1+ i)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 (= 1 (% hitcount 2)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 (defun w3-point-in-default (point &rest ignore)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (defun w3-point-in-map (point map &optional alt-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 (let (func args done cur default slot)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 (setq slot (if alt-text 3 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 (while (and map (not done))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 (setq cur (car map)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 func (intern-soft (format "w3-point-in-%s" (aref cur 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 args (aref cur 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 done (and func (fboundp func) (apply func point args))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 map (cdr map))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 (if (equal (aref cur 0) "default")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 (setq default (aref cur slot)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 done nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 ((and done (aref cur 2)) ; Found a link
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (if alt-text
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 (or (aref cur 3) (aref cur 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 (aref cur slot)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 (default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 default)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 (t nil))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 ;;; Regular image stuff
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (defvar w3-allowed-image-types
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 (mapcar (function (lambda (x) (list (car x)))) w3-image-mappings))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (defvar w3-image-size-restriction nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 (defmacro w3-image-cached-p (href)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 "Return non-nil iff HREF is in the image cache."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 (` (cdr-safe (assoc (, href) w3-graphics-list))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 (defun w3-image-loadable-p (href force)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 (let ((attribs (url-file-attributes href)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 (or force
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 (assoc (nth 8 attribs) w3-allowed-image-types)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 (null w3-image-size-restriction)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 (<= (nth 7 attribs) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 (and (numberp w3-image-size-restriction)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 (<= (nth 7 attribs) w3-image-size-restriction)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 (defmacro w3-image-invalid-glyph-p (glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 (` (or (null (aref (, glyph) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 (null (aref (, glyph) 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 (equal (aref (, glyph) 2) ""))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 ;; data structure in storage is a vector
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 ;; if (href == t) then no action should be taken
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 ;; [ type coordinates href (hopefully)descriptive-text]
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 (provide 'w3-imap)