diff --git a/docs/changes.txt b/docs/changes.txt index bfda87fa83..ea6a5c0e14 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -102,7 +102,8 @@ All (GUI): Polish Pro input. - Fixed wxHtmlWindow::SelectionToText() to correctly insert newlines after single-cell paragraphs. -- Fixed wxHTML's line breaks handling in
blocks broken in 2.8.8 (#10120) +- Fixed wxHTML's line breaks handling inblocks broken in 2.8.8 (#10120). +- wxHTML: don't include extra whitespace in table cells. All (Unix): diff --git a/src/html/m_tables.cpp b/src/html/m_tables.cpp index 3b896c0851..4f957aa698 100644 --- a/src/html/m_tables.cpp +++ b/src/html/m_tables.cpp @@ -665,10 +665,12 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH") TAG_HANDLER_VARS wxHtmlTableCell* m_Table; wxString m_tAlign, m_rAlign; + wxHtmlContainerCell *m_enclosingContainer; TAG_HANDLER_CONSTR(TABLE) { m_Table = NULL; + m_enclosingContainer = NULL; m_tAlign = m_rAlign = wxEmptyString; } @@ -681,9 +683,8 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH") if (tag.GetName() == wxT("TABLE")) { wxHtmlTableCell *oldt = m_Table; - wxHtmlContainerCell *oldcont; - oldcont = c = m_WParser->OpenContainer(); + m_enclosingContainer = c = m_WParser->OpenContainer(); m_Table = new wxHtmlTableCell(c, tag, m_WParser->GetPixelScale()); @@ -717,11 +718,12 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH") ParseInner(tag); m_WParser->SetAlign(oldAlign); - m_WParser->SetContainer(oldcont); + m_WParser->SetContainer(m_enclosingContainer); m_WParser->CloseContainer(); m_Table = oldt; - return true; + + return true; // ParseInner() called } @@ -763,8 +765,19 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH") m_WParser->SetAlign(wxHTML_ALIGN_CENTER); m_WParser->OpenContainer(); + + ParseInner(tag); + + // set the current container back to the enclosing one so that + // text outside ofand isn't included in any cell + // (this happens often enough in practice because it's common + // to use whitespace between and the next): + m_WParser->SetContainer(m_enclosingContainer); + + return true; // ParseInner() called } } + return false; }