X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c8c8da2aaa9486fabb9b511b23ae817312320e7..018e2f1300b726936e8afa41fcc3e2a85d2ed456:/src/html/winpars.cpp diff --git a/src/html/winpars.cpp b/src/html/winpars.cpp index 909eebecf0..59b93e0692 100644 --- a/src/html/winpars.cpp +++ b/src/html/winpars.cpp @@ -59,7 +59,7 @@ wxHtmlWinParser::wxHtmlWinParser(wxWindow *wnd) : wxHtmlParser() for (k = 0; k < 2; k++) for (l = 0; l < 2; l++) for (m = 0; m < 7; m++) - { + { m_FontsTable[i][j][k][l][m] = NULL; m_FontsFacesTable[i][j][k][l][m] = wxEmptyString; m_FontsEncTable[i][j][k][l][m] = wxFONTENCODING_DEFAULT; @@ -94,7 +94,7 @@ wxHtmlWinParser::~wxHtmlWinParser() for (k = 0; k < 2; k++) for (l = 0; l < 2; l++) for (m = 0; m < 7; m++) - { + { if (m_FontsTable[i][j][k][l][m] != NULL) delete m_FontsTable[i][j][k][l][m]; } @@ -133,7 +133,7 @@ void wxHtmlWinParser::SetFonts(wxString normal_face, wxString fixed_face, const for (l = 0; l < 2; l++) for (m = 0; m < 7; m++) { if (m_FontsTable[i][j][k][l][m] != NULL) - { + { delete m_FontsTable[i][j][k][l][m]; m_FontsTable[i][j][k][l][m] = NULL; } @@ -196,10 +196,12 @@ wxObject* wxHtmlWinParser::GetProduct() void wxHtmlWinParser::AddText(const wxChar* txt) { wxHtmlCell *c; - int i = 0, x; - size_t lng = wxStrlen(txt); + size_t i = 0, + x, + lng = wxStrlen(txt); register wxChar d; int templen = 0; + wxChar nbsp = GetEntitiesParser()->GetCharForCode(160 /* nbsp */); if (lng+1 > m_tmpStrBufSize) { @@ -221,7 +223,7 @@ void wxHtmlWinParser::AddText(const wxChar* txt) x = 0; d = temp[templen++] = txt[i]; if ((d == wxT('\n')) || (d == wxT('\r')) || (d == wxT(' ')) || (d == wxT('\t'))) - { + { i++, x++; while ((i < lng) && ((txt[i] == wxT('\n')) || (txt[i] == wxT('\r')) || (txt[i] == wxT(' ')) || (txt[i] == wxT('\t')))) i++, x++; @@ -229,25 +231,35 @@ void wxHtmlWinParser::AddText(const wxChar* txt) else i++; if (x) - { + { 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);