diff options
| -rwxr-xr-x | indra/llui/llurlentry.cpp | 6 | ||||
| -rwxr-xr-x | indra/llui/llurlentry.h | 2 | ||||
| -rwxr-xr-x | indra/llui/llurlregistry.cpp | 20 | ||||
| -rwxr-xr-x | indra/llui/llurlregistry.h | 2 | 
4 files changed, 28 insertions, 2 deletions
| diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 6f3122e7a1..be583c83d8 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -178,6 +178,12 @@ bool LLUrlEntryBase::isLinkDisabled() const  	return globally_disabled;  } +bool LLUrlEntryBase::isWikiLinkCorrect(std::string url) +{ +	std::string label = getLabelFromWikiLink(url); +	return (LLUrlRegistry::instance().hasUrl(label)) ? false : true; +} +  static std::string getStringAfterToken(const std::string str, const std::string token)  {  	size_t pos = str.find(token); diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index d4684e2e1e..ffcd45dfde 100755 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -100,6 +100,8 @@ public:  	bool isLinkDisabled() const; +	bool isWikiLinkCorrect(std::string url); +  protected:  	std::string getIDStringFromUrl(const std::string &url) const;  	std::string escapeUrl(const std::string &url) const; diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index bccc646821..ef0789e0e4 100755 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -45,7 +45,8 @@ LLUrlRegistry::LLUrlRegistry()  	registerUrl(mUrlEntryIcon);  	registerUrl(new LLUrlEntrySLURL());  	registerUrl(new LLUrlEntryHTTP()); -	registerUrl(new LLUrlEntryHTTPLabel()); +	mUrlEntryHTTPLabel = new LLUrlEntryHTTPLabel(); +	registerUrl(mUrlEntryHTTPLabel);  	registerUrl(new LLUrlEntryAgentCompleteName());  	registerUrl(new LLUrlEntryAgentDisplayName());  	registerUrl(new LLUrlEntryAgentUserName()); @@ -64,7 +65,8 @@ LLUrlRegistry::LLUrlRegistry()  	//LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern,   	//so it should be registered in the end of list  	registerUrl(new LLUrlEntrySL()); -	registerUrl(new LLUrlEntrySLLabel()); +	mUrlEntrySLLabel = new LLUrlEntrySLLabel(); +	registerUrl(mUrlEntrySLLabel);  	// most common pattern is a URL without any protocol,  	// e.g., "secondlife.com"  	registerUrl(new LLUrlEntryHTTPNoProtocol());	 @@ -128,6 +130,11 @@ static bool matchRegex(const char *text, boost::regex regex, U32 &start, U32 &en  		end--;  	} +	else if (text[end] == ']' && std::string(text+start, end-start).find('[') == std::string::npos) +	{ +			end--; +	} +  	return true;  } @@ -175,6 +182,15 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL  			// does this match occur in the string before any other match  			if (start < match_start || match_entry == NULL)  			{ + +				if((mUrlEntryHTTPLabel == *it) || (mUrlEntrySLLabel == *it)) +				{ +					if(url_entry && !url_entry->isWikiLinkCorrect(text.substr(start, end - start + 1))) +					{ +						continue; +					} +				} +  				match_start = start;  				match_end = end;  				match_entry = url_entry; diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h index 6270df1bbb..1cb403dfc9 100755 --- a/indra/llui/llurlregistry.h +++ b/indra/llui/llurlregistry.h @@ -94,6 +94,8 @@ private:  	std::vector<LLUrlEntryBase *> mUrlEntry;  	LLUrlEntryBase*	mUrlEntryIcon; +	LLUrlEntryBase* mUrlEntryHTTPLabel; +	LLUrlEntryBase* mUrlEntrySLLabel;  };  #endif | 
