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