#nullable enable
using System.Collections;
using System.Globalization;
using Terminal.Gui.Resources;
namespace Terminal.Gui;
///
/// Provides a mapping between and the W3C standard color name strings.
///
public static class ColorStrings
{
///
/// 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 GlobalResources.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 GlobalResources.GetResourceSet (
CultureInfo.CurrentUICulture,
true,
true,
e =>
{
string keyName = e.Key.ToString () ?? string.Empty;
return e.Value is string && keyName.StartsWith ('#');
})!)
{
yield return (entry.Value as string)!;
}
}
///
/// 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 GlobalResources.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;
}
}