added ParseInnerSource() to make <pre>-like parsing easier
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38535 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -116,6 +116,10 @@ public:
|
|||||||
// empty
|
// empty
|
||||||
virtual bool RestoreState();
|
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 <meta> tag
|
// Parses HTML string 'markup' and extracts charset info from <meta> tag
|
||||||
// if present. Returns empty string if the tag is missing.
|
// if present. Returns empty string if the tag is missing.
|
||||||
// For wxHTML's internal use.
|
// For wxHTML's internal use.
|
||||||
@@ -224,6 +228,12 @@ protected:
|
|||||||
void ParseInner(const wxHtmlTag& tag)
|
void ParseInner(const wxHtmlTag& tag)
|
||||||
{ m_Parser->DoParsing(tag.GetBeginPos(), tag.GetEndPos1()); }
|
{ 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;
|
wxHtmlParser *m_Parser;
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(wxHtmlTagHandler)
|
DECLARE_NO_COPY_CLASS(wxHtmlTagHandler)
|
||||||
|
@@ -432,12 +432,27 @@ bool wxHtmlParser::RestoreState()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString wxHtmlParser::GetInnerSource(const wxHtmlTag& tag)
|
||||||
|
{
|
||||||
|
return GetSource()->Mid(tag.GetBeginPos(),
|
||||||
|
tag.GetEndPos1() - tag.GetBeginPos());
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxHtmlTagHandler
|
// wxHtmlTagHandler
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_ABSTRACT_CLASS(wxHtmlTagHandler,wxObject)
|
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
|
// wxHtmlEntitiesParser
|
||||||
|
@@ -104,14 +104,8 @@ TAG_HANDLER_BEGIN(PRE, "PRE")
|
|||||||
c->SetAlignHor(wxHTML_ALIGN_LEFT);
|
c->SetAlignHor(wxHTML_ALIGN_LEFT);
|
||||||
c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
|
c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
|
||||||
|
|
||||||
wxString srcMid =
|
wxString srcMid = m_WParser->GetInnerSource(tag);
|
||||||
m_WParser->GetSource()->Mid(tag.GetBeginPos(),
|
ParseInnerSource(HtmlizeWhitespaces(srcMid));
|
||||||
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();
|
|
||||||
|
|
||||||
m_WParser->CloseContainer();
|
m_WParser->CloseContainer();
|
||||||
m_WParser->CloseContainer();
|
m_WParser->CloseContainer();
|
||||||
|
Reference in New Issue
Block a user