This class isn't really supposed to be used polymorphically but add a virtual dtor just to suppress g++ warning about it. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67076 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			178 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/private/markupparser.h
 | |
| // Purpose:     Classes for parsing simple markup.
 | |
| // Author:      Vadim Zeitlin
 | |
| // Created:     2011-02-16
 | |
| // RCS-ID:      $Id: $
 | |
| // Copyright:   (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_PRIVATE_MARKUPPARSER_H_
 | |
| #define _WX_PRIVATE_MARKUPPARSER_H_
 | |
| 
 | |
| #include "wx/string.h"
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxMarkupSpanAttributes: information about attributes for a markup span.
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| struct wxMarkupSpanAttributes
 | |
| {
 | |
|     enum OptionalBool
 | |
|     {
 | |
|         Unspecified = -1,
 | |
|         No,
 | |
|         Yes
 | |
|     };
 | |
| 
 | |
|     wxMarkupSpanAttributes()
 | |
|     {
 | |
|         m_sizeKind = Size_Unspecified;
 | |
| 
 | |
|         m_isBold =
 | |
|         m_isItalic =
 | |
|         m_isUnderlined =
 | |
|         m_isStrikethrough = Unspecified;
 | |
|     }
 | |
| 
 | |
|     // If a string is empty, it means that the corresponding attribute is not
 | |
|     // set.
 | |
|     wxString m_fgCol,
 | |
|              m_bgCol,
 | |
|              m_fontFace;
 | |
| 
 | |
|     // There are many ways of specifying the size. First of all, the size may
 | |
|     // be relative in which case m_fontSize is either -1 or +1 meaning that
 | |
|     // it's one step smaller or larger than the current font. Second, it may be
 | |
|     // absolute in which case m_fontSize contains either the size in 1024th of
 | |
|     // a point (Pango convention) or its values are in [-3, 3] interval and map
 | |
|     // to [xx-small, xx-large] CSS-like font size specification. And finally it
 | |
|     // may be not specified at all, of course, in which case the value of
 | |
|     // m_fontSize doesn't matter and it shouldn't be used.
 | |
|     enum
 | |
|     {
 | |
|         Size_Unspecified,
 | |
|         Size_Relative,
 | |
|         Size_Symbolic,
 | |
|         Size_PointParts
 | |
|     } m_sizeKind;
 | |
|     int m_fontSize;
 | |
| 
 | |
|     // If the value is Unspecified, the attribute wasn't given.
 | |
|     OptionalBool m_isBold,
 | |
|                  m_isItalic,
 | |
|                  m_isUnderlined,
 | |
|                  m_isStrikethrough;
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxMarkupParserOutput: gathers the results of parsing markup.
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| // A class deriving directly from this one needs to implement all the pure
 | |
| // virtual functions below but as the handling of all simple tags (bold, italic
 | |
| // &c) is often very similar, it is usually more convenient to inherit from
 | |
| // wxMarkupParserFontOutput defined in wx/private/markupparserfont.h instead.
 | |
| class wxMarkupParserOutput
 | |
| {
 | |
| public:
 | |
|     wxMarkupParserOutput() { }
 | |
|     virtual ~wxMarkupParserOutput() { }
 | |
| 
 | |
|     // Virtual functions called by wxMarkupParser while parsing the markup.
 | |
| 
 | |
|     // Called for a run of normal text.
 | |
|     virtual void OnText(const wxString& text) = 0;
 | |
| 
 | |
|     // These functions correspond to the simple tags without parameters.
 | |
|     virtual void OnBoldStart() = 0;
 | |
|     virtual void OnBoldEnd() = 0;
 | |
| 
 | |
|     virtual void OnItalicStart() = 0;
 | |
|     virtual void OnItalicEnd() = 0;
 | |
| 
 | |
|     virtual void OnUnderlinedStart() = 0;
 | |
|     virtual void OnUnderlinedEnd() = 0;
 | |
| 
 | |
|     virtual void OnStrikethroughStart() = 0;
 | |
|     virtual void OnStrikethroughEnd() = 0;
 | |
| 
 | |
|     virtual void OnBigStart() = 0;
 | |
|     virtual void OnBigEnd() = 0;
 | |
| 
 | |
|     virtual void OnSmallStart() = 0;
 | |
|     virtual void OnSmallEnd() = 0;
 | |
| 
 | |
|     virtual void OnTeletypeStart() = 0;
 | |
|     virtual void OnTeletypeEnd() = 0;
 | |
| 
 | |
|     // The generic span start and end functions.
 | |
|     virtual void OnSpanStart(const wxMarkupSpanAttributes& attrs) = 0;
 | |
|     virtual void OnSpanEnd(const wxMarkupSpanAttributes& attrs) = 0;
 | |
| 
 | |
| private:
 | |
|     wxDECLARE_NO_COPY_CLASS(wxMarkupParserOutput);
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxMarkupParser: parses the given markup text into wxMarkupParserOutput.
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxMarkupParser
 | |
| {
 | |
| public:
 | |
|     // Initialize the parser with the object that will receive parsing results.
 | |
|     // This object lifetime must be greater than ours.
 | |
|     explicit wxMarkupParser(wxMarkupParserOutput& output)
 | |
|         : m_output(output)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     // Parse the entire string and call wxMarkupParserOutput methods.
 | |
|     //
 | |
|     // Return true if the string was successfully parsed or false if it failed
 | |
|     // (presumably because of syntax errors in the markup).
 | |
|     bool Parse(const wxString& text);
 | |
| 
 | |
|     // Quote a normal string, not meant to be interpreted as markup, so that it
 | |
|     // produces the same string when parsed as markup. This means, for example,
 | |
|     // replacing '<' in the input string with "<" to prevent them from being
 | |
|     // 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
 | |
|     {
 | |
|         TagAndAttrs(const wxString& name_) : name(name_) { }
 | |
| 
 | |
|         wxString name;
 | |
|         wxMarkupSpanAttributes attrs;
 | |
|     };
 | |
| 
 | |
|     // Call the wxMarkupParserOutput method corresponding to the given tag.
 | |
|     //
 | |
|     // Return false if the tag doesn't match any of the known ones.
 | |
|     bool OutputTag(const TagAndAttrs& tagAndAttrs, bool start);
 | |
| 
 | |
|     // Parse the attributes and fill the provided TagAndAttrs object with the
 | |
|     // information about them. Does nothing if attrs string is empty.
 | |
|     //
 | |
|     // Returns empty string on success of a [fragment of an] error message if
 | |
|     // we failed to parse the attributes.
 | |
|     wxString ParseAttrs(wxString attrs, TagAndAttrs& tagAndAttrs);
 | |
| 
 | |
| 
 | |
|     wxMarkupParserOutput& m_output;
 | |
| 
 | |
|     wxDECLARE_NO_COPY_CLASS(wxMarkupParser);
 | |
| };
 | |
| 
 | |
| #endif // _WX_PRIVATE_MARKUPPARSER_H_
 |