X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3c7fd79d081ccd02dc1a4ed601f4f1ea7b62e69..90f501b16e1b6dcc9e2aae6a413287a22842da61:/src/html/winpars.cpp diff --git a/src/html/winpars.cpp b/src/html/winpars.cpp index 66b8871b72..9d8209ddfb 100644 --- a/src/html/winpars.cpp +++ b/src/html/winpars.cpp @@ -40,7 +40,7 @@ wxList wxHtmlWinParser::m_Modules; -wxHtmlWinParser::wxHtmlWinParser(wxWindow *wnd) : wxHtmlParser() +wxHtmlWinParser::wxHtmlWinParser(wxHtmlWindow *wnd) : wxHtmlParser() { m_tmpStrBuf = NULL; m_tmpStrBufSize = 0; @@ -84,7 +84,6 @@ wxHtmlWinParser::wxHtmlWinParser(wxWindow *wnd) : wxHtmlParser() } } - wxHtmlWinParser::~wxHtmlWinParser() { int i, j, k, l, m; @@ -102,21 +101,16 @@ wxHtmlWinParser::~wxHtmlWinParser() delete[] m_tmpStrBuf; } - void wxHtmlWinParser::AddModule(wxHtmlTagsModule *module) { m_Modules.Append(module); } - - void wxHtmlWinParser::RemoveModule(wxHtmlTagsModule *module) { m_Modules.DeleteObject(module); } - - void wxHtmlWinParser::SetFonts(wxString normal_face, wxString fixed_face, const int *sizes) { int i, j, k, l, m; @@ -140,8 +134,6 @@ void wxHtmlWinParser::SetFonts(wxString normal_face, wxString fixed_face, const } } - - void wxHtmlWinParser::InitParser(const wxString& source) { wxHtmlParser::InitParser(source); @@ -169,8 +161,6 @@ void wxHtmlWinParser::InitParser(const wxString& source) m_Container->InsertCell(new wxHtmlFontCell(CreateCurrentFont())); } - - void wxHtmlWinParser::DoneParser() { m_Container = NULL; @@ -178,8 +168,6 @@ void wxHtmlWinParser::DoneParser() wxHtmlParser::DoneParser(); } - - wxObject* wxHtmlWinParser::GetProduct() { wxHtmlContainerCell *top; @@ -192,6 +180,33 @@ wxObject* wxHtmlWinParser::GetProduct() return top; } +wxFSFile *wxHtmlWinParser::OpenURL(wxHtmlURLType type, + const wxString& url) const +{ + // FIXME - normalize the URL to full path before passing to + // OnOpeningURL!! + if ( m_Window ) + { + wxString myurl(url); + wxHtmlOpeningStatus status; + for (;;) + { + wxString redirect; + status = m_Window->OnOpeningURL(type, myurl, &redirect); + if ( status != wxHTML_REDIRECT ) + break; + + myurl = redirect; + } + + if ( status == wxHTML_BLOCK ) + return NULL; + + return GetFS()->OpenFile(myurl); + } + + return wxHtmlParser::OpenURL(type, url); +} void wxHtmlWinParser::AddText(const wxChar* txt) { @@ -201,6 +216,7 @@ void wxHtmlWinParser::AddText(const wxChar* txt) lng = wxStrlen(txt); register wxChar d; int templen = 0; + wxChar nbsp = GetEntitiesParser()->GetCharForCode(160 /* nbsp */); if (lng+1 > m_tmpStrBufSize) { @@ -233,22 +249,32 @@ void wxHtmlWinParser::AddText(const wxChar* txt) { temp[templen-1] = wxT(' '); temp[templen] = 0; + if (templen == 1) continue; templen = 0; if (m_EncConv) m_EncConv->Convert(temp); - c = new wxHtmlWordCell(GetEntitiesParser()->Parse(temp), *(GetDC())); + size_t len = wxStrlen(temp); + for (size_t j = 0; j < len; j++) + if (temp[j] == nbsp) + temp[j] = wxT(' '); + c = new wxHtmlWordCell(temp, *(GetDC())); if (m_UseLink) c->SetLink(m_Link); m_Container->InsertCell(c); m_tmpLastWasSpace = TRUE; } } - if (templen) + + if (templen && (templen > 1 || temp[0] != wxT(' '))) { temp[templen] = 0; if (m_EncConv) m_EncConv->Convert(temp); - c = new wxHtmlWordCell(GetEntitiesParser()->Parse(temp), *(GetDC())); + size_t len = wxStrlen(temp); + for (size_t j = 0; j < len; j++) + if (temp[j] == nbsp) + temp[j] = wxT(' '); + c = new wxHtmlWordCell(temp, *(GetDC())); if (m_UseLink) c->SetLink(m_Link); m_Container->InsertCell(c); @@ -417,27 +443,29 @@ void wxHtmlWinParser::SetInputEncoding(wxFontEncoding enc) IMPLEMENT_ABSTRACT_CLASS(wxHtmlWinTagHandler, wxHtmlTagHandler) - - //----------------------------------------------------------------------------- // wxHtmlTagsModule //----------------------------------------------------------------------------- +// NB: This is *NOT* winpars.cpp's initialization and shutdown code!! +// This module is an ancestor for tag handlers modules defined +// in m_*.cpp files with TAGS_MODULE_BEGIN...TAGS_MODULE_END construct. +// +// Do not add any winpars.cpp shutdown or initialization code to it, +// create a new module instead! IMPLEMENT_DYNAMIC_CLASS(wxHtmlTagsModule, wxModule) - bool wxHtmlTagsModule::OnInit() { wxHtmlWinParser::AddModule(this); return TRUE; } - - void wxHtmlTagsModule::OnExit() { wxHtmlWinParser::RemoveModule(this); } + #endif