;;; sb-w3 --- Speedbar support for w3.
;; Copyright (C) 1997 Free Software Foundation
;; Author: Eric M. Ludlam <firstname.lastname@example.org>
;; Version: 0.1
;; Keywords: file, tags, tools
;; X-RCS: $Id$
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, you can either send email to this
;; program's author (see below) or write to:
;; The Free Software Foundation, Inc.
;; 675 Mass Ave.
;; Cambridge, MA 02139, USA.
;; Please send bug reports, etc. to email@example.com.
;; Speedbar provides a frame in which files, and locations in
;; files are displayed. These functions provide w3 specific support,
;; showing links and addresses in the side-bar.
;; To provide special service to all the modes supported by this file,
;; put the following in your .emacs file.
;; (require 'speedbspec)
;; This will load in the known functions, and the mode-enabling code
;; into 'change-major-mode-hook.
;; This file requires speedbar.
;;; Change log:
;; 0.1 - first revision copied from speedbspec.el V 0.1.1
(defvar w3-speedbar-last-buffer nil
"The last buffer shown by w3-speedbar.")
(defun w3-speedbar-buttons (buffer)
"Create speedbar buttons for the current web BUFFER displayed in w3 mode."
(if (and (looking-at "History:") (equal w3-speedbar-last-buffer buffer))
(setq w3-speedbar-last-buffer buffer)
(let ((links (save-excursion (set-buffer buffer) (w3-only-links)))
;; This taken out of w3 which was used to create the history list,
;; and is here modified to create the speedbar buttons
(lambda (url desc)
(speedbar-insert-button (w3-speedbar-shorten-button url)
(setq part (car (cdr (member 'href (car links))))
links (cdr links))
(speedbar-insert-button (w3-speedbar-shorten-button part)
(defun w3-speedbar-shorten-button (button)
"Takes text BUTTON and shortens it as much as possible."
;; I should make this more complex, but I'm not sure how...
(let ((fnnd (file-name-nondirectory button)))
(if (< 0 (length fnnd))
(if (string-match "\\(ht\\|f\\)tp://" button)
(setq button (substring button (match-end 0))))
(if (string-match "/$" button)
(setq button (substring button 0 (match-beginning 0))))
(defun w3-speedbar-link (text token indent)
"Follow link described by TEXT which has the URL TOKEN.
INDENT is not used."
(speedbar-with-attached-buffer (w3-fetch token)))
;;; sb-w3.el ends here