// only once, before first Layout().
void ComputeMinMaxWidths();
- DECLARE_NO_COPY_CLASS(wxHtmlTableCell)
+ wxDECLARE_NO_COPY_CLASS(wxHtmlTableCell);
};
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;
}
if (tag.GetName() == wxT("TABLE"))
{
wxHtmlTableCell *oldt = m_Table;
- wxHtmlContainerCell *oldcont;
- oldcont = c = m_WParser->OpenContainer();
+ wxHtmlContainerCell *oldEnclosing = m_enclosingContainer;
+ m_enclosingContainer = c = m_WParser->OpenContainer();
m_Table = new wxHtmlTableCell(c, tag, m_WParser->GetPixelScale());
ParseInner(tag);
m_WParser->SetAlign(oldAlign);
- m_WParser->SetContainer(oldcont);
+ m_WParser->SetContainer(m_enclosingContainer);
m_WParser->CloseContainer();
m_Table = oldt;
- return true;
+ m_enclosingContainer = oldEnclosing;
+
+ return true; // ParseInner() called
}
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 = 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 <th> and <td> isn't included in any cell
+ // (this happens often enough in practice because it's common
+ // to use whitespace between </td> and the next <td>):
+ m_WParser->SetContainer(m_enclosingContainer);
+
+ return true; // ParseInner() called
}
}
+
return false;
}