diff lisp/w3/w3-vars.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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/w3/w3-vars.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,1165 @@
+;;; w3-vars.el,v --- All variable definitions for emacs-w3
+;; Author: wmperry
+;; Created: 1996/06/06 14:20:01
+;; Version: 1.219
+;; Keywords: comm, help, hypermedia
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Copyright (c) 1993, 1994, 1995 by William M. Perry (wmperry@spry.com)
+;;;
+;;; This file is not part of GNU Emacs, but the same permissions apply.
+;;;
+;;; GNU Emacs 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.
+;;;
+;;; GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to
+;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Variable definitions for w3
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defconst w3-version-number
+  (let ((x "p2-3-67"))
+    (if (string-match "State:[ \t\n]+.\\([^ \t\n]+\\)" x)
+	(setq x (substring x (match-beginning 1) (match-end 1)))
+      (setq x (substring x 1)))
+    (mapconcat
+     (function (lambda (x) (if (= x ?-) "." (char-to-string x)))) x ""))
+  "Version # of w3-mode.")
+
+(defconst w3-version-date (let ((x "1996/06/06 14:20:01"))
+			    (if (string-match "Date: \\([^ \t\n]+\\)" x)
+				(substring x (match-beginning 1) (match-end 1))
+			      x))
+  "Date this version of w3-mode was released.")
+
+(defconst w3-version
+  (format "WWW %s %s" w3-version-number w3-version-date)
+  "More descriptive version of w3-version-number.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; General configuration variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-annotation-mode 'html-mode
+  "*A symbol specifying the major mode to enter when doing annotations.")
+
+(defvar w3-annotation-position 'bottom
+  "*A symbol specifying where personal annotations should appear in a buffer.
+Can be one of the symbols 'top or 'bottom.  If the symbol is eq to 'top, then
+the annotations will appear at the top of the buffer.  If 'bottom, will appear
+at the end of the buffer.")
+
+(defvar w3-auto-image-alt t
+  "*Whether emacs-w3 should create an alt attribute for an image that
+is missing it.
+If nil, emacs-w3 will not automatically create an ALT attribute.
+If t, the alt attribute will be [IMAGE(nameofimage)]
+If a string, it should be a string suitable for running through format,
+   with only one %s, which will be replaced with just the filename of the
+   graphic that is not loaded.")
+
+(defvar w3-configuration-directory "~/.w3/"
+  "*Where emacs-w3 can find its configuration files")
+
+(defvar w3-debug-html nil "*Whether to gripe about bad HTML or not.")
+
+(defvar w3-debug-buffer "*HTML Debug*"
+  "*Name of buffer to store debugging information in.")
+
+(defvar w3-default-configuration-file nil
+  "*Where per-user customizations of w3 are kept.")
+
+(defvar w3-default-action 'w3-prepare-buffer
+  "*A lisp symbol specifying what action to take for files with
+extensions that are not mapped to a MIME type in `mm-mime-extensions'.
+This is useful in case you ever run across files with weird extensions
+\(.foo, .README, .READMEFIRST, etc).  This should not be required
+anymore.
+
+Possible values: any lisp symbol.  Should be a function that takes no
+arguments.  The return value does not matter, it is ignored.  Some examples
+are:
+
+Action			Value
+----------------------------------------------
+Parse as HTML		'w3-prepare-buffer
+View as text		'indented-text-mode")
+
+(defvar w3-default-homepage nil
+  "*The url to open at startup.  It can be any valid URL.  This will
+default to the environment variable WWW_HOME if you do not set it in
+your .emacs file. If WWW_HOME is undefined, then it will default to
+the hypertext documentation for W3 at Indiana University.")
+
+(defvar w3-default-stylesheet nil
+  "*The filename of the users default stylesheet.")
+
+(defvar w3-do-blinking nil
+  "*Whether emacs-w3 should display blinking text.")
+
+(defvar w3-do-incremental-display nil
+  "*Whether to do incremental display of pages or not.")
+
+(defvar w3-documents-menu-file nil
+  "*Where the Mosaic documents-menu file is located.  This is a file
+that has extra menus for the 'Navigate' menu.  This should be in the same
+format as the Mosaic extra documents.menu.")
+
+(defvar w3-dump-to-disk nil
+  "*If non-nil, all W3 pages loaded will be dumped to disk.")
+
+(defvar w3-echo-link 'url
+  "Whether to display the URL of a link when tabbing through links.
+Possible values are:
+
+  url    == show the url of the target in the minibuffer
+  text   == show the text of the link in the minibuffer
+  nil    == show nothing")
+  
+(defvar w3-horizontal-rule-char ?-
+  "*The character to use to create a horizontal rule.
+Must be the character's code, not a string.  This character is
+replicated across the screen to create a division.")
+
+(defvar w3-hotlist-file nil
+  "*Hotlist filename.
+This should be the name of a file that is stored in either
+NCSA's Mosaic/X or Netscape/X format.  It is used to keep a listing
+of commonly accessed URL's without having to go through 20 levels of
+menus to get to them.")
+
+(defvar w3-html2latex-args "-s -"
+  "*Args to pass `w3-html2latex-prog'.  This should send the LaTeX source
+to standard output.")
+
+(defvar w3-html2latex-prog "html2latex"
+  "*Program to convert html to latex.")
+
+(defvar w3-icon-directory "http://cs.indiana.edu/elisp/w3/icons/"
+  "*Where to find standard icons.  Must end in a /!")
+
+(defvar w3-icon-format 'xbm
+  "*What file extension icons end in.  This is a symbol, string, or nil.
+If nil, then no file extension is used.")
+
+(defvar w3-indent-level 4
+  "*Default # of spaces to indent instead of using TABs.  This is
+necessary to preserve tabs in PRE segments yet still get smaller
+indentation for lists, etc.")
+
+(defvar w3-keep-old-buffers t
+  "*Whether to keep old buffers around when following links.")
+
+(defvar w3-latex-docstyle "{article}"
+  "*The documentstyle to use when printing/mailing converted HTML
+files in LaTeX.  Good defaults are:
+{article}, [psfig,twocolumn]{article}, etc.")
+
+(defvar w3-link-info-display-function nil
+  "*A function to call to get extra information about a link and
+include it in a buffer.  Will be placed after the link and any other
+delimiters.")
+
+(defvar w3-mail-command 'mail
+  "*This function will be called whenever w3 needs to send mail.  It should
+enter a mail-mode-like buffer in the current window.
+`w3-mail-other-window-command' will be used if w3-mutable-windows is t.
+The commands `mail-to' and `mail-subject' should still work in this
+buffer, and it should use mail-header-separator if possible.")
+
+(defvar w3-mail-other-window-command 'mail-other-window
+  "*This function will be called whenever w3 needs to send mail in
+another window.  It should enter a mail-mode-like buffer in a
+different window.  The commands `mail-to' and `mail-subject' should still
+work in this buffer, and it should use mail-header-separator if
+possible.")
+
+(defvar w3-max-inlined-image-size nil
+  "*The maximum byte size of a file to transfer as an inlined image.
+If an image is being retrieved and exceeds this size, then it will be
+cancelled.  This works best on HTTP/1.0 servers that send a
+Content-length header, otherwise the image is retrieved up until the
+max number of bytes is retrieved, then killed.")
+
+(defvar w3-max-menu-length 35
+  "*The maximum length of a pulldown menu before it will be split into
+smaller chunks, with the first part as a submenu, followed by the rest
+of the menu.")
+
+(defvar w3-max-menu-width 40 "*The maximum width of a pulldown menu choice.")
+
+(defvar w3-modeline-format
+  '("  " ("W3"
+	(w3-netscape-emulation-minor-mode
+	 " (NS)")
+	(w3-lynx-emulation-minor-mode
+	 " (Lynx)")
+	": "
+	(40 (-40 "%b"))
+	" "
+	(w3-current-isindex "[Searchable]  ")
+	"%p" "  " global-mode-string))
+  "*The modeline format string when in w3 mode")
+
+(defvar w3-mule-attribute 'underline
+  "*How to highlight items in Mule (Multi-Linugual Emacs).")
+
+(defvar w3-mutable-windows nil
+  "*Controls how new WWW documents are displayed.  If this is set to
+non-nil and pop-up-windows is non-nil, then new buffers will be shown
+in another window.  If either is nil, then it will replace the document
+in the current window.")
+
+(defvar w3-netscape-configuration-file nil
+  "*A Netscape-for-X style configuration file.  This file will only be read if
+and only if `w3-use-netscape-configuration-file' is non-nil.")
+
+(defvar w3-netscape-compatible-comments t
+  "*Whether to honor netscape-style <! > comments.
+Ye gods I wish I could turn this off by default.")
+
+(defvar w3-notify 'semibully
+  "*Selects the behavior when w3 page is ready.
+This variable may have one of the following values:
+
+newframe   -- put the w3 page in its own frame
+bully      -- make the w3 page the current buffer and only window
+semibully  -- make the w3 page the current buffer in the same window
+aggressive -- make the w3 page the current buffer in the other window
+friendly   -- display  w3page in other window but don't make current
+polite     -- don't display w3 page, but prints message when ready (beeps)
+quiet      -- like `polite', but don't beep
+meek       -- make no indication that page is ready
+
+Any other value of `w3-notify' is equivalent to `meek'.")
+
+(defvar w3-personal-annotation-directory nil
+  "*Directory where w3 looks for personal annotations.
+This is a directory that should hold the personal annotations stored in
+a Mosaic-compatible format.")
+
+(defvar w3-ppmtoxbm-command "ppmtopgm | pgmtopbm | pbmtoxbm"
+  "*The command used to convert from the portable-pixmap graphics format
+to an x bitmap.  This will only ever be used if XEmacs doesn't have support
+for XPM.")
+
+(defvar w3-ppmtoxpm-command "ppmtoxpm"
+  "*The command used to convert from the portable-pixmap graphics format
+to XPM.  The XPM _MUST_ be in version 3 format.")
+
+(defvar w3-print-command "lpr -h -d"
+  "*Print command for dvi files.
+This is usually lpr -h -d to send it to a postscript printer, but you can set
+it up so that it is any command that takes a dvi file as its last argument.")
+
+(defvar w3-reuse-buffers 'reuse
+  "What to do when following a link will re-fetch a document that has
+already been fetched into a W3 buffer.  Possible values are: nil,
+'yes, and 'no.  Nil means ask the user if we should reuse the buffer.
+ A value of 'yes means assume the user wants us to reuse the buffer.
+A value of 'no means assume the user wants us to re-fetch the document.
+
+This will also accept:
+'no 'never 'reload	==> always reload
+'yes 'reuse 'always	==> always reuse
+'ask nil		==> always ask")
+
+(defvar w3-right-border 2
+  "*Amount of space to leave on right margin of WWW buffers.
+This amount is subtracted from (window-width) for each new WWW buffer
+and used as the new fill-column.")
+
+(defvar w3-maximum-line-length nil
+  "*Maximum length of a line.  If nil, then lines can extend all the way to
+the window margin.  If a number, the smaller of this and
+(- (window-width) w3-right-border) is used.")
+
+(defvar w3-right-justify-address t
+  "*Whether to make address fields right justified, like Arena.")
+
+(defvar w3-show-headers nil
+  "*This is a list of regexps that match HTTP/1.0 headers to show at
+the end of a buffer.  All the headers being matched against will be
+in lowercase.  All matching headers will be inserted at the end of the
+buffer in a <UL> list.")
+
+(defvar w3-show-status t
+  "*Whether to show a running total of bytes transferred.  Can cause a
+large hit if using a remote X display over a slow link, or a terminal
+with a slow modem.")
+
+(defvar w3-starting-documents
+  '(("Internet Starting Points"  "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html")
+    ("Internet Resources Meta-index"  "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html")
+    ("NCSA's What's New"  "http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/whats-new.html"))
+  "*An assoc list of titles and URLs for quick access.  These are just
+defaults so that new users have somewhere to go.")
+
+(defvar w3-temporary-directory "/tmp" "*Where temporary files go.")
+
+(defvar w3-track-last-buffer nil
+  "*Whether to track the last w3 buffer to automatically switch to with
+ M-x w3.")
+
+(defvar w3-track-mouse t
+  "*Whether to track the mouse and message the url under the mouse.")
+
+(defvar w3-use-forms-index t
+  "*Non-nil means translate <ISINDEX> tags into a hypertext form.
+A single text entry box will be drawn where the ISINDEX tag appears.
+If t, the isindex handling will be the same as Mosaic for X.")
+
+(defvar w3-use-html2latex nil
+  "*This controls how HTML is converted into LaTeX for printing or mailing.
+If nil, the w3-convert-html-to-latex function is used instead of the
+html2latex in a subprocess.  The lisp function gives slightly better
+formatting in my biased opinion.")
+
+(defvar w3-use-netscape-configuration-file nil
+  "*Whether to use a netscape configuration file to determine things like
+home pages, link colors, etc.  If non-nil, then `w3-netscape-configuration-file'
+is read in at startup.")
+
+(defvar w3-honor-stylesheets t
+  "*Whether to let a document specify a CSS stylesheet.")
+
+(defvar w3-user-colors-take-precedence nil
+  "*Whether to let a document define certain colors about itself.
+Like foreground and background colors and pixmaps, color of links and
+visited links, etc.")
+
+(defvar w3-gc-cons-threshold-multiplier 1
+  "Amount to temporarily multiply gc-cons-threshold by when parsing HTML.
+Setting this to a number greater than 1 will result in less frequent
+garbage collections when parsing an HTML document, which may often speed
+up handling of a large document with many elements.  The disadvantage is
+that it allows Emacs's total memory usage to grow larger, which may result
+in later garbage collections taking more time.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Hook Variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-load-hook nil "*Hooks to be run after loading w3.")
+(defvar w3-mode-hook nil "*Hooks to be run after entering w3-mode.")
+(defvar w3-file-prepare-hook nil
+  "*Hooks to be run before preparing a buffer.")
+(defvar w3-file-done-hook nil "*Hooks to be run after preparing a buffer.")
+(defvar w3-source-file-hook nil
+  "*Hooks to be run after getting document source.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Figure out what flavor of emacs we are running
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)
+  "*In XEmacs or Lucid Emacs?.")
+
+(defvar w3-running-FSF19 (and (string-match "^19" emacs-version)
+			      (not w3-running-xemacs))
+  "*In FSF v19 emacs?")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Link delimiting
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-delimit-emphasis 'guess
+  "*Whether to use characters at the start and end of each bold/italic
+region.  Obsolete variable (almost) - all this should be specified by the
+default stylesheet.")
+
+(defvar w3-link-start-delimiter '("[[" . "{{")
+  "*Put this at front of link if w3-delimit-links is t.")
+
+(defvar w3-link-end-delimiter '("]]" . "}}")
+  "*Put this at end of link if w3-delimit-links is t.")
+
+(defvar w3-delimit-links 'guess
+  "*Put brackets around links?  If this variable is eq to 'linkname, then
+it will put the link # in brackets after the link text.  If it is nil, then
+it will not put anything.  If it is non-nil and not eq to 'linkname, then
+it will put [[ & ]] around the entire text of the link.  Is initially set
+to be t iff in normal emacs.  Nil if in XEmacs or lucid emacs, since links
+should be in different colors/fonts.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; embedded document variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-mpeg-size 150 "*The height and width of an mpeg window.")
+(defvar w3-mpeg-args '("-loop") "*Arguments to mpeg_play.")
+(defvar w3-mpeg-program "mpeg_play" "*The mpeg_play executable.")
+(defvar w3-delayed-movies nil "A list of mpeg movies for this buffer.")
+  
+(defvar w3-embedded-data-converters
+  '(("application/eqn" . w3-embed-eqn)
+    ("application/postscript" . w3-embed-postscript)
+    ("text/plain". w3-embed-text)
+    ("text/html" . w3-embed-text)
+    ("image/.*"  . w3-embed-image))
+  "An assoc list of regular expressions to match against MIME content-types
+for embedded data in HTML documents.  The cdr is a function to be passed
+to 'funcall', with the embedded data and content-type as the sole arguments
+passed to the function.")
+
+(if w3-running-xemacs
+    (progn
+      (condition-case ()
+	  (require 'annotations)
+	(error nil))
+      (setq w3-embedded-data-converters
+	    (cons (cons "video/mpeg" 'w3-embed-mpeg)
+		  w3-embedded-data-converters))))
+  
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Graphics parsing stuff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-graphics-always-show-entities t
+  "*Set to t to always show graphic entities, regardless of the value of
+w3-delay-image-loads.  Useful if you keep the entities locally and aren't
+worried about the transfer time on something that small.")
+
+(defvar w3-graphics-list nil
+  "*List of graphics already read in.")
+
+(defvar w3-delay-image-loads nil
+  "*Delay loading images for w3 or not?")
+
+(defvar w3-delayed-images nil
+  "*A buffer-local variable holding positions and urls of images within
+the buffer.")
+
+(defvar w3-delay-mpeg-loads t
+  "*Whether to delay loading mpegs or not.")
+
+(defvar w3-image-mappings
+  '(
+    ("image/x-xbitmap"        . xbm)
+    ("image/xbitmap"          . xbm)
+    ("image/xbm"              . xbm)
+    ("image/jpeg"             . jpeg)
+    ("image/gif"              . gif)
+    ("image/png"              . png)
+    ("image/x-fax"            . g3fax)
+    ("image/x-raster"         . rast)
+    ("image/windowdump"       . xwd)
+    ("image/x-icon"           . icon)
+    ("image/portable-graymap" . pgm)
+    ("image/portable-pixmap"  . ppm)
+    ("image/x-pixmap"         . xpm)
+    ("image/x-xpixmap"        . xpm)
+    ("image/pict"             . pict)
+    ("image/x-rgb"            . sgi)
+    ("image/x-sgi"            . sgi)
+    ("image/x-macpaint"       . macpt)
+    ("image/x-targa"          . tga)
+    ("image/tiff"             . tiff)
+    ) "*How to map MIME types to image types for the `image' package.")
+
+(defvar w3-color-use-reducing 'guess
+  "*Whether to use ppmquant/ppmdither to do color reducing for inlined images.
+If you are using a 24bit display, you should set this to nil.")
+
+(defvar w3-color-max-red 4
+  "*Max # of red cells to allocate for inlined images.")
+
+(defvar w3-color-max-green 4
+  "*Max # of green cells to allocate for inlined images.")
+
+(defvar w3-color-max-blue 4
+  "*Max # of blue cells to allocate for inlined images.")
+
+(defvar w3-color-filter 'ppmdither
+  "*How to do color reducing on inlined images.
+This should be a symbol, either ppmdither or ppmquant.
+This variable only has any meaning if w3-color-use-reducing is non-nil.
+Possible values are:
+
+ppmquant    :== Use the ppmquant program to reduce colors.  The product
+                of w3-color-max-[red|green|blue] is used as the maximum
+                number of colors.
+ppmdither   :== Use the ppmdither program to reduce colors.
+
+any string :== Use this string as the filter.  No interpretation of it
+               is done at all.  Example is:
+               ppmquant -fs -map ~/pixmaps/colormap.ppm")
+
+(defvar w3-ppmdither-is-buggy t
+  "*The ppmdither which comes with pbmplus/netpbm releases through 
+1mar1994 at least ignores the 'maxval' in its input.  This can cause
+trouble viewing black-and-white gifs.  If this variable is set, a
+(harmless) 'pnmdepth 255' step is inserted to work around this bug.
+You can test your ppmdither by doing 
+  ppmmake white 100 100 | pnmdepth 1 | ppmdither | pnmdepth 255 | ppmhist
+If the output has a single line like this:
+  255 255 255     255     10000
+then it's safe to set this variable to nil.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; How to look up styles
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-style-tags-assoc
+  '(
+    (b       . ("*" . "*"))
+    (address . ("*" . "*"))
+    (byline  . ("_" . "_"))
+    (cite    . ("_" . "_"))
+    (cmd     . ("*" . "*"))
+    (dfn     . ("*" . "*"))
+    (em      . ("~" . "~"))
+    (i       . ("~" . "~"))
+    (q       . ("\"" . "\""))
+    (removed . ("" . ""))
+    (s       . ("" . ""))
+    (strong  . ("*" . "*"))
+    (sub     . ("" . ""))
+    (sup     . ("" . ""))
+    (u       . ("_" . "_"))
+    )
+  "*An assoc list of emphasis tags and their corresponding
+begin and end characters.")
+
+(defvar w3-header-chars-assoc
+  '(
+    (h1 . (?* ?* w3-upcase-region))
+    (h2 . (?* ?* w3-upcase-region))
+    (h3 . (?- ?- w3-upcase-region))
+    (h4 . (nil ?= nil))
+    (h5 . (nil ?= nil))
+    (h6 . (nil ?: nil)))
+  "*An assoc list of header tags and a list of formatting instructions.
+This list consists of 3 items - the first item is no longer used.  The
+second item is the character to insert after the header.  A <BR> is
+inserted before and after this string. And the third is a function to
+call on the region between the start and end of the header.  This will
+be called with 2 arguments, the buffer positions of the start and end
+of the headers.")
+
+;; Store the database of HTML general entities.
+(defvar w3-html-entities 
+  '(
+    (excl        .  33)
+    (quot        .  34)
+    (num         .  35)
+    (dollar      .  36)
+    (percent     .  37)
+    (amp         .  38)
+    (rsquo       .  39)
+    (apos        .  39)
+    (lpar        .  40)
+    (rpar        .  41)
+    (times       .  42)
+    (ast         .  42)
+    (plus        .  43)
+    (comma       .  44)
+    (period      .  46)
+    (colon       .  58)
+    (semi        .  59)
+    (lt          .  60)
+    (equals      .  61)
+    (gt          .  62)
+    (quest       .  63)
+    (commat      .  64)
+    (lsqb        .  91)
+    (rsqb        .  93)
+    (uarr        .  94)
+    (lowbar      .  95)
+    (lsquo       .  96)
+    (lcub        . 123)
+    (verbar      . 124)
+    (rcub        . 125)
+    (tilde       . 126)
+    (nbsp        . 160)
+    (iexcl       . 161)
+    (cent        . 162)
+    (pound       . 163)
+    (curren      . 164)
+    (yen         . 165)
+    (brvbar      . 166)
+    (sect        . 167)
+    (uml         . 168)
+    (copy        . 169)
+    (ordf        . 170)
+    (laquo       . 171)
+    (not         . 172)
+    (shy         . 173)
+    (reg         . 174)
+    (macr        . 175)
+    (deg         . 176)
+    (plusmn      . 177)
+    (sup2        . 178)
+    (sup3        . 179)
+    (acute       . 180)
+    (micro       . 181)
+    (para        . 182)
+    (middot      . 183)
+    (cedil       . 184)
+    (sup1        . 185)
+    (ordm        . 186)
+    (raquo       . 187)
+    (frac14      . 188)
+    (frac12      . 189)
+    (frac34      . 190)
+    (iquest      . 191)
+    (Agrave      . 192)
+    (Aacute      . 193)
+    (Acirc       . 194)
+    (Atilde      . 195)
+    (Auml        . 196)
+    (Aring       . 197)
+    (AElig       . 198)
+    (Ccedil      . 199)
+    (Egrave      . 200)
+    (Eacute      . 201)
+    (Ecirc       . 202)
+    (Euml        . 203)
+    (Igrave      . 204)
+    (Iacute      . 205)
+    (Icirc       . 206)
+    (Iuml        . 207)
+    (ETH         . 208)
+    (Ntilde      . 209)
+    (Ograve      . 210)
+    (Oacute      . 211)
+    (Ocirc       . 212)
+    (Otilde      . 213)
+    (Ouml        . 214)
+    (times       . 215)
+    (Oslash      . 216)
+    (Ugrave      . 217)
+    (Uacute      . 218)
+    (Ucirc       . 219)
+    (Uuml        . 220)
+    (Yacute      . 221)
+    (THORN       . 222)
+    (szlig       . 223)
+    (agrave      . 224)
+    (aacute      . 225)
+    (acirc       . 226)
+    (atilde      . 227)
+    (auml        . 228)
+    (aring       . 229)
+    (aelig       . 230)
+    (ccedil      . 231)
+    (egrave      . 232)
+    (eacute      . 233)
+    (ecirc       . 234)
+    (euml        . 235)
+    (igrave      . 236)
+    (iacute      . 237)
+    (icirc       . 238)
+    (iuml        . 239)
+    (eth         . 240)
+    (ntilde      . 241)
+    (ograve      . 242)
+    (oacute      . 243)
+    (ocirc       . 244)
+    (otilde      . 245)
+    (ouml        . 246)
+    (divide      . 247)
+    (oslash      . 248)
+    (ugrave      . 249)
+    (uacute      . 250)
+    (ucirc       . 251)
+    (uuml        . 252)
+    (yacute      . 253)
+    (thorn       . 254)
+    (yuml        . 255)
+
+    ;; Special handling of these
+    (frac56      . "5/6")
+    (frac16      . "1/6")
+    (frac45      . "4/5")
+    (frac35      . "3/5")
+    (frac25      . "2/5")
+    (frac15      . "1/5")
+    (frac23      . "2/3")
+    (frac13      . "1/3")
+    (frac78      . "7/8")
+    (frac58      . "5/8")
+    (frac38      . "3/8")
+    (frac18      . "1/8")
+    
+    ;; The following 5 entities are not mentioned in the HTML 2.0
+    ;; standard, nor in any other HTML proposed standard of which I
+    ;; am aware.  I am not even sure they are ISO entity names.  ***
+    ;; Hence, some arrangement should be made to give a bad HTML
+    ;; message when they are seen.
+    (ndash       .  45)
+    (mdash       .  45)
+    (emsp        .  32)
+    (ensp        .  32)
+    (sim         . 126)
+    (le          . "<=")
+    (agr         . "alpha")
+    (rdquo       . "''")
+    (ldquo       . "``")
+    (trade       . "(TM)")
+    ;; To be done
+    ;; (shy      . ????) ; soft hyphen
+    )
+  "*An assoc list of entity names and how to actually display them.")
+
+(defvar w3-graphic-entities
+  '(
+    (archive             "archive"                )
+    (audio               "audio"                  )
+    (binary.document     "binary.document"        )
+    (binhex.document     "binhex.document"        )
+    (calculator          "calculator"             )
+    (caution             "caution"                )
+    (cd.i                "cd.i"                   )
+    (cd.rom              "cd.rom"                 )
+    (clock               "clock"                  )
+    (compressed.document "compressed.document"    )
+    (disk.drive          "disk.drive"             )
+    (diskette            "diskette"               )
+    (document            "document"               )
+    (fax                 "fax"                    )
+    (filing.cabinet      "filing.cabinet"         )
+    (film                "film"                   )
+    (fixed.disk          "fixed.disk"             )
+    (folder              "folder"                 )
+    (form                "form"                   )
+    (ftp                 "ftp"                    )
+    (glossary            "glossary"               )
+    (gopher              "gopher"                 )
+    (home                "home"                   )
+    (html                "html"                   )
+    (image               "image"                  )
+    (index               "index"                  )
+    (keyboard            "keyboard"               )
+    (mail                "mail"                   )
+    (mail.in             "mail.in"                )
+    (mail.out            "mail.out"               )
+    (map                 "map"                    )
+    (mouse               "mouse"                  )
+    (new                 "new"                    )
+    (next                "next"                   )
+    (notebook            "notebook"               )
+    (parent              "parent"                 )
+    (play.fast.forward   "play.fast.forward"      )
+    (play.fast.reverse   "play.fast.reverse"      )
+    (play.pause          "play.pause"             )
+    (play.start          "play.start"             )
+    (play.stop           "play.stop"              )
+    (previous            "previous"               )
+    (printer             "printer"                )
+    (sadsmiley           "sadsmiley"          ":(")
+    (smiley              "smiley"             ":)")
+    (stop                "stop"                   )
+    (summary             "summary"                )
+    (telephone           "telephone"              )
+    (telnet              "telnet"                 )
+    (text.document       "text.document"          )
+    (tn3270              "tn3270"                 )
+    (toc                 "toc"                    )
+    (trash               "trash"                  )
+    (unknown.document    "unknown.document"       )
+    (uuencoded.document  "uuencoded.document"     )
+    (work                "work"                   )
+    (www                 "www"                    )
+    )
+  "List of graphical entity names and the tail end of a URL for them.
+If there is a 3rd item in the list, it is the alternative text to use
+for the image.")
+
+(defvar w3-list-chars-assoc 
+  '(
+    (ul . ("o" "*" "+" ">"))
+    (ol . ("." ")" "]" ":"))
+    (dl . ("o" "*" "+" ">")))
+  "An assoc list of characters to put at the front of list items.  It is
+keyed on the type of list, followed by a list of items.  Each item should
+be placed in the nth position of the list, where n is the nesting level it
+should be used for.  n starts at 1.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Menu definitions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-navigate-menu nil)
+(defvar w3-popup-menu
+  '("Emacs-W3 Commands"
+    ["Back" w3-backward-in-history t]
+    ["Forward" w3-forward-in-history t]
+    "---"
+    ["Add annotation" w3-annotation-add t]
+    )
+  "The shorter popup menu.")
+
+(defvar w3-documentation-root "http://www.cs.indiana.edu/elisp/w3/docs/"
+  "*Where the w3 documentation lives.  This MUST end in a slash.")
+
+(defvar w3-graphlink-menu
+  '(("Open this Image (%s)"     . w3-fetch)
+    ("Save this Image As..."    . w3-download-url)
+    ("Copy this Image Location" . w3-save-url)
+    ("Information on this Image". w3-popup-image-info))
+  "An assoc list of function names and labels.  These will be displayed
+in a popup menu when the mouse is pressed on a hyperlink.  Format is
+( (label . function)), function is called with one argument, the URL of
+the link.  Each label can have exactly one `%s' that will be replaced by
+the URL of the link.")
+
+(defvar w3-hyperlink-menu
+  '(("Open this Link (%s)"        . w3-fetch)
+    ("Add Bookmark for this Link" . w3-hotlist-add-document)
+    ("New Window with this Link"  . w3-fetch-other-frame)
+    ("Save Link As..."            . w3-download-url)
+    ("Copy this Link Location to Clipboard" . w3-save-url)
+    ("Information on this Link"   . w3-popup-info))
+  "An assoc list of function names and labels.  These will be displayed
+in a popup menu when the mouse is pressed on a hyperlink.  Format is
+( (label . function)), function is called with one argument, the URL of
+the link.  Each label can have exactly one `%s' that will be replaced by
+the URL of the link.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Variables internal to W3, you should not change any of these
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-form-radio-elements nil "Internal variable - do not touch!")
+(defvar w3-form-elements nil "Internal variable - do not touch!")
+
+(defvar w3-invisible-href-list nil
+  "A list of 'invisible' graphic links in the current buffer.")
+
+(defconst w3-state-locator-variable
+  '(
+    :align
+    :background
+    :center
+    :depth
+    :figalt
+    :figdata
+    :fillcol
+    :form
+    :formnum
+    :header-start
+    :href
+    :link-args
+    :image
+    :lists
+    :map
+    :mpeg
+    :name
+    :needspace
+    :next-break
+    :nofill
+    :nowrap
+    :optarg
+    :options
+    :pre-start
+    :select
+    :secret
+    :table
+    :text-mangler
+    :title
+    :link-title
+    :w3-graphic
+    :zone
+    :label-text
+    :seen-this-url
+    )
+  "A list of all the various state kept in the drawing engine.
+This is used by the `w3-get-state' and `w3-put-state' macros.")
+
+(defvar w3-state-vector
+  (make-vector (1+ (length w3-state-locator-variable)) nil)
+  "Various state shit kept by emacs-w3.")
+
+(defvar w3-user-stylesheet nil
+  "The global stylesheet for this user.")
+
+(defvar w3-current-stylesheet nil
+  "The stylesheet for this document.")
+
+(defvar w3-base-alist nil
+  "An assoc list of named BASE tags in the current document.")
+
+(defvar w3-blinking-buffs nil
+  "A list of buffers with blinking text in them.
+This is used to optimize when we change a face so the entire display
+doesn't flash every second, whether we've run into a buffer that is
+displaying blinking text or not.")
+
+(defvar w3-last-fill-pos nil
+  "An internal variable for the new display engine that specifies the
+last character position that was correctly filled.")
+
+(defvar w3-last-tag nil
+  "An internal variable for the new display engine that specifies the
+last tag processed.")
+
+(defvar w3-table-info nil
+  "An internal variable for the new display engine for keeping table data
+during the pre-pass parsing.")
+
+(defvar w3-current-formatter nil
+  "Current formatter function.")
+
+(defvar w3-draw-buffer nil
+  "Where we are currently drawing into.  This _must_ be a buffer object
+when it is referenced.")
+
+(defvar w3-active-faces nil "The list of active faces.")
+(defvar w3-active-voices nil "The list of active voices.")
+
+(defvar w3-netscape-variable-mappings
+  '(("PRINT_COLOR"	. ps-print-color-p)
+    ("DITHER_IMAGES"	. w3-color-use-reducing)
+    ("SOCKS_HOST"	. url-socks-host)
+    ("ORGANIZATION"	. url-user-organization)
+    ("EMAIL_ADDRESS"	. url-personal-mail-address)
+    ("REAL_NAME"	. url-user-real-name)
+    ("NEWSGROUP_DESCRIPTIONS" . url-show-newsgroup-descriptions)
+    ("NNTPSERVER"	. url-news-server)
+    ("AUTOLOAD_IMAGES"	. w3-delay-image-loads)
+    ("HOME_DOCUMENT"	. w3-default-homepage)
+    ("UNDERLINE_LINKS"	. w3-underline-links)
+    ("TMPDIR"		. url-temporary-directory))
+  "A mapping from netscape configuration file options to w3 variables.")
+     
+(defvar w3-acceptable-protocols-alist
+  '(("Gopher"                           . "gopher")
+    ("TN3270 (IBM Mainframe emulation)" . "tn3270")
+    ("Interactive Telnet Session"       . "telnet")
+    ("Local file or file over ftp"      . "file")
+    ("File on an http server"           . "http")
+    ("Usenet newsgroup/article"         . "news")
+    ("Mail session"                     . "mailto"))
+  "An assoc list of descriptive labels and the corresponding URL stub.")
+
+(defvar w3-annotation-marker "<ncsa-annotation-format-1>")
+(defvar w3-annotation-minor-mode nil "Whether we are in the minor mode.")
+(defconst w3-bug-address "wmperry@spry.com" "Address of current maintainer.")
+(defvar w3-continuation '(url-uncompress url-clean-text)
+  "List of functions to call to process a document completely.")
+(defvar w3-current-annotation nil "URL of document we are annotating...")
+(defvar w3-current-isindex nil "Is the current document a searchable index?")
+(defvar w3-current-last-buffer nil "Last W3 buffer seen before this one.")
+(defvar w3-current-links nil "An assoc list of <LINK> tags for this doc.")
+(defvar w3-current-source nil "Source of current document.")
+(defvar w3-current-parse nil "Parsed version of current document.")
+(defconst w3-default-continuation '(url-uncompress url-clean-text) 
+  "Default action to start with - cleans text and uncompresses if necessary.")
+(defvar w3-editing-annotation nil "Are we editing an annotation or not?")
+(defvar w3-find-this-link nil "Link to go to within a document.")
+(defvar w3-hidden-forms nil "List of hidden form areas and their info.")
+(defvar w3-hotlist nil "Default hotlist.")
+(defvar w3-icon-path-cache nil "Cache of where we found icons for entities.")
+(defvar w3-last-buffer nil "The last W3 buffer visited.")
+(defvar w3-personal-annotations nil "Assoc list of personal annotations.")
+(defvar w3-print-next nil "Should we latex & print the next doc?")
+(defvar w3-roman-characters "ivxLCDMVX" "Roman numerals.")
+(defvar w3-setup-done nil "Have we been through setup code yet?")
+(defvar w3-source nil "Should we source the next document or not?")
+
+(defvar w3-strict-width nil
+  "*This variable will control how wide emacs thinks the current window is.
+This is useful when working in batch mode, and (window-width) returns the
+wrong value.  If the value is nil, it will use the value (window-width)
+returns.")
+
+(defvar w3-submit-button nil
+  "A widget object specifying what button was pressed to submit a form.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; buffer-local variables to keep around when going into w3-mode
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-e19-hotlist-menu nil
+  "A menu for hotlists.")
+
+(defvar w3-e19-links-menu nil
+  "A buffer-local menu for links.")
+
+(defvar w3-id-positions nil "Internal use only.")
+(defvar w3-imagemaps nil "Internal use only.")
+
+(defvar w3-persistent-variables
+  '(
+    ;; So we can show the URL in the list-buffers listing
+    list-buffers-directory
+    ;; So widgets don't get lost
+    widget-field-new
+    w3-form-radio-elements
+    w3-form-elements
+    url-current-callback-func
+    url-current-content-length
+    url-current-file
+    url-current-mime-encoding
+    url-current-mime-headers
+    url-current-mime-type
+    url-current-mime-viewer
+    url-current-port
+    url-current-referer
+    url-current-server
+    url-current-type
+    url-current-user
+    w3-e19-links-menu
+    w3-current-parse
+    w3-current-annotation
+    w3-current-isindex
+    w3-current-last-buffer
+    w3-current-links
+    w3-current-source
+    w3-delayed-images
+    w3-delayed-movies
+    w3-hidden-forms
+    w3-invisible-href-list
+    w3-state-vector
+    w3-current-stylesheet
+    w3-form-labels
+    w3-id-positions
+    w3-imagemaps
+    )
+  "A list of variables that should be preserved when entering w3-mode.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Syntax stuff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-parse-args-syntax-table
+  (copy-syntax-table emacs-lisp-mode-syntax-table)
+  "A syntax table for parsing sgml attributes.")
+
+(modify-syntax-entry ?' "\"" w3-parse-args-syntax-table)
+(modify-syntax-entry ?` "\"" w3-parse-args-syntax-table)
+(modify-syntax-entry ?< "(>" w3-parse-args-syntax-table)
+(modify-syntax-entry ?> ")<" w3-parse-args-syntax-table)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Emulation stuff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-netscape-emulation-minor-mode nil
+  "Whether we are in the netscape emulation minor mode.")
+(defvar w3-netscape-emulation-minor-mode-map (make-sparse-keymap)
+  "Keymap for netscape emulation.")
+(defvar w3-lynx-emulation-minor-mode nil
+  "Whether we are in the lynx emulation minor mode.")
+(defvar w3-lynx-emulation-minor-mode-map (make-sparse-keymap)
+  "Keymap for lynx emulation.")
+(defvar w3-last-search-item nil)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Startup items
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-form-labels nil "")
+(mapcar (function
+	 (lambda (var)
+	   (if (boundp var)
+	       (make-variable-buffer-local var)))) w3-persistent-variables)
+(make-variable-buffer-local 'w3-state-vector)
+(make-variable-buffer-local 'w3-current-stylesheet)
+(make-variable-buffer-local 'w3-base-alist)
+(make-variable-buffer-local 'w3-annotation-minor-mode)
+(make-variable-buffer-local 'w3-last-tag)
+(make-variable-buffer-local 'w3-last-fill-pos)
+(make-variable-buffer-local 'w3-table-info)
+(make-variable-buffer-local 'w3-draw-buffer)
+(make-variable-buffer-local 'w3-current-formatter)
+(make-variable-buffer-local 'w3-active-faces)
+(make-variable-buffer-local 'w3-default-style)
+(make-variable-buffer-local 'w3-netscape-emulation-minor-mode)
+(make-variable-buffer-local 'w3-lynx-emulation-minor-mode)
+(make-variable-buffer-local 'w3-last-search-item)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;  Keymap definitions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar w3-mode-map (make-keymap) "Keymap to use in w3-mode.")
+(defvar w3-annotation-minor-mode-map (make-keymap) "Keymap for annotation.")
+
+(suppress-keymap w3-mode-map)
+
+(define-key w3-mode-map "h" (make-sparse-keymap))
+(define-key w3-mode-map "H" (make-sparse-keymap))
+(define-key w3-mode-map "a" (make-sparse-keymap))
+
+(define-key w3-mode-map "ha"       'w3-hotlist-apropos)
+(define-key w3-mode-map "hd"       'w3-hotlist-delete)
+(define-key w3-mode-map "hi"       'w3-hotlist-add-document)
+(define-key w3-mode-map "hv"       'w3-show-hotlist)
+(define-key w3-mode-map "hr"       'w3-hotlist-rename-entry)
+(define-key w3-mode-map "hu"       'w3-use-hotlist)
+(define-key w3-mode-map "hA"       'w3-hotlist-append)
+(define-key w3-mode-map "hI"       'w3-hotlist-add-document-at-point)
+(define-key w3-mode-map "hR"       'w3-hotlist-refresh)
+
+(define-key w3-mode-map "ai"       'w3-annotation-add)
+(define-key w3-mode-map "ad"       'w3-delete-personal-annotation)
+(define-key w3-mode-map "ae"       'w3-annotation-edit)
+
+(define-key w3-mode-map "HF"       'w3-forward-in-history)
+(define-key w3-mode-map "HB"       'w3-backward-in-history)
+(define-key w3-mode-map "Hv"       'w3-show-history-list)
+
+(define-key w3-mode-map " "	   'w3-scroll-up)
+(define-key w3-mode-map "<"        'beginning-of-buffer)
+(define-key w3-mode-map ">"        'end-of-buffer)
+(define-key w3-mode-map "?"        'w3-help)
+(define-key w3-mode-map "B"        'w3-backward-in-history)
+(define-key w3-mode-map "F"        'w3-forward-in-history)
+(define-key w3-mode-map "G"        'w3-show-graphics)
+(define-key w3-mode-map "I"        'w3-popup-info)
+(define-key w3-mode-map "K"        'w3-save-this-url)
+(define-key w3-mode-map "P"        'w3-print-url-under-point)
+(define-key w3-mode-map "Q"        'w3-leave-buffer)
+(define-key w3-mode-map "R"        'w3-refresh-buffer)
+(define-key w3-mode-map "S"        'w3-source-document-at-point)
+(define-key w3-mode-map "U"        'w3-use-links)
+(define-key w3-mode-map "V"        'w3-view-this-url)
+(define-key w3-mode-map "\C-?"     'scroll-down)
+(define-key w3-mode-map "\C-c\C-b" 'w3-show-history-list)
+(define-key w3-mode-map "\C-c\C-v" 'w3-version)
+(define-key w3-mode-map "\C-o"     'w3-fetch)
+(define-key w3-mode-map "\M-M"     'w3-mail-document-under-point)
+(define-key w3-mode-map "\M-\C-i"  'w3-insert-this-url)
+(define-key w3-mode-map "\M-m"	   'w3-mail-current-document)
+(define-key w3-mode-map "\M-s"	   'w3-search)
+(define-key w3-mode-map "\M-\r"    'w3-follow-inlined-image)
+(define-key w3-mode-map "\r"       'w3-widget-button-press)
+(define-key w3-mode-map "b"	   'widget-backward)
+(define-key w3-mode-map "c"        'w3-mail-document-author)
+(define-key w3-mode-map "f"	   'widget-forward)
+(define-key w3-mode-map "g"        'w3-reload-document)
+(define-key w3-mode-map "i"        'w3-document-information)
+(define-key w3-mode-map "k"        'w3-save-url)
+(define-key w3-mode-map "l"        'w3-goto-last-buffer)
+(define-key w3-mode-map "m"        'w3-complete-link)
+(define-key w3-mode-map "n"        'widget-forward)
+(define-key w3-mode-map "o"	   'w3-open-local)
+(define-key w3-mode-map "p"        'w3-print-this-url)
+(define-key w3-mode-map "q"	   'w3-quit)
+(define-key w3-mode-map "r"        'w3-reload-document)
+(define-key w3-mode-map "s"        'w3-source-document)
+(define-key w3-mode-map "u"        'w3-leave-buffer)
+(define-key w3-mode-map "v"	   'url-view-url)
+(define-key w3-mode-map "w"        'w3-submit-bug)
+
+;; Emulate some netscape stuff by default
+(define-key w3-mode-map [(control alt t)] 'url-list-processes)
+(define-key w3-mode-map [(control meta t)] 'url-list-processes)
+
+;; Widget navigation
+(define-key w3-mode-map "\t"       'widget-forward)
+(define-key w3-mode-map [(shift tab)] 'widget-backward)
+  
+(define-key w3-annotation-minor-mode-map "\C-c\C-c"
+  'w3-personal-annotation-finish)
+
+;;; This is so we can use a consistent method of checking for mule support
+;;; Emacs-based mule uses (boundp 'MULE), but XEmacs-based mule uses
+;;; (featurep 'mule) - I choose to use the latter.
+
+(if (boundp 'MULE)
+    (provide 'mule))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Keyword definitions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(require 'w3-keyword)
+(provide 'w3-vars)