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
|
#pragma hdrstop
|
||||||
#endif
|
#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
|
#if wxUSE_STATTEXT
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
@@ -49,6 +39,8 @@ const wxChar *const wxMarkupEntities[][wxMARKUP_ENTITY_MAX] =
|
|||||||
|
|
||||||
#include "wx/textwrapper.h"
|
#include "wx/textwrapper.h"
|
||||||
|
|
||||||
|
#include "wx/private/markupparser.h"
|
||||||
|
|
||||||
extern WXDLLEXPORT_DATA(const char) wxStaticTextNameStr[] = "staticText";
|
extern WXDLLEXPORT_DATA(const char) wxStaticTextNameStr[] = "staticText";
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -236,109 +228,13 @@ wxString wxStaticTextBase::GetLabelText(const wxString& label)
|
|||||||
/* static */
|
/* static */
|
||||||
wxString wxStaticTextBase::RemoveMarkup(const wxString& text)
|
wxString wxStaticTextBase::RemoveMarkup(const wxString& text)
|
||||||
{
|
{
|
||||||
// strip out of "text" the markup for platforms which don't support it natively
|
return wxMarkupParser::Strip(text);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
wxString wxStaticTextBase::EscapeMarkup(const wxString& text)
|
wxString wxStaticTextBase::EscapeMarkup(const wxString& text)
|
||||||
{
|
{
|
||||||
wxString ret;
|
return wxMarkupParser::Quote(text);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -24,10 +24,23 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/private/stattext.h" // for wxMarkupEntities
|
|
||||||
|
|
||||||
#include "wx/gtk/private/mnemonics.h"
|
#include "wx/gtk/private/mnemonics.h"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Names of the standard XML entities.
|
||||||
|
const char *const entitiesNames[] =
|
||||||
|
{
|
||||||
|
"&", "<", ">", "'", """
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -67,9 +80,9 @@ static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag)
|
|||||||
size_t distanceFromEnd = label.end() - i;
|
size_t distanceFromEnd = label.end() - i;
|
||||||
|
|
||||||
// is this ampersand introducing a mnemonic or rather an entity?
|
// 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);
|
size_t entityLen = wxStrlen(entity);
|
||||||
|
|
||||||
if (distanceFromEnd >= entityLen &&
|
if (distanceFromEnd >= entityLen &&
|
||||||
|
@@ -24,10 +24,23 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/private/stattext.h" // for wxMarkupEntities
|
|
||||||
|
|
||||||
#include "wx/gtk1/private/mnemonics.h"
|
#include "wx/gtk1/private/mnemonics.h"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Names of the standard XML entities.
|
||||||
|
const char *const entitiesNames[] =
|
||||||
|
{
|
||||||
|
"&", "<", ">", "'", """
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -67,9 +80,9 @@ static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag)
|
|||||||
size_t distanceFromEnd = label.end() - i;
|
size_t distanceFromEnd = label.end() - i;
|
||||||
|
|
||||||
// is this ampersand introducing a mnemonic or rather an entity?
|
// 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);
|
size_t entityLen = wxStrlen(entity);
|
||||||
|
|
||||||
if (distanceFromEnd >= entityLen &&
|
if (distanceFromEnd >= entityLen &&
|
||||||
|
Reference in New Issue
Block a user