// Author: Vaclav Slavik
// RCS-ID: $Id$
// Copyright: (c) 1999 Vaclav Slavik
-// Licence: wxWindows Licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_HTMLPARS_H_
#define _WX_HTMLPARS_H_
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "htmlpars.h"
#endif
#include "wx/hash.h"
#include "wx/fontenc.h"
-class WXDLLEXPORT wxMBConv;
-class WXDLLEXPORT wxHtmlParser;
-class WXDLLEXPORT wxHtmlTagHandler;
-class WXDLLEXPORT wxHtmlEntitiesParser;
+class WXDLLIMPEXP_BASE wxMBConv;
+class WXDLLIMPEXP_HTML wxHtmlParser;
+class WXDLLIMPEXP_HTML wxHtmlTagHandler;
+class WXDLLIMPEXP_HTML wxHtmlEntitiesParser;
class wxHtmlTextPieces;
class wxHtmlParserState;
+
+enum wxHtmlURLType
+{
+ wxHTML_URL_PAGE,
+ wxHTML_URL_IMAGE,
+ wxHTML_URL_OTHER
+};
+
// This class handles generic parsing of HTML document : it scans
// the document and divide it into blocks of tags (where one block
// consists of starting and ending tag and of text between these
// 2 tags.
-class WXDLLEXPORT wxHtmlParser : public wxObject
+class WXDLLIMPEXP_HTML wxHtmlParser : public wxObject
{
DECLARE_ABSTRACT_CLASS(wxHtmlParser)
wxFileSystem* GetFS() const { return m_FS; }
+ // Opens file if the parser is allowed to open given URL (may be forbidden
+ // for security reasons)
+ virtual wxFSFile *OpenURL(wxHtmlURLType type, const wxString& url) const;
+
// You can simply call this method when you need parsed output.
// This method does these things:
// 1. call InitParser(source);
virtual void InitParser(const wxString& source);
// This must be called after Parse().
virtual void DoneParser();
+
+ // May be called during parsing to immediately return from Parse().
+ virtual void StopParsing() { m_stopParsing = TRUE; }
// Parses the m_Source from begin_pos to end_pos-1.
// (in noparams version it parses whole m_Source)
// Restores parser's state from stack or returns FALSE if the stack is
// empty
virtual bool RestoreState();
+
+ // Parses HTML string 'markup' and extracts charset info from <meta> tag
+ // if present. Returns empty string if the tag is missing.
+ // For wxHTML's internal use.
+ static wxString ExtractCharsetInformation(const wxString& markup);
+
+ // Returns entity parser object, used to substitute HTML &entities;
+ wxHtmlEntitiesParser *GetEntitiesParser() const { return m_entitiesParser; }
protected:
// DOM structure
// ignored if no hander is found.
// Derived class is *responsible* for filling in m_Handlers table.
virtual void AddTag(const wxHtmlTag& tag);
-
- // Returns entity parser object, used to substitute HTML &entities;
- wxHtmlEntitiesParser *GetEntitiesParser() const { return m_entitiesParser; }
protected:
// DOM tree:
wxList m_HandlersList;
wxHashTable m_HandlersHash;
+ DECLARE_NO_COPY_CLASS(wxHtmlParser)
+
// class for opening files (file system)
wxFileSystem *m_FS;
// handlers stack used by PushTagHandler and PopTagHandler
// entity parse
wxHtmlEntitiesParser *m_entitiesParser;
+
+ // flag indicating that the parser should stop
+ bool m_stopParsing;
};
// (using it's public methods)
// 2. Parser parses source between starting and ending tag
// 3. Handler restores original state of the parser
-class WXDLLEXPORT wxHtmlTagHandler : public wxObject
+class WXDLLIMPEXP_HTML wxHtmlTagHandler : public wxObject
{
DECLARE_ABSTRACT_CLASS(wxHtmlTagHandler)
{ m_Parser->DoParsing(tag.GetBeginPos(), tag.GetEndPos1()); }
wxHtmlParser *m_Parser;
+
+ DECLARE_NO_COPY_CLASS(wxHtmlTagHandler)
};
// This class is used to parse HTML entities in strings. It can handle
// both named entities and &#xxxx entries where xxxx is Unicode code.
-class WXDLLEXPORT wxHtmlEntitiesParser : public wxObject
+class WXDLLIMPEXP_HTML wxHtmlEntitiesParser : public wxObject
{
DECLARE_DYNAMIC_CLASS(wxHtmlEntitiesParser)
// Parses entities in input and replaces them with respective characters
// (with respect to output encoding)
wxString Parse(const wxString& input);
-
-protected:
+
+ // Returns character for given entity or 0 if the enity is unknown
wxChar GetEntityChar(const wxString& entity);
+
+ // Returns character that represents given Unicode code
+#if wxUSE_UNICODE
+ wxChar GetCharForCode(unsigned code) { return (wxChar)code; }
+#else
wxChar GetCharForCode(unsigned code);
+#endif
+protected:
#if wxUSE_WCHAR_T && !wxUSE_UNICODE
wxMBConv *m_conv;
wxFontEncoding m_encoding;
#endif
+
+ DECLARE_NO_COPY_CLASS(wxHtmlEntitiesParser)
};