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.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;

/// <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>
public static string Normal(string text, bool escape = true)
=> escape ? Escape(text) : text;


Loading…
Cancel
Save