]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/html/htmlfilter.cpp
another file I added on the wxUniv branch and forgot to merge
[wxWidgets.git] / src / html / htmlfilter.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: filter.cpp
3// Purpose: wxHtmlFilter - input filter for translating into HTML format
4// Author: Vaclav Slavik
5// Copyright: (c) 1999 Vaclav Slavik
6// Licence: wxWindows Licence
7/////////////////////////////////////////////////////////////////////////////
8
9
10#ifdef __GNUG__
11#pragma implementation "htmlfilter.h"
12#endif
13
14#include "wx/wxprec.h"
15
16#if wxUSE_HTML
17
18#ifdef __BORDLANDC__
19#pragma hdrstop
20#endif
21
22#ifndef WXPRECOMP
23#include "wx/wx.h"
24#endif
25
26#include "wx/html/htmlfilter.h"
27#include "wx/html/htmlwin.h"
28
29
30/*
31
32There is code for several default filters:
33
34*/
35
36IMPLEMENT_ABSTRACT_CLASS(wxHtmlFilter, wxObject)
37
38//--------------------------------------------------------------------------------
39// wxHtmlFilterPlainText
40// filter for text/plain or uknown
41//--------------------------------------------------------------------------------
42
43IMPLEMENT_DYNAMIC_CLASS(wxHtmlFilterPlainText, wxHtmlFilter)
44
45bool wxHtmlFilterPlainText::CanRead(const wxFSFile& WXUNUSED(file)) const
46{
47 return TRUE;
48}
49
50
51
52wxString wxHtmlFilterPlainText::ReadFile(const wxFSFile& file) const
53{
54 wxInputStream *s = file.GetStream();
55 char *src;
56 wxString doc, doc2;
57
58 if (s == NULL) return wxEmptyString;
59 src = new char[s -> GetSize()+1];
60 src[s -> GetSize()] = 0;
61 s -> Read(src, s -> GetSize());
62 doc = src;
63 delete [] src;
64
65 doc.Replace(_T("<"), _T("&lt;"), TRUE);
66 doc.Replace(_T(">"), _T("&gt;"), TRUE);
67 doc2 = _T("<HTML><BODY><PRE>\n") + doc + _T("\n</PRE></BODY></HTML>");
68 return doc2;
69}
70
71
72
73
74
75//--------------------------------------------------------------------------------
76// wxHtmlFilterImage
77// filter for image/*
78//--------------------------------------------------------------------------------
79
80class wxHtmlFilterImage : public wxHtmlFilter
81{
82 DECLARE_DYNAMIC_CLASS(wxHtmlFilterImage)
83
84 public:
85 virtual bool CanRead(const wxFSFile& file) const;
86 virtual wxString ReadFile(const wxFSFile& file) const;
87};
88
89IMPLEMENT_DYNAMIC_CLASS(wxHtmlFilterImage, wxHtmlFilter)
90
91
92
93bool wxHtmlFilterImage::CanRead(const wxFSFile& file) const
94{
95 return (file.GetMimeType().Left(6) == "image/");
96}
97
98
99
100wxString wxHtmlFilterImage::ReadFile(const wxFSFile& file) const
101{
102 return ("<HTML><BODY><IMG SRC=\"" + file.GetLocation() + "\"></BODY></HTML>");
103}
104
105
106
107
108//--------------------------------------------------------------------------------
109// wxHtmlFilterPlainText
110// filter for text/plain or uknown
111//--------------------------------------------------------------------------------
112
113class wxHtmlFilterHTML : public wxHtmlFilter
114{
115 DECLARE_DYNAMIC_CLASS(wxHtmlFilterHTML)
116
117 public:
118 virtual bool CanRead(const wxFSFile& file) const;
119 virtual wxString ReadFile(const wxFSFile& file) const;
120};
121
122
123IMPLEMENT_DYNAMIC_CLASS(wxHtmlFilterHTML, wxHtmlFilter)
124
125bool wxHtmlFilterHTML::CanRead(const wxFSFile& file) const
126{
127// return (file.GetMimeType() == "text/html");
128// This is true in most case but some page can return:
129// "text/html; char-encoding=...."
130// So we use Find instead
131 return (file.GetMimeType().Find(_T("text/html")) == 0);
132}
133
134
135
136wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const
137{
138 wxInputStream *s = file.GetStream();
139 char *src;
140 wxString doc;
141
142 if (s == NULL) return wxEmptyString;
143 src = new char[s -> GetSize() + 1];
144 src[s -> GetSize()] = 0;
145 s -> Read(src, s -> GetSize());
146 doc = src;
147 delete[] src;
148
149 return doc;
150}
151
152
153
154
155///// Module:
156
157class wxHtmlFilterModule : public wxModule
158{
159 DECLARE_DYNAMIC_CLASS(wxHtmlFilterModule)
160
161 public:
162 virtual bool OnInit()
163 {
164 wxHtmlWindow::AddFilter(new wxHtmlFilterHTML);
165 wxHtmlWindow::AddFilter(new wxHtmlFilterImage);
166 return TRUE;
167 }
168 virtual void OnExit() {}
169};
170
171IMPLEMENT_DYNAMIC_CLASS(wxHtmlFilterModule, wxModule)
172
173#endif