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
This commit is contained in:
@@ -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_
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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 &&
|
||||
|
@@ -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 &&
|
||||
|
Reference in New Issue
Block a user