\section{Standard Module \sectcode{htmllib}}
\stmodindex{htmllib}
\index{HTML}
\index{hypertext}

\renewcommand{\indexsubitem}{(in module htmllib)}

This module defines a class which can serve as a base for parsing text
files formatted in the HyperText Mark-up Language (HTML).  The class
is not directly concerned with I/O --- it must be provided with input
in string form via a method, and makes calls to methods of a
``formatter'' object in order to produce output.  The
\code{HTMLParser} class is designed to be used as a base class for
other classes in order to add functionality, and allows most of its
methods to be extended or overridden.  In turn, this class is derived
from and extends the \code{SGMLParser} class defined in module
\code{sgmllib}.  Two implementations of formatter objects are
provided in the \code{formatter} module; refer to the documentation
for that module for information on the formatter interface.
\index{SGML}
\stmodindex{sgmllib}
\ttindex{SGMLParser}
\index{formatter}
\stmodindex{formatter}

The following is a summary of the interface defined by
\code{sgmllib.SGMLParser}:

\begin{itemize}

\item
The interface to feed data to an instance is through the \code{feed()}
method, which takes a string argument.  This can be called with as
little or as much text at a time as desired; \code{p.feed(a);
p.feed(b)} has the same effect as \code{p.feed(a+b)}.  When the data
contains complete HTML tags, these are processed immediately;
incomplete elements are saved in a buffer.  To force processing of all
unprocessed data, call the \code{close()} method.

For example, to parse the entire contents of a file, use:
\begin{verbatim}
parser.feed(open('myfile.html').read())
parser.close()
\end{verbatim}

\item
The interface to define semantics for HTML tags is very simple: derive
a class and define methods called \code{start_\var{tag}()},
\code{end_\var{tag}()}, or \code{do_\var{tag}()}.  The parser will
call these at appropriate moments: \code{start_\var{tag}} or
\code{do_\var{tag}} is called when an opening tag of the form
\code{<\var{tag} ...>} is encountered; \code{end_\var{tag}} is called
when a closing tag of the form \code{<\var{tag}>} is encountered.  If
an opening tag requires a corresponding closing tag, like \code{<H1>}
... \code{</H1>}, the class should define the \code{start_\var{tag}}
method; if a tag requires no closing tag, like \code{<P>}, the class
should define the \code{do_\var{tag}} method.

\end{itemize}

The module defines a single class:

\begin{funcdesc}{HTMLParser}{formatter}
This is the basic HTML parser class.  It supports all entity names
required by the HTML 2.0 specification (RFC 1866).  It also defines
handlers for all HTML 2.0 and many HTML 3.0 and 3.2 elements.
\end{funcdesc}

In addition to tag methods, the \code{HTMLParser} class provides some
additional methods and instance variables for use within tag methods.

\renewcommand{\indexsubitem}{({\tt HTMLParser} method)}

\begin{datadesc}{formatter}
This is the formatter instance associated with the parser.
\end{datadesc}

\begin{datadesc}{nofill}
Boolean flag which should be true when whitespace should not be
collapsed, or false when it should be.  In general, this should only
be true when character data is to be treated as ``preformatted'' text,
as within a \code{<PRE>} element.  The default value is false.  This
affects the operation of \code{handle_data()} and \code{save_end()}.
\end{datadesc}

\begin{funcdesc}{anchor_bgn}{href\, name\, type}
This method is called at the start of an anchor region.  The arguments
correspond to the attributes of the \code{<A>} tag with the same
names.  The default implementation maintains a list of hyperlinks
(defined by the \code{href} argument) within the document.  The list
of hyperlinks is available as the data attribute \code{anchorlist}.
\end{funcdesc}

\begin{funcdesc}{anchor_end}{}
This method is called at the end of an anchor region.  The default
implementation adds a textual footnote marker using an index into the
list of hyperlinks created by \code{anchor_bgn()}.
\end{funcdesc}

\begin{funcdesc}{handle_image}{source\, alt\optional{\, ismap\optional{\, align\optional{\, width\optional{\, height}}}}}
This method is called to handle images.  The default implementation
simply passes the \code{alt} value to the \code{handle_data()}
method.
\end{funcdesc}

\begin{funcdesc}{save_bgn}{}
Begins saving character data in a buffer instead of sending it to the
formatter object.  Retrieve the stored data via \code{save_end()}
Use of the \code{save_bgn()} / \code{save_end()} pair may not be
nested.
\end{funcdesc}

\begin{funcdesc}{save_end}{}
Ends buffering character data and returns all data saved since the
preceeding call to \code{save_bgn()}.  If \code{nofill} flag is false,
whitespace is collapsed to single spaces.  A call to this method
without a preceeding call to \code{save_bgn()} will raise a
\code{TypeError} exception.
\end{funcdesc}
