--- html-helper-mode-3.0.4kilo.orig/keybindings.html
+++ html-helper-mode-3.0.4kilo/keybindings.html
@@ -0,0 +1,196 @@
+<title>Keybindings for html-helper-mode version 1.34</title>
+<h1>Keybindings for html-helper-mode version 1.34</h1>
+
+Note - this list might well not be up to date. Your best bet is to
+look at the mode help for html-helper-mode, <kbd>C-hm</kbd> from within the
+mode.<p>
+
+Every keysequence here inserts some HTML or HTML+ cookie. The point is
+then placed where you want to type in the information for that
+cookie. If you call the command with a prefix argument (by typing
+<kbd>C-u</kbd> first), then instead the cookie is placed around the
+current region.<p>
+
+<hr>
+<h2>Mode bindings</h2>
+<pre>
+TAB	    indent line
+RET         insert newline and indent
+
+M-TAB	    complete tag at point
+M-C-f	    move forward one mark
+M-C-b	    move backward one mark
+
+M-C-t       insert the timestamp delimiter
+</pre>
+<p>
+
+<h2>Common insertions</h2>
+<pre>
+M-RET	    html-paragraph	    &lt;p&gt;
+C-c-	    html-horizontal-rule    &lt;hr&gt;
+C-cC-t#     html-header-#           &lt;h#&gt;&lt;/h#&gt;
+
+C-cC-al	    html-anchor		    &lt;a href=""&gt;&lt;/a&gt;
+
+C-cC-lu	    html-unordered-list	    &lt;ul&gt;&lt;li&gt;&lt;/ul&gt;
+C-cC-ld	    html-definition-list    &lt;dl&gt;&lt;dt&gt;&lt;dd&gt;&lt;/dl&gt;
+C-cC-li	    html-smart-insert-item  &lt;li&gt;  or  &lt;dt&gt;&lt;dd&gt; depending on context
+</pre>
+<hr>
+
+<h2>HTML insertion commands</h2>
+
+Every HTML and HTML+ cookie should have an insertion command. These
+commands can be used in two ways: by typing the beginning of the
+cookie and hitting <kbd>M-TAB</kbd>, for completion, or by typing it's
+somewhat-mnemonic keybinding.<p>
+
+The keybindings aren't very good - I am constrained by emacs style to
+binding things only to C-cC-&lt;letter&gt;. Each class of HTML cookie is
+assigned to some particular C-cC-&lt;letter&gt;, and then within that map
+different letters insert different cookies.<p>
+
+<pre>
+Prefix      Cookie class
+------      ------------
+C-cC-b	    head element ("begin")
+C-cC-t	    headers ("title" - sorry, C-cC-h has a special meaning in emacs)
+C-cC-a	    anchors
+C-cC-s	    logical styles ("styles")
+C-cC-p	    physical styles
+C-cC-l	    lists
+C-cC-n	    annotations ("notes")
+C-cC-f	    forms
+C-cC-i	    images
+special	    text elements
+special	    entities
+</pre>
+
+<h3>Head elements - <kbd>C-cC-b</kbd></h3>
+<pre>
+key         template                inserted text
+---         --------                -------------
+t	    html-title		    &lt;title&gt;&lt;/title&gt;
+i	    html-isindex	    &lt;isindex&gt;
+n	    html-nextid		    &lt;nextid&gt;
+l	    html-link		    &lt;link href=""&gt;
+b	    html-base		    &lt;base href=""&gt;
+</pre>
+<h3>Headers - <kbd>C-cC-t</kbd></h3>
+<pre>
+1	    html-header-1	    &lt;h1&gt;&lt;/h1&gt;
+2	    html-header-2	    &lt;h2&gt;&lt;/h2&gt;
+3	    html-header-3	    &lt;h3&gt;&lt;/h3&gt;
+4	    html-header-4	    &lt;h4&gt;&lt;/h4&gt;
+5	    html-header-5	    &lt;h5&gt;&lt;/h5&gt;
+6	    html-header-6	    &lt;h6&gt;&lt;/h6&gt;
+</pre>
+
+<h3>Anchors - <kbd>C-cC-a</kbd></h3>
+<pre>
+n	    html-target-anchor	    &lt;a name=""&gt;&lt;/a&gt;
+l	    html-anchor		    &lt;a href=""&gt;&lt;/a&gt;
+</pre>
+
+<h3>Logical styles - <kbd>C-cC-s</kbd></h3>
+<pre>
+p	    html-preformatted	    &lt;pre&gt;&lt;/pre&gt;
+b	    html-blockquote	    &lt;blockquote&gt;&lt;/blockquote&gt;
+e	    html-emphasized	    &lt;em&gt;&lt;/em&gt;
+s	    html-strong		    &lt;strong&gt;&lt;/strong&gt;
+c	    html-code		    &lt;code&gt;&lt;/code&gt;
+x	    html-sample		    &lt;samp&gt;&lt;/samp&gt;
+r	    html-citation	    &lt;cite&gt;&lt;/cite&gt;
+k	    html-keyboard	    &lt;kbd&gt;&lt;/kbd&gt;
+v	    html-variable	    &lt;var&gt;&lt;/var&gt;
+d	    html-definition	    &lt;dfn&gt;&lt;/dfn&gt;
+a	    html-address	    &lt;address&gt;&lt;/address&gt;
+q	    html-quote		    &lt;q&gt;&lt;/q&gt;
+n	    html-person		    &lt;person&gt;&lt;/person&gt;
+y	    html-acronym	    &lt;acronym&gt;&lt;/acronym&gt;
+.	    html-abbrev		    &lt;abbrev&gt;&lt;/abbrev&gt;
+m	    html-cmd		    &lt;cmd&gt;&lt;/cmd&gt;
+g	    html-arg		    &lt;arg&gt;&lt;/arg&gt;
+l	    html-lit		    &lt;lit&gt;&lt;/lit&gt;
+</pre>
+
+<h3>Physical styles - <kbd>C-cC-p</kbd></h3>
+<pre>
+b	    html-bold		    &lt;b&gt;&lt;/b&gt;
+i	    html-italic		    &lt;i&gt;&lt;/i&gt;
+u	    html-underline	    &lt;u&gt;&lt;/u&gt;
+f	    html-fixed		    &lt;tt&gt;&lt;/tt&gt;
+x	    html-strikethru	    &lt;s&gt;&lt;/s&gt;
+^	    html-superscript	    &lt;sup&gt;&lt;/sup&gt;
+_	    html-subscript	    &lt;sub&gt;&lt;/sub&gt;
+r	    html-render		    &lt;render tag="" style=""&gt;   
+</pre>
+
+<h3>Lists - <kbd>C-cC-l</kbd></h3>
+<pre>
+o	    html-ordered-list	    &lt;ol&gt;&lt;li&gt;&lt;/ol&gt;
+u	    html-unordered-list	    &lt;ul&gt;&lt;li&gt;&lt;/ul&gt;
+r	    html-directory	    &lt;dir&gt;&lt;li&gt;&lt;/dir&gt;
+m	    html-menu		    &lt;menu&gt;&lt;li&gt;&lt;/menu&gt;
+d	    html-definition-list    &lt;dl&gt;&lt;dt&gt;&lt;dd&gt;&lt;/dl&gt;
+i	    html-smart-insert-item  &lt;li&gt;  or  &lt;dt&gt;&lt;dd&gt; depending on context
+l           html-item               &lt;li&gt;
+t           html-definition-item    &lt;dt&gt;&lt;dd&gt;
+</pre>
+
+<h3>Annotations - <kbd>C-cC-n</kbd></h3>
+<pre>
+a	    html-abstract	    &lt;abstract&gt;&lt;/abstract&gt;
+n	    html-note		    &lt;note role=""&gt;&lt;/note&gt;
+f	    html-footnote	    &lt;footnote&gt;&lt;/footnote&gt;
+m	    html-margin		    &lt;margin&gt;&lt;/margin&gt;
+</pre>
+
+<h3>Forms - <kbd>C-cC-f</kbd></h3>
+<pre>
+f	    html-form		    &lt;form action=""&gt;&lt;/form&gt;
+t	    html-input-text	    &lt;input name="" size=""&gt;
+i	    html-input-int	    &lt;input type="INT" name="" size=""&gt;
+.           html-input-float	    &lt;input type="FLOAT" name="" size=""&gt;
+d	    html-input-date	    &lt;input type="DATE" name="" size=""&gt;
+u	    html-input-url	    &lt;input type="URL" name="" size=""&gt;
+c	    html-input-check	    &lt;input type="CHECKBOX" name=""&gt;
+r	    html-input-radio	    &lt;input type="RADIO" name=""&gt;
+g	    html-input-image	    &lt;input type="IMAGE" name="" src=""&gt;
+s	    html-input-scribble	    &lt;input type="SCRIBBLE" name="" size=""&gt;
+a	    html-input-audio	    &lt;input type="AUDIO" name=""&gt;
+b	    html-input-submit	    &lt;input type="SUBMIT" value=""&gt;
+x	    html-input-reset	    &lt;input type="RESET" value=""&gt;
+p	    html-input-textarea	    &lt;textarea name="" rows= cols=&gt;&lt;/textarea&gt;
+c	    html-input-select	    &lt;select name=""&gt;&lt;/select&gt;
+</pre>
+
+<h3>Images - <kbd>C-cC-i</kbd></h3>
+<pre>
+i	    html-image		    &lt;img src=""&gt;
+t           html-alt-image          &lt;img alt="" src=""&gt;
+a           html-align-image        &lt;img align="" src=""&gt;
+e           html-align-alt-image    &lt;img align="" src="" alt=""&gt;
+</pre>
+
+<h3>Text Elements</h3>
+<pre>
+M-RET	    html-paragraph	    &lt;p&gt;
+C-c-	    html-horizontal-rule    &lt;hr&gt;
+C-cRET	    html-break		    &lt;br&gt;
+</pre>
+
+<h3>Entities</h3>
+<pre>
+C-c&amp;	    html-ampersand	    &amp;amp;
+C-c&lt;	    html-less-than	    &amp;lt;
+C-c&gt;	    html-greater-than	    &amp;gt;
+C-cSPC	    html-nonbreaking-space  &amp;nbsp;
+</pre>
+
+<hr>
+<!-- hhmts start -->
+Last modified: Wed Feb  1 14:16:33 1995
+<!-- hhmts end -->
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
--- html-helper-mode-3.0.4kilo.orig/differences.html
+++ html-helper-mode-3.0.4kilo/differences.html
@@ -0,0 +1,52 @@
+<title>Differences between html-mode and html-helper-mode</title>
+<h1>Differences between html-mode and html-helper-mode</h1>
+
+There are several similarities between html-helper-mode and html-mode
+This isn't surprising, since my mode was inspired by
+html-mode. Here's an (incomplete) list of the differences:<p>
+
+<dl>
+  <dt> Insertion philosophy
+  <dd> html-mode frequently prompts the user in the minibuffer for
+       the data to fill in fields like titles or headers.
+       In html-helper-mode, prompting is a user-controlled option.<p>
+
+  <dt> Modifying regions
+  <dd> In html-helper-mode, every command will instead
+       modify the region if it is called with a prefix argument.<p>
+
+  <dt> Automatic text insertion
+  <dd> html-helper-mode can automatically insert skeletons for
+       new documents and also maintain timestamps.<p>
+
+  <dt> Minimal syntax support
+  <dd> html-helper-mode does its best to tell emacs about the syntax
+       of HTML documents.<p>
+
+  <dt> Indentation
+  <dd> html-helper-mode indents nested lists<p>
+
+  <dt> Highlighting
+  <dd> HTML cookies are coloured nicely with hilit19.<p>
+
+  <dt> Keymap
+  <dd> A few obsolete cookies
+       have been removed, a few new cookies have been added, and
+       the keybindings have been completely rearranged to be compliant with
+       emacs standards.<p>
+
+  <dt> Completion
+  <dd> HTML cookies can be completed in the buffer with M-TAB.<p>
+
+
+  <dt> Missing features
+  <dd> Some features of html-mode are not included. These include the
+       ability to quotify old-style HREFs and automatic naming of anchors<p>
+
+</dl>
+
+<hr>
+<!-- hhmts start -->
+Last modified: Wed Feb  1 14:16:27 1995
+<!-- hhmts end -->
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
--- html-helper-mode-3.0.4kilo.orig/changelog.html
+++ html-helper-mode-3.0.4kilo/changelog.html
@@ -0,0 +1,196 @@
+<html> <head>
+<title>Changes in html-helper-mode</title>
+</head>
+
+<body>
+<h1>Changes in html-helper-mode</h1>
+
+I haven't been very careful about keeping this up to date. Sorry!<p>
+
+<hr>
+<h2>1.13 - Original beta release</h2>
+
+<hr>
+<h2>1.34 - Second beta release</h2>
+New features:<p>
+<ul>
+  <li> switched from boilerplate to tempo.
+       <ul>
+	 <li> cookies can now be more powerful (see tempo.el)
+	 <li> optional prompting for fields 
+	 <li> <kbd>M-C-b</kbd> and <kbd>M-C-f</kbd> move between fields
+	 <li> completion of cookies on <kbd>M-TAB</kbd>
+	 <li> hook called on insertion
+       </ul>
+  <li> indentation of lists
+  <li> HTML+ cookies (courtesy of David Kågedal)
+  <li> user control over what sort of timestamp is inserted
+</ul>
+
+Changes:<p>
+<ul>
+  <li> New timestamp format (use <kbd>M-C-t</kbd> to insert the new delimiter)
+  <li> New <a href="keybindings.html">keybindings</a>, compliant with 
+       emacs coding standards but awkward to type.
+  <li> more HTML compliant initial skeleton
+</ul>
+
+<hr>
+<h2>2.0 - first official release</h2>
+Changes:<p>
+<ul>
+  <li> Added more image cookie options
+</ul>
+<h2>Post 2.0 betas</h2>
+<h3>2.2 - rms cleanups</h3>
+<ul>
+  <li> Improved docstrings, (provide 'html-mode) for 14 character filenames
+</ul>
+
+<h3>2.3 - menus</h3>
+<ul>
+  <li> Updated my location to @santafe.edu
+  <li> Added menu support (using easymenu)
+  <li> Changed format of cookie database a bit, renamed a few cookies
+  <li> Added timezone to timestamp
+</ul>
+
+<h3>2.4 - stupid bug fixes</h3>
+
+<h3>2.5 - modularization</h3>
+
+<ul>
+  <li>Added quot and # entities</li>
+  <li>Made &lt;p&gt;, &lt;li&gt;, &lt;dd&gt;, &lt;dt&gt; containers. Bleah!</li>
+  <li>Removed extraneous whitespace from &lt;li&gt;, etc. Changed default
+      indentation to account for this.</li>
+  <li>Removed emacs18 support (sorry! Time for you to upgrade.)</li>
+  <li>Reworked the keymap and menu scheme so types are modular, you
+      can add them later.. Lots
+      or reorganization of code, reordered cookie database, etc.</li>
+</ul>
+
+<h3>2.6 - emacs18 added in again</h3>
+<ul>
+  <li>Added back in emacs18 support, grudgingly.
+      emacs18ers need auc-menu.el installed as "easymenu.el", and
+      some version of the add-hook function.</li>
+  <li>Changed the paragraph tag to include a newline</li>
+</ul>
+
+<h3>2.7 - HTML/2.0 compliance</h3>
+<ul>
+  <li>Added full HTML/2.0 compliance: removed old tags, added in new ones.
+      Thanks, Marc!</li>
+</ul>
+
+<h3>2.8 - new indentation code</h3>
+<ul>
+  <li>Added in html-helper-htmldtd-version for the skeleton</li>
+  <li>moved headers to C-cC-h to make C-cC-t free (why not before?)</li>
+  <li>run text-mode-hook, html-mode-hook, html-load-hook</li>
+  <li>change indentation logic around to make it clearer</li>
+  <li>new type of list item, end of items</li>
+  <li>give &lt;select&gt; and &lt;option&gt; stuff indentation like lists</li>
+  <li>new form cookies, courtesy of Marc</li>
+</ul>
+
+<h3>2.9 - menu cleanups</h3>
+<ul>
+  <li>Added in a novice menu, on by default.</li>
+  <li>Cleaned up the menu presentation</li>
+  <li><b>MAJOR CHANGE</b> in the cookie format: the 3rd argument is
+      now the menu string (it is also coerced into a symbol to make
+      the function.)</li>
+</ul>
+
+<h3>2.10</h3>
+<ul>
+  <li>a bit more hilit19 code: headers, titles, forms (no logical styles)</li>
+  <li>move headers back from <kbd>C-cC-h</kbd> to <kbd>C-cC-t</kbd>. Sorry.</li>
+  <li>Update tempo insertions from (p . foo) to (p foo)</li>
+  <li>now looks in features to check for hilit19</li>
+  <li>if you have 'browse-url loaded (forthcoming code) then
+      <kbd>M-C-q</kbd> and a menu item will bring up your current file in your
+      browser. There's also url-at-point, but we'll leave that to the
+      user to bind. Should we save file first? Probably no.
+  </li>
+  <li>skeletons and timestamps now on by default</li>
+</ul>
+
+<h3>2.11</h3>
+<ul>
+  <li>More hilit19 changes: do comments right, change &lt;h#&gt; colouring</li>
+  <li>Moved timestamp-delimiter to <kbd>C-cC-zt</kbd> and
+      browse-url-of-file to <kbd>C-cC-zv</kbd> to make things better.
+  </li>
+  <li>Mucked with menus: verbified, added in timestamps and toggling
+      to expert menu.</li>
+</ul>
+
+<h3>2.12</h3>
+<ul>
+  <li>Better loading of easymenu and/or auc-menu</li>
+  <li>Change logic for checking if browse-url, hilit19 are loaded</li>
+  <li>Bind 'browse-url-at-point into keymap and menu</li>
+  <li>More hilit19 regexp changes</li>
+  <li>Call (easy-menu-add) and (easy-menu-remove) at the right times.</li>
+</ul>
+
+<h3>2.13</h3>
+<ul>
+  <li>Changed all references to "cookie" into "tag"</li>
+  <li>Cleaned up doc strings</li>
+  <li>Fixed dumb easy-menu bug (affects XEmacs)</li>
+  <li>Look at html-helper-user-menu when building expert menu, allow
+      users to add things in.</li>
+</ul>
+
+<h3>2.14</h3>
+<ul>
+  <li>Got rid of &lt;/p&gt;, &lt;/li&gt;, &lt;/dd&gt;, &lt;/dt&gt;.
+      Best as I can tell, these are optional and too confusing. I
+      might make them into an add-on package.
+</ul>
+
+<h3>2.15</h3>
+<ul>
+  <li>Added in Ulrik Dickow's font-lock support. Many thanks to him
+      for his great work and infinite patience.
+</ul>
+
+<h3>2.16</h3>
+<ul>
+  <li>Updated Ulriks' font-lock code.
+</ul>
+
+<h3>2.17</h3>
+<ul>
+  <li>Added table indentation
+</ul>
+
+<h3>2.18</h3>
+<ul>
+  <li>small change to hilit19 entity pattern
+  <li>changed <code>html-helper-htmldtd-version</code> meaning to
+      include the entire comment.
+</ul>
+
+<h3>2.19</h3>
+<ul>
+  <li>Added <code>html-helper-mode-version</code>, changed the version
+      identification in the comments.
+</ul>
+
+<h3>2.19.1</h3>
+<ul>
+  <li>Included some font-lock regexp changes.
+</ul>
+
+
+<hr>
+<!-- hhmts start -->
+(14 Nov 2000 at 15:57 CST)
+<!-- hhmts end -->
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
+</body> </html>
--- html-helper-mode-3.0.4kilo.orig/tempo.el
+++ html-helper-mode-3.0.4kilo/tempo.el
@@ -0,0 +1,688 @@
+;;; tempo.el --- Flexible template insertion
+;; Copyright (C) 1994 Free Software Foundation, Inc.
+
+;; Author: David K}gedal <davidk@lysator.liu.se >
+;; Created: 16 Feb 1994
+;; Version: 1.2.2
+;; Keywords: extensions, languages, tools
+;; $Revision: 1.32 $
+
+;; This file is part of GNU Emacs.
+
+;; 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.
+
+;;; Commentary:
+
+;; This file provides a simple way to define powerful templates, or
+;; macros, if you wish. It is mainly intended for, but not limited to,
+;; other programmers to be used for creating shortcuts for editing
+;; certain kind of documents. It was originally written to be used by
+;; a HTML editing mode written by Nelson Minar <nelson@santafe.edu>,
+;; and his html-helper-mode.el is probably the best example of how to
+;; use this program.
+
+;; A template is defined as a list of items to be inserted in the
+;; current buffer at point. Some of the items can be simple strings,
+;; while other can control formatting or define special points of
+;; interest in the inserted text.
+
+;; If a template defines a "point of interest" that point is inserted
+;; in a buffer-local list of "points of interest" that the user can
+;; jump between with the commands `tempo-backward-mark' and
+;; `tempo-forward-mark'. If the template definer provides a prompt for
+;; the point, and the variable `tempo-interactive' is non-nil, the
+;; user will be prompted for a string to be inserted in the buffer,
+;; using the minibuffer.
+
+;; The template can also define one point to be replaced with the
+;; current region if the template command is called with a prefix (or
+;; a non-nil argument).
+
+;; More flexible templates can be created by including lisp symbols,
+;; which will be evaluated as variables, or lists, which will will be
+;; evaluated as lisp expressions.
+
+;; See the documentation for tempo-define-template for the different
+;; items that can be used to define a tempo template.
+
+;; One of the more powerful features of tempo templates are automatic
+;; completion. With every template can be assigned a special tag that
+;; should be recognized by `tempo-complete-tag' and expanded to the
+;; complete template. By default the tags are added to a global list
+;; of template tags, and are matched against the last word before
+;; point. But if you assign your tags to a specific list, you can also
+;; specify another method for matching text in the buffer against the
+;; tags. In the HTML mode, for instance, the tags are matched against
+;; the text between the last `<' and point.
+
+;; When defining a template named `foo', a symbol named
+;; `tempo-template-foo' will be created whose value as a variable will
+;; be the template definition, and its function value will be an
+;; interactive function that inserts the template at the point.
+
+;; The latest tempo.el distribution can be fetched from
+;; ftp.lysator.liu.se in the directory /pub/emacs
+
+;;; Known bugs:
+
+;; If the 'o is the first element in a template, strange things can
+;; happen when the template is inserted at the beginning of a
+;; line. This is due to strange behaviour in open-line. But it should
+;; be easily avoided.
+
+;; The 'o tag is also a problem when including the region. This will
+;; be looked into.
+
+;; Clicking mouse-2 in the completion buffer gives strange results.
+
+;; There is a bug in some emacs versions that prevents completion from
+;; working. If it doesn't work for you, send me a note indicating your
+;; emacs version and your problems.
+
+;;; Contributors:
+
+;; These people have given me importand feedback and new ideas for
+;; tempo.el. Thanks.
+
+;; Nelson Minar <nelson@santafe.edu>
+;; Richard Stallman <rms@gnu.ai.mit.edu>
+;; Lars Lindberg <Lars.Lindberg@sypro.cap.se>
+;; Glen Whitney <Glen.Whitney@math.lsa.umich.edu>
+
+;;; Code:
+
+;; (provide 'tempo)
+
+;;; User options
+
+(defvar tempo-interactive nil
+  "*Prompt user for strings in templates.
+If this variable is non-nil, `tempo-insert' prompts the
+user for text to insert in the templates")
+
+(defvar tempo-insert-region nil
+  "*Automatically insert current region when there is a `r' in the template
+If this variable is NIL, `r' elements will be treated just like `p'
+elements, unless the template function is given a prefix (or a non-nil
+argument). If this variable is non-NIL, the behaviour is reversed.
+
+In Transient Mark mode, this option is unused.")
+
+(defvar tempo-show-completion-buffer t
+  "*If non-NIL, show a buffer with possible completions, when only
+a partial completion can be found")
+
+(defvar tempo-leave-completion-buffer nil
+  "*If NIL, a completion buffer generated by \\[tempo-complete-tag]
+disappears at the next keypress; otherwise, it remains forever.")
+
+;;; Internal variables
+
+(defvar tempo-insert-string-functions nil
+  "List of functions to run when inserting a string.
+Each function is called with a single arg, STRING."  )
+
+(defvar tempo-tags nil
+  "An association list with tags and corresponding templates")
+
+(defvar tempo-local-tags '((tempo-tags . nil))
+  "A list of locally installed tag completion lists.
+It is a association list where the car of every element is a symbol
+whose varable value is a template list. The cdr part, if non-nil, is a
+function or a regexp that defines the string to match. See the
+documentation for the function `tempo-complete-tag' for more info.
+
+`tempo-tags' is always in the last position in this list.")
+
+(defvar tempo-collection nil
+  "A collection of all the tags defined for the current buffer.")
+
+(defvar tempo-dirty-collection t
+  "Indicates if the tag collection needs to be rebuilt.")
+
+(defvar tempo-marks nil
+  "A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.")
+
+(defvar tempo-match-finder "\\b\\([^\\b]+\\)\\="
+  "The regexp or function used to find the string to match against tags.
+
+If `tempo-match-finder is a string, it should contain a regular
+expression with at least one \\( \\) pair. When searching for tags,
+`tempo-complete-tag' calls `re-search-backward' with this string, and
+the string between the first \\( and \\) is used for matching against
+each string in the tag list. If one is found, the whole text between
+the first \\( and the point is replaced with the inserted template.
+
+You will probably want to include \\ \= at the end of the regexp to
+make sure that the string is matched only against text adjacent to the
+point.
+
+If `tempo-match-finder' is a symbol, it should be a function that
+returns a pair of the form (STRING . POS), where STRING is the string
+used for matching and POS is the buffer position after which text
+should be replaced with a template.")
+
+(defvar tempo-user-elements nil
+  "Element handlers for user-defined elements.
+A list of symbols which are bound to functions that take one argument.
+This function should return somthing to be sent to `tempo-insert' if
+it recognizes the argument, and NIL otherwise")
+
+(defvar tempo-named-insertions nil
+  "Temporary storage for named insertions")
+
+(defvar tempo-region-start (make-marker)
+  "Region start when inserting around the region")
+
+(defvar tempo-region-stop (make-marker)
+  "Region stop when inserting around the region")
+
+;; Make some variables local to every buffer
+
+(make-variable-buffer-local 'tempo-marks)
+(make-variable-buffer-local 'tempo-local-tags)
+(make-variable-buffer-local 'tempo-match-finder)
+(make-variable-buffer-local 'tempo-collection)
+(make-variable-buffer-local 'tempo-dirty-collection)
+
+;;; Functions
+
+;;; First some useful functions and macros
+
+(defun tempo-mapc (fun lst)
+  (if (null lst) nil
+    (funcall fun (car lst))
+    (tempo-mapc fun (cdr lst))))
+
+(defmacro tempo-dolist (il &rest forms)
+  (let ((i (car il))
+	(l (car (cdr il))))
+    (list 'tempo-mapc
+	  (list 'function (append (list 'lambda
+					(list i))
+				  forms))
+	  (car (cdr il)))))
+(put 'tempo-dolist 'lisp-indent-function 1)
+
+;;
+;; tempo-define-template
+
+(defun tempo-define-template (name elements &optional tag documentation taglist)
+  "Define a template.
+This function creates a template variable `tempo-template-NAME' and an
+interactive function `tempo-template-NAME' that inserts the template
+at the point.  The created function is returned.
+
+NAME is a string that contains the name of the template, ELEMENTS is a
+list of elements in the template, TAG is the tag used for completion,
+DOCUMENTATION is the documentation string for the insertion command
+created, and TAGLIST (a symbol) is the tag list that TAG (if provided)
+should be added to).  If TAGLIST is nil and TAG is non-nil, TAG is
+added to `tempo-tags'
+
+The elements in ELEMENTS can be of several types:
+
+ - A string. It is sent to the hooks in `tempo-insert-string-functions',
+   and the result is inserted.
+ - The symbol 'p. This position is saved in `tempo-marks'.
+ - The symbol 'r. If `tempo-insert' is called with ON-REGION non-nil
+   the current region is placed here. Otherwise it works like 'p.
+ - (p PROMPT <NAME>) If `tempo-interactive' is non-nil, the user is
+   prompted in the minbuffer with PROMPT for a string to be inserted.
+   If the optional parameter NAME is non-nil, the text is saved for
+   later insertion with the `s' tag.
+   If `tempo-interactive' is nil, it works like 'p.
+ - (r PROMPT) like the previous, but if `tempo-interactive' is nil
+   and `tempo-insert' is called with ON-REGION non-nil, the current
+   region is placed here. This usually happens when you call the
+   template function with a prefix argument.
+ - (s NAME) Inserts text previously read with the (p ..) construct.
+   Finds the insertion saved under NAME and inserts it. Acts like 'p
+   if tempo-interactive is nil.
+ - '& If there is only whitespace between the line start and point,
+   nothing happens. Otherwise a newline is inserted.
+ - '% If there is only whitespace between point and end-of-line
+   nothing happens. Otherwise a newline is inserted.
+ - 'n inserts a newline.
+ - '> The line is indented using `indent-according-to-mode'. Note that
+   you often should place this item after the text you want on the
+   line.
+ - 'n> Inserts a newline and indents line.
+ - 'o Like '% but leaves the point before the newline.
+ - nil. It is ignored.
+ - Anything else. It is evaluated and the result is parsed again."
+
+  (let* ((template-name (intern (concat "tempo-template-"
+				       name)))
+	 (command-name template-name))
+    (set template-name elements)
+    (fset command-name (list 'lambda (list '&optional 'arg)
+			     (or documentation 
+				 (concat "Insert a " name "."))
+			     (list 'interactive "*P")
+			     (list 'tempo-insert-template (list 'quote
+								template-name)
+				   (list 'if 'tempo-insert-region
+					 (list 'not 'arg) 'arg))))
+    (and tag
+	 (tempo-add-tag tag template-name taglist))
+    command-name))
+
+;;;
+;;; tempo-insert-template
+
+(defun tempo-insert-template (template on-region)
+  "Insert a template.
+TEMPLATE is the template to be inserted.  If ON-REGION is non-nil the
+`r' elements are replaced with the current region. In Transient Mark
+mode, ON-REGION is ignored and assumed true if the region is active."
+  (if (and (boundp 'transient-mark-mode)
+	   transient-mark-mode
+	   mark-active)
+      (setq on-region t))
+  (and on-region
+       (set-marker tempo-region-start (min (mark) (point)))
+       (set-marker tempo-region-stop (max (mark) (point))))
+  (if on-region
+      (goto-char tempo-region-start))
+  (save-excursion
+    (tempo-insert-mark (point-marker))
+    (mapcar (function (lambda (elt)
+			(tempo-insert elt on-region)))
+	    (symbol-value template))
+    (tempo-insert-mark (point-marker)))
+  (tempo-forward-mark)
+  (tempo-forget-insertions)
+  (and (boundp 'transient-mark-mode)
+       transient-mark-mode
+       (deactivate-mark)))
+
+;;;
+;;; tempo-insert
+
+(defun tempo-insert (element on-region)
+  "Insert a template element.
+Insert one element from a template. If ON-REGION is non-nil the `r'
+elements are replaced with the current region.
+
+See documentation for `tempo-define-template' for the kind of elements
+possible."
+  (cond ((stringp element) (tempo-process-and-insert-string element))
+	((and (consp element) (eq (car element) 'p))
+	 (tempo-insert-prompt (cdr element)))
+	((and (consp element) (eq (car element) 'P))
+	 (let ((tempo-interactive t))
+	   (tempo-insert-prompt (cdr element))))
+	((and (consp element) (eq (car element) 'r))
+	 (if on-region
+	     (goto-char tempo-region-stop)
+	   (tempo-insert-prompt (cdr element))))
+	((and (consp element) (eq (car element) 's))
+	 (tempo-insert-named (car (cdr element))))
+	((and (consp element) (eq (car element) 'l))
+	 (mapcar (function (lambda (elt) (tempo-insert elt on-region)))
+		 (cdr element)))
+	((eq element 'p) (tempo-insert-mark (point-marker)))
+	((eq element 'r) (if on-region
+			     (goto-char tempo-region-stop)
+			   (tempo-insert-mark (point-marker))))
+	((eq element 'r>) (if on-region
+			      (progn
+				(goto-char tempo-region-stop)
+				(indent-region (mark) (point) nil))
+			    (tempo-insert-mark (point-marker))))
+	((eq element '>) (indent-according-to-mode))
+	((eq element '&) (if (not (or (= (current-column) 0)
+				      (save-excursion
+					(re-search-backward
+					 "^\\s-*\\=" nil t))))
+			     (insert "\n")))
+	((eq element '%) (if (not (or (eolp)
+				      (save-excursion
+					(re-search-forward
+					 "\\=\\s-*$" nil t))))
+			     (insert "\n")))
+	((eq element 'n) (insert "\n"))
+	((eq element 'n>) (insert "\n") (indent-according-to-mode))
+	;; Bug: If the 'o is the first element in a template, strange
+	;; things can happen when the template is inserted at the
+	;; beginning of a line.
+	((eq element 'o) (if (not (or on-region
+				      (eolp)
+				      (save-excursion
+					(re-search-forward
+					 "\\=\\s-*$" nil t))))
+			     (open-line 1)))
+	((null element))
+	(t (tempo-insert (or (tempo-is-user-element element)
+			     (eval element))
+			 on-region))))
+
+;;;
+;;; tempo-insert-prompt
+
+(defun tempo-insert-prompt (prompt)
+  "Prompt for a text string and insert it in the current buffer.
+If the variable `tempo-interactive' is non-nil the user is prompted
+for a string in the minibuffer, which is then inserted in the current
+buffer. If `tempo-interactive' is nil, the current point is placed on
+`tempo-mark'.
+
+PROMPT is the prompt string or a list containing the prompt string and
+a name to save the inserted text under."
+  (if tempo-interactive
+      (let ((prompt-string (if (listp prompt)
+			       (car prompt)
+			     prompt))
+	    (save-name (and (listp prompt) (nth 1 prompt)))
+	    inserted-text)
+
+	(progn
+          (sit-for 0)
+	  (setq inserted-text (read-string prompt-string))
+	  (insert inserted-text)
+	  (if save-name
+	      (tempo-remember-insertion save-name inserted-text))))
+    (tempo-insert-mark (point-marker))))
+
+;;;
+;;; tempo-is-user-element
+
+(defun tempo-is-user-element (element)
+  "Tries all the user-defined element handlers in
+`tempo-user-elements'"
+  ;; Sigh... I need (some list)
+  (catch 'found
+    (mapcar (function (lambda (handler)
+			(let ((result (funcall handler element)))
+			  (if result (throw 'found result)))))
+	    tempo-user-elements)
+    (throw 'found nil)))
+
+;;;
+;;; tempo-remember-insertion
+
+(defun tempo-remember-insertion (save-name string)
+  "Save the text in STRING under the name SAVE-NAME for later retrieval."
+  (setq tempo-named-insertions (cons (cons save-name string)
+				     tempo-named-insertions)))
+
+;;;
+;;; tempo-forget-insertions
+
+(defun tempo-forget-insertions ()
+  "Forget all the saved named insertions."
+  (setq tempo-named-insertions nil))
+
+;;;
+;;; tempo-insert-named
+
+(defun tempo-insert-named (name)
+  "Insert the previous insertion saved under a named specified in NAME.
+If there is no such name saved, a tempo mark is inserted."
+  (let* ((insertion (cdr (assq name tempo-named-insertions))))
+    (if insertion
+	(insert insertion)
+      (tempo-insert-mark (point-marker)))))
+
+;;;
+;;; tempo-process-and-insert-string
+
+(defun tempo-process-and-insert-string (string)
+  "Insert a string from a template.
+Run a string through the preprocessors in `tempo-insert-string-functions'
+and insert the results."
+  (cond ((null tempo-insert-string-functions)
+	 nil)
+	((symbolp tempo-insert-string-functions)
+	 (setq string
+	       (funcall tempo-insert-string-functions string)))
+	((listp tempo-insert-string-functions)
+	 (tempo-dolist (fn tempo-insert-string-functions)
+	   (setq string (funcall fn string))))
+	(t
+	 (error "Bogus value in tempo-insert-string-functions: %s"
+		tempo-insert-string-functions)))
+  (insert string))
+
+;;;
+;;; tempo-insert-mark
+
+(defun tempo-insert-mark (mark)
+  "Insert a mark `tempo-marks' while keeping it sorted"
+  (cond ((null tempo-marks) (setq tempo-marks (list mark)))
+	((< mark (car tempo-marks)) (setq tempo-marks (cons mark tempo-marks)))
+	(t (let ((lp tempo-marks))
+	     (while (and (cdr lp)
+			 (<= (car (cdr lp)) mark))
+	       (setq lp (cdr lp)))
+	     (if (not (= mark (car lp)))
+		 (setcdr lp (cons mark (cdr lp))))))))
+	  
+;;;
+;;; tempo-forward-mark
+
+(defun tempo-forward-mark ()
+  "Jump to the next mark in `tempo-forward-mark-list'."
+  (interactive)
+  (let ((next-mark (catch 'found
+		     (mapcar
+		      (function
+		       (lambda (mark)
+			 (if (< (point) mark)
+			     (throw 'found mark))))
+		      tempo-marks)
+		     ;; return nil if not found
+		     nil)))
+    (if next-mark
+	(goto-char next-mark))))
+
+;;;
+;;; tempo-backward-mark
+
+(defun tempo-backward-mark ()
+  "Jump to the previous mark in `tempo-back-mark-list'."
+  (interactive)
+  (let ((prev-mark (catch 'found
+		     (let (last)
+		       (mapcar
+			(function
+			 (lambda (mark)
+			   (if (<= (point) mark)
+			       (throw 'found last))
+			   (setq last mark)))
+			tempo-marks)
+		       last))))
+    (if prev-mark
+	(goto-char prev-mark))))
+	
+;;;
+;;; tempo-add-tag
+
+(defun tempo-add-tag (tag template &optional tag-list)
+  "Add a template tag.
+Add the TAG, that should complete to TEMPLATE to the list in TAG-LIST,
+or to `tempo-tags' if TAG-LIST is nil."
+
+  (interactive "sTag: \nCTemplate: ")
+  (if (null tag-list)
+      (setq tag-list 'tempo-tags))
+  (if (not (assoc tag (symbol-value tag-list)))
+      (set tag-list (cons (cons tag template) (symbol-value tag-list))))
+  (tempo-invalidate-collection))
+
+;;;
+;;; tempo-use-tag-list
+
+(defun tempo-use-tag-list (tag-list &optional completion-function)
+  "Install TAG-LIST to be used for template completion in the current buffer.
+TAG-LIST is a symbol whose variable value is a tag list created with
+`tempo-add-tag'.
+
+COMPLETION-FUNCTION is an obsolete option for specifyingis an optional
+function or string that is used by `\\[tempo-complete-tag]' to find a
+string to match the tag against. It has the same definition as the
+variable `tempo-match-finder'. In this version, supplying a
+COMPLETION-FUNCTION just sets `tempo-match-finder' locally."
+  (let ((old (assq tag-list tempo-local-tags)))
+    (if old
+	(setcdr old completion-function)
+      (setq tempo-local-tags (cons (cons tag-list completion-function)
+				   tempo-local-tags))))
+  (if completion-function
+      (setq tempo-match-finder completion-function))
+  (tempo-invalidate-collection))
+
+;;;
+;;; tempo-invalidate-collection
+
+(defun tempo-invalidate-collection ()
+  "Marks the tag collection as obsolete.
+Whenever it is needed again it will be rebuilt."
+  (setq tempo-dirty-collection t))
+
+;;;
+;;; tempo-build-collection
+
+(defun tempo-build-collection ()
+  "Build a collection of all the tags and return it.
+If `tempo-dirty-collection' is NIL, the old collection is reused."
+  (prog1
+      (or (and (not tempo-dirty-collection)
+	   tempo-collection)
+      (setq tempo-collection
+	    (apply (function append)
+		   (mapcar (function (lambda (tag-list)
+					; If the format for
+					; tempo-local-tags changes,
+					; change this
+				       (eval (car tag-list))))
+			   tempo-local-tags))))
+    (setq tempo-dirty-collection nil)))
+
+;;;
+;;; tempo-find-match-string
+
+(defun tempo-find-match-string (finder)
+  "Find a string to be matched against a tag list.
+FINDER is a function or a string. Returns (STRING . POS), or nil
+if no reasonable string is found."
+  (cond ((stringp finder)
+	 (let (successful)
+	   (save-excursion
+	     (or (setq successful (re-search-backward finder nil t))
+		 0))
+	   (if successful
+	       (cons (buffer-substring (match-beginning 1)
+				       (match-end 1)) ; This seems to be a
+					; bug in emacs
+		     (match-beginning 1))
+	     nil)))
+	(t
+	 (funcall finder))))
+
+;;;
+;;; tempo-complete-tag
+
+(defun tempo-complete-tag (&optional silent)
+  "Look for a tag and expand it.
+All the tags in the tag lists in `tempo-local-tags'
+ (this includes `tempo-tags') are searched for a match for the text
+before the point.  The way the string to match for is determined can
+be altered with the variable `tempo-match-finder'. If
+`tempo-match-finder' returns nil, then the results are the same as
+no match at all.
+
+If a single match is found, the corresponding template is expanded in
+place of the matching string.
+
+If a partial completion or no match at all is found, and SILENT is
+non-NIL, the function will give a signal.
+
+If a partial completion is found and `tempo-show-completion-buffer' is
+non-NIL, a buffer containing possible completions is displayed."
+
+  ;; This function may look like a hack, but this is how I want it to
+  ;; work.
+  (interactive "*")
+  (let* ((collection (tempo-build-collection))
+	 (match-info (tempo-find-match-string tempo-match-finder))
+	 (match-string (car match-info))
+	 (match-start (cdr match-info))
+	 (exact (assoc match-string collection))
+	 (compl (or (car exact)
+		    (and match-info (try-completion match-string collection)))))
+    (if compl (delete-region match-start (point)))
+    (cond ((null match-info) (or silent (ding)))
+	  ((null compl) (or silent (ding)))
+	  ((eq compl t) (tempo-insert-template
+			 (cdr (assoc match-string
+				     collection))
+			 nil))
+	  (t (if (setq exact (assoc compl collection))
+		 (tempo-insert-template (cdr exact) nil)
+	       (insert compl)
+	       (or silent (ding))
+	       (if tempo-show-completion-buffer
+		   (tempo-display-completions match-string
+					      collection)))))))
+
+
+;;;
+;;; tempo-display-completions
+
+(defun tempo-display-completions (string tag-list)
+  "Show a buffer containing possible completions for STRING."
+  (if tempo-leave-completion-buffer
+      (with-output-to-temp-buffer "*Completions*"
+	(display-completion-list
+	 (all-completions string tag-list)))
+    (save-window-excursion
+      (with-output-to-temp-buffer "*Completions*"
+	(display-completion-list
+	 (all-completions string tag-list)))
+      (sit-for 32767))))
+
+;;;
+;;; tempo-expand-if-complete
+
+(defun tempo-expand-if-complete ()
+  "Expand the tag before point if it is complete.
+Returns non-nil if an expansion was made and nil otherwise.
+
+This could as an example be used in a command that is bound to the
+space bar, and looks something like this:
+
+(defun tempo-space ()
+  (interactive \"*\")
+  (or (tempo-expand-if-complete)
+      (insert \" \")))"
+
+  (interactive "*")
+  (let* ((collection (tempo-build-collection))
+	 (match-info (tempo-find-match-string tempo-match-finder))
+	 (match-string (car match-info))
+	 (match-start (cdr match-info))
+	 (exact (assoc match-string collection)))
+    (if exact
+	(progn
+	  (delete-region match-start (point))
+	  (tempo-insert-template (cdr exact) nil)
+	  t)
+      nil)))
+
+(provide 'tempo)
+
+;;; tempo.el ends here
--- html-helper-mode-3.0.4kilo.orig/index.html
+++ html-helper-mode-3.0.4kilo/index.html
@@ -0,0 +1,107 @@
+<html> <head>
+<title>html-helper-mode</title>
+</head>
+
+<body>
+<h1>html-helper-mode</h1>
+
+(Please note: This is the documentation for the last "release" version
+of html-helper-mode.  Information about this "beta" release can be
+found in <a href="index-beta.html">index-beta.html</a>.)<p>
+
+<dfn>html-helper-mode</dfn> is an emacs mode to make editing HTML
+files easier, inspired by Marc Andreessen's html-mode. html-helper-mode does
+most of the things that html-mode does, but with a slightly different
+interface and lots of new features.<p>
+
+To use this mode, you need two lisp files:
+<ul>
+  <li> <a href="tempo.el">tempo.el</a>, a generic template insertion
+       facility for emacs by
+       <a href="http://www.lysator.liu.se/~davidk">David Kågedal</a>
+  <li> <a href="html-helper-mode.el">html-helper-mode.el</a>,
+       the actual editing mode.
+</ul>
+
+You might also like to try this user-contributed code by
+<a href="http://www.nbi.dk/~dickow/">Ulrik Dickow</a> for
+<a href="http://www.nbi.dk/TOOLS/emacs/lisp/html-font.el">font-lock support</a>.
+
+<p>
+
+Put these files in your load-path and byte compile them (if
+you want). Then arrange for html-helper-mode to be loaded: the easiest
+way is to put this in your .emacs:
+
+<pre>
+  (autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
+  (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
+</pre>
+Alternately, you can get an entire distribution of html-helper-mode,
+including these HTML documents, as 
+<a href="ftp://ftp.reed.edu/pub/src/html-helper-mode.tar.gz">html-helper-mode.tar.gz</a>.
+<p>
+
+<hr>
+
+<b>NEW</b>: the version of tempo.el I am now distributing is version 1.2.
+There are lots of new things in this version: the relevant change here is
+the completion code has been updated to be consistent with post emacs-19.26
+definitions of the <kbd>\=</kbd> regexp token. If completion wasn't working
+before, try this version. I still have <a href="tempo-1.0.el">version 1.0</a>
+around if you need it.<p>
+
+<hr>
+
+<h3>You can get there from here</h3>
+<ul>
+  <li> <a href="tempo.el">tempo.el</a> (local copy, known to work with html-helper-mode)
+  <li> <a href="html-helper-mode.el">html-helper-mode.el</a>
+  <li> <a href="documentation.html">Documentation</a> for html-helper-mode
+  <li> How to <a href="configuring.html">configure</a> html-helper-mode
+  <li> A list of <a href="keybindings.html">keybindings</a>
+  <li> <a href="differences.html">Differences</a> between html-helper-mode and html-mode
+  <li> <a href="changelog.html">Changelog</a> for html-helper-mode
+  <li> The official <a href="ftp://ftp.lysator.liu.se/pub/emacs/">ftp site</a>
+       for
+       <a href="ftp://ftp.lysator.liu.se/pub/emacs/tempo.el">tempo.el</a>.
+  <li> User contributed <a href="http://www.nbi.dk/TOOLS/emacs/lisp/html-font.el">font-lock support</a>.
+</ul>
+
+<hr>
+<h3>Acknowledgements</h3>
+Many thanks to <a href="http://www.lysator.liu.se/~davidk">David
+Kågedal</a> &lt;davidk@lysator.liu.se&gt; for coming along at just
+the right time with tempo.el, the basic template code that underlies
+html-helper-mode. Many of the neat features like completion and field
+support are because of his good design and programming.<p>
+
+Thanks to <a href="http://www.nbi.dk/~dickow/">Ulrik Dickow</a> for his font-lock code.<p>
+
+Thanks to the author of cc-mode, Barry Warsaw &lt;baw@anthem.nlm.nih.gov&gt;,
+his code provided a useful guide in writing this mode (not to
+mention saving me many hours of formatting C, C++, and Objective C!)<p>
+
+My appreciation to Marc Andreessen &lt;marca@netscape.com&gt;, the
+author of the original html-mode.<p>
+
+And finally, many thanks to the various people on the net who have been
+offering encouragement, suggestions, and example code. Y'all're the main
+reason I'm writing this, and the main reason it's usable.<p>
+
+<hr>
+New HTML document writers should read something like the 
+<a href="http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html">HTML
+primer</a>. The references at the bottom of the primer are all worth
+following. <a href="http://akebono.stanford.edu/yahoo/">Yahoo</a> has
+a good index of
+<a href="http://akebono.stanford.edu/yahoo/Computers/World_Wide_Web/HTML/">HTML info</a>
+on the Web. <p>
+
+<hr>
+Comments and suggestions are highly encouraged.<p>
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
+<!-- hhmts start -->
+Last modified: Tue Feb 28 10:32:13 1995
+<!-- hhmts end -->
+</body> </html>
--- html-helper-mode-3.0.4kilo.orig/index-beta.html
+++ html-helper-mode-3.0.4kilo/index-beta.html
@@ -0,0 +1,274 @@
+<html> <head>
+<title>HTML helper mode beta</title>
+</head>
+
+<body>
+<h1>HTML helper mode beta</h1>
+
+<p>This is technically beta code, but is quite stable. Don't let the
+"beta" scare you. For news and documentation for 2.19.1.1, see the <a
+href="index.html">main web page</a> for hhm.</p>
+
+<p>News 5/17/00 Ben Tindale has kindly contributed
+<a href="http://sourceforge.net/snippet/detail.php?type=snippet&id=100223">
+code for JSP tags</a>.</p>
+
+<hr>
+
+<b>DOWNLOADING NOTE</b>: some browsers (notably lynx, and some versions
+of netscape) have trouble saving html-helper-mode correctly: they
+corrupt files with long lines. You'll have better luck if you can save
+the file to disk without displaying it first (shift-click in Netscape,
+capital D in lynx). Sorry about that, can't help buggy browsers.<p>
+
+<ul>
+  <li><a href="html-helper-mode.el">html-helper-mode.el</a>
+  <li><a href="tempo.el">tempo.el</a>
+</ul>
+
+<h2>Major new features</h2>
+See change log below for more detail.
+<ul>
+  <li>Font-lock support, thanks to
+      <a href="http://www.nbi.dk/~dickow/">Ulrik Dickow</a>!
+      
+  <li>Menus. Yes, I've finally done menus.</li>
+
+  <li>User-extensible tag database!
+      See the <a href="adding-tags.html">accompanying documentation</a>
+      for information, as well as the
+      <a href="contrib-tags.html">user contributed extensions</a>.
+      
+  <li>HTML 2.0 compliance</li>
+
+  <li>Integration with
+      <a href="http://wombat.doc.ic.ac.uk/emacs/browse-url.el">browse-url</a>.
+      Load or autoload browse-url first, then <kbd>C-cC-zv</kbd> will load the
+      current buffer up in your browser. Previewing!
+</ul>
+
+<h2>Todo</h2>
+<ul>
+  <li>consider using <tt>write-contents-hooks</tt>
+  <li>fix indentation code to handle tag attributes
+      (quick fix - match "&lt;li" instead of "&lt;li&gt;", but that has bad
+      potential consequences).
+  <li>decide about doctype string (2.0, 3.0, some hybrid?)
+  <li>decide about &lt;/li&gt; and &lt;/p&gt;
+  <li>update docs
+      <ul>
+	<li>Document new features (Based on changelog): configuration, et al.</li>
+	<li>how to deal with browse-url</li>
+	<li>explain how to do upcasing of tags (ick)
+	<li>explain which HTML spec we're using.
+	<li>hints for European character sets (iso-acc mode, no need
+	    to do anything HTML specific). Link
+	    <a href="http://ppewww.ph.gla.ac.uk/%7Eflavell/iso8859/iso8859-pointers.html">http://ppewww.ph.gla.ac.uk/%7Eflavell/iso8859/iso8859-pointers.html</a>
+      </ul>
+  </li>
+</ul>
+
+<h2>Notes for various emacsen</h2>
+
+<dl>
+  <dt>GNU emacs 19</dt>
+  <dd>I develop this code under emacs 19.29, so it should work fine
+      there. It should work fine on most modern emacs 19s, although
+      some not-so-old versions had a different completion behaviour.<p>
+
+      Note if you save your files with <kbd>C-xC-w</kbd> (write-file)
+      then <code>local-write-file-hooks</code> isn't run, which means
+      timestamps don't update. (Even worse, the variable is cleared!).
+      <kbd>C-xC-s</kbd> (save-file) does run
+      the hook and the timestamps are updated. I don't understand why
+      write-file
+      doesn't run the local-write-file-hooks, but I recommend using
+      save-file instead.<p>
+  </dd>
+
+  <dt>XEmacs 19</dt>
+  <dd>I intend this code to work under XEmacs, and I've heard
+      occasional reports that it works.
+  </dd>
+
+  <dt>GNU emacs 18</dt>
+  <dd>I think this code still works under emacs 18, but you should
+      definitely upgrade to 19. Now that the FSF boycott of Apple is
+      over, some enterprising person should get cracking on porting
+      emacs 19 to the Macintosh. To run under emacs 18, you will need
+      to have a definition of
+      <a href="ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/functions/add-hook.el.Z">add-hook</a>
+      loaded, and you will need to have 
+      <a href="ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/misc/auc-menu.el.gz">auc-menu.el</a>
+      installed.
+  </dd>
+</dl>
+
+<b>Special Menu Note</b>: there are two packages that provide the same
+menuing interfaces: auc-menu and easymenu. Unfortunately, they don't
+all work the same. Recent versions of GNU emacs 19 and XEmacs 19 both
+come with easymenu as part of the standard lisp library. If you are
+having menu troubles, verify that the shipped easymenu is being
+loaded: not any versions of auc-menu or easymenu that you might have
+lying around elsewhere (from auc-tex, in particular). Emacs 18 people
+still need to use auc-menu (which just stubs the functions so they do nothing).<p>
+
+<h2>Changes</h2>
+
+<h3>2.2 - rms cleanups</h3>
+<ul>
+  <li> Improved docstrings, (provide 'html-mode) for 14 character filenames
+</ul>
+
+<h3>2.3 - menus</h3>
+<ul>
+  <li> Updated my location to @santafe.edu
+  <li> Added menu support (using easymenu)
+  <li> Changed format of cookie database a bit, renamed a few cookies
+  <li> Added timezone to timestamp
+</ul>
+
+<h3>2.4 - stupid bug fixes</h3>
+
+<h3>2.5 - modularization</h3>
+
+<ul>
+  <li>Added quot and # entities</li>
+  <li>Made &lt;p&gt;, &lt;li&gt;, &lt;dd&gt;, &lt;dt&gt; containers. Bleah!</li>
+  <li>Removed extraneous whitespace from &lt;li&gt;, etc. Changed default
+      indentation to account for this.</li>
+  <li>Removed emacs18 support (sorry! Time for you to upgrade.)</li>
+  <li>Reworked the keymap and menu scheme so types are modular, you
+      can add them later.. Lots
+      or reorganization of code, reordered cookie database, etc.</li>
+</ul>
+
+<h3>2.6 - emacs18 added in again</h3>
+<ul>
+  <li>Added back in emacs18 support, grudgingly.
+      emacs18ers need auc-menu.el installed as "easymenu.el", and
+      some version of the add-hook function.</li>
+  <li>Changed the paragraph tag to include a newline</li>
+</ul>
+
+<h3>2.7 - HTML/2.0 compliance</h3>
+<ul>
+  <li>Added full HTML/2.0 compliance: removed old tags, added in new ones.
+      Thanks, Marc!</li>
+</ul>
+
+<h3>2.8 - new indentation code</h3>
+<ul>
+  <li>Added in html-helper-htmldtd-version for the skeleton</li>
+  <li>moved headers to C-cC-h to make C-cC-t free (why not before?)</li>
+  <li>run text-mode-hook, html-mode-hook, html-load-hook</li>
+  <li>change indentation logic around to make it clearer</li>
+  <li>new type of list item, end of items</li>
+  <li>give &lt;select&gt; and &lt;option&gt; stuff indentation like lists</li>
+  <li>new form cookies, courtesy of Marc</li>
+</ul>
+
+<h3>2.9 - menu cleanups</h3>
+<ul>
+  <li>Added in a novice menu, on by default.</li>
+  <li>Cleaned up the menu presentation</li>
+  <li><b>MAJOR CHANGE</b> in the cookie format: the 3rd argument is
+      now the menu string (it is also coerced into a symbol to make
+      the function.)</li>
+</ul>
+
+<h3>2.10</h3>
+<ul>
+  <li>a bit more hilit19 code: headers, titles, forms (no logical styles)</li>
+  <li>move headers back from <kbd>C-cC-h</kbd> to <kbd>C-cC-t</kbd>. Sorry.</li>
+  <li>Update tempo insertions from (p . foo) to (p foo)</li>
+  <li>now looks in features to check for hilit19</li>
+  <li>if you have 'browse-url loaded (forthcoming code) then
+      <kbd>M-C-q</kbd> and a menu item will bring up your current file in your
+      browser. There's also url-at-point, but we'll leave that to the
+      user to bind. Should we save file first? Probably no.
+  </li>
+  <li>skeletons and timestamps now on by default</li>
+</ul>
+
+<h3>2.11</h3>
+<ul>
+  <li>More hilit19 changes: do comments right, change &lt;h#&gt; colouring</li>
+  <li>Moved timestamp-delimiter to <kbd>C-cC-zt</kbd> and
+      browse-url-of-file to <kbd>C-cC-zv</kbd> to make things better.
+  </li>
+  <li>Mucked with menus: verbified, added in timestamps and toggling
+      to expert menu.</li>
+</ul>
+
+<h3>2.12</h3>
+<ul>
+  <li>Better loading of easymenu and/or auc-menu</li>
+  <li>Change logic for checking if browse-url, hilit19 are loaded</li>
+  <li>Bind 'browse-url-at-point into keymap and menu</li>
+  <li>More hilit19 regexp changes</li>
+  <li>Call (easy-menu-add) and (easy-menu-remove) at the right times.</li>
+</ul>
+
+<h3>2.13</h3>
+<ul>
+  <li>Changed all references to "cookie" into "tag"</li>
+  <li>Cleaned up doc strings</li>
+  <li>Fixed dumb easy-menu bug (affects XEmacs)</li>
+  <li>Look at html-helper-user-menu when building expert menu, allow
+      users to add things in.</li>
+</ul>
+
+<h3>2.14</h3>
+<ul>
+  <li>Got rid of &lt;/p&gt;, &lt;/li&gt;, &lt;/dd&gt;, &lt;/dt&gt;.
+      Best as I can tell, these are optional and too confusing. I
+      might make them into an add-on package.
+</ul>
+
+<h3>2.15</h3>
+<ul>
+  <li>Added in Ulrik Dickow's font-lock support. Many thanks to him
+      for his great work and infinite patience.
+</ul>
+
+<h3>2.16</h3>
+<ul>
+  <li>Updated Ulriks' font-lock code.
+</ul>
+
+<h3>2.17</h3>
+<ul>
+  <li>Added table indentation
+</ul>
+
+<h3>2.18</h3>
+<ul>
+  <li>small change to hilit19 entity pattern
+  <li>changed <code>html-helper-htmldtd-version</code> meaning to
+      include the entire comment.
+</ul>
+
+<h3>2.19</h3>
+<ul>
+  <li>Added <code>html-helper-mode-version</code>, changed the version
+      identification in the comments.
+</ul>
+
+<h3>2.19.1</h3>
+<ul>
+  <li>Included some font-lock regexp changes.
+</ul>
+
+<hr>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr>
+    <td align=left><a href="http://nelson.www.media.mit.edu/people/nelson/">Nelson Minar</a></td>
+    <td align=right>Created: March 24, 1995</td>
+  </tr>
+  <tr>
+    <td align=left><a href="mailto:nelson@media.mit.edu"><tt>&lt;nelson@media.mit.edu&gt;</tt></a></td>
+    <td align=right>Updated: <!-- hhmts start -->May 17, 2000<!-- hhmts end --></td>
+  </tr>
+</table> 
+</body> </html>
--- html-helper-mode-3.0.4kilo.orig/visual-basic-mode.el
+++ html-helper-mode-3.0.4kilo/visual-basic-mode.el
@@ -0,0 +1,858 @@
+;; visual-basic-mode.el --- A mode for editing Visual Basic programs.
+
+;; Copyright (C) 1996 Fred White <fwhite@alum.mit.edu>
+
+;; Author: Fred White <fwhite@alum.mit.edu>
+;; Version: 1.3 (May 1, 1996)
+;; Keywords: languages basic
+
+;; (Old) LCD Archive Entry:
+;; basic-mode|Fred White|fwhite@alum.mit.edu|
+;; A mode for editing Visual Basic programs.|
+;; 18-Apr-96|1.0|~/modes/basic-mode.el.Z|
+
+;; 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.
+;; 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 of the
+;; License, or (at your option) any later version.
+
+
+;; Purpose of this package:
+;;  This is a mode for editing programs written in The World's Most
+;;  Successful Programming Language.  It features automatic
+;;  indentation, font locking, keyword capitalization, and some minor
+;;  convenience functions.
+
+;; Installation instructions
+;;  Put basic-mode.el somewhere in your path, compile it, and add the
+;;  following to your init file:
+
+;;  (autoload 'visual-basic-mode "visual-basic-mode" "Visual Basic mode." t)
+;;  (setq auto-mode-alist (append '(("\\.\\(frm\\|bas\\|cls\\)$" . 
+;;                                  visual-basic-mode)) auto-mode-alist))
+
+;; Of course, under Windows 3.1, you'll have to name this file
+;; something shorter than visual-basic-mode.el
+
+;; Revisions:
+;; 1.0 18-Apr-96  Initial version
+;; 1.1 Accomodate emacs 19.29+ font-lock-defaults
+;;     Simon Marshall <Simon.Marshall@esrin.esa.it>
+;  1.2 Rename to visual-basic-mode
+;; 1.3 Fix some indentation bugs.
+;; changes by G.U. Lauri
+;; 1.4 Added automatic header comment construction.
+;;     vorking out origina code coming from NTEmacs Mailing List
+
+;; Known bugs:
+;;  Doesn't know about ":" separated stmts
+;;  Doesn't know about single-line IF stmts
+
+
+;; todo:
+;;  fwd/back-compound-statement
+;;  completion over OCX methods and properties.
+;;  ensure Then at the end of IF statements.
+;;  IDE integration
+;;  etc.
+
+
+(provide 'visual-basic-mode)
+
+(defvar visual-basic-xemacs-p (string-match "XEmacs\\|Lucid" (emacs-version)))
+(defvar visual-basic-winemacs-p (string-match "Win-Emacs" (emacs-version)))
+(defvar visual-basic-win32-p (eq window-system 'win32))
+
+;; Variables you may want to customize.
+(defvar visual-basic-mode-indent 4 "*Default indentation per nesting level")
+(defvar visual-basic-fontify-p t "*Whether to fontify Basic buffers.")
+(defvar visual-basic-capitalize-keywords-p t
+  "*Whether to capitalize BASIC keywords.")
+(defvar visual-basic-wild-files "*.frm *.bas *.cls"
+  "*Wildcard pattern for BASIC source files")
+(defvar visual-basic-ide-pathname nil
+  "*The full pathname of your Visual Basic exe file, if any.")
+
+
+(defvar visual-basic-keywords-to-highlight
+  '("Dim" "If" "Then" "Else" "ElseIf" "End If")
+  "*A list of keywords to highlight in Basic mode, or T, meaning all keywords")
+
+(defvar visual-basic-defn-templates
+  (list "Public Sub ()\nEnd Sub\n\n"
+	"Public Function () As Variant\nEnd Function\n\n"
+	"Public Property Get ()\nEnd Property\n\n")
+  "*List of function templates though which visual-basic-new-sub cycles.")
+
+
+
+(defvar visual-basic-mode-syntax-table nil)
+(if visual-basic-mode-syntax-table
+    ()
+  (setq visual-basic-mode-syntax-table (make-syntax-table))
+  (modify-syntax-entry ?\' "\<" visual-basic-mode-syntax-table) ; Comment starter
+  (modify-syntax-entry ?\n ">" visual-basic-mode-syntax-table)
+  (modify-syntax-entry ?\\ "w" visual-basic-mode-syntax-table)
+  (modify-syntax-entry ?_ "w" visual-basic-mode-syntax-table))
+
+
+(defvar visual-basic-mode-map nil)
+(if visual-basic-mode-map
+    ()
+  (setq visual-basic-mode-map (make-sparse-keymap))
+  (define-key visual-basic-mode-map "\t" 'visual-basic-indent-line)
+  (define-key visual-basic-mode-map "\r" 'visual-basic-newline-and-indent)
+  (define-key visual-basic-mode-map "\M-\C-a" 'visual-basic-beginning-of-defun)
+  (define-key visual-basic-mode-map "\M-\C-e" 'visual-basic-end-of-defun)
+  (define-key visual-basic-mode-map "\M-\C-h" 'visual-basic-mark-defun)
+  (define-key visual-basic-mode-map "\M-\C-\\" 'visual-basic-indent-region)
+  (define-key visual-basic-mode-map "\M-q" 'visual-basic-fill-or-indent)
+  (define-key visual-basic-mode-map "\M-\C-q" 'visual-basic-comment-function)
+  (cond (visual-basic-winemacs-p
+	 (define-key visual-basic-mode-map '(control C) 'visual-basic-start-ide))
+	(visual-basic-win32-p
+	 (define-key visual-basic-mode-map (read "[?\\S-\\C-c]") 'visual-basic-start-ide)))
+  (if visual-basic-xemacs-p
+      (progn
+	(define-key visual-basic-mode-map "\M-G" 'visual-basic-grep)
+	(define-key visual-basic-mode-map '(meta backspace) 'backward-kill-word)
+	(define-key visual-basic-mode-map '(control meta /) 'visual-basic-new-sub))))
+
+
+;; These abbrevs are valid only in a code context.
+(defvar visual-basic-mode-abbrev-table nil)
+
+(defvar visual-basic-mode-hook ())
+
+
+;; Is there a way to case-fold all regexp matches?
+
+(defconst visual-basic-defun-start-regexp
+  (concat
+   "^[ \t]*\\([Pp]ublic \\|[Pp]rivate \\|[Ss]tatic \\)*"
+   "\\([Ss]ub\\|[Ff]unction\\|[Pp]roperty +[GgSsLl]et\\|[Tt]ype\\)"
+   "[ \t]+\\(\\w+\\)[ \t]*(?"))
+
+(defconst visual-basic-defun-end-regexp
+  "^[ \t]*[Ee]nd \\([Ss]ub\\|[Ff]unction\\|[Pp]roperty\\|[Tt]ype\\)")
+
+
+;; Includes the compile-time #if variation.
+(defconst visual-basic-if-regexp "^[ \t]*#?[Ii]f")
+(defconst visual-basic-else-regexp "^[ \t]*#?[Ee]lse\\([Ii]f\\)?")
+(defconst visual-basic-endif-regexp "[ \t]*#?[Ee]nd[ \t]*[Ii]f")
+
+(defconst visual-basic-continuation-regexp "^.*\\_[ \t]*$")
+(defconst visual-basic-label-regexp "^[ \t]*[a-zA-Z0-9_]+:$")
+
+(defconst visual-basic-select-regexp "^[ \t]*[Ss]elect[ \t]+[Cc]ase")
+(defconst visual-basic-case-regexp "^[ \t]*[Cc]ase")
+(defconst visual-basic-select-end-regexp "^[ \t]*[Ee]nd[ \t]+[Ss]elect")
+
+(defconst visual-basic-for-regexp "^[ \t]*[Ff]or\\b")
+(defconst visual-basic-next-regexp "^[ \t]*[Nn]ext\\b")
+
+(defconst visual-basic-do-regexp "^[ \t]*[Dd]o\\b")
+(defconst visual-basic-loop-regexp "^[ \t]*[Ll]oop\\b")
+
+(defconst visual-basic-while-regexp "^[ \t]*[Ww]hile\\b")
+(defconst visual-basic-wend-regexp "^[ \t]*[Ww]end\\b")
+
+(defconst visual-basic-with-regexp "^[ \t]*[Ww]ith\\b")
+(defconst visual-basic-end-with-regexp "^[ \t]*[Ee]nd[ \t]+[Ww]ith\\b")
+
+(defconst visual-basic-blank-regexp "^[ \t]*$")
+(defconst visual-basic-comment-regexp "^[ \t]*\\s<.*$")
+
+
+;; This is some approximation of the set of reserved words in Visual Basic.
+(defconst visual-basic-all-keywords
+  '("Aggregate" "And" "App" "AppActivate" "Application" "Array" "As"
+    "Asc" "AscB" "Atn" "Beep" "BeginTrans" "Boolean" "ByVal" "CBool"
+    "CByte" "CCur"
+    "CDate" "CDbl" "CInt" "CLng" "CSng" "CStr" "CVErr" "CVar" "Call"
+    "Case" "ChDir" "ChDrive" "Character" "Choose" "Chr" "ChrB"
+    "ClassModule" "Clipboard" "Close" "Collection" "Column" "Columns"
+    "Command" "CommitTrans" "CompactDatabase" "Component" "Components"
+    "Const" "Container" "Containers" "Cos" "CreateDatabase" "CreateObject"
+    "CurDir" "Currency" "DBEngine" "DDB" "Data" "Database" "Databases"
+    "Date" "DateAdd" "DateDiff" "DatePart" "DateSerial" "DateValue" "Day"
+    "Debug" "Declare" "Deftype" "DeleteSetting" "Dim" "Dir" "Do" "Domain"
+    "Double" "Dynaset" "EOF" "Each" "Else" "ElseIf" "End" "Environ" 
+    "Erase" "Err"
+    "Error" "Exit" "Exp" "FV" "False" "Field" "Fields" "FileAttr"
+    "FileCopy" "FileDateTime" "FileLen" "Fix" "Font" "For" "Form"
+    "FormTemplate" "Format" "Forms" "FreeFile" "FreeLocks" "Function"
+    "Get" "GetAllSettings" "GetAttr" "GetObject" "GetSetting" "GoSub"
+    "GoTo" "Group" "Groups" "Hex" "Hour" "IIf" "IMEStatus" "IPmt" "IRR"
+    "If" "InStr" "Input" "Int" "Integer" "Is" "IsArray" "IsDate" "IsEmpty"
+    "IsError" "IsMissing" "IsNull" "IsNumeric" "IsObject" "Kill" "LBound"
+    "LCase" "LOF" "LSet" "LTrim" "Left" "Len" "Let" "Like" "Line" "Load"
+    "LoadPicture" "LoadResData" "LoadResPicture" "LoadResString" "Loc"
+    "Lock" "Log" "Long" "Loop" "MDIForm" "MIRR" "Me" "MenuItems"
+    "MenuLine" "Mid" "Minute" "MkDir" "Month" "MsgBox" "NPV" "NPer" "Name"
+    "New" "Next" "Now" "Oct" "On" "Open" "OpenDatabase" "Operator"
+    "Option" "PPmt" "PV" "Parameter" "Parameters" "Partition" "Picture"
+    "Pmt" "Print" "Printer" "Printers" "Private" "ProjectTemplate"
+    "Properties" "Public" "Put" "QBColor" "QueryDef" "QueryDefs"
+    "RSet" "RTrim" "Randomize" "Rate" "ReDim" "Recordset" "Recordsets"
+    "RegisterDatabase" "Relation" "Relations" "Rem" "RepairDatabase"
+    "Reset" "Resume" "Return" "Right" "RmDir" "Rnd" "Rollback" "RowBuffer"
+    "SLN" "SYD" "SavePicture" "SaveSetting" "Screen" "Second" "Seek"
+    "SelBookmarks" "Select" "SelectedComponents" "SendKeys" "Set"
+    "SetAttr" "SetDataAccessOption" "SetDefaultWorkspace" "Sgn" "Shell"
+    "Sin" "Single" "Snapshot" "Space" "Spc" "Sqr" "Static" "Stop" "Str"
+    "StrComp" "StrConv" "String" "Sub" "SubMenu" "Switch" "Tab" "Table"
+    "TableDef" "TableDefs" "Tan" "Then" "Time" "TimeSerial" "TimeValue"
+    "Timer" "To" "Trim" "True" "Type" "TypeName" "UBound" "UCase" "Unload"
+    "Unlock" "Val" "VarType" "Verb" "Weekday" "Wend"
+    "While" "Width" "With" "Workspace" "Workspaces" "Write" "Year"))
+
+
+(defun visual-basic-word-list-regexp (keys)
+  (let ((re "\\b\\(")
+	(key nil))
+    (while keys
+      (setq key (car keys)
+	    keys (cdr keys))
+      (setq re (concat re key (if keys "\\|" ""))))
+    (concat re "\\)\\b")))
+
+(defun visual-basic-keywords-to-highlight ()
+  (if t
+      visual-basic-all-keywords
+    visual-basic-keywords-to-highlight))
+
+
+(defvar visual-basic-font-lock-keywords
+  (list
+   ;; Names of functions.
+   (list visual-basic-defun-start-regexp 3 'font-lock-function-name-face)
+
+   ;; Statement labels
+   (cons visual-basic-label-regexp 'font-lock-reference-face)
+
+   ;; Case values
+   ;; String-valued cases get font-lock-string-face regardless.
+   (list "^[ \t]*[Cc]ase[ \t]+\\([^'\n]+\\)" 1 'font-lock-keyword-face t)
+
+   ;; Any keywords you like.
+   (cons (visual-basic-word-list-regexp (visual-basic-keywords-to-highlight))
+	 'font-lock-keyword-face)))
+
+
+(put 'visual-basic-mode 'font-lock-keywords 'visual-basic-font-lock-keywords)
+
+(defun visual-basic-mode ()
+  "A mode for editing Microsoft Visual Basic programs.
+Features automatic  indentation, font locking, keyword capitalization, 
+and some minor convenience functions.
+Commands:
+\\{visual-basic-mode-map}"
+  (interactive)
+  (kill-all-local-variables)
+  (use-local-map visual-basic-mode-map)
+  (setq major-mode 'visual-basic-mode)
+  (setq mode-name "Visual Basic")
+  (set-syntax-table visual-basic-mode-syntax-table)
+
+  (add-hook 'write-file-hooks 'visual-basic-untabify)
+
+  (setq local-abbrev-table visual-basic-mode-abbrev-table)
+  (if visual-basic-capitalize-keywords-p
+      (progn
+	(make-local-variable 'pre-abbrev-expand-hook)
+	(add-hook 'pre-abbrev-expand-hook 'visual-basic-pre-abbrev-expand-hook)
+	(abbrev-mode 1)))
+
+  (make-local-variable 'comment-start)
+  (setq comment-start "' ")
+  (make-local-variable 'comment-start-skip)
+  (setq comment-start-skip "'+ *")
+  (make-local-variable 'comment-column)
+  (setq comment-column 40)
+  (make-local-variable 'comment-end)
+  (setq comment-end "")
+
+  (make-local-variable 'indent-line-function)
+  (setq indent-line-function 'visual-basic-indent-line)
+
+  (if visual-basic-fontify-p
+      (visual-basic-enable-font-lock))
+
+  (run-hooks 'visual-basic-mode-hook))
+
+
+(defun visual-basic-enable-font-lock ()
+  ;; Emacs 19.29 requires a window-system else font-lock-mode errs out.
+  (cond ((or visual-basic-xemacs-p window-system)
+
+	 ;; In win-emacs this sets font-lock-keywords back to nil!
+	 (if visual-basic-winemacs-p
+	     (font-lock-mode 1))
+
+	 ;; Accomodate emacs 19.29+
+	 ;; From: Simon Marshall <Simon.Marshall@esrin.esa.it>
+	 (cond ((boundp 'font-lock-defaults)
+		(make-local-variable 'font-lock-defaults)
+		(setq font-lock-defaults '(visual-basic-font-lock-keywords)))
+	       (t
+		(make-local-variable 'font-lock-keywords)
+		(setq font-lock-keywords visual-basic-font-lock-keywords)))
+
+	 (if visual-basic-winemacs-p
+	     (font-lock-fontify-buffer)
+	   (font-lock-mode 1)))))
+
+
+(defun visual-basic-construct-keyword-abbrev-table ()
+  (if visual-basic-mode-abbrev-table
+      nil
+    (let ((words visual-basic-all-keywords)
+	  (word nil)
+	  (list nil))
+      (while words
+	(setq word (car words)
+	      words (cdr words))
+	(setq list (cons (list (downcase word) word) list)))
+
+      (define-abbrev-table 'visual-basic-mode-abbrev-table list))))
+
+;; Would like to do this at compile-time.
+(visual-basic-construct-keyword-abbrev-table)
+
+
+(defun visual-basic-in-code-context-p ()
+  (if (fboundp 'buffer-syntactic-context) ; XEmacs function.
+      (null (buffer-syntactic-context))
+    ;; Attempt to simulate buffer-syntactic-context
+    ;; I don't know how reliable this is.
+    (let* ((beg (save-excursion
+		  (beginning-of-line)
+		  (point)))
+	   (list
+	    (parse-partial-sexp beg (point))))
+      (and (null (nth 3 list))		; inside string.
+	   (null (nth 4 list))))))	; inside cocmment
+
+(defun visual-basic-pre-abbrev-expand-hook ()
+  ;; Allow our abbrevs only in a code context.
+  (setq local-abbrev-table
+	(if (visual-basic-in-code-context-p)
+	    visual-basic-mode-abbrev-table)))
+	 
+	
+
+(defun visual-basic-newline-and-indent (&optional count)
+  "Insert a newline, updating indentation."
+  (interactive)
+  (expand-abbrev)
+  (save-excursion
+    (visual-basic-indent-line))
+  (call-interactively 'newline-and-indent))
+  
+(defun visual-basic-beginning-of-defun ()
+  (interactive)
+  (re-search-backward visual-basic-defun-start-regexp))
+
+(defun visual-basic-end-of-defun ()
+  (interactive)
+  (re-search-forward visual-basic-defun-end-regexp))
+
+(defun visual-basic-mark-defun ()
+  (interactive)
+  (beginning-of-line)
+  (visual-basic-end-of-defun)
+  (set-mark (point))
+  (visual-basic-beginning-of-defun)
+  (if visual-basic-xemacs-p
+      (zmacs-activate-region)))
+
+(defun visual-basic-indent-defun ()
+  (interactive)
+  (save-excursion
+    (visual-basic-mark-defun)
+    (call-interactively 'visual-basic-indent-region)))
+
+
+(defun visual-basic-fill-long-comment ()
+  "Fills block of comment lines around point."
+  ;; Derived from code in ilisp-ext.el.
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((comment-re "^[ \t]*\\s<+[ \t]*"))
+      (if (looking-at comment-re)
+	  (let ((fill-prefix
+		 (buffer-substring
+		  (progn (beginning-of-line) (point))
+		  (match-end 0))))
+
+	    (while (and (not (bobp))
+			(looking-at visual-basic-comment-regexp))
+	      (forward-line -1))
+	    (if (not (bobp)) (forward-line 1))
+
+	    (let ((start (point)))
+
+	      ;; Make all the line prefixes the same.
+	      (while (and (not (eobp))
+			  (looking-at comment-re))
+		(replace-match fill-prefix)
+		(forward-line 1))
+
+	      (if (not (eobp))
+		  (beginning-of-line))
+
+	      ;; Fill using fill-prefix
+	      (fill-region-as-paragraph start (point))))))))
+
+
+(defun visual-basic-fill-or-indent ()
+  "Fill long comment around point, if any, else indent current definition."
+  (interactive)
+  (cond ((save-excursion
+	   (beginning-of-line)
+	   (looking-at visual-basic-comment-regexp))
+	 (visual-basic-fill-long-comment))
+	(t
+	 (visual-basic-indent-defun))))
+
+
+(defun visual-basic-new-sub ()
+  "Insert template for a new subroutine. Repeat to cycle through alternatives."
+  (interactive)
+  (beginning-of-line)
+  (let ((templates (cons visual-basic-blank-regexp
+			 visual-basic-defn-templates))
+	(tem nil)
+	(bound (point)))
+    (while templates
+      (setq tem (car templates)
+	    templates (cdr templates))
+      (cond ((looking-at tem)
+	     (replace-match (or (car templates)
+				""))
+	     (setq templates nil))))
+
+    (search-backward "()" bound t)))
+
+
+(defun visual-basic-untabify ()
+  "Do not allow any tabs into the file"
+  (if (eq major-mode 'visual-basic-mode)
+      (untabify (point-min) (point-max)))
+  nil)
+
+(defun visual-basic-default-tag ()
+  (if (and (not (bobp))
+	   (save-excursion
+	     (backward-char 1)
+	     (looking-at "\\w")))
+      (backward-word 1))
+  (let ((s (point))
+	(e (save-excursion
+	     (forward-word 1)
+	     (point))))
+    (buffer-substring s e)))
+
+(defun visual-basic-grep (tag)
+  "Search BASIC source files in current directory for tag."
+  (interactive
+   (list (let* ((def (visual-basic-default-tag))
+		(tag (read-string
+		      (format "Grep for [%s]: " def))))
+	   (if (string= tag "") def tag))))
+  (grep (format "grep -n %s %s" tag visual-basic-wild-files)))
+
+
+;;; IDE Connection.
+
+(defun visual-basic-buffer-project-file ()
+  "Return a guess as to the project file associated with the current buffer."
+  (car (directory-files (file-name-directory (buffer-file-name)) t "\\.vbp")))
+
+(defun visual-basic-start-ide ()
+  "Start Visual Basic (or your favorite IDE, (after Emacs, of course))
+on the first project file in the current directory.
+Note: it's not a good idea to leave Visual Basic running while you
+are editing in emacs, since Visual Basic has no provision for reloading
+changed files."
+  (interactive)
+  (let (file)
+    (cond ((null visual-basic-ide-pathname)
+	   (error "No pathname set for Visual Basic. See visual-basic-ide-pathname"))
+	  ((null (setq file (visual-basic-buffer-project-file)))
+	   (error "No project file found."))
+	  ((fboundp 'win-exec)
+	   (iconify-emacs)
+	   (win-exec visual-basic-ide-pathname 'win-show-normal file))
+	  ((fboundp 'start-process)
+	   (iconify-frame (selected-frame))
+	   (start-process "*VisualBasic*" nil visual-basic-ide-pathname file))
+	  (t
+	   (error "No way to spawn process!")))))
+
+
+
+;;; Indentation-related stuff.
+
+(defun visual-basic-indent-region (start end)
+  "Perform visual-basic-indent-line on each line in region."
+  (interactive "r")
+  (save-excursion
+    (goto-char start)
+    (beginning-of-line)
+    (while (and (not (eobp))
+		(< (point) end))
+      (if (not (looking-at visual-basic-blank-regexp))
+	  (visual-basic-indent-line))
+      (forward-line 1)))
+
+  (cond ((fboundp 'zmacs-deactivate-region)
+	 (zmacs-deactivate-region))
+	((fboundp 'deactivate-mark)
+	 (deactivate-mark))))
+
+
+
+(defun visual-basic-previous-line-of-code ()
+  (if (not (bobp))
+      (forward-line -1))	; previous-line depends on goal column
+  (while (and (not (bobp))
+	      (or (looking-at visual-basic-blank-regexp)
+		  (looking-at visual-basic-comment-regexp)))
+    (forward-line -1)))
+
+
+(defun visual-basic-find-original-statement ()
+  ;; If the current line is a continuation from the previous, move
+  ;; back to the original stmt.
+  (let ((here (point)))
+    (visual-basic-previous-line-of-code)
+    (while (and (not (bobp))
+		(looking-at visual-basic-continuation-regexp))
+      (setq here (point))
+      (visual-basic-previous-line-of-code))
+    (goto-char here)))
+
+(defun visual-basic-find-matching-stmt (open-regexp close-regexp)
+  ;; Searching backwards
+  (let ((level 0))
+    (while (and (>= level 0) (not (bobp)))
+      (visual-basic-previous-line-of-code)
+      (visual-basic-find-original-statement)
+      (cond ((looking-at close-regexp)
+	     (setq level (+ level 1)))
+	    ((looking-at open-regexp)
+	     (setq level (- level 1)))))))
+
+(defun visual-basic-find-matching-if ()
+  (visual-basic-find-matching-stmt visual-basic-if-regexp visual-basic-endif-regexp))
+
+(defun visual-basic-find-matching-select ()
+  (visual-basic-find-matching-stmt visual-basic-select-regexp visual-basic-select-end-regexp))
+
+(defun visual-basic-find-matching-for ()
+  (visual-basic-find-matching-stmt visual-basic-for-regexp visual-basic-next-regexp))
+
+(defun visual-basic-find-matching-do ()
+  (visual-basic-find-matching-stmt visual-basic-do-regexp visual-basic-loop-regexp))
+
+(defun visual-basic-find-matching-while ()
+  (visual-basic-find-matching-stmt visual-basic-while-regexp visual-basic-wend-regexp))
+
+(defun visual-basic-find-matching-with ()
+  (visual-basic-find-matching-stmt visual-basic-with-regexp visual-basic-end-with-regexp))
+
+
+(defun visual-basic-calculate-indent ()
+  (let ((original-point (point)))
+    (save-excursion
+      (beginning-of-line)
+      ;; Some cases depend only on where we are now.
+      (cond ((or (looking-at visual-basic-defun-start-regexp)
+		 (looking-at visual-basic-label-regexp)
+		 (looking-at visual-basic-defun-end-regexp))
+	     0)
+
+	    ;; The outdenting stmts, which simply match their original.
+	    ((or (looking-at visual-basic-else-regexp)
+		 (looking-at visual-basic-endif-regexp))
+	     (visual-basic-find-matching-if)
+	     (current-indentation))
+
+	    ;; All the other matching pairs act alike.
+	    ((looking-at visual-basic-next-regexp) ; for/next
+	     (visual-basic-find-matching-for)
+	     (current-indentation))
+
+	    ((looking-at visual-basic-loop-regexp) ; do/loop
+	     (visual-basic-find-matching-do)
+	     (current-indentation))
+
+	    ((looking-at visual-basic-wend-regexp) ; while/wend
+	     (visual-basic-find-matching-while)
+	     (current-indentation))
+
+	    ((looking-at visual-basic-end-with-regexp) ; with/end with
+	     (visual-basic-find-matching-with)
+	     (current-indentation))
+
+	    ((looking-at visual-basic-select-end-regexp) ; select case/end select
+	     (visual-basic-find-matching-select)
+	     (current-indentation))
+
+	    ;; A case of a select is somewhat special.
+	    ((looking-at visual-basic-case-regexp)
+	     (visual-basic-find-matching-select)
+	     (+ (current-indentation) visual-basic-mode-indent))
+
+	    (t
+	     ;; Other cases which depend on the previous line.
+	     (visual-basic-previous-line-of-code)
+
+	     ;; Skip over label lines, which always have 0 indent.
+	     (while (looking-at visual-basic-label-regexp)
+	       (visual-basic-previous-line-of-code))
+
+	     (cond 
+	      ((looking-at visual-basic-continuation-regexp)
+	       (visual-basic-find-original-statement)
+	       ;; Indent continuation line under matching open paren,
+	       ;; or else one word in.
+	       (let* ((orig-stmt (point))
+		      (matching-open-paren
+		       (condition-case ()
+			   (save-excursion
+			     (goto-char original-point)
+			     (beginning-of-line)
+			     (backward-up-list 1)
+			     ;; Only if point is now w/in cont. block.
+			     (if (<= orig-stmt (point))
+				 (current-column)))
+			 (error nil))))
+		 (cond (matching-open-paren
+			(1+ matching-open-paren))
+		       (t
+			;; Else, after first word on original line.
+			(back-to-indentation)
+			(forward-word 1)
+			(while (looking-at "[ \t]")
+			  (forward-char 1))
+			(current-column)))))
+	      (t
+	       (visual-basic-find-original-statement)
+
+	       (let ((indent (current-indentation)))
+		 ;; All the various +indent regexps.
+		 (cond ((looking-at visual-basic-defun-start-regexp)
+			(+ indent visual-basic-mode-indent))
+
+		       ((or (looking-at visual-basic-if-regexp)
+			    (looking-at visual-basic-else-regexp))
+			(+ indent visual-basic-mode-indent))
+
+		       ((or (looking-at visual-basic-select-regexp)
+			    (looking-at visual-basic-case-regexp))
+			(+ indent visual-basic-mode-indent))
+			
+		       ((or (looking-at visual-basic-do-regexp)
+			    (looking-at visual-basic-for-regexp)
+			    (looking-at visual-basic-while-regexp)
+			    (looking-at visual-basic-with-regexp))
+			(+ indent visual-basic-mode-indent))
+
+		       (t
+			;; By default, just copy indent from prev line.
+			indent))))))))))
+
+(defun visual-basic-indent-to-column (col)
+  (let* ((bol (save-excursion
+		(beginning-of-line)
+		(point)))
+	 (point-in-whitespace
+	  (<= (point) (+ bol (current-indentation))))
+	 (blank-line-p
+	  (save-excursion
+	    (beginning-of-line)
+	    (looking-at visual-basic-blank-regexp))))
+
+    (cond ((/= col (current-indentation))
+	   (save-excursion
+	     (beginning-of-line)
+	     (back-to-indentation)
+	     (delete-region bol (point))
+	     (indent-to col))))
+
+    ;; If point was in the whitespace, move back-to-indentation.
+    (cond (blank-line-p
+	   (end-of-line))
+	  (point-in-whitespace
+	   (back-to-indentation)))))
+
+
+(defun visual-basic-indent-line ()
+  "Indent current line for BASIC"
+  (interactive)
+  (visual-basic-indent-to-column (visual-basic-calculate-indent)))
+
+
+(defun visual-basic-function-arg-start (pos endpos)
+  (while (and (< pos endpos) (not (char-equal (char-after pos) 40))
+              (not (char-equal (char-after pos) 44)))
+    (setq pos (+ pos 1)))
+  (setq pos (+ pos 1))
+  (while (and (< pos endpos) (or
+			      (char-equal (char-after pos) 95)
+			      (char-equal (char-after pos) 10)
+			      (char-equal (char-after pos) 13)
+			      (char-equal (char-after pos) 9)
+			      (char-equal (char-after pos) 32))
+    (setq pos (+ pos 1))))
+  (if (< pos endpos)
+      pos
+    nil))
+
+
+(defun visual-basic-skip-parens (pos endpos)
+  (let ((parcount 0))
+    (while (and (< pos endpos) (or (> parcount 0)
+                                   (char-equal (char-after pos) 40)))
+      (if (char-equal (char-after pos) 40)
+          (setq parcount (+ parcount 1)))
+      (if (char-equal (char-after pos) 41)
+          (setq parcount (- parcount 1)))
+      (setq pos (+ pos 1)))
+    pos))
+
+
+(defun visual-basic-function-arg-end (pos endpos)
+  (if (and pos endpos)
+      ((lambda ()
+         (while (and (<= pos endpos) (not (char-equal (char-after pos) 41))
+                     (not (char-equal (char-after pos) 44)))
+           (if (char-equal (char-after pos) 40)
+               (setq pos (visual-basic-skip-parens pos endpos))         
+             (setq pos (+ pos 1))))      
+         (if (<= pos endpos)
+             ((lambda ()
+                (setq pos (- pos 1))
+                (while (char-equal (char-after pos) 32)
+                  (setq pos (- pos 1)))
+                (+ pos 1)))
+           nil))
+       )
+    nil))
+
+
+(defun visual-basic-function-get-arguments (pos endpos)
+  (let* ((arg-start (visual-basic-function-arg-start pos endpos))
+         (arg-end (visual-basic-function-arg-end arg-start endpos)))
+    (if (and arg-start arg-end)
+        (cons (buffer-substring arg-start arg-end)
+              (visual-basic-function-get-arguments arg-end endpos))
+      nil)))
+
+
+(defun visual-basic-comment-function-arguments (prefix argument-list)
+  (let ((argument (car argument-list))
+        (pos (length prefix)))
+    (insert prefix)
+    (while (< pos 12)
+      (insert " ")
+      (setq pos (+ pos 1)))
+    (insert argument)
+    (backward-kill-word 2) ; As type
+    (setq pos (+ pos (length argument)))
+    (while (< pos 40)
+      (insert " ")
+      (setq pos (+ pos 1)))
+    (insert "\n")
+    (if (cdr argument-list)
+        (visual-basic-comment-function-arguments "'" (cdr argument-list)))))
+    
+(defun visual-basic-string-equal (left right)
+  (setq visual-basic-previous-buffer (current-buffer))
+  (switch-to-buffer "*visual-basic-comment-scratch*")
+  (insert left)
+  (insert " ")
+  (insert right)
+  (beginning-of-line)
+  (downcase-word 1)
+  (backward-word 1)
+  (setq visual-basic-string-equal-retval (current-word))
+    (forward-word 1)
+    (downcase-word 1)
+    (backward-word 1)
+    (setq visual-basic-string-equal-retval 
+	  (string-equal visual-basic-string-equal-retval
+			(current-word)))
+    (kill-buffer "*visual-basic-comment-scratch*")
+    (switch-to-buffer visual-basic-previous-buffer)
+  visual-basic-string-equal-retval
+  )
+
+(defun visual-basic-end-of-defun ()
+  (interactive)
+  (setq end-ps ((lambda () 
+		  (end-of-line) 
+		  (point)
+		  )))
+  (beginning-of-line)
+  (while (search-forward-regexp "_[ \t]*$" end-ps 1)
+    (forward-char 1)
+    (setq end-ps ((lambda () 
+		  (end-of-line) 
+		  (point)
+		  )))
+    (beginning-of-line)))
+
+(defun visual-basic-comment-function ()
+  "Adds a VISUAL-BASIC function comment header"
+  (interactive)
+  (let* ((start-pos ((lambda () (beginning-of-line) (point))))
+        (end-pos ((lambda () 
+		    (visual-basic-end-of-defun) 
+		    (search-backward-regexp ")[A-Za-z \t_]*$")
+		    (point))))
+        )   
+    (goto-char start-pos)
+    (setq case-fold-search t)
+    (search-forward "(")
+    (backward-char 1)
+    (setq arguments (visual-basic-function-get-arguments (point) end-pos))
+    (goto-char end-pos)
+    (forward-word 1)
+    (current-word)
+    (setq is-a-function (visual-basic-string-equal 
+			 (current-word) "as"))
+    (goto-char start-pos)
+    (insert "' ")
+    (setq visual-basic-return-point-ch (point))
+    (insert "\n")
+    (cond (arguments
+	   (insert "'\n' Parametri:\n'\n")
+	   (visual-basic-comment-function-arguments "'" arguments))
+	  )
+    (insert "'\n")
+    (if is-a-function (insert "' Ritorna :\n'\n"))
+    (goto-char visual-basic-return-point-ch)
+))
+
+;(global-set-key "\M-\C-q" 'visual-basic-comment-function)
--- html-helper-mode-3.0.4kilo.orig/documentation.html
+++ html-helper-mode-3.0.4kilo/documentation.html
@@ -0,0 +1,119 @@
+<title>html-helper-mode documentation</title>
+<h1>html-helper-mode documentation</h1>
+
+<hr><h3>Basic functionality: inserting cookies</h3> 
+
+The main function of html-helper-mode is to make it easy to insert
+HTML cookies. html-helper-mode does its best to do this consistently
+and conveniently. For every HTML and HTML+ cookie there should be a
+template which contains the text of the cookie itself and information
+as to where the fields are that the user might want to fill in.<p>
+
+Each template can be activated in one of two ways: by typing the key
+sequence for the cookie, or by completing on the beginning of the
+cookie.  For example, <kbd>C-cC-bt</kbd> will insert the string
+<tt>&lt;title&gt;&lt;/title&gt;</tt>, and position point where you
+want to type the title. Or, you could type <tt>&lt;kb</tt> and hit
+<kbd>M-TAB</kbd>, and the tag &lt;kbd&gt;&lt;/kbd&gt; will be
+inserted.<p>
+
+If a command is called with a prefix argument (by pressing
+<kbd>C-u</kbd> first), then instead of inserting the cookie at the
+point the cookie is inserted around the region. Thus,
+<kbd>C-uC-cC-pb</kbd> will wrap the &lt;b&gt;&lt;/b&gt; token
+around region, thereby making it bold.<p>
+
+A separate file contains a <a href="keybindings.html">complete list of
+keybindings</a>. Be warned, there are a lot - you might want to
+get used to completion.<p>
+
+<hr>
+<h3>Fields</h3>
+More complicated cookies have several fields that need filling in. For example,
+a hyperlink (<tt>&lt;a href=""&gt;&lt;/a&gt;</tt>) has two fields - the URL and
+the link description. When a multiple-field cookie is inserted,
+point will be placed at the first field and then the other fields will
+be entered on a special list. <kbd>M-C-f</kbd> and <kbd>M-C-b</kbd>
+will make the point skip back and forth on this list.<p>
+
+html-helper-mode can prompt you in the minibuffer for all of the
+fields a cookie need.  For example, you can have it ask you to type in
+the URL: and link description fields in a hyperlink.  This feature is
+turned off by default - for information on how to turn it on, read
+about <a href="configuring.html">configuring html-helper-mode</a>.<p>
+
+<hr>
+<h3>Indentation</h3>
+HTML documents can have nested lists: these are a bit hard to read
+in source form. html-helper-mode has code to indent lists cookies to
+the appropriate depth depending on how deeply nested the list is. List
+cookies are automatically indented when they are inserted. To indent a
+line by hand, hit <kbd>TAB</kbd>.<p>
+
+The indentation code is a bit of a hack - it doesn't really parse the
+HTML document very carefully. The main restriction is that cookies that
+are parts of lists (for example, <tt>&lt;ul&gt;</tt> or <tt>&lt;li&gt;</tt>)
+should appear at the beginning of their lines for the code to work best.<p>
+
+<hr>
+<h3>New document skeletons</h3>
+
+When a new HTML document is created, html-helper-mode can insert a
+skeleton with all the tags every HTML document should have.  This
+feature is turned off by default - see the documentation for <a
+href="configuring.html">configuring html-helper-mode</a> to turn it on
+and to customize the skeleton.<p>
+
+<hr>
+<h3>Timestamps</h3>
+
+Good HTML documents should all have timestamps stating the last time
+they were modified. html-helper-mode can make this easy by
+automatically updating your timestamp. This feature is turned off by
+default - see the documentation for <a
+href="configuring.html">configuring html-helper-mode</a> to turn it on
+and to customize the timestamp.<p>
+
+<hr>
+<h3>Emacs editing support</h3>
+
+One of the joys of emacs is that it is pretty smart about parsing the
+contents of the buffer. However, HTML is fairly outside of the realm
+of what emacs thinks is a programming language, so the syntax support
+html-helper-mode provides isn't that helpful.  It does define
+<kbd>&gt;</kbd> as a match for <kbd>&lt;</kbd>, and emacs knows about
+HTML comment syntax, so you can type <kbd>M-;</kbd> to get a
+comment.<p>
+
+<hr>
+<h3>Highlighting</h3>
+If you have hilit19 loaded in your emacs, then html-helper-mode will
+automatically set up regular expressions to colour links, HTML
+cookies, included images, and comments. I think this is one of the most
+useful features of html-helper-mode. For these patterns to be
+installed correctly hilit19 must be loaded <em>before</em>
+html-helper-mode.<p>
+
+I do not use font-lock, so currently there are no font-lock patterns
+defined. However, there is <a
+href="http://www.nbi.dk/TOOLS/emacs/lisp/html-font.el">user-contributed
+font-lock code</a> on the net.  <p>
+
+<hr>
+<h3>Customization</h3>
+Once you have html-helper-mode installed, you probably will want to
+customize a few things. For more information, see the document on
+<a href="configuring.html">configuring html-helper-mode</a>.<p>
+
+<hr>
+<h3>Emacs 18</h3>
+I don't use emacs18 anymore - 19 is quite stable and much nicer. I've
+tried to make sure html-helper-mode works in emacs18, and it seems to
+right now, but it is not being well supported. If you can, upgrade to
+emacs19.<p>
+
+<hr>
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
+<!-- hhmts start -->
+Last modified: Thu Feb  2 14:15:43 1995
+<!-- hhmts end -->
--- html-helper-mode-3.0.4kilo.orig/configuring.html
+++ html-helper-mode-3.0.4kilo/configuring.html
@@ -0,0 +1,120 @@
+<html> <head>
+<title>Configuring html-helper-mode</title>
+</head>
+
+<body>
+<h1>Configuring html-helper-mode</h1>
+
+html-helper-mode has several helpful features that are turned off by
+default, as well as several variables that the user might want to
+change for his or her own use.<p>
+
+You can configure these variables by adding the appropriate
+<tt>setq</tt> forms in your .emacs. You should read your emacs manual
+to learn how to do this - in general, you want to use<br>
+
+<blockquote><tt>(setq &lt;variable name&gt; &lt;value&gt;)</tt><br></blockquote>
+
+where &lt;value&gt; is
+one of <tt>t</tt> or <tt>nil</tt> if it is an on/off value, or a
+number or a quoted string. See the
+<a href="#recommended">recommended configuration</a> for examples.<p>
+
+<hr>
+<h3>Features</h3>
+
+The skeleton and timestamp features are turned off by default because
+they modify the buffer. I recommend you turn them on, though, as they
+are very useful.<p>
+
+<dl>
+  <dt> html-helper-do-write-file-hooks (default nil)
+  <dd> If t, html-helper-mode will try to update a timestamp in the document,
+and warn the user if it can't.
+  <dt> html-helper-build-new-buffer (default nil)
+  <dd> If t, html-helper-mode will insert a skeleton for new documents.
+</dl>
+
+You might also like to have prompting for your
+forms.<p>
+<dl>
+  <dt> tempo-interactive (default nil)
+  <dd> If t, the user will be prompted in the minibuffer for the values of
+       the fields of cookies
+</dl>
+
+<hr>
+<h3>Indentation variables</h3>
+
+There are three variables that control indentation:<p>
+
+<dl>
+  <dt> html-helper-basic-offset (default 2)
+  <dd> basic indentation for list item
+  <dt> html-helper-item-continue-indent (default 5)
+  <dd> text that is part of an item but not in the line with the item token
+       are indented this amount. 5 is the length of "<tt>&lt;li&gt; </tt>"
+  <dt> html-helper-never-indent (default nil)
+  <dd> if t, all the fancy indentation code is turned off
+</dl>
+
+<hr>
+<h3>Hooks</h3>
+Hooks allow your functions to be called at various times within the
+inner workings of html-helper-mode. Use <tt>add-hook</tt> instead of <tt>setq</tt> to modify these variables.<p>
+
+<dl>
+  <dt> html-helper-mode-hook (default nil)
+  <dd> hook run when html-helper-mode is started
+  <dt> html-helper-load-hook (default nil)
+  <dd> hook run when html-helper-mode is loaded
+  <dt> html-helper-timestamp-hook (default html-helper-default-insert-timestamp)
+  <dd> If html-helper-do-write-file-hooks is t, then this hook is called
+       to insert the new timestamp. The default inserts a simple timestamp.
+  <dt> tempo-insert-string-hook (default nil)
+  <dd> If set, this function will be applied to every string before it is
+       inserted. For example, setting it to <tt>'upcase</tt> will cause all
+       strings to be inserted uppercase.
+</dl>
+
+<hr>
+<h3>Strings</h3>
+There are various strings and templates that html-helper-mode inserts
+at appropriate times. Most have useful defaults, but you should set
+html-helper-address-string yourself.<p>
+
+<dl>
+  <dt> html-helper-address-string (default "")
+  <dd> Default author string for each file
+  <dt> html-helper-new-buffer-template (default is hairy)
+  <dd> list of strings and tempo tokens that is inserted when a new buffer
+       is created and html-helper-new-buffer-strings is t
+  <dt> html-helper-timestamp-start (default &lt;!-- hhmts start --&gt;)
+  <dd> comment used to delimit the beginning of a timestamp. Anything
+       between this and html-helper-timestamp-end is deleted every time
+       the file is written if html-helper-do-write-file-hooks is t
+  <dt> html-helper-timestamp-end (default &lt;!-- hhmts end --&gt;)
+  <dd> end of the timestamp
+</dl>
+
+<hr>
+<a name="recommended">
+<h3>Recommended configuration</h3>
+</a>
+
+I suggest you turn on both html-helper-do-write-file-hooks and
+html-helper-build-new-buffer, and set html-helper-address-string to the
+appropriate value for you. I use this configuration:<p>
+<pre>
+(setq html-helper-do-write-file-hooks t)
+(setq html-helper-build-new-buffer t)
+(setq html-helper-address-string 
+  "&lt;a href=\"http://www.santafe.edu/~nelson/\"&gt;Nelson Minar &amp;lt;nelson@santafe.edu&amp;gt;&lt;/a&gt;")
+</pre>
+
+<hr>
+<!-- hhmts start -->
+Last modified: Wed Feb  1 14:16:18 1995
+<!-- hhmts end -->
+<address><a href="http://www.santafe.edu/~nelson/">Nelson Minar &lt;nelson@santafe.edu&gt;</a></address>
+</body> </html>
--- html-helper-mode-3.0.4kilo.orig/html-helper-mode.el
+++ html-helper-mode-3.0.4kilo/html-helper-mode.el
@@ -153,7 +153,7 @@
 ;;    I think that people that have installed JDE, use it, so
 ;;    it would be logical to preset this automatically using
 ;;    `locate-library'
-(defcustom html-helper-mode-uses-JDE (locate-library "jde")
+(defcustom html-helper-mode-uses-JDE nil
   "No nil to use jde instead of java-mode"
   :type 'boolean
   :initialize 'custom-initialize-default
@@ -182,7 +182,7 @@
   :group 'html-helper
   :require 'html-helper-mode)
 
-(defcustom html-helper-mode-insert-attributes-always nil
+(defcustom html-helper-mode-insert-attributes-always t
   "non nil to make Emacs insert empty tag attributes when tempo-interactive is nil"
   :type 'boolean
   :initialize 'custom-initialize-default
@@ -220,7 +220,7 @@
 
 ;; variables to configure (these defaults are reasonable.)
 
-(defvar html-helper-htmldtd-version "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n"
+(defvar html-helper-htmldtd-version "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"
   "*Version of HTML DTD you're using.")
 
 (defvar html-helper-user-menu nil
@@ -282,7 +282,8 @@
 
 (defvar html-helper-new-buffer-template
   '(html-helper-htmldtd-version
-    "<html> <head>\n"
+    "<html>\n<head>\n"
+    "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-15\">\n"
     "<title>" p "</title>\n</head>\n\n"
     "<body>\n"
     "<h1>" p "</h1>\n\n"
@@ -333,7 +334,7 @@
 Inserted by `html-helper-insert-new-ASP-buffer-strings' if
 `html-helper-build-new-buffer' is set to t")
 
-(defvar html-helper-timestamp-start "<!-- hhmts start --> "
+(defvar html-helper-timestamp-start "<!-- hhmts start -->"
   "*Start delimiter for timestamps.
 Everything between `html-helper-timestamp-start' and
 `html-helper-timestamp-end' will be deleted and replaced with the output
@@ -721,7 +722,7 @@
    (logical "c"       "<code>"		"Code"
 	    ("<code>" (r "Code: ") "</code>"))
    (logical "x"       "<samp>"		"Sample"
-	    ("<samp>" (r "Sample code") "</samp>"))
+	    ("<samp>" (r "Sample code: ") "</samp>"))
    (logical "r"       "<cite>"		"Citation"
 	    ("<cite>" (r "Citation: ") "</cite>"))
    (logical "k"       "<kbd>"		"Keyboard Input"
@@ -755,10 +756,10 @@
 
 ;; html4.0 stuff, omitted
 
-;    (phys    "5" "<span style=" "Spanning style"
-; 	     ("<span style=\"" (p "style: ") "\">" 'r "</span>"))
-;    (phys    "l" "<span class=" "Spanning class"
-; 	     ("<span class=\"" (p "class: ") "\">" 'r "</span>"))
+   (phys    "5" "<span style=" "Spanning style"
+	     ("<span style=\"" (p "style: ") "\">" 'r "</span>"))
+   (phys    "l" "<span class=" "Spanning class"
+	     ("<span class=\"" (p "class: ") "\">" 'r "</span>"))
 
 
    ;;headers
@@ -926,18 +927,18 @@
    ;; scripting elements
    (script  "j"    "<SCRIPT>"       "JavaScript"
 	    ("<SCRIPT TYPE=\"text/javascript\">\n"
-	     (r "Script") "</SCRIPT>"))
+	     (r "Script: ") "</SCRIPT>"))
    (script  "v"    "<SCRIPT>"       "VBScript"
 	    ("<SCRIPT TYPE=\"text/vbscript\">\n"
-	     (r "Script") "</SCRIPT>"))
+	     (r "Script: ") "</SCRIPT>"))
    (script  "%"    "<%="            "ASP output"
-	    ("<%="(p " Variabile: ")"%>"))
+	    ("<%="(p " Variable: ")"%>"))
    (script  "a"    "<%xx%>"         "JSP/ASP code"
 	    ("<%\n"(r "Code: " )"\n%>"))
    (script  "<"    "<%xx%>"         "JSP/ASP break"
 	    ("%>\n"(r "Code: " )"\n<%"))
    (script  "="    "<?="            "PHP output"
-	    ("<?="(p " Variabile: ")"?>"))
+	    ("<?="(p " Variable: ")"?>"))
    (script  "p"    "<?xx?>"         "PHP code"
 	    ("<? PHP\n"(r "Code: " )"\n?>"))
    (script  "?"    "<?xx?>"         "PHP break"
@@ -1709,10 +1710,10 @@
 	  (progn (make-face 'html-helper-underline-face)
 		 (set-face-underline-p 'html-helper-underline-face t)
 		 (set-face-foreground html-helper-underline-face "goldenrod")))
-      (if (funcall change-it 'html-tag-face)
-	  (progn (make-face 'html-tag-face)
-		 (make-face-bold 'html-tag-face)
-		 (set-face-foreground html-tag-face "dodger blue")))
+      ;; Cheap hack to avoid autoload failure - lawrencc@debian.org
+      (defvar html-tag-face 
+        (make-face 'html-tag-face))
+      (make-face-bold 'html-tag-face)
 	;; PETER Neergaard <turtle@bu.edu> says
 	;;
 	;; "Another issue I just noticed is that font-lock-builtin-face
@@ -1869,11 +1870,11 @@
       ()
     ;; Emacs 19.28 and older
     ;; Define face variables that don't exist until Emacs 19.29.
-    (defvar html-helper-builtin-face (html-helper-emacs-19-build-face)
+    (defvar html-helper-builtin-face (html-helper-emacs-19-build-face))
     (defvar font-lock-variable-name-face 'font-lock-doc-string-face
       "Face to use for variable names -- and some HTML keywords.")
     (defvar font-lock-reference-face 'underline ; Ugly at line breaks
-      "Face to use for references -- including HTML hyperlink texts.")))
+      "Face to use for references -- including HTML hyperlink texts."))
 
 (defun html-helper-emacs-19-build-face ()
   (let ((x (make-face 'font-lock-builtin-face)))
@@ -2150,8 +2151,8 @@
 
 (defun html-helper-match-bold (last)
   (html-helper-match-ib
-   "\\(<\\(b\\|h[1-4]\\|strong\\title\\)\\(>\\|\\W\[^>]*>\\)\\)"
-   "</\\(b\\|h[1-4]\\|strong\\title\\)" last))
+   "\\(<\\(b\\|h[1-4]\\|strong\\|title\\)\\(>\\|\\W\[^>]*>\\)\\)" 
+   "</\\(b\\|h[1-4]\\|strong\\|title\\)" last))
 
 (defun html-helper-match-italics (last)
   (html-helper-match-ib "\\(<\\(i\\|em\\)\\(>\\|\\W\[^>]*>\\)\\)"
