/// <summary>
/// Parse an embedded symbol, such as [FFAA00] (set color) or [-] (undo color change)
/// </summary>
static public int ParseSymbol (string text, int index, List<Color> colors, bool premultiply)
{
int length = text.Length;
if (index + 2 < length)
{
if (text[index + 1] == '-')
{
if (text[index + 2] == ']')
{
if (colors != null && colors.Count > 1) colors.RemoveAt(colors.Count - 1);
return 3;
}
}
else if (index + 7 < length)
{
if (text[index + 7] == ']')
{
if (colors != null)
{
Color c = ParseColor(text, index + 1);
if (EncodeColor(c) != text.Substring(index + 1, 6).ToUpper())
return 0;
c.a = colors[colors.Count - 1].a;
if (premultiply && c.a != 1f)
c = Color.Lerp(mInvisible, c, c.a);
colors.Add(c);
}
return 8;
}
}
}
return 0;
}
/// <summary>
/// Runs through the specified string and removes all color-encoding symbols.
/// </summary>
static public string StripSymbols (string text)
{
if (text != null)
{
for (int i = 0, imax = text.Length; i < imax; )
{
char c = text[i];
if (c == '[')
{
int retVal = ParseSymbol(text, i, null, false);
if (retVal > 0)
{
text = text.Remove(i, retVal);
imax = text.Length;
continue;
}
}
++i;
}
}
return text;
}