]>
git.saurik.com Git - wxWidgets.git/blob - src/html/m_pre.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxHtml module for <PRE> ... </PRE> tag (code citation)
4 // Author: Vaclav Slavik
6 // Copyright: (c) 1999 Vaclav Slavik
7 // Licence: wxWindows Licence
8 /////////////////////////////////////////////////////////////////////////////
11 #pragma implementation
14 #include "wx/wxprec.h"
17 #if wxUSE_HTML && wxUSE_STREAMS
27 #include "wx/html/forcelnk.h"
28 #include "wx/html/m_templ.h"
30 #include "wx/html/htmlcell.h"
31 #include "wx/tokenzr.h"
32 #include "wx/encconv.h"
37 //-----------------------------------------------------------------------------
39 //-----------------------------------------------------------------------------
41 class wxHtmlPRECell
: public wxHtmlCell
45 // list of wxString objects.
49 // height of single line of text
52 wxHtmlPRECell(const wxString
& s
, wxDC
& dc
);
54 void Draw(wxDC
& dc
, int x
, int y
, int view_y1
, int view_y2
);
58 wxHtmlPRECell::wxHtmlPRECell(const wxString
& s
, wxDC
& dc
) : wxHtmlCell()
60 wxStringTokenizer
tokenizer(s
, "\n");
65 m_LineHeight
= dc
.GetCharHeight();
68 m_Width
= m_Height
= 0;
71 while (tokenizer
.HasMoreTokens())
73 if (i
% 10 == 0) m_Text
= (wxString
**) realloc(m_Text
, sizeof(wxString
*) * (i
+ 10));
74 tmp
= tokenizer
.NextToken();
75 tmp
.Replace(wxT("©"), wxT("(c)"), TRUE
);
76 tmp
.Replace(wxT(" "), wxT(" "), TRUE
);
77 tmp
.Replace(wxT("""), wxT("\""), TRUE
);
78 tmp
.Replace(wxT("<"), wxT("<"), TRUE
);
79 tmp
.Replace(wxT(">"), wxT(">"), TRUE
);
80 tmp
.Replace(wxT("&"), wxT("&"), TRUE
);
81 tmp
.Replace(wxT("\t"), wxT(" "), TRUE
);
82 tmp
.Replace(wxT("\r"), wxT(""), TRUE
);
83 m_Text
[i
++] = new wxString(tmp
);
85 dc
.GetTextExtent(tmp
, &x
, &z
, &z
);
86 if (x
> m_Width
) m_Width
= x
;
87 m_Height
+= m_LineHeight
;
94 wxHtmlPRECell::~wxHtmlPRECell()
96 for (int i
= 0; i
< m_LinesCnt
; i
++) delete m_Text
[i
];
101 void wxHtmlPRECell::Draw(wxDC
& dc
, int x
, int y
, int view_y1
, int view_y2
)
103 for (int i
= 0; i
< m_LinesCnt
; i
++)
104 dc
.DrawText(*(m_Text
[i
]), x
+ m_PosX
, y
+ m_PosY
+ m_LineHeight
* i
);
106 wxHtmlCell::Draw(dc
, x
, y
, view_y1
, view_y2
);
112 //-----------------------------------------------------------------------------
114 //-----------------------------------------------------------------------------
117 TAG_HANDLER_BEGIN(PRE
, "PRE")
119 TAG_HANDLER_PROC(tag
)
121 wxHtmlContainerCell
*c
;
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();
129 m_WParser
->CloseContainer();
130 c
= m_WParser
->OpenContainer();
131 c
->SetAlignHor(wxHTML_ALIGN_LEFT
);
132 c
->SetIndent(m_WParser
->GetCharHeight(), wxHTML_INDENT_VERTICAL
);
134 m_WParser
->SetFontUnderlined(FALSE
);
135 m_WParser
->SetFontBold(FALSE
);
136 m_WParser
->SetFontItalic(FALSE
);
137 m_WParser
->SetFontFixed(TRUE
);
138 m_WParser
->SetFontSize(3);
139 c
->InsertCell(new wxHtmlFontCell(m_WParser
->CreateCurrentFont()));
143 wxEncodingConverter
*encconv
= m_WParser
->GetEncodingConverter();
144 cit
= m_WParser
->GetSource()->Mid(tag
.GetBeginPos(),
145 tag
.GetEndPos1() - tag
.GetBeginPos());
147 c
->InsertCell(new wxHtmlPRECell(encconv
->Convert(cit
),
148 *(m_WParser
->GetDC())));
150 c
->InsertCell(new wxHtmlPRECell(cit
,
151 *(m_WParser
->GetDC())));
154 m_WParser
->SetFontUnderlined(underlined
);
155 m_WParser
->SetFontBold(bold
);
156 m_WParser
->SetFontItalic(italic
);
157 m_WParser
->SetFontFixed(fixed
);
158 m_WParser
->SetFontSize(fsize
);
159 c
->InsertCell(new wxHtmlFontCell(m_WParser
->CreateCurrentFont()));
161 m_WParser
->CloseContainer();
162 m_WParser
->OpenContainer();
172 TAGS_MODULE_BEGIN(Pre
)