]> git.saurik.com Git - wxWidgets.git/blame - src/html/m_pre.cpp
warning fixed
[wxWidgets.git] / src / html / m_pre.cpp
CommitLineData
5526e819
VS
1/////////////////////////////////////////////////////////////////////////////
2// Name: mod_pre.cpp
3// Purpose: wxHtml module for <PRE> ... </PRE> tag (code citation)
4// Author: Vaclav Slavik
69941f05 5// RCS-ID: $Id$
5526e819
VS
6// Copyright: (c) 1999 Vaclav Slavik
7// Licence: wxWindows Licence
8/////////////////////////////////////////////////////////////////////////////
9
3364ab79
RS
10#ifdef __GNUG__
11#pragma implementation
12#endif
13
14#include <wx/wxprec.h>
15
5526e819 16#if wxUSE_HTML
3364ab79
RS
17#ifdef __BORDLANDC__
18#pragma hdrstop
19#endif
20
21#ifndef WXPRECOMP
22#include <wx/wx.h>
23#endif
24
5526e819 25
69941f05
VS
26#include "wx/html/forcelnk.h"
27#include "wx/html/m_templ.h"
5526e819 28
69941f05 29#include "wx/html/htmlcell.h"
5526e819
VS
30#include <wx/tokenzr.h>
31
32FORCE_LINK_ME(mod_pre)
33
34
35//-----------------------------------------------------------------------------
36// wxHtmlCodeCell
37//-----------------------------------------------------------------------------
38
39class wxHtmlPRECell : public wxHtmlCell
40{
41 private:
42 wxString** m_Text;
43 // list of wxString objects.
44 int m_LinesCnt;
45 // number of lines
46 int m_LineHeight;
47 // height of single line of text
48
49 public:
50 wxHtmlPRECell(const wxString& s, wxDC& dc);
51 ~wxHtmlPRECell();
52 void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2);
53};
54
55
56wxHtmlPRECell::wxHtmlPRECell(const wxString& s, wxDC& dc) : wxHtmlCell()
57{
58 wxStringTokenizer tokenizer(s, "\n");
59 wxString tmp;
60 long int x, z;
61 int i;
62
63 m_LineHeight = dc.GetCharHeight();
64 m_LinesCnt = 0;
65 m_Text = NULL;
66 m_Width = m_Height = 0;
67
68 i = 0;
69#if (wxVERSION_NUMBER < 2100)
70 while (tokenizer.HasMoreToken()) {
71#else
72 while (tokenizer.HasMoreTokens()) {
73#endif
74 if (i % 10 == 0) m_Text = (wxString**) realloc(m_Text, sizeof(wxString*) * (i + 10));
75 tmp = tokenizer.NextToken();
76 tmp.Replace("&nbsp;", " ", TRUE);
77 tmp.Replace("&quot;", "\"", TRUE);
78 tmp.Replace("&lt;", "<", TRUE);
79 tmp.Replace("&gt;", ">", TRUE);
80 tmp.Replace("&amp;", "&", TRUE);
81 tmp.Replace("\t", " ", TRUE);
82 tmp.Replace("\r", "", TRUE);
83 m_Text[i++] = new wxString(tmp);
84
85 dc.GetTextExtent(tmp, &x, &z, &z);
86 if (x > m_Width) m_Width = x;
87 m_Height += m_LineHeight;
88 m_LinesCnt++;
89 }
90}
91
92
93
94wxHtmlPRECell::~wxHtmlPRECell()
95{
96 for (int i = 0; i < m_LinesCnt; i++) delete m_Text[i];
97 free(m_Text);
98}
99
100
101void wxHtmlPRECell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2)
102{
103 for (int i = 0; i < m_LinesCnt; i++)
104 dc.DrawText(*(m_Text[i]), x + m_PosX, y + m_PosY + m_LineHeight * i);
105
106 wxHtmlCell::Draw(dc, x, y, view_y1, view_y2);
107}
108
109
110
111
112//-----------------------------------------------------------------------------
113// The list handler:
114//-----------------------------------------------------------------------------
115
116
117TAG_HANDLER_BEGIN(PRE, "PRE")
118
119 TAG_HANDLER_PROC(tag)
120 {
121 wxHtmlContainerCell *c;
122
123 int fixed = m_WParser -> GetFontFixed(),
124 italic = m_WParser -> GetFontItalic(),
125 underlined = m_WParser -> GetFontUnderlined(),
126 bold = m_WParser -> GetFontBold(),
127 fsize = m_WParser -> GetFontSize();
128
129 m_WParser -> CloseContainer();
130 c = m_WParser -> OpenContainer();
131 c -> SetAlignHor(HTML_ALIGN_LEFT);
132 c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_VERTICAL);
133
134 m_WParser -> SetFontUnderlined(FALSE);
135 m_WParser -> SetFontBold(FALSE);
136 m_WParser -> SetFontItalic(FALSE);
137 m_WParser -> SetFontFixed(TRUE);
138 m_WParser -> SetFontSize(0);
139 c -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
140
141 {
142 wxString cit;
143 cit = m_WParser -> GetSource() -> Mid(tag.GetBeginPos(), tag.GetEndPos1() - tag.GetBeginPos());
144 c -> InsertCell(new wxHtmlPRECell(cit, *(m_WParser -> GetDC())));
145 }
146
147 m_WParser -> SetFontUnderlined(underlined);
148 m_WParser -> SetFontBold(bold);
149 m_WParser -> SetFontItalic(italic);
150 m_WParser -> SetFontFixed(fixed);
151 m_WParser -> SetFontSize(fsize);
152 c -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
153
154 m_WParser -> CloseContainer();
155 m_WParser -> OpenContainer();
156 return TRUE;
157 }
158
159TAG_HANDLER_END(PRE)
160
161
162
163
164
165TAGS_MODULE_BEGIN(Pre)
166
167 TAGS_MODULE_ADD(PRE)
168
169TAGS_MODULE_END(Pre)
170
171#endif