1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxHtmlWinParser class (parser to be used with wxHtmlWindow) 
   4 // Author:      Vaclav Slavik 
   6 // Copyright:   (c) 1999 Vaclav Slavik 
   7 // Licence:     wxWindows licence 
   8 ///////////////////////////////////////////////////////////////////////////// 
  11 #ifndef _WX_WINPARS_H_ 
  12 #define _WX_WINPARS_H_ 
  14 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  15 #pragma interface "winpars.h" 
  21 #include "wx/module.h" 
  23 #include "wx/html/htmlpars.h" 
  24 #include "wx/html/htmlcell.h" 
  25 #include "wx/encconv.h" 
  27 class WXDLLIMPEXP_HTML wxHtmlWindow
; 
  28 class WXDLLIMPEXP_HTML wxHtmlWinParser
; 
  29 class WXDLLIMPEXP_HTML wxHtmlWinTagHandler
; 
  30 class WXDLLIMPEXP_HTML wxHtmlTagsModule
; 
  32 //-------------------------------------------------------------------------------- 
  34 //                  This class is derived from wxHtmlParser and its mail goal 
  35 //                  is to parse HTML input so that it can be displayed in 
  36 //                  wxHtmlWindow. It uses special wxHtmlWinTagHandler. 
  37 //-------------------------------------------------------------------------------- 
  39 class WXDLLIMPEXP_HTML wxHtmlWinParser 
: public wxHtmlParser
 
  41     DECLARE_ABSTRACT_CLASS(wxHtmlWinParser
) 
  42     friend class wxHtmlWindow
; 
  45     wxHtmlWinParser(wxHtmlWindow 
*wnd 
= NULL
); 
  48     virtual void InitParser(const wxString
& source
); 
  49     virtual void DoneParser(); 
  50     virtual wxObject
* GetProduct(); 
  52     virtual wxFSFile 
*OpenURL(wxHtmlURLType type
, const wxString
& url
) const; 
  54     // Set's the DC used for parsing. If SetDC() is not called, 
  55     // parsing won't proceed 
  56     virtual void SetDC(wxDC 
*dc
, double pixel_scale 
= 1.0) 
  57         { m_DC 
= dc
; m_PixelScale 
= pixel_scale
; } 
  59     wxDC 
*GetDC() {return m_DC
;} 
  60     double GetPixelScale() {return m_PixelScale
;} 
  61     int GetCharHeight() const {return m_CharHeight
;} 
  62     int GetCharWidth() const {return m_CharWidth
;} 
  64     // NOTE : these functions do _not_ return _actual_ 
  65     // height/width. They return h/w of default font 
  66     // for this DC. If you want actual values, call 
  67     // GetDC()->GetChar...() 
  69     // returns associated wxWindow 
  70     wxHtmlWindow 
*GetWindow() {return m_Window
;} 
  72     // Sets fonts to be used when displaying HTML page. (if size null then default sizes used). 
  73     void SetFonts(wxString normal_face
, wxString fixed_face
, const int *sizes 
= NULL
); 
  75     // Sets font sizes to be relative to the given size or the system 
  76     // default size; use either specified or default font 
  77     void SetStandardFonts(int size 
= -1, 
  78                           const wxString
& normal_face 
= wxEmptyString
, 
  79                           const wxString
& fixed_face 
= wxEmptyString
); 
  81     // Adds tags module. see wxHtmlTagsModule for details. 
  82     static void AddModule(wxHtmlTagsModule 
*module); 
  84     static void RemoveModule(wxHtmlTagsModule 
*module); 
  86     // parsing-related methods. These methods are called by tag handlers: 
  88     // Returns pointer to actual container. Common use in tag handler is : 
  89     // m_WParser->GetContainer()->InsertCell(new ...); 
  90     wxHtmlContainerCell 
*GetContainer() const {return m_Container
;} 
  92     // opens new container. This container is sub-container of opened 
  93     // container. Sets GetContainer to newly created container 
  95     wxHtmlContainerCell 
*OpenContainer(); 
  97     // works like OpenContainer except that new container is not created 
  98     // but c is used. You can use this to directly set actual container 
  99     wxHtmlContainerCell 
*SetContainer(wxHtmlContainerCell 
*c
); 
 101     // closes the container and sets actual Container to upper-level 
 103     wxHtmlContainerCell 
*CloseContainer(); 
 105     int GetFontSize() const {return m_FontSize
;} 
 106     void SetFontSize(int s
); 
 107     int GetFontBold() const {return m_FontBold
;} 
 108     void SetFontBold(int x
) {m_FontBold 
= x
;} 
 109     int GetFontItalic() const {return m_FontItalic
;} 
 110     void SetFontItalic(int x
) {m_FontItalic 
= x
;} 
 111     int GetFontUnderlined() const {return m_FontUnderlined
;} 
 112     void SetFontUnderlined(int x
) {m_FontUnderlined 
= x
;} 
 113     int GetFontFixed() const {return m_FontFixed
;} 
 114     void SetFontFixed(int x
) {m_FontFixed 
= x
;} 
 115     wxString 
GetFontFace() const {return GetFontFixed() ? m_FontFaceFixed 
: m_FontFaceNormal
;} 
 116     void SetFontFace(const wxString
& face
); 
 118     int GetAlign() const {return m_Align
;} 
 119     void SetAlign(int a
) {m_Align 
= a
;} 
 120     const wxColour
& GetLinkColor() const { return m_LinkColor
; } 
 121     void SetLinkColor(const wxColour
& clr
) { m_LinkColor 
= clr
; } 
 122     const wxColour
& GetActualColor() const { return m_ActualColor
; } 
 123     void SetActualColor(const wxColour
& clr
) { m_ActualColor 
= clr 
;} 
 124     const wxHtmlLinkInfo
& GetLink() const { return m_Link
; } 
 125     void SetLink(const wxHtmlLinkInfo
& link
); 
 128     void SetInputEncoding(wxFontEncoding enc
); 
 129     wxFontEncoding 
GetInputEncoding() const { return m_InputEnc
; } 
 130     wxFontEncoding 
GetOutputEncoding() const { return m_OutputEnc
; } 
 131     wxEncodingConverter 
*GetEncodingConverter() const { return m_EncConv
; } 
 134     // creates font depending on m_Font* members. 
 135     virtual wxFont
* CreateCurrentFont(); 
 138     virtual void AddText(const wxChar
* txt
); 
 141     bool m_tmpLastWasSpace
; 
 143     size_t  m_tmpStrBufSize
; 
 144         // temporary variables used by AddText 
 145     wxHtmlWindow 
*m_Window
; 
 146             // window we're parsing for 
 149             // Device Context we're parsing for 
 150     static wxList m_Modules
; 
 151             // list of tags modules (see wxHtmlTagsModule for details) 
 152             // This list is used to initialize m_Handlers member. 
 154     wxHtmlContainerCell 
*m_Container
; 
 155             // current container. See Open/CloseContainer for details. 
 157     int m_FontBold
, m_FontItalic
, m_FontUnderlined
, m_FontFixed
; // this is not true,false but 1,0, we need it for indexing 
 158     int m_FontSize
; /* -2 to +4,  0 is default */ 
 159     wxColour m_LinkColor
; 
 160     wxColour m_ActualColor
; 
 161             // basic font parameters. 
 162     wxHtmlLinkInfo m_Link
; 
 163             // actual hypertext link or empty string 
 165             // true if m_Link is not empty 
 166     long m_CharHeight
, m_CharWidth
; 
 167             // average height of normal-sized text 
 171     wxFont
* m_FontsTable
[2][2][2][2][7]; 
 172     wxString m_FontsFacesTable
[2][2][2][2][7]; 
 174     wxFontEncoding m_FontsEncTable
[2][2][2][2][7]; 
 176             // table of loaded fonts. 1st four indexes are 0 or 1, depending on on/off 
 177             // state of these flags (from left to right): 
 178             // [bold][italic][underlined][fixed_size] 
 179             // last index is font size : from 0 to 6 (remapped from html sizes 1 to 7) 
 180             // Note : this table covers all possible combinations of fonts, but not 
 181             // all of them are used, so many items in table are usually NULL. 
 183     wxString m_FontFaceFixed
, m_FontFaceNormal
; 
 184             // html font sizes and faces of fixed and proportional fonts 
 187     wxFontEncoding m_InputEnc
, m_OutputEnc
; 
 188             // I/O font encodings 
 189     wxEncodingConverter 
*m_EncConv
; 
 192     wxHtmlWordCell 
*m_lastWordCell
; 
 194     DECLARE_NO_COPY_CLASS(wxHtmlWinParser
) 
 202 //----------------------------------------------------------------------------- 
 203 // wxHtmlWinTagHandler 
 204 //                  This is basicly wxHtmlTagHandler except 
 205 //                  it is extended with protected member m_Parser pointing to 
 206 //                  the wxHtmlWinParser object 
 207 //----------------------------------------------------------------------------- 
 209 class WXDLLIMPEXP_HTML wxHtmlWinTagHandler 
: public wxHtmlTagHandler
 
 211     DECLARE_ABSTRACT_CLASS(wxHtmlWinTagHandler
) 
 214     wxHtmlWinTagHandler() : wxHtmlTagHandler() {} 
 216     virtual void SetParser(wxHtmlParser 
*parser
) {wxHtmlTagHandler::SetParser(parser
); m_WParser 
= (wxHtmlWinParser
*) parser
;}; 
 219     wxHtmlWinParser 
*m_WParser
; // same as m_Parser, but overcasted 
 221     DECLARE_NO_COPY_CLASS(wxHtmlWinTagHandler
) 
 229 //---------------------------------------------------------------------------- 
 231 //                  This is basic of dynamic tag handlers binding. 
 232 //                  The class provides methods for filling parser's handlers 
 234 //                  (See documentation for details) 
 235 //---------------------------------------------------------------------------- 
 237 class WXDLLIMPEXP_HTML wxHtmlTagsModule 
: public wxModule
 
 239     DECLARE_DYNAMIC_CLASS(wxHtmlTagsModule
) 
 242     wxHtmlTagsModule() : wxModule() {} 
 244     virtual bool OnInit(); 
 245     virtual void OnExit(); 
 247     // This is called by wxHtmlWinParser. 
 248     // The method must simply call parser->AddTagHandler(new 
 249     // <handler_class_name>); for each handler 
 250     virtual void FillHandlersTable(wxHtmlWinParser 
* WXUNUSED(parser
)) { } 
 256 #endif // _WX_WINPARS_H_