]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/html/m_fonts.cpp
fixed HTML parsing in regard to spaces between tags
[wxWidgets.git] / src / html / m_fonts.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: m_fonts.cpp
3// Purpose: wxHtml module for fonts & colors of fonts
4// Author: Vaclav Slavik
5// RCS-ID: $Id$
6// Copyright: (c) 1999 Vaclav Slavik
7// Licence: wxWindows Licence
8/////////////////////////////////////////////////////////////////////////////
9
10#ifdef __GNUG__
11#pragma implementation
12#endif
13
14#include "wx/wxprec.h"
15
16#include "wx/defs.h"
17#if wxUSE_HTML && wxUSE_STREAMS
18
19#ifdef __BORDLANDC__
20#pragma hdrstop
21#endif
22
23#ifndef WXPRECOMP
24#endif
25
26#include "wx/html/forcelnk.h"
27#include "wx/html/m_templ.h"
28#include "wx/fontenum.h"
29#include "wx/tokenzr.h"
30
31FORCE_LINK_ME(m_fonts)
32
33
34TAG_HANDLER_BEGIN(FONT, "FONT")
35
36 TAG_HANDLER_VARS
37 wxSortedArrayString m_Faces;
38
39 TAG_HANDLER_PROC(tag)
40 {
41 wxColour oldclr = m_WParser->GetActualColor();
42 int oldsize = m_WParser->GetFontSize();
43 wxString oldface = m_WParser->GetFontFace();
44
45 if (tag.HasParam(wxT("COLOR")))
46 {
47 wxColour clr;
48 if (tag.GetParamAsColour(wxT("COLOR"), &clr))
49 {
50 m_WParser->SetActualColor(clr);
51 m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(clr));
52 }
53 }
54
55 if (tag.HasParam(wxT("SIZE")))
56 {
57 int tmp = 0;
58 wxChar c = tag.GetParam(wxT("SIZE")).GetChar(0);
59 if (tag.GetParamAsInt(wxT("SIZE"), &tmp))
60 {
61 if (c == wxT('+') || c == wxT('-'))
62 m_WParser->SetFontSize(oldsize+tmp);
63 else
64 m_WParser->SetFontSize(tmp);
65 m_WParser->GetContainer()->InsertCell(
66 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
67 }
68 }
69
70 if (tag.HasParam(wxT("FACE")))
71 {
72 if (m_Faces.GetCount() == 0)
73 {
74 wxFontEnumerator enu;
75 enu.EnumerateFacenames();
76 m_Faces = *enu.GetFacenames();
77 }
78 wxStringTokenizer tk(tag.GetParam(wxT("FACE")), wxT(","));
79 int index;
80
81 while (tk.HasMoreTokens())
82 {
83 if ((index = m_Faces.Index(tk.GetNextToken())) != wxNOT_FOUND)
84 {
85 m_WParser->SetFontFace(m_Faces[index]);
86 m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
87 break;
88 }
89 }
90 }
91
92 ParseInner(tag);
93
94 if (oldface != m_WParser->GetFontFace())
95 {
96 m_WParser->SetFontFace(oldface);
97 m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
98 }
99 if (oldsize != m_WParser->GetFontSize())
100 {
101 m_WParser->SetFontSize(oldsize);
102 m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
103 }
104 if (oldclr != m_WParser->GetActualColor())
105 {
106 m_WParser->SetActualColor(oldclr);
107 m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr));
108 }
109 return TRUE;
110 }
111
112TAG_HANDLER_END(FONT)
113
114
115TAG_HANDLER_BEGIN(FACES_U, "U,STRIKE")
116
117 TAG_HANDLER_PROC(tag)
118 {
119 int underlined = m_WParser->GetFontUnderlined();
120
121 m_WParser->SetFontUnderlined(TRUE);
122 m_WParser->GetContainer()->InsertCell(
123 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
124
125 ParseInner(tag);
126
127 m_WParser->SetFontUnderlined(underlined);
128 m_WParser->GetContainer()->InsertCell(
129 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
130 return TRUE;
131 }
132
133TAG_HANDLER_END(FACES_U)
134
135
136
137
138TAG_HANDLER_BEGIN(FACES_B, "B,STRONG")
139
140 TAG_HANDLER_PROC(tag)
141 {
142 int bold = m_WParser->GetFontBold();
143
144 m_WParser->SetFontBold(TRUE);
145 m_WParser->GetContainer()->InsertCell(
146 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
147
148 ParseInner(tag);
149
150 m_WParser->SetFontBold(bold);
151 m_WParser->GetContainer()->InsertCell(
152 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
153 return TRUE;
154 }
155
156TAG_HANDLER_END(FACES_B)
157
158
159
160
161TAG_HANDLER_BEGIN(FACES_I, "I,EM,CITE,ADDRESS")
162
163 TAG_HANDLER_PROC(tag)
164 {
165 int italic = m_WParser->GetFontItalic();
166
167 m_WParser->SetFontItalic(TRUE);
168 m_WParser->GetContainer()->InsertCell(
169 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
170
171 ParseInner(tag);
172
173 m_WParser->SetFontItalic(italic);
174 m_WParser->GetContainer()->InsertCell(
175 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
176 return TRUE;
177 }
178
179TAG_HANDLER_END(FACES_I)
180
181
182
183
184TAG_HANDLER_BEGIN(FACES_TT, "TT,CODE,KBD,SAMP")
185
186 TAG_HANDLER_PROC(tag)
187 {
188 int fixed = m_WParser->GetFontFixed();
189
190 m_WParser->SetFontFixed(TRUE);
191 m_WParser->GetContainer()->InsertCell(
192 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
193
194 ParseInner(tag);
195
196 m_WParser->SetFontFixed(fixed);
197 m_WParser->GetContainer()->InsertCell(
198 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
199 return TRUE;
200 }
201
202TAG_HANDLER_END(FACES_TT)
203
204
205
206
207
208TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6")
209
210 TAG_HANDLER_PROC(tag)
211 {
212 int old_size, old_b, old_i, old_u, old_f, old_al;
213 wxHtmlContainerCell *c;
214
215 old_size = m_WParser->GetFontSize();
216 old_b = m_WParser->GetFontBold();
217 old_i = m_WParser->GetFontItalic();
218 old_u = m_WParser->GetFontUnderlined();
219 old_f = m_WParser->GetFontFixed();
220 old_al = m_WParser->GetAlign();
221
222 m_WParser->SetFontBold(TRUE);
223 m_WParser->SetFontItalic(FALSE);
224 m_WParser->SetFontUnderlined(FALSE);
225 m_WParser->SetFontFixed(FALSE);
226
227 if (tag.GetName() == wxT("H1"))
228 m_WParser->SetFontSize(7);
229 else if (tag.GetName() == wxT("H2"))
230 m_WParser->SetFontSize(6);
231 else if (tag.GetName() == wxT("H3"))
232 m_WParser->SetFontSize(5);
233 else if (tag.GetName() == wxT("H4"))
234 {
235 m_WParser->SetFontSize(5);
236 m_WParser->SetFontItalic(TRUE);
237 m_WParser->SetFontBold(FALSE);
238 }
239 else if (tag.GetName() == wxT("H5"))
240 m_WParser->SetFontSize(4);
241 else if (tag.GetName() == wxT("H6"))
242 {
243 m_WParser->SetFontSize(4);
244 m_WParser->SetFontItalic(TRUE);
245 m_WParser->SetFontBold(FALSE);
246 }
247
248 c = m_WParser->GetContainer();
249 if (c->GetFirstCell())
250 {
251 m_WParser->CloseContainer();
252 m_WParser->OpenContainer();
253 c = m_WParser->GetContainer();
254 }
255 c = m_WParser->GetContainer();
256
257 c->SetAlign(tag);
258 c->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
259 c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
260 m_WParser->SetAlign(c->GetAlignHor());
261
262 ParseInner(tag);
263
264 m_WParser->SetFontSize(old_size);
265 m_WParser->SetFontBold(old_b);
266 m_WParser->SetFontItalic(old_i);
267 m_WParser->SetFontUnderlined(old_u);
268 m_WParser->SetFontFixed(old_f);
269 m_WParser->SetAlign(old_al);
270
271 m_WParser->GetContainer()->InsertCell(
272 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
273 m_WParser->CloseContainer();
274 m_WParser->OpenContainer();
275 c = m_WParser->GetContainer();
276 c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
277
278 return TRUE;
279 }
280
281TAG_HANDLER_END(Hx)
282
283
284TAG_HANDLER_BEGIN(BIGSMALL, "BIG,SMALL")
285
286 TAG_HANDLER_PROC(tag)
287 {
288 int oldsize = m_WParser->GetFontSize();
289 int sz = (tag.GetName() == wxT("BIG")) ? +1 : -1;
290
291 m_WParser->SetFontSize(sz);
292 m_WParser->GetContainer()->InsertCell(
293 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
294
295 ParseInner(tag);
296
297 m_WParser->SetFontSize(oldsize);
298 m_WParser->GetContainer()->InsertCell(
299 new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
300 return TRUE;
301 }
302
303TAG_HANDLER_END(BIGSMALL)
304
305
306
307
308TAGS_MODULE_BEGIN(Fonts)
309
310 TAGS_MODULE_ADD(FONT)
311 TAGS_MODULE_ADD(FACES_U)
312 TAGS_MODULE_ADD(FACES_I)
313 TAGS_MODULE_ADD(FACES_B)
314 TAGS_MODULE_ADD(FACES_TT)
315 TAGS_MODULE_ADD(Hx)
316 TAGS_MODULE_ADD(BIGSMALL)
317
318TAGS_MODULE_END(Fonts)
319
320
321#endif