Mercurial > hg > xemacs-beta
comparison lisp/w3/w3-display.el @ 108:360340f9fd5f r20-1b6
Import from CVS: tag r20-1b6
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:18:39 +0200 |
parents | a145efe76779 |
children | fe104dbd9147 |
comparison
equal
deleted
inserted
replaced
107:523141596bda | 108:360340f9fd5f |
---|---|
1 ;;; w3-display.el --- display engine v99999 | 1 ;;; w3-display.el --- display engine v99999 |
2 ;; Author: wmperry | 2 ;; Author: wmperry |
3 ;; Created: 1997/02/20 21:48:44 | 3 ;; Created: 1997/03/06 04:12:42 |
4 ;; Version: 1.135 | 4 ;; Version: 1.144 |
5 ;; Keywords: faces, help, hypermedia | 5 ;; Keywords: faces, help, hypermedia |
6 | 6 |
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
8 ;;; Copyright (c) 1996 by William M. Perry (wmperry@cs.indiana.edu) | 8 ;;; Copyright (c) 1996 by William M. Perry (wmperry@cs.indiana.edu) |
9 ;;; Copyright (c) 1996, 1997 Free Software Foundation, Inc. | 9 ;;; Copyright (c) 1996, 1997 Free Software Foundation, Inc. |
40 (defvar w3-cookie-cache nil) | 40 (defvar w3-cookie-cache nil) |
41 | 41 |
42 (defmacro w3-d-s-var-def (var) | 42 (defmacro w3-d-s-var-def (var) |
43 (` (make-variable-buffer-local (defvar (, var) nil)))) | 43 (` (make-variable-buffer-local (defvar (, var) nil)))) |
44 | 44 |
45 (w3-d-s-var-def w3-display-label-marker) | |
45 (w3-d-s-var-def w3-display-open-element-stack) | 46 (w3-d-s-var-def w3-display-open-element-stack) |
46 (w3-d-s-var-def w3-display-alignment-stack) | 47 (w3-d-s-var-def w3-display-alignment-stack) |
47 (w3-d-s-var-def w3-display-list-stack) | 48 (w3-d-s-var-def w3-display-list-stack) |
48 (w3-d-s-var-def w3-display-form-id) | 49 (w3-d-s-var-def w3-display-form-id) |
49 (w3-d-s-var-def w3-display-whitespace-stack) | 50 (w3-d-s-var-def w3-display-whitespace-stack) |
256 (setq w3-face-face | 257 (setq w3-face-face |
257 (w3-make-face (intern (format "w3-style-face-%05d" w3-face-index)) | 258 (w3-make-face (intern (format "w3-style-face-%05d" w3-face-index)) |
258 "An Emacs-W3 face... don't edit by hand." t) | 259 "An Emacs-W3 face... don't edit by hand." t) |
259 w3-face-index (1+ w3-face-index)) | 260 w3-face-index (1+ w3-face-index)) |
260 (if w3-face-font-spec | 261 (if w3-face-font-spec |
261 (set-face-font w3-face-face w3-face-font-spec)) | 262 (font-set-face-font w3-face-face w3-face-font-spec)) |
262 (if (car w3-face-color) | 263 (if (car w3-face-color) |
263 (set-face-foreground w3-face-face (car w3-face-color))) | 264 (font-set-face-foreground w3-face-face (car w3-face-color))) |
264 (if (car w3-face-background-color) | 265 (if (car w3-face-background-color) |
265 (set-face-background w3-face-face (car w3-face-background-color))) | 266 (font-set-face-background w3-face-face (car w3-face-background-color))) |
266 ;;(set-face-background-pixmap w3-face-face w3-face-pixmap) | 267 ;;(set-face-background-pixmap w3-face-face w3-face-pixmap) |
267 (setq w3-face-cache (cons | 268 (setq w3-face-cache (cons |
268 (cons w3-face-descr w3-face-face) | 269 (cons w3-face-descr w3-face-face) |
269 w3-face-cache))) | 270 w3-face-cache))) |
270 w3-face-face) | 271 w3-face-face) |
409 (setq check (cons check '(title url text name)))) | 410 (setq check (cons check '(title url text name)))) |
410 (catch 'exit | 411 (catch 'exit |
411 (while check | 412 (while check |
412 (and (boundp (car check)) | 413 (and (boundp (car check)) |
413 (stringp (symbol-value (car check))) | 414 (stringp (symbol-value (car check))) |
415 (> (length (symbol-value (car check))) 0) | |
414 (throw 'exit (symbol-value (car check)))) | 416 (throw 'exit (symbol-value (car check)))) |
415 (pop check))))) | 417 (pop check))))) |
416 | 418 |
417 (defun w3-follow-hyperlink (widget &rest ignore) | 419 (defun w3-follow-hyperlink (widget &rest ignore) |
418 (let* ((target (or (widget-get widget 'target) | 420 (let* ((target (or (widget-get widget 'target) |
424 (w3-fetch-other-frame href)) | 426 (w3-fetch-other-frame href)) |
425 (_top | 427 (_top |
426 (delete-other-windows) | 428 (delete-other-windows) |
427 (w3-fetch href)) | 429 (w3-fetch href)) |
428 (otherwise | 430 (otherwise |
429 (and target | 431 (w3-fetch href target))))) |
430 (let ((window-distance (cdr-safe (assq target w3-target-window-distances)))) | |
431 (if (numberp window-distance) | |
432 (other-window window-distance) | |
433 (error "target %S not found." target)))) | |
434 (w3-fetch href))))) | |
435 | 432 |
436 (defun w3-balloon-help-callback (object &optional event) | 433 (defun w3-balloon-help-callback (object &optional event) |
437 (let* ((widget (widget-at (extent-start-position object))) | 434 (let* ((widget (widget-at (extent-start-position object))) |
438 (href (and widget (widget-get widget 'href)))) | 435 (href (and widget (widget-get widget 'href)))) |
439 (if href | 436 (if href |
620 (cons (cons type (list (cons desc (list plist)))) | 617 (cons (cons type (list (cons desc (list plist)))) |
621 w3-current-links))))) | 618 w3-current-links))))) |
622 (setq desc (and desc (intern dc-desc))) | 619 (setq desc (and desc (intern dc-desc))) |
623 (case desc | 620 (case desc |
624 ((style stylesheet) | 621 ((style stylesheet) |
625 (w3-handle-style plist)) | 622 (if w3-honor-stylesheets |
623 (w3-handle-style plist))) | |
626 (otherwise | 624 (otherwise |
627 ) | 625 ) |
628 ) | 626 ) |
629 ) | 627 ) |
630 ) | 628 ) |
740 (alt (or (w3-get-attribute 'alt) our-alt)) | 738 (alt (or (w3-get-attribute 'alt) our-alt)) |
741 (ismap (and (assq 'ismap args) 'ismap)) | 739 (ismap (and (assq 'ismap args) 'ismap)) |
742 (usemap (w3-get-attribute 'usemap)) | 740 (usemap (w3-get-attribute 'usemap)) |
743 (base (w3-get-attribute 'base)) | 741 (base (w3-get-attribute 'base)) |
744 (href (and hyperlink-info (widget-get (cadr hyperlink-info) 'href))) | 742 (href (and hyperlink-info (widget-get (cadr hyperlink-info) 'href))) |
743 (target (and hyperlink-info (widget-get (cadr hyperlink-info) 'target))) | |
745 (widget nil) | 744 (widget nil) |
746 (align (or (w3-get-attribute 'align) | 745 (align (or (w3-get-attribute 'align) |
747 (w3-get-style-info 'vertical-align node)))) | 746 (w3-get-style-info 'vertical-align node)))) |
748 (if (assq '*table-autolayout w3-display-open-element-stack) | 747 (if (assq '*table-autolayout w3-display-open-element-stack) |
749 (insert alt) | 748 (insert alt) |
752 'src src ; Where to load the image from | 751 'src src ; Where to load the image from |
753 'alt alt ; Textual replacement | 752 'alt alt ; Textual replacement |
754 'ismap ismap ; Is it a server-side map? | 753 'ismap ismap ; Is it a server-side map? |
755 'usemap usemap ; Is it a client-side map? | 754 'usemap usemap ; Is it a client-side map? |
756 'href href ; Hyperlink destination | 755 'href href ; Hyperlink destination |
756 'target target | |
757 )) | 757 )) |
758 (widget-put widget 'buffer (current-buffer)) | 758 (widget-put widget 'buffer (current-buffer)) |
759 (w3-maybe-start-image-download widget) | 759 (w3-maybe-start-image-download widget) |
760 (if (widget-get widget :from) | |
761 (add-text-properties (widget-get widget :from) | |
762 (widget-get widget :to) | |
763 (list 'html-stack w3-display-open-element-stack))) | |
760 (goto-char (point-max)))))) | 764 (goto-char (point-max)))))) |
761 | 765 |
762 ;; The table handling | 766 ;; The table handling |
763 | 767 |
764 (defvar w3-display-table-cut-words-p nil | 768 (defvar w3-display-table-cut-words-p nil |
1076 (x | 1080 (x |
1077 (let ((id (or (and (find-face 'w3-table-hack-x-face) | 1081 (let ((id (or (and (find-face 'w3-table-hack-x-face) |
1078 (face-id 'w3-table-hack-x-face)) | 1082 (face-id 'w3-table-hack-x-face)) |
1079 (progn | 1083 (progn |
1080 (make-face 'w3-table-hack-x-face) | 1084 (make-face 'w3-table-hack-x-face) |
1081 (set-face-font 'w3-table-hack-x-face | 1085 (font-set-face-font 'w3-table-hack-x-face |
1082 (make-font :family "terminal")) | 1086 (make-font :family "terminal")) |
1083 (face-id 'w3-table-hack-x-face))))) | 1087 (face-id 'w3-table-hack-x-face))))) |
1084 (if (not (face-differs-from-default-p 'w3-table-hack-x-face)) | 1088 (if (not (face-differs-from-default-p 'w3-table-hack-x-face)) |
1085 nil | 1089 nil |
1086 (aset standard-display-table 1 (vector (+ (* 256 id) ?l))) | 1090 (aset standard-display-table 1 (vector (+ (* 256 id) ?l))) |
1087 (aset standard-display-table 2 (vector (+ (* 256 id) ?q))) | 1091 (aset standard-display-table 2 (vector (+ (* 256 id) ?q))) |
1514 hyperlink-info | 1518 hyperlink-info |
1515 break-style | 1519 break-style |
1516 cur | 1520 cur |
1517 id | 1521 id |
1518 class | 1522 class |
1523 last-element | |
1519 ) | 1524 ) |
1520 (while content-stack | 1525 (while content-stack |
1521 (setq content (pop content-stack)) | 1526 (setq content (pop content-stack)) |
1522 (pop w3-active-faces) | 1527 (pop w3-active-faces) |
1523 (pop w3-active-voices) | 1528 (pop w3-active-voices) |
1524 (w3-display-progress-meter) | 1529 (w3-display-progress-meter) |
1525 (case (car (pop w3-display-open-element-stack)) | 1530 (setq last-element (pop w3-display-open-element-stack)) |
1531 (case (car last-element) | |
1526 ;; Any weird, post-display-of-content stuff for specific tags | 1532 ;; Any weird, post-display-of-content stuff for specific tags |
1527 ;; goes here. Couldn't think of any better way to do this when we | 1533 ;; goes here. Couldn't think of any better way to do this when we |
1528 ;; are iterative. *sigh* | 1534 ;; are iterative. *sigh* |
1529 (a | 1535 (a |
1530 (if (not hyperlink-info) | 1536 (if (not hyperlink-info) |
1543 (widget-put (cadr hyperlink-info) :to (set-marker | 1549 (widget-put (cadr hyperlink-info) :to (set-marker |
1544 (make-marker) (point)))) | 1550 (make-marker) (point)))) |
1545 (setq hyperlink-info nil)) | 1551 (setq hyperlink-info nil)) |
1546 ((ol ul dl dir menu) | 1552 ((ol ul dl dir menu) |
1547 (pop w3-display-list-stack)) | 1553 (pop w3-display-list-stack)) |
1554 (label | |
1555 (if (and (markerp w3-display-label-marker) | |
1556 (marker-position w3-display-label-marker) | |
1557 (marker-buffer w3-display-label-marker)) | |
1558 (push (cons (or (cdr-safe (assq 'for (cdr last-element))) | |
1559 (cdr-safe (assq 'id (cdr last-element))) | |
1560 "unknown") | |
1561 (buffer-substring w3-display-label-marker (point))) | |
1562 w3-form-labels))) | |
1548 (otherwise | 1563 (otherwise |
1549 nil)) | 1564 nil)) |
1550 (if (car insert-after) | 1565 (if (car insert-after) |
1551 (w3-handle-string-content (car insert-after))) | 1566 (w3-handle-string-content (car insert-after))) |
1552 (pop insert-after) | 1567 (pop insert-after) |
1617 (before nil) | 1632 (before nil) |
1618 (after nil) | 1633 (after nil) |
1619 (face nil) | 1634 (face nil) |
1620 (voice nil) | 1635 (voice nil) |
1621 (st nil)) | 1636 (st nil)) |
1622 (setq st (point) | 1637 (if (w3-get-attribute 'href) |
1623 hyperlink-info (list | 1638 (setq st (point) |
1624 st | 1639 hyperlink-info (list |
1625 (append | 1640 st |
1626 (list 'link :args nil | 1641 (append |
1627 :value "" :tag "" | 1642 (list 'link :args nil |
1628 :action 'w3-follow-hyperlink | 1643 :value "" :tag "" |
1629 :from (set-marker (make-marker) st) | 1644 :action 'w3-follow-hyperlink |
1630 :help-echo 'w3-widget-echo | 1645 :from (set-marker |
1631 :emacspeak-help 'w3-widget-echo | 1646 (make-marker) st) |
1632 ) | 1647 :help-echo 'w3-widget-echo |
1633 (alist-to-plist args)))) | 1648 :emacspeak-help 'w3-widget-echo |
1649 ) | |
1650 (alist-to-plist args))))) | |
1634 (w3-handle-content node) | 1651 (w3-handle-content node) |
1635 ) | 1652 ) |
1636 ) | 1653 ) |
1637 ((ol ul dl menu) | 1654 ((ol ul dl menu) |
1638 (push 0 w3-display-list-stack) | 1655 (push (if (w3-get-attribute 'seqnum) |
1656 (1- (string-to-int (w3-get-attribute 'seqnum))) | |
1657 0) w3-display-list-stack) | |
1639 (w3-handle-content node)) | 1658 (w3-handle-content node)) |
1640 (dir | 1659 (dir |
1641 (push 0 w3-display-list-stack) | 1660 (push 0 w3-display-list-stack) |
1642 (setq node | 1661 (setq node |
1643 (list tag args | 1662 (list tag args |
1689 (cdr w3-frame-labels))))))))))) | 1708 (cdr w3-frame-labels))))))))))) |
1690 (noframes | 1709 (noframes |
1691 (if w3-display-frames | 1710 (if w3-display-frames |
1692 (w3-handle-empty-tag) | 1711 (w3-handle-empty-tag) |
1693 (w3-handle-content node))) | 1712 (w3-handle-content node))) |
1713 (applet ; Wow, Java | |
1714 (w3-handle-content node) | |
1715 ) | |
1694 (script ; Scripts | 1716 (script ; Scripts |
1695 (w3-handle-empty-tag)) | 1717 (w3-handle-empty-tag)) |
1696 ((embed object) ; Embedded images/content | 1718 ((embed object) ; Embedded images/content |
1697 (w3-handle-content node) | 1719 (w3-handle-content node) |
1698 ) | 1720 ) |
1951 (style | 1973 (style |
1952 (w3-handle-style (alist-to-plist | 1974 (w3-handle-style (alist-to-plist |
1953 (cons (cons 'data (apply 'concat (nth 2 node))) | 1975 (cons (cons 'data (apply 'concat (nth 2 node))) |
1954 (nth 1 node)))) | 1976 (nth 1 node)))) |
1955 (w3-handle-empty-tag)) | 1977 (w3-handle-empty-tag)) |
1978 (label | |
1979 (if (not (markerp w3-display-label-marker)) | |
1980 (setq w3-display-label-marker (make-marker))) | |
1981 (set-marker w3-display-label-marker (point)) | |
1982 (w3-handle-content node)) | |
1956 ;; Emacs-W3 stuff that cannot be expressed in a stylesheet | 1983 ;; Emacs-W3 stuff that cannot be expressed in a stylesheet |
1957 (pinhead | 1984 (pinhead |
1958 ;; This check is so that we don't screw up table auto-layout | 1985 ;; This check is so that we don't screw up table auto-layout |
1959 ;; by changing our text midway through the parse/layout/display | 1986 ;; by changing our text midway through the parse/layout/display |
1960 ;; steps. | 1987 ;; steps. |
2048 ) | 2075 ) |
2049 | 2076 |
2050 (defun w3-region (st nd) | 2077 (defun w3-region (st nd) |
2051 (if (not w3-setup-done) (w3-do-setup)) | 2078 (if (not w3-setup-done) (w3-do-setup)) |
2052 (let* ((source (buffer-substring st nd)) | 2079 (let* ((source (buffer-substring st nd)) |
2053 (w3-dislplay-same-buffer t) | 2080 (w3-display-same-buffer t) |
2054 (parse nil)) | 2081 (parse nil)) |
2055 (save-window-excursion | 2082 (save-window-excursion |
2056 (save-excursion | 2083 (save-excursion |
2057 (set-buffer (get-buffer-create " *w3-region*")) | 2084 (set-buffer (get-buffer-create " *w3-region*")) |
2058 (erase-buffer) | 2085 (erase-buffer) |
2215 (if (zerop nb-stars) | 2242 (if (zerop nb-stars) |
2216 ;; push => reverse order | 2243 ;; push => reverse order |
2217 (reverse dimensions) | 2244 (reverse dimensions) |
2218 ;; substitute numbers for * | 2245 ;; substitute numbers for * |
2219 (let ((star-replacement (/ remaining-available-dimension nb-stars)) | 2246 (let ((star-replacement (/ remaining-available-dimension nb-stars)) |
2220 (star-dimensions dimensions)) | 2247 (star-dimensions dimensions)) |
2221 (setq dimensions nil) | 2248 (setq dimensions nil) |
2222 (while star-dimensions | 2249 (while star-dimensions |
2223 (push (if (eq '* (car star-dimensions)) | 2250 (push (if (eq '* (car star-dimensions)) |
2224 star-replacement | 2251 star-replacement |
2225 (car star-dimensions)) | 2252 (car star-dimensions)) |
2226 dimensions) | 2253 dimensions) |
2227 (pop star-dimensions)) | 2254 (pop star-dimensions)) |
2228 ;; push + push => in order | 2255 ;; push + push => in order |
2229 dimensions)))))) | 2256 dimensions)))))) |
2230 | 2257 |
2231 | 2258 |
2232 (provide 'w3-display) | 2259 (provide 'w3-display) |