1 using Microsoft.Xna.Framework;
2 using System.Collections.Generic;
3 using System.Collections.Immutable;
15 private const char definitionIndicator =
'‖';
16 private const char attributeSeparator =
';';
17 private const char keyValueSeparator =
':';
20 private const string colorDefinition =
"color";
21 private const string metadataDefinition =
"metadata";
22 private const string endDefinition =
"end";
24 public static ImmutableArray<RichTextData>?
GetRichTextData(
string text, out
string sanitizedText)
27 if (!
string.IsNullOrEmpty(text) && text.Contains(definitionIndicator, System.StringComparison.Ordinal))
29 text = text.Replace(
"\r",
"");
30 string[] segments = text.Split(definitionIndicator);
32 sanitizedText =
string.Empty;
34 List<RichTextData> textColors =
new List<RichTextData>();
39 for (
int i = 0; i < segments.Length; i++)
43 sanitizedText += segments[i];
44 prevIndex = currIndex;
45 currIndex += segments[i].Replace(
"\n",
"").Replace(
"\r",
"").Length;
49 string[] attributes = segments[i].Split(attributeSeparator);
50 for (
int j = 0; j < attributes.Length; j++)
52 if (attributes[j].Contains(endDefinition, System.StringComparison.OrdinalIgnoreCase))
57 tempData.EndIndex = currIndex - 1;
58 textColors.Add(tempData);
62 else if (attributes[j].StartsWith(colorDefinition, System.StringComparison.OrdinalIgnoreCase))
65 string valueStr = attributes[j].Substring(attributes[j].IndexOf(keyValueSeparator) + 1);
66 if (valueStr.Equals(
"null", System.StringComparison.InvariantCultureIgnoreCase))
68 tempData.
Color =
null;
72 tempData.
Color = XMLExtensions.ParseColor(valueStr);
75 else if (attributes[j].StartsWith(metadataDefinition, System.StringComparison.OrdinalIgnoreCase))
78 tempData.
Metadata = attributes[j].Substring(attributes[j].IndexOf(keyValueSeparator) + 1);
83 return textColors.ToImmutableArray();
static ? ImmutableArray< RichTextData > GetRichTextData(string text, out string sanitizedText)