#nullable enable
using System.Collections;
using System.Globalization;
using System.Resources;
using Terminal.Gui.Resources;
namespace Terminal.Gui;
///
/// Provides a mapping between and the W3C standard color name strings.
///
public static class ColorStrings
{
private static readonly ResourceManager _resourceManager = new (typeof (Strings));
///
/// Gets the W3C standard string for .
///
/// The color.
/// if there is no standard color name for the specified color.
public static string? GetW3CColorName (Color color)
{
// Fetch the color name from the resource file
return _resourceManager.GetString ($"#{color.R:X2}{color.G:X2}{color.B:X2}", CultureInfo.CurrentUICulture);
}
///
/// Returns the list of W3C standard color names.
///
///
public static IEnumerable GetW3CColorNames ()
{
foreach (DictionaryEntry entry in _resourceManager.GetResourceSet (CultureInfo.CurrentUICulture, true, true)!)
{
string keyName = entry.Key.ToString () ?? string.Empty;
if (entry.Value is string colorName && keyName.StartsWith ('#'))
{
yield return colorName;
}
}
}
///
/// Parses and returns if name is a W3C standard named color.
///
/// The name to parse.
/// If successful, the color.
/// if was parsed successfully.
public static bool TryParseW3CColorName (string name, out Color color)
{
// Iterate through all resource entries to find the matching color name
foreach (DictionaryEntry entry in _resourceManager.GetResourceSet (CultureInfo.CurrentUICulture, true, true)!)
{
if (entry.Value is string colorName && colorName.Equals (name, StringComparison.OrdinalIgnoreCase))
{
// Parse the key to extract the color components
string key = entry.Key.ToString () ?? string.Empty;
if (key.StartsWith ("#") && key.Length == 7)
{
if (int.TryParse (key.Substring (1, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int r)
&& int.TryParse (key.Substring (3, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int g)
&& int.TryParse (key.Substring (5, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int b))
{
color = new (r, g, b);
return true;
}
}
}
}
color = default (Color);
return false;
}
}