%
% automatically generated by HelpGen from
% htmlparser.tex at 14/Mar/99 20:13:37
%


\section{\class{wxHtmlParser}}\label{wxhtmlparser}

This class handles {\bf generic} parsing of HTML document : it scans
the document and divide it into blocks of tags (where one block
consists of begining and ending tag and of text between these
2 tags).

It is independent from wxHtmlWindow and can be used as stand-alone parser
(Julian Smart's idea of speech-only HTML viewer or wget-like utility -
see InetGet sample for example). 

It uses system of tag handlers to parse the HTML document. Tag handlers
are not staticaly shared by all instances but are created for each 
wxHtmlParser instance. The reason is that the handler may contain
document-specific temporary data used during parsing (e.g. complicated
structures like tables)

Typically the user calls only \helpref{Parse}{wxhtmlparserparse} method.

\wxheading{Derived from}

wxObject

\wxheading{See also}

\helpref{Cells Overview}{cells},
\helpref{Tag Handlers Overview}{handlers},
\helpref{wxHtmlTag}{wxhtmltag}

\latexignore{\rtfignore{\wxheading{Members}}}


\membersection{wxHtmlParser::wxHtmlParser}\label{wxhtmlparserwxhtmlparser}

\func{}{wxHtmlParser}{\void}

Constructor. 


\membersection{wxHtmlParser::SetFS}\label{wxhtmlparsersetfs}

\func{void}{SetFS}{\param{wxFileSystem }{*fs}}

Sets the virtual file system that will be used to request additional
files. (For example {\tt <IMG>} tag handler requests wxFSFile with the
image data.)

\membersection{wxHtmlParser::GetFS}\label{wxhtmlparsergetfs}

\constfunc{wxFileSystem*}{GetFS}{\void}

Returns pointer to the file system. Because each tag handler has
reference to it's parent parser it can easily request the file by
calling

\begin{verbatim}
wxFSFile *f = m_Parser -> GetFS() -> OpenFile("image.jpg");
\end{verbatim}


\membersection{wxHtmlParser::Parse}\label{wxhtmlparserparse}

\func{wxObject*}{Parse}{\param{const wxString\& }{source}}

Proceeds parsing of the document. This is end-user method. You can simply
call it when you need to obtain parsed output (which is parser-specific)

The method does these things:

\begin{enumerate}
\item calls \helpref{InitParser(source)}{wxhtmlparserinitparser}
\item calls \helpref{DoParsing}{wxhtmlparserdoparsing}
\item calls \helpref{GetProduct}{wxhtmlparsergetproduct}
\item calls \helpref{DoneParser}{wxhtmlparserdoneparser}
\item returns value returned by GetProduct
\end{enumerate}

You shouldn't use InitParser, DoParsing, GetProduct or DoneParser directly.

\membersection{wxHtmlParser::InitParser}\label{wxhtmlparserinitparser}

\func{virtual void}{InitParser}{\param{const wxString\& }{source}}

Setups the parser for parsing the {\it source} string. (Should be overriden
in derived class)


\membersection{wxHtmlParser::DoneParser}\label{wxhtmlparserdoneparser}

\func{virtual void}{DoneParser}{\void}

This must be called after DoParsing().


\membersection{wxHtmlParser::DoParsing}\label{wxhtmlparserdoparsing}

\func{void}{DoParsing}{\param{int }{begin\_pos}, \param{int }{end\_pos}}

\func{void}{DoParsing}{\void}

Parses the m\_Source from begin\_pos to end\_pos-1.
(in noparams version it parses whole m\_Source)

\membersection{wxHtmlParser::GetProduct}\label{wxhtmlparsergetproduct}

\func{virtual wxObject*}{GetProduct}{\void}

Returns product of parsing. Returned value is result of parsing 
of the document. The type of this result depends on internal 
representation in derived parser (but it must be derived from wxObject!).

See wxHtmlWinParser for details.


\membersection{wxHtmlParser::AddTagHandler}\label{wxhtmlparseraddtaghandler}

\func{virtual void}{AddTagHandler}{\param{wxHtmlTagHandler }{*handler}}

Adds handler to the internal list (\& hash table) of handlers. This
method should not be called directly by user but rather by derived class'
constructor.

This adds the handler to this {\bf instance} of wxHtmlParser not to
all objects of this class!!! (Static front-end to AddTagHandler is provided
by wxHtmlWinParser)

All handlers are deleted on object deletion.

\membersection{wxHtmlParser::GetSource}\label{wxhtmlparsergetsource}

\func{wxString*}{GetSource}{\void}

Returns pointer to the source being parsed.


\membersection{wxHtmlParser::GetTempData}\label{wxhtmlparsergettempdata}

\func{virtual wxList*}{GetTempData}{\void}

This method returns list of wxObjects that represents
all data allocated by the parser. These can't be freeded
by destructor because they must be valid as long as
GetProduct's return value is valid - the caller must
explicitly call

\begin{verbatim}
delete (MyParser -> GetTempData());
\end{verbatim}

to free the memory (this method always sets the list to delete its contents)

\wxheading{Example}

Why is this neccessary? Imagine wxHtmlWinParser : when handling
FONT tag it creates some fonts. These fonts are then used by wxHtmlWindow
to display the text. But wxHtmWinParser object is needed only when parsing
the document - it may be deleted then. But fonts CAN'T be deleted - they
must exist as long as the window is displaying text. 

GetTempData() solves the problem.

\membersection{wxHtmlParser::AddText}\label{wxhtmlparseraddword}

\func{virtual void}{AddWord}{\param{const char* }{txt}}

Must be overwriten in derived class.

This method is called by \helpref{DoParsing}{wxhtmlparserdoparsing}
each time a part of text is parsed. {\it txt} is NOT only one word, it is 
substring of input. It is not formatted or preprocessed (so white spaces are
unmodified)

\membersection{wxHtmlParser::AddTag}\label{wxhtmlparseraddtag}

\func{void}{AddTag}{\param{const wxHtmlTag\& }{tag}

This may (and may not) be overwriten in derived class.

This method is called each time new tag is about to be added.
{\it tag} contains information about the tag. (See \helpref{wxHtmlTag}{wxhtmltag}
for details.)

Default (wxHtmlParser) behaviour is this :
First it finds a handler capable of handling this tag and then it calls
handler's HandleTag method.
