using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
namespace Terminal.Gui.Drawing;
///
/// Color name resolver for .
///
public class AnsiColorNameResolver : IColorNameResolver
{
private static readonly ImmutableArray _ansiColorNames = ImmutableArray.Create (Enum.GetNames ());
///
public IEnumerable GetColorNames ()
{
return _ansiColorNames;
}
///
public bool TryNameColor (Color color, [NotNullWhen (true)] out string? name)
{
if (Color.TryGetExactNamedColor16 (color, out ColorName16 colorName16))
{
name = Color16Name (colorName16);
return true;
}
name = null;
return false;
}
///
public bool TryParseColor (ReadOnlySpan name, out Color color)
{
if (Enum.TryParse (name, ignoreCase: true, out ColorName16 colorName16) &&
// Any numerical value converts to undefined enum value.
Enum.IsDefined (colorName16))
{
color = new Color (colorName16);
return true;
}
color = default;
return false;
}
private static string Color16Name (ColorName16 color16)
{
return color16 switch
{
ColorName16.Black => nameof (ColorName16.Black),
ColorName16.Blue => nameof (ColorName16.Blue),
ColorName16.Green => nameof (ColorName16.Green),
ColorName16.Cyan => nameof (ColorName16.Cyan),
ColorName16.Red => nameof (ColorName16.Red),
ColorName16.Magenta => nameof (ColorName16.Magenta),
ColorName16.Yellow => nameof (ColorName16.Yellow),
ColorName16.Gray => nameof (ColorName16.Gray),
ColorName16.DarkGray => nameof (ColorName16.DarkGray),
ColorName16.BrightBlue => nameof (ColorName16.BrightBlue),
ColorName16.BrightGreen => nameof (ColorName16.BrightGreen),
ColorName16.BrightCyan => nameof (ColorName16.BrightCyan),
ColorName16.BrightRed => nameof (ColorName16.BrightRed),
ColorName16.BrightMagenta => nameof (ColorName16.BrightMagenta),
ColorName16.BrightYellow => nameof (ColorName16.BrightYellow),
ColorName16.White => nameof (ColorName16.White),
_ => throw new NotSupportedException ($"ColorName16 '{color16}' is not supported.")
};
}
}