From fdb6e3230cfd429ce6a7d893a07ae58968f0ded7 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 8 Jun 2011 21:41:32 -0700 Subject: Parse and use inworldz-specific slurls as if they were regular slurls --- linden/indra/llui/lltexteditor.cpp | 28 ++++++++++++++++++++++++---- linden/indra/newview/llurldispatcher.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) (limited to 'linden') diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp index de05872..c8ca5bf 100644 --- a/linden/indra/llui/lltexteditor.cpp +++ b/linden/indra/llui/lltexteditor.cpp @@ -5119,7 +5119,7 @@ S32 LLTextEditor::findHTMLToken(const std::string &line, S32 pos, BOOL reverse) BOOL LLTextEditor::findHTML(const std::string &line, S32 *begin, S32 *end, std::string& url) const { - S32 m1,m2,m3; + S32 m1,m2,m3,m4; BOOL matched = FALSE; m1=line.find("://",*end); @@ -5132,10 +5132,11 @@ BOOL LLTextEditor::findHTML(const std::string &line, S32 *begin, S32 *end, std:: //Load_url only handles http and https so don't hilite ftp, smb, etc. m2 = line.substr(*begin,(m1 - *begin)).find("http"); m3 = line.substr(*begin,(m1 - *begin)).find("secondlife"); + m4 = line.substr(*begin,(m1 - *begin)).find("inworldz"); std::string badneighbors=".,<>?';\"][}{=-+_)(*&^%$#@!~`\t\r\n\\"; - if (m2 >= 0 || m3>=0) + if (m2 >= 0 || m3>=0 || m4>=0) { S32 bn = badneighbors.find(line.substr(m1+3,1)); @@ -5179,9 +5180,28 @@ BOOL LLTextEditor::findHTML(const std::string &line, S32 *begin, S32 *end, std:: try { url = line.substr(*begin,*end - *begin); - std::string slurlID = "slurl.com/secondlife/"; - strpos = url.find(slurlID); + // see if it's an izurl + std::string slurlID = "places.inworldz.com/"; + strpos = url.find(slurlID); + if (strpos < 0) + { + slurlID="inworldz://"; + strpos = url.find(slurlID); + } + if (strpos < 0) + { + slurlID="iz://"; + strpos = url.find(slurlID); + } + + // see if it's an slurl + if (strpos < 0) + { + slurlID = "slurl.com/secondlife/"; + strpos = url.find(slurlID); + } + if (strpos < 0) { slurlID="maps.secondlife.com/secondlife/"; diff --git a/linden/indra/newview/llurldispatcher.cpp b/linden/indra/newview/llurldispatcher.cpp index 1144c58..460ffb2 100644 --- a/linden/indra/newview/llurldispatcher.cpp +++ b/linden/indra/newview/llurldispatcher.cpp @@ -55,6 +55,11 @@ const std::string SLURL_SECONDLIFE_PREFIX = "secondlife://"; const std::string SLURL_SLURL_PREFIX = "http://slurl.com/secondlife/"; const std::string SLURL_SLURL_ALT_PREFIX = "http://maps.secondlife.com/secondlife/"; +const std::string IZURL_IZ_HELP_PREFIX = "inworldz://app."; +const std::string IZURL_IZ_PREFIX = "iz://"; +const std::string IZURL_INWORLDZ_PREFIX = "inworldz://"; +const std::string IZURL_IZURL_PREFIX = "http://places.inworldz.com/"; + const std::string SLURL_APP_TOKEN = "app/"; class LLURLDispatcherImpl @@ -119,6 +124,10 @@ bool LLURLDispatcherImpl::isSLURL(const std::string& url) if (matchPrefix(url, SLURL_SECONDLIFE_PREFIX)) return true; if (matchPrefix(url, SLURL_SLURL_PREFIX)) return true; if (matchPrefix(url, SLURL_SLURL_ALT_PREFIX)) return true; + if (matchPrefix(url, IZURL_IZ_HELP_PREFIX)) return true; + if (matchPrefix(url, IZURL_IZ_PREFIX)) return true; + if (matchPrefix(url, IZURL_INWORLDZ_PREFIX)) return true; + if (matchPrefix(url, IZURL_IZURL_PREFIX)) return true; return false; } @@ -128,7 +137,10 @@ bool LLURLDispatcherImpl::isSLURLCommand(const std::string& url) if (matchPrefix(url, SLURL_SL_PREFIX + SLURL_APP_TOKEN) || matchPrefix(url, SLURL_SECONDLIFE_PREFIX + "/" + SLURL_APP_TOKEN) || matchPrefix(url, SLURL_SLURL_PREFIX + SLURL_APP_TOKEN) - || matchPrefix(url, SLURL_SLURL_ALT_PREFIX + SLURL_APP_TOKEN)) + || matchPrefix(url, SLURL_SLURL_ALT_PREFIX + SLURL_APP_TOKEN) + || matchPrefix(url, IZURL_IZ_PREFIX + SLURL_APP_TOKEN) + || matchPrefix(url, IZURL_INWORLDZ_PREFIX + "/" + SLURL_APP_TOKEN) + || matchPrefix(url, IZURL_IZURL_PREFIX + SLURL_APP_TOKEN)) { return true; } @@ -371,6 +383,22 @@ std::string LLURLDispatcherImpl::stripProtocol(const std::string& url) { stripped.erase(0, SLURL_SLURL_ALT_PREFIX.length()); } + else if (matchPrefix(stripped, IZURL_IZ_HELP_PREFIX)) + { + stripped.erase(0, IZURL_IZ_HELP_PREFIX.length()); + } + else if (matchPrefix(stripped, IZURL_IZ_PREFIX)) + { + stripped.erase(0, IZURL_IZ_PREFIX.length()); + } + else if (matchPrefix(stripped, IZURL_INWORLDZ_PREFIX)) + { + stripped.erase(0, IZURL_INWORLDZ_PREFIX.length()); + } + else if (matchPrefix(stripped, IZURL_IZURL_PREFIX)) + { + stripped.erase(0, IZURL_IZURL_PREFIX.length()); + } return stripped; } -- cgit v1.1