From 679eebd2bca1d3180a94f9ef348cab3595e85780 Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 16 Sep 2015 18:27:23 -0300 Subject: [PATCH] Using new Format.Escape method --- src/Discord.Net/Format.cs | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/Discord.Net/Format.cs b/src/Discord.Net/Format.cs index cdee8e473..724f05ba7 100644 --- a/src/Discord.Net/Format.cs +++ b/src/Discord.Net/Format.cs @@ -1,34 +1,24 @@ using System.Text; +using System.Text.RegularExpressions; namespace Discord { public static class Format { - private static char[] specialChars = new char[] { '_', '*', '~', '\\' }; //Backslash must always be last! + private static readonly Regex _escapeRegex; + private static readonly MatchEvaluator _escapeEvaluator; - /// Removes all special formatting characters from the provided text. - private static string Escape(string text) + static Format() { - if (text.IndexOfAny(specialChars) >= 0) - { - StringBuilder builder = new StringBuilder(text); - foreach (char c in specialChars) - { - int length = builder.Length; - for (int i = 0; i < length; i++) - { - if (builder[i] == c) - { - builder.Insert(i, '\\'); - length++; - } - } - } - return builder.ToString(); - } - return text; + const string innerPattern = "[_*]|~~"; + _escapeRegex = new Regex($@"(?:^|\W)(?:{innerPattern})|(?:{innerPattern})(?:\W|$)|\\", RegexOptions.Compiled); + _escapeEvaluator = new MatchEvaluator(e => '\\' + e.Value); } + /// Removes all special formatting characters from the provided text. + private static string Escape(string text) + => _escapeRegex.Replace(text, _escapeEvaluator); + /// Returns a markdown-formatted string with no formatting, optionally escaping the contents. public static string Normal(string text, bool escape = true) => escape ? Escape(text) : text;