diff options
| author | George Hazan <george.hazan@gmail.com> | 2024-03-29 14:26:31 +0300 | 
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2024-03-29 14:26:31 +0300 | 
| commit | 6fd72c2415dd52977fef53db575cf62a85153cdd (patch) | |
| tree | 68f7222fb710aec5c0cc9aeea15898b77f3bfe71 | |
| parent | 2293da320034052e5e9d5152f4929b4f653d8812 (diff) | |
better URL autodetect
| -rw-r--r-- | plugins/NewStory/src/history_array.cpp | 2 | ||||
| -rw-r--r-- | plugins/NewStory/src/templates.cpp | 2 | ||||
| -rw-r--r-- | plugins/NewStory/src/utils.cpp | 27 | 
3 files changed, 22 insertions, 9 deletions
diff --git a/plugins/NewStory/src/history_array.cpp b/plugins/NewStory/src/history_array.cpp index a0e2999cc2..04c1b44d64 100644 --- a/plugins/NewStory/src/history_array.cpp +++ b/plugins/NewStory/src/history_array.cpp @@ -394,7 +394,7 @@ void ItemData::load(bool bLoadAlways)  					auto *pwszLocalName = blob.getLocalName();
  					if (ProtoGetAvatarFileFormat(pwszLocalName) != PA_FORMAT_UNKNOWN)
 -						buf.AppendFormat(L"[img]%s[/img]", pwszLocalName);
 +						buf.AppendFormat(L"[img]file://%s[/img]", pwszLocalName);
  					else
  						buf.AppendFormat(L"[url]file://%s[/url]", pwszLocalName);
  				}
 diff --git a/plugins/NewStory/src/templates.cpp b/plugins/NewStory/src/templates.cpp index ef7bba6b9f..405a198fe6 100644 --- a/plugins/NewStory/src/templates.cpp +++ b/plugins/NewStory/src/templates.cpp @@ -118,7 +118,7 @@ static void AppendString(CMStringW &buf, const wchar_t *p)  				if (auto *p2 = wcsstr(p, L"[/img]")) {
  					CMStringW wszUrl(p, int(p2 - p));
 -					buf.AppendFormat(L"<img style=\"width: 300;\" src=\"file://%s\" /><br>", wszUrl.c_str());
 +					buf.AppendFormat(L"<img style=\"width: 300;\" src=\"%s\" /><br>", wszUrl.c_str());
  					p = p2 + 5;
  				}
  			}
 diff --git a/plugins/NewStory/src/utils.cpp b/plugins/NewStory/src/utils.cpp index f227578fd4..bd12aea485 100644 --- a/plugins/NewStory/src/utils.cpp +++ b/plugins/NewStory/src/utils.cpp @@ -145,12 +145,25 @@ static int DetectUrl(const wchar_t *text)  void UrlAutodetect(CMStringW &str)
  {
 -	for (auto *p = str.c_str(); *p; p++)
 -		if (int len = DetectUrl(p)) { 
 -			int pos = p - str.c_str();
 -			CMStringW url = str.Mid(pos, len);
 -			str.Insert(pos + len, L"[/url]");
 -			str.Insert(pos, L"[url]");
 -			p = str.c_str() + pos + len + 11;
 +	int level = 0;
 +
 +	for (auto *p = str.c_str(); *p; p++) {
 +		if (!wcsncmp(p, L"[img]", 5) || !wcsncmp(p, L"[url]", 5)) {
 +			p += 4;
 +			level++;
 +		}
 +		if (!wcsncmp(p, L"[/img]", 6) || !wcsncmp(p, L"[/img]", 6)) {
 +			p += 5;
 +			level--;
  		}
 +		else if (int len = DetectUrl(p)) {
 +			if (level == 0) {
 +				int pos = p - str.c_str();
 +				CMStringW url = str.Mid(pos, len);
 +				str.Insert(pos + len, L"[/url]");
 +				str.Insert(pos, L"[url]");
 +				p = str.c_str() + pos + len + 11;
 +			}
 +		}
 +	}
  }
  | 
