// interpreted as tag opening characters.
static wxString Quote(const wxString& text);
+ // Strip markup from a string, i.e. simply remove all tags and replace
+ // XML entities with their values (or with "&&" in case of "&" to
+ // prevent it from being interpreted as mnemonic marker).
+ static wxString Strip(const wxString& text);
+
private:
// Simple struct combining the name of a tag and its attributes.
struct TagAndAttrs
return quoted;
}
+
+/* static */
+wxString wxMarkupParser::Strip(const wxString& text)
+{
+ class StripOutput : public wxMarkupParserOutput
+ {
+ public:
+ StripOutput() { }
+
+ const wxString& GetText() const { return m_text; }
+
+ virtual void OnText(const wxString& text) { m_text += text; }
+
+ virtual void OnBoldStart() { }
+ virtual void OnBoldEnd() { }
+
+ virtual void OnItalicStart() { }
+ virtual void OnItalicEnd() { }
+
+ virtual void OnUnderlinedStart() { }
+ virtual void OnUnderlinedEnd() { }
+
+ virtual void OnStrikethroughStart() { }
+ virtual void OnStrikethroughEnd() { }
+
+ virtual void OnBigStart() { }
+ virtual void OnBigEnd() { }
+
+ virtual void OnSmallStart() { }
+ virtual void OnSmallEnd() { }
+
+ virtual void OnTeletypeStart() { }
+ virtual void OnTeletypeEnd() { }
+
+ virtual void OnSpanStart(const wxMarkupSpanAttributes& WXUNUSED(a)) { }
+ virtual void OnSpanEnd(const wxMarkupSpanAttributes& WXUNUSED(a)) { }
+
+ private:
+ wxString m_text;
+ };
+
+ StripOutput output;
+ wxMarkupParser parser(output);
+ if ( !parser.Parse(text) )
+ return wxString();
+
+ return output.GetText();
+}
CPPUNIT_TEST_SUITE( MarkupTestCase );
CPPUNIT_TEST( RoundTrip );
CPPUNIT_TEST( Quote );
+ CPPUNIT_TEST( Strip );
CPPUNIT_TEST_SUITE_END();
void RoundTrip();
void Quote();
+ void Strip();
wxDECLARE_NO_COPY_CLASS(MarkupTestCase);
};
CPPUNIT_ASSERT_EQUAL( "B&B", wxMarkupParser::Quote("B&B") );
CPPUNIT_ASSERT_EQUAL( """", wxMarkupParser::Quote("\"\"") );
}
+
+void MarkupTestCase::Strip()
+{
+ #define CHECK_STRIP( text, stripped ) \
+ CPPUNIT_ASSERT_EQUAL( stripped, wxMarkupParser::Strip(text) )
+
+ CHECK_STRIP( "", "" );
+ CHECK_STRIP( "foo", "foo" );
+ CHECK_STRIP( "<foo>", "<foo>" );
+ CHECK_STRIP( "<b>Big</b> problem", "Big problem" );
+ CHECK_STRIP( "<span foreground=\"red\">c</span>"
+ "<span background=\"green\">o</span>"
+ "<span background=\"blue\">l</span>"
+ "<span background=\"green\">o</span>"
+ "<span foreground=\"yellow\">u</span>"
+ "<span background=\"green\">r</span>",
+ "colour" );
+
+ #undef CHECK_STRIP
+}