diff --git a/include/wx/html/htmlpars.h b/include/wx/html/htmlpars.h index d102b6c8dd..7a7951b3e8 100644 --- a/include/wx/html/htmlpars.h +++ b/include/wx/html/htmlpars.h @@ -116,6 +116,10 @@ public: // empty virtual bool RestoreState(); + // Returns HTML source inside the element (i.e. between the starting + // and ending tag) + wxString GetInnerSource(const wxHtmlTag& tag); + // Parses HTML string 'markup' and extracts charset info from tag // if present. Returns empty string if the tag is missing. // For wxHTML's internal use. @@ -224,6 +228,12 @@ protected: void ParseInner(const wxHtmlTag& tag) { m_Parser->DoParsing(tag.GetBeginPos(), tag.GetEndPos1()); } + // Parses given source as if it was tag's inner code (see + // wxHtmlParser::GetInnerSource). Unlike ParseInner(), this method lets + // you specify the source code to parse. This is useful when you need to + // modify the inner text before parsing. + void ParseInnerSource(const wxString& source); + wxHtmlParser *m_Parser; DECLARE_NO_COPY_CLASS(wxHtmlTagHandler) diff --git a/src/html/htmlpars.cpp b/src/html/htmlpars.cpp index b1da8c92df..ea7f38d865 100644 --- a/src/html/htmlpars.cpp +++ b/src/html/htmlpars.cpp @@ -432,12 +432,27 @@ bool wxHtmlParser::RestoreState() return true; } +wxString wxHtmlParser::GetInnerSource(const wxHtmlTag& tag) +{ + return GetSource()->Mid(tag.GetBeginPos(), + tag.GetEndPos1() - tag.GetBeginPos()); +} + //----------------------------------------------------------------------------- // wxHtmlTagHandler //----------------------------------------------------------------------------- IMPLEMENT_ABSTRACT_CLASS(wxHtmlTagHandler,wxObject) +void wxHtmlTagHandler::ParseInnerSource(const wxString& source) +{ + // It is safe to temporarily change the source being parsed, + // provided we restore the state back after parsing + m_Parser->SetSourceAndSaveState(source); + m_Parser->DoParsing(); + m_Parser->RestoreState(); +} + //----------------------------------------------------------------------------- // wxHtmlEntitiesParser diff --git a/src/html/m_pre.cpp b/src/html/m_pre.cpp index f522512994..4b5a71c7aa 100644 --- a/src/html/m_pre.cpp +++ b/src/html/m_pre.cpp @@ -104,14 +104,8 @@ TAG_HANDLER_BEGIN(PRE, "PRE") c->SetAlignHor(wxHTML_ALIGN_LEFT); c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP); - wxString srcMid = - m_WParser->GetSource()->Mid(tag.GetBeginPos(), - tag.GetEndPos1() - tag.GetBeginPos()); - // It is safe to temporarily change the source being parsed, - // provided we restore the state back after parsing - m_Parser->SetSourceAndSaveState(HtmlizeWhitespaces(srcMid)); - m_Parser->DoParsing(); - m_Parser->RestoreState(); + wxString srcMid = m_WParser->GetInnerSource(tag); + ParseInnerSource(HtmlizeWhitespaces(srcMid)); m_WParser->CloseContainer(); m_WParser->CloseContainer();