X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e388dc214c74a5ac2d3c4d5f810fcfbd5f7fa01a..7185918d695b5a3bb662ac4c71dd943dca9a2afc:/src/html/m_tables.cpp diff --git a/src/html/m_tables.cpp b/src/html/m_tables.cpp index c5d63e6020..b111abed67 100644 --- a/src/html/m_tables.cpp +++ b/src/html/m_tables.cpp @@ -119,7 +119,7 @@ private: // only once, before first Layout(). void ComputeMinMaxWidths(); - DECLARE_NO_COPY_CLASS(wxHtmlTableCell) + wxDECLARE_NO_COPY_CLASS(wxHtmlTableCell); }; @@ -666,10 +666,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; } @@ -682,9 +684,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()); @@ -718,11 +719,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 } @@ -745,27 +747,56 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH") m_WParser->OpenContainer(); - if (tag.GetName() == wxT("TH")) /*header style*/ - m_WParser->SetAlign(wxHTML_ALIGN_CENTER); - else - m_WParser->SetAlign(wxHTML_ALIGN_LEFT); + const bool isHeader = tag.GetName() == wxT("TH"); wxString als; - - als = m_rAlign; if (tag.HasParam(wxT("ALIGN"))) als = tag.GetParam(wxT("ALIGN")); + else + als = m_rAlign; als.MakeUpper(); + if (als == wxT("RIGHT")) m_WParser->SetAlign(wxHTML_ALIGN_RIGHT); else if (als == wxT("LEFT")) m_WParser->SetAlign(wxHTML_ALIGN_LEFT); else if (als == wxT("CENTER")) m_WParser->SetAlign(wxHTML_ALIGN_CENTER); + else // use default alignment + m_WParser->SetAlign(isHeader ? wxHTML_ALIGN_CENTER + : wxHTML_ALIGN_LEFT); m_WParser->OpenContainer(); + + // the header should be rendered in bold by default + int boldOld wxDUMMY_INITIALIZE(0); + if ( isHeader ) + { + boldOld = m_WParser->GetFontBold(); + m_WParser->SetFontBold(true); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + } + + ParseInner(tag); + + if ( isHeader ) + { + m_WParser->SetFontBold(boldOld); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + } + + // set the current container back to the enclosing one so that + // text outside of and 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; }