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.master
parent
a0ee6fbbdd
commit
7aa859b7f4
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>;
|
||||
|
|
|
|||
Loading…
Reference in New Issue