0eb8c9383b
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4230 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
246 lines
7.4 KiB
TeX
246 lines
7.4 KiB
TeX
%
|
|
% automatically generated by HelpGen from
|
|
% htmlparser.tex at 14/Mar/99 20:13:37
|
|
%
|
|
|
|
\section{\class{wxHtmlParser}}\label{wxhtmlparser}
|
|
|
|
This class handles the {\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
|
|
two 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 the \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::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.
|
|
|
|
\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::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::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::DoneParser}\label{wxhtmlparserdoneparser}
|
|
|
|
\func{virtual void}{DoneParser}{\void}
|
|
|
|
This must be called after DoParsing().
|
|
|
|
\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::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::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 freed
|
|
by the 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
|
|
a FONT tag it creates some fonts. These fonts are then used by wxHtmlWindow
|
|
to display the text. But the 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::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::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}\itemsep=0pt
|
|
\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::PushTagHandler}\label{wxhtmlparserpushtaghandler}
|
|
|
|
\func{void}{PushTagHandler}{\param{wxHtmlTagHandler* }{handler}, \param{wxString }{tags}}
|
|
|
|
Forces the handler to handle additional tags
|
|
(not returned by \helpref{GetSupportedTags}{wxhtmltaghandlergetsupportedtags}).
|
|
The handler should already be added to this parser.
|
|
|
|
\wxheading{Parameters}
|
|
|
|
\docparam{handler}{the handler}
|
|
\docparam{tags}{List of tags (in same format as GetSupportedTags's return value). The parser
|
|
will redirect these tags to {\it handler} (until call to \helpref{PopTagHandler}{wxhtmlparserpoptaghandler}). }
|
|
|
|
\wxheading{Example}
|
|
|
|
Imagine you want to parse following pseudo-html structure:
|
|
|
|
\begin{verbatim}
|
|
<myitems>
|
|
<param name="one" value="1">
|
|
<param name="two" value="2">
|
|
</myitems>
|
|
|
|
<execute>
|
|
<param program="text.exe">
|
|
</execute>
|
|
\end{verbatim}
|
|
|
|
It is obvious that you cannot use only one tag handler for <param> tag.
|
|
Instead you must use context-sensitive handlers for <param> inside <myitems>
|
|
and <param> inside <execute>.
|
|
|
|
This is the prefered solution:
|
|
|
|
\begin{verbatim}
|
|
TAG_HANDLER_BEGIN(MYITEM, "MYITEMS")
|
|
TAG_HANDLER_PROC(tag)
|
|
{
|
|
// ...something...
|
|
|
|
m_Parser -> PushTagHandler(this, "PARAM");
|
|
ParseInner(tag);
|
|
m_Parser -> PopTagHandler();
|
|
|
|
// ...something...
|
|
}
|
|
TAG_HANDLER_END(MYITEM)
|
|
\end{verbatim}
|
|
|
|
|
|
\membersection{wxHtmlParser::PopTagHandler}\label{wxhtmlparserpoptaghandler}
|
|
|
|
\func{void}{PopTagHandler}{\void}
|
|
|
|
Restores parser's state before last call to
|
|
\helpref{PushTagHandler}{wxhtmlparserpushtaghandler}.
|
|
|
|
|
|
\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.)
|
|
|