Browse Source

Using new Format.Escape method

tags/docs-0.9
RogueException 9 years ago
parent
commit
679eebd2bc
1 changed files with 11 additions and 21 deletions
  1. +11
    -21
      src/Discord.Net/Format.cs

+ 11
- 21
src/Discord.Net/Format.cs View File

@@ -1,34 +1,24 @@
using System.Text; using System.Text;
using System.Text.RegularExpressions;


namespace Discord namespace Discord
{ {
public static class Format 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;


/// <summary> Removes all special formatting characters from the provided text. </summary>
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);
} }


/// <summary> Removes all special formatting characters from the provided text. </summary>
private static string Escape(string text)
=> _escapeRegex.Replace(text, _escapeEvaluator);

/// <summary> Returns a markdown-formatted string with no formatting, optionally escaping the contents. </summary> /// <summary> Returns a markdown-formatted string with no formatting, optionally escaping the contents. </summary>
public static string Normal(string text, bool escape = true) public static string Normal(string text, bool escape = true)
=> escape ? Escape(text) : text; => escape ? Escape(text) : text;


Loading…
Cancel
Save