X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f313deaa38ebd9d8a9a2755a105e12999dd5493c..7198c3368055d88249a338eb33b21f051f674806:/src/common/stattextcmn.cpp diff --git a/src/common/stattextcmn.cpp b/src/common/stattextcmn.cpp index 2da27afef7..66cfd3ba96 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 *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 *wxMarkupEntities[][wxMARKUP_ENTITY_MAX] = #include "wx/textwrapper.h" +#include "wx/private/markupparser.h" + extern WXDLLEXPORT_DATA(const char) wxStaticTextNameStr[] = "staticText"; // ---------------------------------------------------------------------------- @@ -203,145 +195,6 @@ void wxStaticTextBase::Wrap(int width) wrapper.WrapLabel(this, width); } -wxString wxStaticTextBase::GetLabelText() const -{ - wxString ret(GetLabel()); - - if (HasFlag(wxST_MARKUP)) - ret = RemoveMarkup(ret); - return RemoveMnemonics(ret); -} - -void wxStaticTextBase::SetLabelText(const wxString& text) -{ - wxString str = text; - - if (HasFlag(wxST_MARKUP)) - str = EscapeMarkup(str); // escapes markup and the & characters (which are also mnemonics) - else - str = EscapeMnemonics(text); // escape only the mnemonics - SetLabel(str); -} - -/* static */ -wxString wxStaticTextBase::GetLabelText(const wxString& label) -{ - wxString ret = RemoveMarkup(label); - // always remove the markup (this function is static - // and cannot check for wxST_MARKUP presence/absence) - - return RemoveMnemonics(ret); -} - -/* 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; -} - -/* 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; -} - - // ---------------------------------------------------------------------------- // wxStaticTextBase - generic implementation for wxST_ELLIPSIZE_* support // ---------------------------------------------------------------------------- @@ -351,7 +204,7 @@ void wxStaticTextBase::UpdateLabel() if (!IsEllipsized()) return; - wxString newlabel = GetEllipsizedLabelWithoutMarkup(); + wxString newlabel = GetEllipsizedLabel(); // we need to touch the "real" label (i.e. the text set inside the control, // using port-specific functions) instead of the string returned by GetLabel(). @@ -364,18 +217,7 @@ void wxStaticTextBase::UpdateLabel() DoSetLabel(newlabel); } -wxString wxStaticTextBase::GetLabelWithoutMarkup() const -{ - wxString ret(m_labelOrig); - - if (HasFlag(wxST_MARKUP)) - ret = RemoveMarkup(ret); - - // unlike GetLabelText() we don't remove the mnemonics here! - return ret; -} - -wxString wxStaticTextBase::GetEllipsizedLabelWithoutMarkup() const +wxString wxStaticTextBase::GetEllipsizedLabel() const { // this function should be used only by ports which do not support // ellipsis in static texts: we first remove markup (which cannot @@ -383,11 +225,6 @@ wxString wxStaticTextBase::GetEllipsizedLabelWithoutMarkup() const wxString ret(m_labelOrig); - // the order of the following two blocks is important! - - if (HasFlag(wxST_MARKUP)) - ret = RemoveMarkup(ret); - if (IsEllipsized()) ret = Ellipsize(ret);