X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e90c1d2a19361551eb07778280f22be3e759cf64..7581faf616eef3617152b9ad05b939999f442502:/src/html/m_layout.cpp diff --git a/src/html/m_layout.cpp b/src/html/m_layout.cpp index c4c93728c9..e042da6e6a 100644 --- a/src/html/m_layout.cpp +++ b/src/html/m_layout.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mod_layout.cpp +// Name: m_layout.cpp // Purpose: wxHtml module for basic paragraphs/layout handling // Author: Vaclav Slavik // RCS-ID: $Id$ @@ -10,15 +10,16 @@ #pragma implementation #endif -#include +#include "wx/wxprec.h" -#if wxUSE_HTML -#ifdef __BORDLANDC__ + +#include "wx/defs.h" +#if wxUSE_HTML && wxUSE_STREAMS +#ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WXPRECOMP -#include #endif @@ -27,19 +28,20 @@ #include "wx/html/htmlwin.h" -FORCE_LINK_ME(mod_layout) +FORCE_LINK_ME(m_layout) TAG_HANDLER_BEGIN(P, "P") TAG_HANDLER_PROC(tag) { - if (m_WParser -> GetContainer() -> GetFirstCell() != NULL) { - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); - } - m_WParser -> GetContainer() -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP); - m_WParser -> GetContainer() -> SetAlign(tag); + if (m_WParser->GetContainer()->GetFirstCell() != NULL) + { + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); + } + m_WParser->GetContainer()->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP); + m_WParser->GetContainer()->SetAlign(tag); return FALSE; } @@ -51,13 +53,14 @@ TAG_HANDLER_BEGIN(BR, "BR") TAG_HANDLER_PROC(tag) { - int al = m_WParser -> GetContainer() -> GetAlignHor(); + int al = m_WParser->GetContainer()->GetAlignHor(); wxHtmlContainerCell *c; - - m_WParser -> CloseContainer(); - c = m_WParser -> OpenContainer(); - c -> SetAlignHor(al); - c -> SetAlign(tag); + + m_WParser->CloseContainer(); + c = m_WParser->OpenContainer(); + c->SetAlignHor(al); + c->SetAlign(tag); + c->SetMinHeight(m_WParser->GetCharHeight()); return FALSE; } @@ -69,27 +72,30 @@ TAG_HANDLER_BEGIN(CENTER, "CENTER") TAG_HANDLER_PROC(tag) { - int old = m_WParser -> GetAlign(); - wxHtmlContainerCell *c = m_WParser -> GetContainer(); - - m_WParser -> SetAlign(HTML_ALIGN_CENTER); - if (c -> GetFirstCell() != NULL) { - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); + int old = m_WParser->GetAlign(); + wxHtmlContainerCell *c = m_WParser->GetContainer(); + + m_WParser->SetAlign(wxHTML_ALIGN_CENTER); + if (c->GetFirstCell() != NULL) + { + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); } else - c -> SetAlignHor(HTML_ALIGN_CENTER); + c->SetAlignHor(wxHTML_ALIGN_CENTER); - if (tag.HasEnding()) { + if (tag.HasEnding()) + { ParseInner(tag); - m_WParser -> SetAlign(old); - if (c -> GetFirstCell() != NULL) { - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); + m_WParser->SetAlign(old); + if (c->GetFirstCell() != NULL) + { + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); } else - c -> SetAlignHor(old); + c->SetAlignHor(old); return TRUE; } @@ -104,29 +110,32 @@ TAG_HANDLER_BEGIN(DIV, "DIV") TAG_HANDLER_PROC(tag) { - int old = m_WParser -> GetAlign(); - wxHtmlContainerCell *c = m_WParser -> GetContainer(); - if (c -> GetFirstCell() != NULL) { - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); - c = m_WParser -> GetContainer(); - c -> SetAlign(tag); - m_WParser -> SetAlign(c -> GetAlignHor()); + int old = m_WParser->GetAlign(); + wxHtmlContainerCell *c = m_WParser->GetContainer(); + if (c->GetFirstCell() != NULL) + { + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); + c = m_WParser->GetContainer(); + c->SetAlign(tag); + m_WParser->SetAlign(c->GetAlignHor()); } - else { - c -> SetAlign(tag); - m_WParser -> SetAlign(c -> GetAlignHor()); + else + { + c->SetAlign(tag); + m_WParser->SetAlign(c->GetAlignHor()); } ParseInner(tag); - m_WParser -> SetAlign(old); - if (c -> GetFirstCell() != NULL) { - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); + m_WParser->SetAlign(old); + if (c->GetFirstCell() != NULL) + { + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); } else - c -> SetAlignHor(old); + c->SetAlignHor(old); return TRUE; } @@ -140,14 +149,14 @@ TAG_HANDLER_BEGIN(TITLE, "TITLE") TAG_HANDLER_PROC(tag) { - if (m_WParser -> GetWindow()) { - wxHtmlWindow *wfr = (wxHtmlWindow*)(m_WParser -> GetWindow()); - if (wfr) { - wxString title = ""; - wxString *src = m_WParser -> GetSource(); - - for (int i = tag.GetBeginPos(); i < tag.GetEndPos1(); i++) title += (*src)[i]; - wfr -> SetTitle(title); + if (m_WParser->GetWindow()) + { + wxHtmlWindow *wfr = (wxHtmlWindow*)(m_WParser->GetWindow()); + if (wfr) + { + const wxString& src = *m_WParser->GetSource(); + wfr->OnSetTitle(src.Mid(tag.GetBeginPos(), + tag.GetEndPos1()-tag.GetBeginPos())); } } return TRUE; @@ -162,31 +171,23 @@ TAG_HANDLER_BEGIN(BODY, "BODY") TAG_HANDLER_PROC(tag) { - unsigned long tmp; wxColour clr; - if (tag.HasParam("TEXT(")) { - if (tag.ScanParam("TEXT(", "#%lX", &tmp) == 1) { - clr = wxColour((tmp & 0xFF0000) >> 16 , (tmp & 0x00FF00) >> 8, (tmp & 0x0000FF)); - m_WParser -> SetActualColor(clr); - m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(clr)); - } - } - - if (tag.HasParam("LINK")) { - if (tag.ScanParam("LINK", "#%lX", &tmp) == 1) { - clr = wxColour((tmp & 0xFF0000) >> 16 , (tmp & 0x00FF00) >> 8, (tmp & 0x0000FF)); - m_WParser -> SetLinkColor(clr); - } + if (tag.GetParamAsColour(wxT("TEXT"), &clr)) + { + m_WParser->SetActualColor(clr); + m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(clr)); } - if (tag.HasParam("BGCOLOR")) { - if (tag.ScanParam("BGCOLOR", "#%lX", &tmp) == 1) { - clr = wxColour((tmp & 0xFF0000) >> 16 , (tmp & 0x00FF00) >> 8, (tmp & 0x0000FF)); - m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(clr, HTML_CLR_BACKGROUND)); - if (m_WParser -> GetWindow() != NULL) - m_WParser -> GetWindow() -> SetBackgroundColour(clr); - } + if (tag.GetParamAsColour(wxT("LINK"), &clr)) + m_WParser->SetLinkColor(clr); + + if (tag.GetParamAsColour(wxT("BGCOLOR"), &clr)) + { + m_WParser->GetContainer()->InsertCell( + new wxHtmlColourCell(clr, wxHTML_CLR_BACKGROUND)); + if (m_WParser->GetWindow() != NULL) + m_WParser->GetWindow()->SetBackgroundColour(clr); } return FALSE; } @@ -200,20 +201,22 @@ TAG_HANDLER_BEGIN(BLOCKQUOTE, "BLOCKQUOTE") TAG_HANDLER_PROC(tag) { wxHtmlContainerCell *c; - - m_WParser -> CloseContainer(); - c = m_WParser -> OpenContainer(); - if (c -> GetAlignHor() == HTML_ALIGN_RIGHT) - c -> SetIndent(5 * m_WParser -> GetCharWidth(), HTML_INDENT_RIGHT); + + m_WParser->CloseContainer(); + c = m_WParser->OpenContainer(); + + if (c->GetAlignHor() == wxHTML_ALIGN_RIGHT) + c->SetIndent(5 * m_WParser->GetCharWidth(), wxHTML_INDENT_RIGHT); else - c -> SetIndent(5 * m_WParser -> GetCharWidth(), HTML_INDENT_LEFT); - c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP); - m_WParser -> OpenContainer(); + c->SetIndent(5 * m_WParser->GetCharWidth(), wxHTML_INDENT_LEFT); + + c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP); + m_WParser->OpenContainer(); ParseInner(tag); - c = m_WParser -> CloseContainer(); - c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_BOTTOM); - m_WParser -> CloseContainer(); - m_WParser -> OpenContainer(); + c = m_WParser->CloseContainer(); + c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_BOTTOM); + m_WParser->CloseContainer(); + m_WParser->OpenContainer(); return TRUE; } @@ -221,6 +224,14 @@ TAG_HANDLER_END(BLOCKQUOTE) +// Tag handler for tags that we have to ignore, otherwise non-text data +// would show up as text: +TAG_HANDLER_BEGIN(DoNothing, "SCRIPT") + TAG_HANDLER_PROC(tag) + { + return true; + } +TAG_HANDLER_END(DoNothing) @@ -233,6 +244,7 @@ TAGS_MODULE_BEGIN(Layout) TAGS_MODULE_ADD(TITLE) TAGS_MODULE_ADD(BODY) TAGS_MODULE_ADD(BLOCKQUOTE) + TAGS_MODULE_ADD(DoNothing) TAGS_MODULE_END(Layout)