diff options
author | Martin Reddy <lynx@lindenlab.com> | 2009-10-16 14:04:23 +0000 |
---|---|---|
committer | Martin Reddy <lynx@lindenlab.com> | 2009-10-16 14:04:23 +0000 |
commit | 7aa859b7f4212e0e8177539284eaef6dfad57d94 (patch) | |
tree | 9b445471bee3017f8cfc9b29ac2681b4520c7b75 /indra | |
parent | a0ee6fbbdda8aeb4e5cd9733650182866247eb9e (diff) |
EXT-1566: Fixed another case of UTF-8 vs UTF-32 coding error for SLURL
parsing in text editors. Any time we are looking up segment start/end
ranges we should do this on a wide string.
Also added a convenience LLUrlRegistry::hasUrl() method to easily
determine if a string contains a valid SLURL.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llui/lltexteditor.cpp | 12 | ||||
-rw-r--r-- | indra/llui/llurlregistry.cpp | 12 | ||||
-rw-r--r-- | indra/llui/llurlregistry.h | 4 |
3 files changed, 23 insertions, 5 deletions
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 74ffad0f53..7c925b8899 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2505,6 +2505,8 @@ void LLTextEditor::updateSegments() void LLTextEditor::updateLinkSegments() { + LLWString wtext = getWText(); + // update any segments that contain a link for (segment_set_t::iterator it = mSegments.begin(); it != mSegments.end(); ++it) { @@ -2514,13 +2516,13 @@ void LLTextEditor::updateLinkSegments() // if the link's label (what the user can edit) is a valid Url, // then update the link's HREF to be the same as the label text. // This lets users edit Urls in-place. - LLUrlMatch match; LLStyleSP style = static_cast<LLStyleSP>(segment->getStyle()); - std::string url_label = getText().substr(segment->getStart(), segment->getEnd()-segment->getStart()); - if (LLUrlRegistry::instance().findUrl(url_label, match)) + LLWString url_label = wtext.substr(segment->getStart(), segment->getEnd()-segment->getStart()); + if (LLUrlRegistry::instance().hasUrl(url_label)) { - LLStringUtil::trim(url_label); - style->setLinkHREF(url_label); + std::string new_url = wstring_to_utf8str(url_label); + LLStringUtil::trim(new_url); + style->setLinkHREF(new_url); } } } diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 8413de0837..249c7320d6 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -192,3 +192,15 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr } return false; } + +bool LLUrlRegistry::hasUrl(const std::string &text) +{ + LLUrlMatch match; + return findUrl(text, match); +} + +bool LLUrlRegistry::hasUrl(const LLWString &text) +{ + LLUrlMatch match; + return findUrl(text, match); +} diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h index 85e934e4b5..d7800d8cfc 100644 --- a/indra/llui/llurlregistry.h +++ b/indra/llui/llurlregistry.h @@ -81,6 +81,10 @@ public: bool findUrl(const LLWString &text, LLUrlMatch &match, const LLUrlLabelCallback &cb = &LLUrlRegistryNullCallback); + // return true if the given string contains a URL that findUrl would match + bool hasUrl(const std::string &text); + bool hasUrl(const LLWString &text); + private: LLUrlRegistry(); friend class LLSingleton<LLUrlRegistry>; |