From ad465929229a928d418c68b7786c18f95f170eba Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 21 Feb 2013 00:33:29 +0300 Subject: Fix some incorrect chars in browserbox links. --- src/gui/whoisonline.cpp | 21 ++++++++++++--------- src/gui/widgets/browserbox.cpp | 3 ++- src/utils/stringutils.cpp | 10 ++++++++++ src/utils/stringutils.h | 4 ++++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/gui/whoisonline.cpp b/src/gui/whoisonline.cpp index a194b2ccb..3a03eec13 100644 --- a/src/gui/whoisonline.cpp +++ b/src/gui/whoisonline.cpp @@ -154,10 +154,11 @@ void WhoIsOnline::handleLink(const std::string& link, gcn::MouseEvent *event) { if (chatWindow) { + std::string text = decodeLinkText(link); if (config.getBoolValue("whispertab")) - chatWindow->localChatInput("/q " + link); + chatWindow->localChatInput("/q " + text); else - chatWindow->addInputText("/w \"" + link + "\" "); + chatWindow->addInputText("/w \"" + text + "\" "); } } else if (event->getButton() == gcn::MouseEvent::RIGHT) @@ -169,8 +170,9 @@ void WhoIsOnline::handleLink(const std::string& link, gcn::MouseEvent *event) { if (actorSpriteManager) { + std::string text = decodeLinkText(link); Being* being = actorSpriteManager->findBeingByName( - link, Being::PLAYER); + text, Being::PLAYER); if (being && viewport) { @@ -706,15 +708,15 @@ void WhoIsOnline::updateSize() const std::string WhoIsOnline::prepareNick(std::string nick, int level, std::string color) const { + const char *const text = encodeLinkText(nick).c_str(); if (mShowLevel && level > 1) { - return strprintf("@@%s|##%s%s (%d)@@", nick.c_str(), - color.c_str(), nick.c_str(), level); + return strprintf("@@%s|##%s%s (%d)@@", text, + color.c_str(), text, level); } else { - return strprintf("@@%s|##%s%s@@", nick.c_str(), - color.c_str(), nick.c_str()); + return strprintf("@@%s|##%s%s@@", text, color.c_str(), text); } } @@ -839,6 +841,7 @@ void OnlinePlayer::setText(std::string color) if (mVersion > 0) mText += strprintf(" - %d", mVersion); - mText = strprintf("@@%s|##%s%s %s@@", mNick.c_str(), - color.c_str(), mNick.c_str(), mText.c_str()); + const char *const text = encodeLinkText(mNick).c_str(); + mText = strprintf("@@%s|##%s%s %s@@", text, color.c_str(), + text, mText.c_str()); } diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index ddd21f5dd..51b977bbc 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -306,7 +306,8 @@ void BrowserBox::addRow(const std::string &row, const bool atTop) void BrowserBox::addRow(const std::string &cmd, const char *const text) { - addRow(strprintf("@@%s|%s@@", cmd.c_str(), text)); + addRow(strprintf("@@%s|%s@@", encodeLinkText(cmd).c_str(), + encodeLinkText(text).c_str())); } void BrowserBox::addImage(const std::string &path) diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 74e5d9f58..d4585a26d 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -668,3 +668,13 @@ signed char parseBoolean(const std::string &value) else return -1; } + +std::string encodeLinkText(std::string data) +{ + return replaceAll(data, "|", "\342\235\230"); +} + +std::string decodeLinkText(std::string data) +{ + return replaceAll(data, "\342\235\230", "|"); +} diff --git a/src/utils/stringutils.h b/src/utils/stringutils.h index 612486cb2..8b3ae0563 100644 --- a/src/utils/stringutils.h +++ b/src/utils/stringutils.h @@ -223,4 +223,8 @@ std::string getDateString() A_WARN_UNUSED; signed char parseBoolean(const std::string &value); +std::string encodeLinkText(std::string data); + +std::string decodeLinkText(std::string data); + #endif // UTILS_STRINGUTILS_H -- cgit v1.2.3-60-g2f50