diff --git a/Builder/IISMainHandler/build.txt b/Builder/IISMainHandler/build.txt index a5a504b..4c88dcf 100644 --- a/Builder/IISMainHandler/build.txt +++ b/Builder/IISMainHandler/build.txt @@ -1 +1 @@ -799 \ No newline at end of file +805 \ No newline at end of file diff --git a/Common/BBCodes/FUrl.cs b/Common/BBCodes/FUrl.cs index a0aa190..dd77367 100644 --- a/Common/BBCodes/FUrl.cs +++ b/Common/BBCodes/FUrl.cs @@ -13,8 +13,11 @@ namespace FLocal.Common.BBCodes { public override string Format(ITextFormatter formatter) { string rawUrl = this.DefaultOrValue; - Uri uri = new Uri(rawUrl); - return "" + this.GetInnerHTML(formatter) + ""; + string title = null; + if(rawUrl.ToLower() != this.InnerText.ToLower()) { + title = this.GetInnerHTML(formatter); + } + return UrlProcessor.ProcessLink(rawUrl, title, false); } } diff --git a/Common/BBCodes/Url.cs b/Common/BBCodes/Url.cs index 63aeb0a..e879572 100644 --- a/Common/BBCodes/Url.cs +++ b/Common/BBCodes/Url.cs @@ -13,8 +13,11 @@ namespace FLocal.Common.BBCodes { public override string Format(ITextFormatter formatter) { string rawUrl = this.DefaultOrValue; - var urlInfo = UrlProcessor.Process(rawUrl); - return "" + this.GetInnerHTML(formatter) + ""; + string title = null; + if(rawUrl.ToLower() != this.InnerText.ToLower()) { + title = this.GetInnerHTML(formatter); + } + return UrlProcessor.ProcessLink(rawUrl, title, true); } } diff --git a/Common/BBCodes/helpers/UrlProcessor.cs b/Common/BBCodes/helpers/UrlProcessor.cs index 11f71f5..35ffcac 100644 --- a/Common/BBCodes/helpers/UrlProcessor.cs +++ b/Common/BBCodes/helpers/UrlProcessor.cs @@ -53,5 +53,20 @@ namespace FLocal.Common.BBCodes { } } + public static string ProcessLink(string link, string title, bool shortenRelative) { + if(title == null) { + title = link; + } + string url; + if(shortenRelative) { + var urlInfo = UrlProcessor.Process(link); + url = urlInfo.relativeUrl; + } else { + var urlInfo = new Uri(link); + url = urlInfo.ToString(); + } + return "" + title + ""; + } + } } diff --git a/Common/UBBParser.cs b/Common/UBBParser.cs index c36357e..828bebf 100644 --- a/Common/UBBParser.cs +++ b/Common/UBBParser.cs @@ -48,6 +48,11 @@ namespace FLocal.Common { } } + private static readonly Regex LINKS_MATCHER = new Regex("https?://[^\\s\\[<]+", RegexOptions.Singleline | RegexOptions.Compiled); + private static string LINKS_REPLACE(Match match) { + return BBCodes.UrlProcessor.ProcessLink(match.Value, null, true); + } + private static readonly Dictionary TYPOGRAPHICS = new Dictionary { { new Regex("(\\s+)--?(\\s+)", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline), match => match.Groups[1] + "–" + match.Groups[2] }, { new Regex("(\\s+)---(\\s+)", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline), match => match.Groups[1] + "—" + match.Groups[2] }, @@ -69,6 +74,7 @@ namespace FLocal.Common { public string Format(string source) { string result = this.inner.Format(source).Replace(" ", " "); + result = LINKS_MATCHER.Replace(result, LINKS_REPLACE); foreach(var smile in SMILEYS_DATA) { result = smile.Key.Replace(result, smile.Value); }