private List<CrayonString.CrayonToken> ColorizeToken(CrayonString.CrayonToken token, Regex regex) { if (token.Color != CrayonColor.Default) { // do not process colorized tokens return new List<CrayonString.CrayonToken>() { token }; } var result = new StringBuilder(); var text = token.Text; var matches = regex.Matches(text); var idx = 0; if (matches.Count > 0) { var names = regex.GetGroupNames(); foreach (Match m in matches) { var replaced = m.Captures[0].Value; foreach (var name in names) { var i = 0; /// ignore groups without names if (int.TryParse(name, out i)) continue; var group = m.Groups[name]; var color = GetColor(name); var coloredString = color.Format(group.Value); replaced = regex.ReplaceGroup(replaced, name, coloredString); } var before = text.Substring(idx, m.Index - idx); result.Append(before); result.Append(replaced); idx = m.Index + m.Length; } } result.Append(text.Substring(idx, text.Length - idx)); return new CrayonString(result.ToString()).Tokenize(); }
private CrayonString ColorizeString(CrayonString str, Regex regex) { var result = new StringBuilder(); var matches = regex.Matches(str.Text); var idx = 0; if (matches.Count > 0) { var names = regex.GetGroupNames(); foreach (Match m in matches) { var replaced = m.Captures[0].Value; foreach (var name in names) { var i = 0; /// ignore groups without names if (int.TryParse(name, out i)) continue; var group = m.Groups[name]; var color = GetColor(name); var coloredString = color.Format(group.Value); replaced = regex.ReplaceGroup(replaced, name, coloredString); } var before = str.Text.Substring(idx, m.Index - idx); result.Append(before); result.Append(replaced); idx = m.Index + m.Length; } } result.Append(str.Text.Substring(idx, str.Text.Length - idx)); return new CrayonString(result.ToString()); }