From: Václav Slavík Date: Mon, 20 Aug 2007 20:24:22 +0000 (+0000) Subject: don't recompute nonbreakable space character every time a text fragment is added... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c782096417f0fd9de6c6d47b23174233ec6bcf57?ds=inline don't recompute nonbreakable space character every time a text fragment is added in ANSI build git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/html/winpars.h b/include/wx/html/winpars.h index 08638dee80..8f554ce8c2 100644 --- a/include/wx/html/winpars.h +++ b/include/wx/html/winpars.h @@ -149,7 +149,7 @@ protected: virtual void AddText(const wxString& txt); private: - void DoAddText(wxChar *temp, int& templen, wxChar nbsp); + void DoAddText(wxChar *temp, int& templen); bool m_tmpLastWasSpace; wxChar *m_tmpStrBuf; @@ -201,6 +201,7 @@ private: // html font sizes and faces of fixed and proportional fonts #if !wxUSE_UNICODE + wxChar m_nbsp; wxFontEncoding m_InputEnc, m_OutputEnc; // I/O font encodings wxEncodingConverter *m_EncConv; diff --git a/src/html/winpars.cpp b/src/html/winpars.cpp index 1769f56c26..5054e70b29 100644 --- a/src/html/winpars.cpp +++ b/src/html/winpars.cpp @@ -47,6 +47,7 @@ wxHtmlWinParser::wxHtmlWinParser(wxHtmlWindowInterface *wndIface) m_CharHeight = m_CharWidth = 0; m_UseLink = false; #if !wxUSE_UNICODE + m_nbsp = 0; m_EncConv = NULL; m_InputEnc = wxFONTENCODING_ISO8859_1; m_OutputEnc = wxFONTENCODING_DEFAULT; @@ -346,7 +347,6 @@ void wxHtmlWinParser::AddText(const wxString& txt) { register wxChar d; int templen = 0; - wxChar nbsp = GetEntitiesParser()->GetCharForCode(160 /* nbsp */); size_t lng = txt.length(); if (lng+1 > m_tmpStrBufSize) @@ -391,20 +391,29 @@ void wxHtmlWinParser::AddText(const wxString& txt) if (x) { temp[templen-1] = wxT(' '); - DoAddText(temp, templen, nbsp); + DoAddText(temp, templen); m_tmpLastWasSpace = true; } } if (templen && (templen > 1 || temp[0] != wxT(' '))) { - DoAddText(temp, templen, nbsp); + DoAddText(temp, templen); m_tmpLastWasSpace = false; } } -void wxHtmlWinParser::DoAddText(wxChar *temp, int& templen, wxChar nbsp) +void wxHtmlWinParser::DoAddText(wxChar *temp, int& templen) { + #define NBSP_UNICODE_VALUE 160 +#if !wxUSE_UNICODE + if ( m_nbsp == 0 ) + m_nbsp = GetEntitiesParser()->GetCharForCode(NBSP_UNICODE_VALUE); + #define CUR_NBSP_VALUE m_nbsp +#else + #define CUR_NBSP_VALUE NBSP_UNICODE_VALUE +#endif + temp[templen] = 0; templen = 0; #if !wxUSE_UNICODE @@ -414,7 +423,7 @@ void wxHtmlWinParser::DoAddText(wxChar *temp, int& templen, wxChar nbsp) size_t len = wxStrlen(temp); for (size_t j = 0; j < len; j++) { - if (temp[j] == nbsp) + if (temp[j] == CUR_NBSP_VALUE) temp[j] = wxT(' '); } @@ -543,6 +552,9 @@ void wxHtmlWinParser::ApplyStateToCell(wxHtmlCell *cell) #if !wxUSE_UNICODE void wxHtmlWinParser::SetInputEncoding(wxFontEncoding enc) { + // the character used for non-breakable space may change: + m_nbsp = 0; + m_InputEnc = m_OutputEnc = wxFONTENCODING_DEFAULT; if (m_EncConv) {