1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/html/m_pre.cpp
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 /////////////////////////////////////////////////////////////////////////////
10 #include "wx/wxprec.h"
16 #if wxUSE_HTML && wxUSE_STREAMS
21 #include "wx/html/forcelnk.h"
22 #include "wx/html/m_templ.h"
24 #include "wx/html/htmlcell.h"
25 #include "wx/tokenzr.h"
26 #include "wx/encconv.h"
30 // replaces '\t', ' ' and '\n' with HTML markup:
31 static wxString LINKAGEMODE
HtmlizeLinebreaks(const wxString
& str
)
34 out
.reserve(str
.length()); // we'll certainly need at least that
36 size_t len
= str
.Len();
37 for (size_t i
= 0; i
< len
; i
++)
39 switch ( str
[i
].GetValue() )
42 while (i
< len
&& str
[i
] != '>')
60 //-----------------------------------------------------------------------------
62 //-----------------------------------------------------------------------------
65 TAG_HANDLER_BEGIN(PRE
, "PRE")
66 TAG_HANDLER_CONSTR(PRE
) { }
70 wxHtmlContainerCell
*c
;
72 const int fixed
= m_WParser
->GetFontFixed();
73 const int italic
= m_WParser
->GetFontItalic();
74 const int underlined
= m_WParser
->GetFontUnderlined();
75 const int bold
= m_WParser
->GetFontBold();
76 const int fsize
= m_WParser
->GetFontSize();
77 const wxHtmlWinParser::WhitespaceMode whitespace
=
78 m_WParser
->GetWhitespaceMode();
80 c
= m_WParser
->GetContainer();
81 m_WParser
->SetWhitespaceMode(wxHtmlWinParser::Whitespace_Pre
);
82 m_WParser
->SetFontUnderlined(false);
83 m_WParser
->SetFontBold(false);
84 m_WParser
->SetFontItalic(false);
85 m_WParser
->SetFontFixed(true);
86 m_WParser
->SetFontSize(3);
87 c
->InsertCell(new wxHtmlFontCell(m_WParser
->CreateCurrentFont()));
89 m_WParser
->CloseContainer();
90 c
= m_WParser
->OpenContainer();
91 c
->SetWidthFloat(tag
);
92 c
= m_WParser
->OpenContainer();
93 c
->SetAlignHor(wxHTML_ALIGN_LEFT
);
94 c
->SetIndent(m_WParser
->GetCharHeight(), wxHTML_INDENT_TOP
);
96 wxString srcMid
= m_WParser
->GetInnerSource(tag
);
98 // setting Whitespace_Pre mode takes care of spaces and TABs, but
99 // not linebreaks, so we have to translate them into <br> by
100 // calling HtmlizeLinebreaks() here
101 ParseInnerSource(HtmlizeLinebreaks(srcMid
));
103 m_WParser
->CloseContainer();
104 m_WParser
->CloseContainer();
105 c
= m_WParser
->OpenContainer();
107 m_WParser
->SetWhitespaceMode(whitespace
);
108 m_WParser
->SetFontUnderlined(underlined
);
109 m_WParser
->SetFontBold(bold
);
110 m_WParser
->SetFontItalic(italic
);
111 m_WParser
->SetFontFixed(fixed
);
112 m_WParser
->SetFontSize(fsize
);
113 c
->InsertCell(new wxHtmlFontCell(m_WParser
->CreateCurrentFont()));
124 TAGS_MODULE_BEGIN(Pre
)