public static string ToString(this ColorCodeType colorCodeType, ColorCodeIndicatorType colorCodeIndicatorType) { string colorCodeText = Encoding.GetEncoding(CodePage437).GetString(new byte[] { ((byte)colorCodeType) }); switch (colorCodeIndicatorType) { case ColorCodeIndicatorType.None: return(colorCodeText); case ColorCodeIndicatorType.Ampersand: return("&" + colorCodeText); case ColorCodeIndicatorType.Percent: return("%" + colorCodeText); default: goto case ColorCodeIndicatorType.None; } }
public static string ColorCodeBeforeSymbolsAndAfter(string input, ColorCodeType beforeColorCodeType, ColorCodeType afterColorCodeType) { bool escaping = false; bool wasEscaping = false; bool symbolStreak = false; for (int inputIndexer = 0; inputIndexer < input.Length; inputIndexer++) { char inputCharacter = input[inputIndexer]; if (inputCharacter == SymbolEscapeCharacter) { escaping = !escaping; } if (escaping) { symbolStreak = false; wasEscaping = true; } else if (inputIndexer < input.Length - 1 && wasEscaping) { if (Symbols.Contains(input[inputIndexer + 1].ToString())) { continue; } input = input.Insert(inputIndexer + 1, afterColorCodeType.ToString(ColorCodeIndicatorType.Ampersand)); inputIndexer += 2; wasEscaping = false; } else if (inputIndexer < input.Length - 2 && IsColorCode(input.Substring(inputIndexer, 2))) { inputIndexer += 2; symbolStreak = false; } else if (Symbols.Contains(inputCharacter.ToString()) && !symbolStreak) { input = input.Insert(inputIndexer, beforeColorCodeType.ToString(ColorCodeIndicatorType.Ampersand)); inputIndexer += 2; symbolStreak = true; } else if ((((inputCharacter == ' ' || Char.IsLetter(inputCharacter)) || Char.IsNumber(inputCharacter)) && symbolStreak) || (inputIndexer > 0 && input[inputIndexer - 1] == '\n')) { if (inputIndexer != input.Length - 1) { input = input.Insert(inputIndexer, afterColorCodeType.ToString(ColorCodeIndicatorType.Ampersand)); } inputIndexer += 2; symbolStreak = false; } } input = input.Replace(SymbolEscapeCharacter.ToString(), ""); if (!IsColorCode(input.TrimStart())) { input = input.Insert(0, afterColorCodeType.ToString(ColorCodeIndicatorType.Ampersand)); } return(input); }