From 0d0fdaacf88630fe7c0edcd1fb7e87e406383660 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 27 Feb 2011 12:46:55 +0000 Subject: [PATCH] Use wxMarkupParser in wxStaticText for dealing with markup. 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 | 40 ------------ src/common/stattextcmn.cpp | 112 ++-------------------------------- src/gtk/mnemonics.cpp | 21 +++++-- src/gtk1/mnemonics.cpp | 21 +++++-- 4 files changed, 38 insertions(+), 156 deletions(-) delete mode 100644 include/wx/private/stattext.h diff --git a/include/wx/private/stattext.h b/include/wx/private/stattext.h deleted file mode 100644 index 21742ccc83..0000000000 --- a/include/wx/private/stattext.h +++ /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] == ">" -// wxMarkupEntities[wxMARKUP_ELEMENT_VALUE][wxMARKUP_ENTITY_GT] == ">" -// -extern const wxChar *const wxMarkupEntities[wxMARKUP_ELEMENT_MAX][wxMARKUP_ENTITY_MAX]; - -#endif // _WX_PRIVATE_STATTEXT_H_ diff --git a/src/common/stattextcmn.cpp b/src/common/stattextcmn.cpp index 3c485e058c..f687cf7a46 100644 --- a/src/common/stattextcmn.cpp +++ b/src/common/stattextcmn.cpp @@ -24,16 +24,6 @@ #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("&"), wxT("<"), wxT(">"), wxT("'"), wxT(""") }, - { 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 "&"), 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); } diff --git a/src/gtk/mnemonics.cpp b/src/gtk/mnemonics.cpp index f87f5638a0..12891c4b9d 100644 --- a/src/gtk/mnemonics.cpp +++ b/src/gtk/mnemonics.cpp @@ -24,10 +24,23 @@ #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[] = +{ + "&", "<", ">", "'", """ +}; + +} // 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 && diff --git a/src/gtk1/mnemonics.cpp b/src/gtk1/mnemonics.cpp index 4dd60f9e91..a5da6497ee 100644 --- a/src/gtk1/mnemonics.cpp +++ b/src/gtk1/mnemonics.cpp @@ -24,10 +24,23 @@ #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[] = +{ + "&", "<", ">", "'", """ +}; + +} // 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 && -- 2.47.2