]> git.saurik.com Git - wxWidgets.git/commitdiff
Use wxMarkupParser in wxStaticText for dealing with markup.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 27 Feb 2011 12:46:55 +0000 (12:46 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 27 Feb 2011 12:46:55 +0000 (12:46 +0000)
No real changes, just remove markup parsing code from wxStaticText
implementation and reuse wxMarkupParser methods there instead.

This makes include/wx/private/stattext.h file unnecessary as it is used only
in a single place now so remove it and move its remaining contents to
src/gtk/mnemonics.cpp.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67050 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/private/stattext.h [deleted file]
src/common/stattextcmn.cpp
src/gtk/mnemonics.cpp
src/gtk1/mnemonics.cpp

diff --git a/include/wx/private/stattext.h b/include/wx/private/stattext.h
deleted file mode 100644 (file)
index 21742cc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        wx/private/stattext.h
-// Purpose:     Internal declarations for dlgcmn.cpp and stattextcmn.cpp
-// Author:      Francesco Montorsi
-// Created:     2007-01-07 (extracted from dlgcmn.cpp)
-// RCS-ID:      $Id$
-// Copyright:   (c) 1999 Vadim Zeitlin
-//              (c) 2007 wxWidgets team
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_PRIVATE_STATTEXT_H_
-#define _WX_PRIVATE_STATTEXT_H_
-
-enum
-{
-    wxMARKUP_ENTITY_AMP,
-    wxMARKUP_ENTITY_LT,
-    wxMARKUP_ENTITY_GT,
-    wxMARKUP_ENTITY_APOS,
-    wxMARKUP_ENTITY_QUOT,
-    wxMARKUP_ENTITY_MAX
-};
-
-enum
-{
-    wxMARKUP_ELEMENT_NAME,
-    wxMARKUP_ELEMENT_VALUE,
-    wxMARKUP_ELEMENT_MAX
-};
-
-// these are the only entities treated in a special way by wxStaticText::SetLabel()
-// when the wxST_MARKUP style is used; use as:
-//
-//    wxMarkupEntities[wxMARKUP_ELEMENT_NAME][wxMARKUP_ENTITY_GT]  == "&gt;"
-//    wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][wxMARKUP_ENTITY_GT] == ">"
-//
-extern const wxChar *const wxMarkupEntities[wxMARKUP_ELEMENT_MAX][wxMARKUP_ENTITY_MAX];
-
-#endif // _WX_PRIVATE_STATTEXT_H_
index 3c485e058c471821031ed32f686492f9a2959250..f687cf7a4683a5c58ae018dd165198822952fc1d 100644 (file)
     #pragma hdrstop
 #endif
 
-#include "wx/private/stattext.h"
-
-const wxChar *const wxMarkupEntities[][wxMARKUP_ENTITY_MAX] =
-{
-    // the entities handled by SetLabel() when wxST_MARKUP is used and their referenced string
-
-    { wxT("&amp;"), wxT("&lt;"), wxT("&gt;"), wxT("&apos;"), wxT("&quot;") },
-    { wxT("&"),     wxT("<"),    wxT(">"),    wxT("'"),      wxT("\"")     }
-};
-
 #if wxUSE_STATTEXT
 
 #ifndef WX_PRECOMP
@@ -49,6 +39,8 @@ const wxChar *const wxMarkupEntities[][wxMARKUP_ENTITY_MAX] =
 
 #include "wx/textwrapper.h"
 
+#include "wx/private/markupparser.h"
+
 extern WXDLLEXPORT_DATA(const char) wxStaticTextNameStr[] = "staticText";
 
 // ----------------------------------------------------------------------------
@@ -236,109 +228,13 @@ wxString wxStaticTextBase::GetLabelText(const wxString& label)
 /* static */
 wxString wxStaticTextBase::RemoveMarkup(const wxString& text)
 {
-    // strip out of "text" the markup for platforms which don't support it natively
-    bool inside_tag = false;
-
-    wxString label;
-    for ( wxString::const_iterator source = text.begin();
-          source != text.end(); ++source )
-    {
-        switch ( (*source).GetValue() )
-        {
-            case wxT('<'):
-                if (inside_tag)
-                {
-                    wxLogDebug(wxT("Invalid markup !"));
-                    return wxEmptyString;
-                }
-                inside_tag = true;
-                break;
-
-            case wxT('>'):
-                if (!inside_tag)
-                {
-                    wxLogDebug(wxT("Invalid markup !"));
-                    return wxEmptyString;
-                }
-                inside_tag = false;
-                break;
-
-            case wxT('&'):
-                {
-                    if ( source+1 == text.end() )
-                    {
-                        wxLogDebug(wxT("Cannot use & as last character of the string '%s'"),
-                                   text.c_str());
-                        return wxEmptyString;
-                    }
-
-                    // is this ampersand introducing a mnemonic or rather an entity?
-                    bool isMnemonic = true;
-                    size_t distanceFromEnd = text.end() - source;
-                    for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++)
-                    {
-                        const wxChar *entity = wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j];
-                        size_t entityLen = wxStrlen(entity);
-
-                        if (distanceFromEnd >= entityLen &&
-                            wxString(source, source + entityLen) == entity)
-                        {
-                            // replace the &entity; string with the entity reference
-                            label << wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j];
-                            // little exception: when the entity reference is
-                            // "&" (i.e. when entity is "&amp;"), substitute it
-                            // with && instead of a single ampersand:
-                            if (*wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j] == wxT('&'))
-                                label << wxT('&');
-                            // the -1 is because main for() loop already
-                            // increments i:
-                            source += entityLen - 1;
-                            isMnemonic = false;
-                            break;
-                        }
-                    }
-
-                    if (isMnemonic)
-                        label << *source;
-                }
-                break;
-
-
-            default:
-                if (!inside_tag)
-                    label << *source;
-        }
-    }
-
-    return label;
+    return wxMarkupParser::Strip(text);
 }
 
 /* static */
 wxString wxStaticTextBase::EscapeMarkup(const wxString& text)
 {
-    wxString ret;
-
-    for (wxString::const_iterator source = text.begin();
-         source != text.end(); ++source)
-    {
-        bool isEntity = false;
-
-        // search in the list of the entities and eventually escape this character
-        for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++)
-        {
-            if (*source == *wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][j])
-            {
-                ret << wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j];
-                isEntity = true;
-                break;
-            }
-        }
-
-        if (!isEntity)
-            ret << *source;     // this character does not need to be escaped
-    }
-
-    return ret;
+    return wxMarkupParser::Quote(text);
 }
 
 
index f87f5638a0b3802260a6e29a8a89655c5f0d8046..12891c4b9dbc24d159d25e631f1e38ab8f383cce 100644 (file)
 #endif
 
 #include "wx/log.h"
-#include "wx/private/stattext.h"        // for wxMarkupEntities
-
 #include "wx/gtk/private/mnemonics.h"
 
+namespace
+{
+
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// Names of the standard XML entities.
+const char *const entitiesNames[] =
+{
+    "&amp;", "&lt;", "&gt;", "&apos;", "&quot;"
+};
+
+} // anonymous namespace
+
 // ============================================================================
 // implementation
 // ============================================================================
@@ -67,9 +80,9 @@ static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag)
                     size_t distanceFromEnd = label.end() - i;
 
                     // is this ampersand introducing a mnemonic or rather an entity?
-                    for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++)
+                    for (size_t j=0; j < WXSIZEOF(entitiesNames); j++)
                     {
-                        const wxChar *entity = wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j];
+                        const char *entity = entitiesNames[j];
                         size_t entityLen = wxStrlen(entity);
 
                         if (distanceFromEnd >= entityLen &&
index 4dd60f9e91bc3d42acf6fb8a70bf496057be7bda..a5da6497ee4ee0e0c577b3bdc94219ccfd400add 100644 (file)
 #endif
 
 #include "wx/log.h"
-#include "wx/private/stattext.h"        // for wxMarkupEntities
-
 #include "wx/gtk1/private/mnemonics.h"
 
+namespace
+{
+
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// Names of the standard XML entities.
+const char *const entitiesNames[] =
+{
+    "&amp;", "&lt;", "&gt;", "&apos;", "&quot;"
+};
+
+} // anonymous namespace
+
 // ============================================================================
 // implementation
 // ============================================================================
@@ -67,9 +80,9 @@ static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag)
                     size_t distanceFromEnd = label.end() - i;
 
                     // is this ampersand introducing a mnemonic or rather an entity?
-                    for (size_t j=0; j < wxMARKUP_ENTITY_MAX; j++)
+                    for (size_t j=0; j < WXSIZEOF(entitiesNames); j++)
                     {
-                        const wxChar *entity = wxMarkupEntities[wxMARKUP_ELEMENT_NAME][j];
+                        const char *entity = entitiesNames[j];
                         size_t entityLen = wxStrlen(entity);
 
                         if (distanceFromEnd >= entityLen &&