Autogenerate known colors and palettes

This will make it a bit easier to make changes
This commit is contained in:
Patrik Svensson 2020-08-03 14:06:49 +02:00 committed by Patrik Svensson
parent 5267ebda49
commit e5bf2bd498
19 changed files with 4808 additions and 145 deletions

2
eng/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
Generated
Temp

24
eng/Generate-Colors.ps1 Normal file
View File

@ -0,0 +1,24 @@
##########################################################
# Script that generates known colors and lookup tables.
##########################################################
$Output = Join-Path $PSScriptRoot "Temp"
$Source = Join-Path $PSScriptRoot "/../src/Spectre.Console"
if(!(Test-Path $Output -PathType Container)) {
New-Item -ItemType Directory -Path $Output | Out-Null
}
# Generate the files
Push-Location Generator
&dotnet run -- colors "$Output"
if(!$?) {
Pop-Location
Throw "An error occured when generating code."
}
Pop-Location
# Copy the files to the correct location
Copy-Item (Join-Path "$Output" "Color.Generated.cs") -Destination "$Source/Color.Generated.cs"
Copy-Item (Join-Path "$Output" "ColorPalette.Generated.cs") -Destination "$Source/Internal/Colors/ColorPalette.Generated.cs"
Copy-Item (Join-Path "$Output" "ColorTable.Generated.cs") -Destination "$Source/Internal/Colors/ColorTable.Generated.cs"

View File

@ -0,0 +1,59 @@
using System;
using System.IO;
using Generator.Models;
using Scriban;
using Spectre.Cli;
using Spectre.IO;
namespace Generator.Commands
{
public sealed class ColorGeneratorCommand : Command<GeneratorCommandSettings>
{
private readonly IFileSystem _fileSystem;
public ColorGeneratorCommand()
{
_fileSystem = new FileSystem();
}
public override int Execute(CommandContext context, GeneratorCommandSettings settings)
{
var templates = new FilePath[]
{
"Templates/ColorPalette.Generated.template",
"Templates/Color.Generated.template",
"Templates/ColorTable.Generated.template"
};
// Read the color model.
var model = Color.Parse(File.ReadAllText("Data/colors.json"));
var output = new DirectoryPath(settings.Output);
if (!_fileSystem.Directory.Exists(settings.Output))
{
_fileSystem.Directory.Create(settings.Output);
}
foreach (var templatePath in templates)
{
// Parse the Scriban template.
var template = Template.Parse(File.ReadAllText(templatePath.FullPath));
// Render the template with the model.
var result = template.Render(new { Colors = model });
// Write output to file
var file = output.CombineWithFilePath(templatePath.GetFilename().ChangeExtension(".cs"));
File.WriteAllText(file.FullPath, result);
}
return 0;
}
}
public sealed class GeneratorCommandSettings : CommandSettings
{
[CommandArgument(0, "<OUTPUT>")]
public string Output { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Remove="out\**" />
<EmbeddedResource Remove="out\**" />
<None Remove="out\**" />
</ItemGroup>
<ItemGroup>
<None Update="Data\colors.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Templates\ColorTable.Generated.template">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Templates\Color.Generated.template">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Templates\ColorPalette.Generated.template">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="Scriban" Version="2.1.3" />
<PackageReference Include="Spectre.Cli" Version="0.36.1-preview.0.6" />
<PackageReference Include="Spectre.IO" Version="0.1.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,37 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30320.27
MinimumVisualStudioVersion = 15.0.26124.0
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Generator", "Generator.csproj", "{5668D267-53E3-4B99-97AE-59AA597D22ED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|x64.ActiveCfg = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|x64.Build.0 = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|x86.ActiveCfg = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Debug|x86.Build.0 = Debug|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|Any CPU.Build.0 = Release|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|x64.ActiveCfg = Release|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|x64.Build.0 = Release|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|x86.ActiveCfg = Release|Any CPU
{5668D267-53E3-4B99-97AE-59AA597D22ED}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5F37FDE3-D591-4D43-8DDE-2ED6BAB0A7B4}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
namespace Generator.Models
{
public sealed class Color
{
public int Number { get; set; }
public string Hex { get; set; }
public string Name { get; set; }
public Rgb Rgb { get; set; }
public int R => Rgb.R;
public int G => Rgb.G;
public int B => Rgb.B;
public static IEnumerable<Color> Parse(string json)
{
var source = JsonConvert.DeserializeObject<List<Color>>(json);
var check = new Dictionary<string, Color>(StringComparer.OrdinalIgnoreCase);
foreach (var color in source.OrderBy(c => c.Number))
{
if (!check.ContainsKey(color.Name))
{
check.Add(color.Name, color);
}
else
{
var newName = (string)null;
for (int i = 1; i < 100; i++)
{
if (!check.ContainsKey($"{color.Name}_{i}"))
{
newName = $"{color.Name}_{i}";
break;
}
}
if (newName == null)
{
throw new InvalidOperationException("Impossible!");
}
check.Add(newName, color);
color.Name = newName;
}
}
return source;
}
}
public sealed class Rgb
{
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
}
}

View File

@ -0,0 +1,14 @@
using System.Collections.Generic;
namespace Generator.Models
{
public sealed class ColorModel
{
public List<Color> Colors { get; set; }
public ColorModel(IEnumerable<Color> colors)
{
Colors = new List<Color>(colors);
}
}
}

View File

@ -0,0 +1,6 @@
namespace Generator.Models
{
public sealed class Palette
{
}
}

19
eng/Generator/Program.cs Normal file
View File

@ -0,0 +1,19 @@
using Generator.Commands;
using Spectre.Cli;
namespace Generator
{
public static class Program
{
public static int Main(string[] args)
{
var app = new CommandApp();
app.Configure(config =>
{
config.AddCommand<ColorGeneratorCommand>("colors");
});
return app.Run(args);
}
}
}

View File

@ -0,0 +1,36 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated {{ date.now | date.to_string `%Y-%m-%d %k:%M` }}
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Diagnostics.CodeAnalysis;
namespace Spectre.Console
{
/// <summary>
/// Represents a color.
/// </summary>
public partial struct Color
{
internal Color(byte number, byte red, byte green, byte blue, bool isDefault = false)
: this(red, green, blue)
{
Number = number;
IsDefault = isDefault;
}
{{~ for color in colors }}
/// <summary>
/// Gets the color "{{ color.name }}" (RGB {{ color.r }},{{ color.g }},{{ color.b }}).
/// </summary>
{{- if string.contains color.name "_" }}
[SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores")]
{{- end}}
public static Color {{ color.name }} { get; } = new Color({{ color.number }}, {{ color.r }}, {{ color.g }}, {{ color.b }});
{{~ end ~}}
}
}

View File

@ -0,0 +1,47 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated {{ date.now | date.to_string `%Y-%m-%d %k:%M` }}
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Collections.Generic;
namespace Spectre.Console.Internal
{
internal static partial class ColorPalette
{
private static List<Color> GenerateLegacyPalette()
{
return new List<Color>
{
{{~ for number in 0..7 ~}}
Color.{{ colors[number].name }},
{{~ end ~}}
};
}
private static List<Color> GenerateStandardPalette(IReadOnlyList<Color> legacy)
{
return new List<Color>(legacy)
{
{{~ for number in 8..15 ~}}
Color.{{ colors[number].name }},
{{~ end ~}}
};
}
private static List<Color> GenerateEightBitPalette(IReadOnlyList<Color> standard)
{
return new List<Color>(standard)
{
{{~ for number in 16..255 ~}}
Color.{{ colors[number].name }},
{{~ end ~}}
};
}
}
}

View File

@ -0,0 +1,28 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated {{ date.now | date.to_string `%Y-%m-%d %k:%M` }}
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace Spectre.Console.Internal
{
internal static partial class ColorTable
{
private static Dictionary<string, int> GenerateTable()
{
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{
{{~ for color in colors ~}}
{ "{{ string.downcase color.name }}", {{ color.number }} },
{{~ end ~}}
};
}
}
}

View File

@ -1,3 +1,13 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated 2020-08-03 15:17
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Diagnostics.CodeAnalysis;
namespace Spectre.Console
@ -1348,4 +1358,4 @@ namespace Spectre.Console
/// </summary>
public static Color Grey93 { get; } = new Color(255, 238, 238, 238);
}
}
}

View File

@ -0,0 +1,294 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated 2020-08-03 15:17
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Collections.Generic;
namespace Spectre.Console.Internal
{
internal static partial class ColorPalette
{
private static List<Color> GenerateLegacyPalette()
{
return new List<Color>
{
Color.Black,
Color.Maroon,
Color.Green,
Color.Olive,
Color.Navy,
Color.Purple,
Color.Teal,
Color.Silver,
};
}
private static List<Color> GenerateStandardPalette(IReadOnlyList<Color> legacy)
{
return new List<Color>(legacy)
{
Color.Grey,
Color.Red,
Color.Lime,
Color.Yellow,
Color.Blue,
Color.Fuchsia,
Color.Aqua,
Color.White,
};
}
private static List<Color> GenerateEightBitPalette(IReadOnlyList<Color> standard)
{
return new List<Color>(standard)
{
Color.Grey0,
Color.NavyBlue,
Color.DarkBlue,
Color.Blue3,
Color.Blue3_1,
Color.Blue1,
Color.DarkGreen,
Color.DeepSkyBlue4,
Color.DeepSkyBlue4_1,
Color.DeepSkyBlue4_2,
Color.DodgerBlue3,
Color.DodgerBlue2,
Color.Green4,
Color.SpringGreen4,
Color.Turquoise4,
Color.DeepSkyBlue3,
Color.DeepSkyBlue3_1,
Color.DodgerBlue1,
Color.Green3,
Color.SpringGreen3,
Color.DarkCyan,
Color.LightSeaGreen,
Color.DeepSkyBlue2,
Color.DeepSkyBlue1,
Color.Green3_1,
Color.SpringGreen3_1,
Color.SpringGreen2,
Color.Cyan3,
Color.DarkTurquoise,
Color.Turquoise2,
Color.Green1,
Color.SpringGreen2_1,
Color.SpringGreen1,
Color.MediumSpringGreen,
Color.Cyan2,
Color.Cyan1,
Color.DarkRed,
Color.DeepPink4,
Color.Purple4,
Color.Purple4_1,
Color.Purple3,
Color.BlueViolet,
Color.Orange4,
Color.Grey37,
Color.MediumPurple4,
Color.SlateBlue3,
Color.SlateBlue3_1,
Color.RoyalBlue1,
Color.Chartreuse4,
Color.DarkSeaGreen4,
Color.PaleTurquoise4,
Color.SteelBlue,
Color.SteelBlue3,
Color.CornflowerBlue,
Color.Chartreuse3,
Color.DarkSeaGreen4_1,
Color.CadetBlue,
Color.CadetBlue_1,
Color.SkyBlue3,
Color.SteelBlue1,
Color.Chartreuse3_1,
Color.PaleGreen3,
Color.SeaGreen3,
Color.Aquamarine3,
Color.MediumTurquoise,
Color.SteelBlue1_1,
Color.Chartreuse2,
Color.SeaGreen2,
Color.SeaGreen1,
Color.SeaGreen1_1,
Color.Aquamarine1,
Color.DarkSlateGray2,
Color.DarkRed_1,
Color.DeepPink4_1,
Color.DarkMagenta,
Color.DarkMagenta_1,
Color.DarkViolet,
Color.Purple_1,
Color.Orange4_1,
Color.LightPink4,
Color.Plum4,
Color.MediumPurple3,
Color.MediumPurple3_1,
Color.SlateBlue1,
Color.Yellow4,
Color.Wheat4,
Color.Grey53,
Color.LightSlateGrey,
Color.MediumPurple,
Color.LightSlateBlue,
Color.Yellow4_1,
Color.DarkOliveGreen3,
Color.DarkSeaGreen,
Color.LightSkyBlue3,
Color.LightSkyBlue3_1,
Color.SkyBlue2,
Color.Chartreuse2_1,
Color.DarkOliveGreen3_1,
Color.PaleGreen3_1,
Color.DarkSeaGreen3,
Color.DarkSlateGray3,
Color.SkyBlue1,
Color.Chartreuse1,
Color.LightGreen,
Color.LightGreen_1,
Color.PaleGreen1,
Color.Aquamarine1_1,
Color.DarkSlateGray1,
Color.Red3,
Color.DeepPink4_2,
Color.MediumVioletRed,
Color.Magenta3,
Color.DarkViolet_1,
Color.Purple_2,
Color.DarkOrange3,
Color.IndianRed,
Color.HotPink3,
Color.MediumOrchid3,
Color.MediumOrchid,
Color.MediumPurple2,
Color.DarkGoldenrod,
Color.LightSalmon3,
Color.RosyBrown,
Color.Grey63,
Color.MediumPurple2_1,
Color.MediumPurple1,
Color.Gold3,
Color.DarkKhaki,
Color.NavajoWhite3,
Color.Grey69,
Color.LightSteelBlue3,
Color.LightSteelBlue,
Color.Yellow3,
Color.DarkOliveGreen3_2,
Color.DarkSeaGreen3_1,
Color.DarkSeaGreen2,
Color.LightCyan3,
Color.LightSkyBlue1,
Color.GreenYellow,
Color.DarkOliveGreen2,
Color.PaleGreen1_1,
Color.DarkSeaGreen2_1,
Color.DarkSeaGreen1,
Color.PaleTurquoise1,
Color.Red3_1,
Color.DeepPink3,
Color.DeepPink3_1,
Color.Magenta3_1,
Color.Magenta3_2,
Color.Magenta2,
Color.DarkOrange3_1,
Color.IndianRed_1,
Color.HotPink3_1,
Color.HotPink2,
Color.Orchid,
Color.MediumOrchid1,
Color.Orange3,
Color.LightSalmon3_1,
Color.LightPink3,
Color.Pink3,
Color.Plum3,
Color.Violet,
Color.Gold3_1,
Color.LightGoldenrod3,
Color.Tan,
Color.MistyRose3,
Color.Thistle3,
Color.Plum2,
Color.Yellow3_1,
Color.Khaki3,
Color.LightGoldenrod2,
Color.LightYellow3,
Color.Grey84,
Color.LightSteelBlue1,
Color.Yellow2,
Color.DarkOliveGreen1,
Color.DarkOliveGreen1_1,
Color.DarkSeaGreen1_1,
Color.Honeydew2,
Color.LightCyan1,
Color.Red1,
Color.DeepPink2,
Color.DeepPink1,
Color.DeepPink1_1,
Color.Magenta2_1,
Color.Magenta1,
Color.OrangeRed1,
Color.IndianRed1,
Color.IndianRed1_1,
Color.HotPink,
Color.HotPink_1,
Color.MediumOrchid1_1,
Color.DarkOrange,
Color.Salmon1,
Color.LightCoral,
Color.PaleVioletRed1,
Color.Orchid2,
Color.Orchid1,
Color.Orange1,
Color.SandyBrown,
Color.LightSalmon1,
Color.LightPink1,
Color.Pink1,
Color.Plum1,
Color.Gold1,
Color.LightGoldenrod2_1,
Color.LightGoldenrod2_2,
Color.NavajoWhite1,
Color.MistyRose1,
Color.Thistle1,
Color.Yellow1,
Color.LightGoldenrod1,
Color.Khaki1,
Color.Wheat1,
Color.Cornsilk1,
Color.Grey100,
Color.Grey3,
Color.Grey7,
Color.Grey11,
Color.Grey15,
Color.Grey19,
Color.Grey23,
Color.Grey27,
Color.Grey30,
Color.Grey35,
Color.Grey39,
Color.Grey42,
Color.Grey46,
Color.Grey50,
Color.Grey54,
Color.Grey58,
Color.Grey62,
Color.Grey66,
Color.Grey70,
Color.Grey74,
Color.Grey78,
Color.Grey82,
Color.Grey85,
Color.Grey89,
Color.Grey93,
};
}
}
}

View File

@ -4,7 +4,7 @@ using System.Linq;
namespace Spectre.Console.Internal
{
internal static class ColorPalette
internal static partial class ColorPalette
{
public static IReadOnlyList<Color> Legacy { get; }
public static IReadOnlyList<Color> Standard { get; }
@ -12,81 +12,9 @@ namespace Spectre.Console.Internal
static ColorPalette()
{
Legacy = new List<Color>
{
Color.Black, Color.Maroon, Color.Green, Color.Olive,
Color.Navy, Color.Purple, Color.Teal, Color.Silver,
};
Standard = new List<Color>(Legacy)
{
Color.Grey, Color.Red, Color.Lime, Color.Yellow,
Color.Blue, Color.Fuchsia, Color.Aqua, Color.White,
};
EightBit = new List<Color>(Standard)
{
Color.Grey0, Color.NavyBlue, Color.DarkBlue, Color.Blue3,
Color.Blue3_1, Color.Blue1, Color.DarkGreen, Color.DeepSkyBlue4,
Color.DeepSkyBlue4_1, Color.DeepSkyBlue4_2, Color.DodgerBlue3, Color.DodgerBlue2,
Color.Green4, Color.SpringGreen4, Color.Turquoise4, Color.DeepSkyBlue3,
Color.DeepSkyBlue3_1, Color.DodgerBlue1, Color.Green3, Color.SpringGreen3,
Color.DarkCyan, Color.LightSeaGreen, Color.DeepSkyBlue2, Color.DeepSkyBlue1,
Color.Green3_1, Color.SpringGreen3_1, Color.SpringGreen2, Color.Cyan3,
Color.DarkTurquoise, Color.Turquoise2, Color.Green1, Color.SpringGreen2_1,
Color.SpringGreen1, Color.MediumSpringGreen, Color.Cyan2, Color.Cyan1,
Color.DarkRed, Color.DeepPink4, Color.Purple4, Color.Purple4_1,
Color.Purple3, Color.BlueViolet, Color.Orange4, Color.Grey37,
Color.MediumPurple4, Color.SlateBlue3, Color.SlateBlue3_1, Color.RoyalBlue1,
Color.Chartreuse4, Color.DarkSeaGreen4, Color.PaleTurquoise4, Color.SteelBlue,
Color.SteelBlue3, Color.CornflowerBlue, Color.Chartreuse3, Color.DarkSeaGreen4_1,
Color.CadetBlue, Color.CadetBlue_1, Color.SkyBlue3, Color.SteelBlue1,
Color.Chartreuse3_1, Color.PaleGreen3, Color.SeaGreen3, Color.Aquamarine3,
Color.MediumTurquoise, Color.SteelBlue1_1, Color.Chartreuse2, Color.SeaGreen2,
Color.SeaGreen1, Color.SeaGreen1_1, Color.Aquamarine1, Color.DarkSlateGray2,
Color.DarkRed_1, Color.DeepPink4_1, Color.DarkMagenta, Color.DarkMagenta_1,
Color.DarkViolet, Color.Purple_1, Color.Orange4_1, Color.LightPink4,
Color.Plum4, Color.MediumPurple3, Color.MediumPurple3_1, Color.SlateBlue1,
Color.Yellow4, Color.Wheat4, Color.Grey53, Color.LightSlateGrey,
Color.MediumPurple, Color.LightSlateBlue, Color.Yellow4_1, Color.DarkOliveGreen3,
Color.DarkSeaGreen, Color.LightSkyBlue3, Color.LightSkyBlue3_1, Color.SkyBlue2,
Color.Chartreuse2_1, Color.DarkOliveGreen3_1, Color.PaleGreen3_1, Color.DarkSeaGreen3,
Color.DarkSlateGray3, Color.SkyBlue1, Color.Chartreuse1, Color.LightGreen,
Color.LightGreen_1, Color.PaleGreen1, Color.Aquamarine1_1, Color.DarkSlateGray1,
Color.Red3, Color.DeepPink4_2, Color.MediumVioletRed, Color.Magenta3,
Color.DarkViolet_1, Color.Purple_2, Color.DarkOrange3, Color.IndianRed,
Color.HotPink3, Color.MediumOrchid3, Color.MediumOrchid, Color.MediumPurple2,
Color.DarkGoldenrod, Color.LightSalmon3, Color.RosyBrown, Color.Grey63,
Color.MediumPurple2_1, Color.MediumPurple1, Color.Gold3, Color.DarkKhaki,
Color.NavajoWhite3, Color.Grey69, Color.LightSteelBlue3, Color.LightSteelBlue,
Color.Yellow3, Color.DarkOliveGreen3_2, Color.DarkSeaGreen3_1, Color.DarkSeaGreen2,
Color.LightCyan3, Color.LightSkyBlue1, Color.GreenYellow, Color.DarkOliveGreen2,
Color.PaleGreen1_1, Color.DarkSeaGreen2_1, Color.DarkSeaGreen1, Color.PaleTurquoise1,
Color.Red3_1, Color.DeepPink3, Color.DeepPink3_1, Color.Magenta3_1,
Color.Magenta3_2, Color.Magenta2, Color.DarkOrange3_1, Color.IndianRed_1,
Color.HotPink3_1, Color.HotPink2, Color.Orchid, Color.MediumOrchid1,
Color.Orange3, Color.LightSalmon3_1, Color.LightPink3, Color.Pink3,
Color.Plum3, Color.Violet, Color.Gold3_1, Color.LightGoldenrod3,
Color.Tan, Color.MistyRose3, Color.Thistle3, Color.Plum2,
Color.Yellow3_1, Color.Khaki3, Color.LightGoldenrod2, Color.LightYellow3,
Color.Grey84, Color.LightSteelBlue1, Color.Yellow2, Color.DarkOliveGreen1,
Color.DarkOliveGreen1_1, Color.DarkSeaGreen1_1, Color.Honeydew2, Color.LightCyan1,
Color.Red1, Color.DeepPink2, Color.DeepPink1, Color.DeepPink1_1,
Color.Magenta2_1, Color.Magenta1, Color.OrangeRed1, Color.IndianRed1,
Color.IndianRed1_1, Color.HotPink, Color.HotPink_1, Color.MediumOrchid1_1,
Color.DarkOrange, Color.Salmon1, Color.LightCoral, Color.PaleVioletRed1,
Color.Orchid2, Color.Orchid1, Color.Orange1, Color.SandyBrown,
Color.LightSalmon1, Color.LightPink1, Color.Pink1, Color.Plum1,
Color.Gold1, Color.LightGoldenrod2_1, Color.LightGoldenrod2_2, Color.NavajoWhite1,
Color.MistyRose1, Color.Thistle1, Color.Yellow1, Color.LightGoldenrod1,
Color.Khaki1, Color.Wheat1, Color.Cornsilk1, Color.Grey100,
Color.Grey3, Color.Grey7, Color.Grey11, Color.Grey15,
Color.Grey19, Color.Grey23, Color.Grey27, Color.Grey30,
Color.Grey35, Color.Grey39, Color.Grey42, Color.Grey46,
Color.Grey50, Color.Grey54, Color.Grey58, Color.Grey62,
Color.Grey66, Color.Grey70, Color.Grey74, Color.Grey78,
Color.Grey82, Color.Grey85, Color.Grey89, Color.Grey93,
};
Legacy = GenerateLegacyPalette();
Standard = GenerateStandardPalette(Legacy);
EightBit = GenerateEightBitPalette(Standard);
}
internal static Color ExactOrClosest(ColorSystem system, Color color)

View File

@ -0,0 +1,281 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Generated 2020-08-03 15:17
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace Spectre.Console.Internal
{
internal static partial class ColorTable
{
private static Dictionary<string, int> GenerateTable()
{
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{
{ "black", 0 },
{ "maroon", 1 },
{ "green", 2 },
{ "olive", 3 },
{ "navy", 4 },
{ "purple", 5 },
{ "teal", 6 },
{ "silver", 7 },
{ "grey", 8 },
{ "red", 9 },
{ "lime", 10 },
{ "yellow", 11 },
{ "blue", 12 },
{ "fuchsia", 13 },
{ "aqua", 14 },
{ "white", 15 },
{ "grey0", 16 },
{ "navyblue", 17 },
{ "darkblue", 18 },
{ "blue3", 19 },
{ "blue3_1", 20 },
{ "blue1", 21 },
{ "darkgreen", 22 },
{ "deepskyblue4", 23 },
{ "deepskyblue4_1", 24 },
{ "deepskyblue4_2", 25 },
{ "dodgerblue3", 26 },
{ "dodgerblue2", 27 },
{ "green4", 28 },
{ "springgreen4", 29 },
{ "turquoise4", 30 },
{ "deepskyblue3", 31 },
{ "deepskyblue3_1", 32 },
{ "dodgerblue1", 33 },
{ "green3", 34 },
{ "springgreen3", 35 },
{ "darkcyan", 36 },
{ "lightseagreen", 37 },
{ "deepskyblue2", 38 },
{ "deepskyblue1", 39 },
{ "green3_1", 40 },
{ "springgreen3_1", 41 },
{ "springgreen2", 42 },
{ "cyan3", 43 },
{ "darkturquoise", 44 },
{ "turquoise2", 45 },
{ "green1", 46 },
{ "springgreen2_1", 47 },
{ "springgreen1", 48 },
{ "mediumspringgreen", 49 },
{ "cyan2", 50 },
{ "cyan1", 51 },
{ "darkred", 52 },
{ "deeppink4", 53 },
{ "purple4", 54 },
{ "purple4_1", 55 },
{ "purple3", 56 },
{ "blueviolet", 57 },
{ "orange4", 58 },
{ "grey37", 59 },
{ "mediumpurple4", 60 },
{ "slateblue3", 61 },
{ "slateblue3_1", 62 },
{ "royalblue1", 63 },
{ "chartreuse4", 64 },
{ "darkseagreen4", 65 },
{ "paleturquoise4", 66 },
{ "steelblue", 67 },
{ "steelblue3", 68 },
{ "cornflowerblue", 69 },
{ "chartreuse3", 70 },
{ "darkseagreen4_1", 71 },
{ "cadetblue", 72 },
{ "cadetblue_1", 73 },
{ "skyblue3", 74 },
{ "steelblue1", 75 },
{ "chartreuse3_1", 76 },
{ "palegreen3", 77 },
{ "seagreen3", 78 },
{ "aquamarine3", 79 },
{ "mediumturquoise", 80 },
{ "steelblue1_1", 81 },
{ "chartreuse2", 82 },
{ "seagreen2", 83 },
{ "seagreen1", 84 },
{ "seagreen1_1", 85 },
{ "aquamarine1", 86 },
{ "darkslategray2", 87 },
{ "darkred_1", 88 },
{ "deeppink4_1", 89 },
{ "darkmagenta", 90 },
{ "darkmagenta_1", 91 },
{ "darkviolet", 92 },
{ "purple_1", 93 },
{ "orange4_1", 94 },
{ "lightpink4", 95 },
{ "plum4", 96 },
{ "mediumpurple3", 97 },
{ "mediumpurple3_1", 98 },
{ "slateblue1", 99 },
{ "yellow4", 100 },
{ "wheat4", 101 },
{ "grey53", 102 },
{ "lightslategrey", 103 },
{ "mediumpurple", 104 },
{ "lightslateblue", 105 },
{ "yellow4_1", 106 },
{ "darkolivegreen3", 107 },
{ "darkseagreen", 108 },
{ "lightskyblue3", 109 },
{ "lightskyblue3_1", 110 },
{ "skyblue2", 111 },
{ "chartreuse2_1", 112 },
{ "darkolivegreen3_1", 113 },
{ "palegreen3_1", 114 },
{ "darkseagreen3", 115 },
{ "darkslategray3", 116 },
{ "skyblue1", 117 },
{ "chartreuse1", 118 },
{ "lightgreen", 119 },
{ "lightgreen_1", 120 },
{ "palegreen1", 121 },
{ "aquamarine1_1", 122 },
{ "darkslategray1", 123 },
{ "red3", 124 },
{ "deeppink4_2", 125 },
{ "mediumvioletred", 126 },
{ "magenta3", 127 },
{ "darkviolet_1", 128 },
{ "purple_2", 129 },
{ "darkorange3", 130 },
{ "indianred", 131 },
{ "hotpink3", 132 },
{ "mediumorchid3", 133 },
{ "mediumorchid", 134 },
{ "mediumpurple2", 135 },
{ "darkgoldenrod", 136 },
{ "lightsalmon3", 137 },
{ "rosybrown", 138 },
{ "grey63", 139 },
{ "mediumpurple2_1", 140 },
{ "mediumpurple1", 141 },
{ "gold3", 142 },
{ "darkkhaki", 143 },
{ "navajowhite3", 144 },
{ "grey69", 145 },
{ "lightsteelblue3", 146 },
{ "lightsteelblue", 147 },
{ "yellow3", 148 },
{ "darkolivegreen3_2", 149 },
{ "darkseagreen3_1", 150 },
{ "darkseagreen2", 151 },
{ "lightcyan3", 152 },
{ "lightskyblue1", 153 },
{ "greenyellow", 154 },
{ "darkolivegreen2", 155 },
{ "palegreen1_1", 156 },
{ "darkseagreen2_1", 157 },
{ "darkseagreen1", 158 },
{ "paleturquoise1", 159 },
{ "red3_1", 160 },
{ "deeppink3", 161 },
{ "deeppink3_1", 162 },
{ "magenta3_1", 163 },
{ "magenta3_2", 164 },
{ "magenta2", 165 },
{ "darkorange3_1", 166 },
{ "indianred_1", 167 },
{ "hotpink3_1", 168 },
{ "hotpink2", 169 },
{ "orchid", 170 },
{ "mediumorchid1", 171 },
{ "orange3", 172 },
{ "lightsalmon3_1", 173 },
{ "lightpink3", 174 },
{ "pink3", 175 },
{ "plum3", 176 },
{ "violet", 177 },
{ "gold3_1", 178 },
{ "lightgoldenrod3", 179 },
{ "tan", 180 },
{ "mistyrose3", 181 },
{ "thistle3", 182 },
{ "plum2", 183 },
{ "yellow3_1", 184 },
{ "khaki3", 185 },
{ "lightgoldenrod2", 186 },
{ "lightyellow3", 187 },
{ "grey84", 188 },
{ "lightsteelblue1", 189 },
{ "yellow2", 190 },
{ "darkolivegreen1", 191 },
{ "darkolivegreen1_1", 192 },
{ "darkseagreen1_1", 193 },
{ "honeydew2", 194 },
{ "lightcyan1", 195 },
{ "red1", 196 },
{ "deeppink2", 197 },
{ "deeppink1", 198 },
{ "deeppink1_1", 199 },
{ "magenta2_1", 200 },
{ "magenta1", 201 },
{ "orangered1", 202 },
{ "indianred1", 203 },
{ "indianred1_1", 204 },
{ "hotpink", 205 },
{ "hotpink_1", 206 },
{ "mediumorchid1_1", 207 },
{ "darkorange", 208 },
{ "salmon1", 209 },
{ "lightcoral", 210 },
{ "palevioletred1", 211 },
{ "orchid2", 212 },
{ "orchid1", 213 },
{ "orange1", 214 },
{ "sandybrown", 215 },
{ "lightsalmon1", 216 },
{ "lightpink1", 217 },
{ "pink1", 218 },
{ "plum1", 219 },
{ "gold1", 220 },
{ "lightgoldenrod2_1", 221 },
{ "lightgoldenrod2_2", 222 },
{ "navajowhite1", 223 },
{ "mistyrose1", 224 },
{ "thistle1", 225 },
{ "yellow1", 226 },
{ "lightgoldenrod1", 227 },
{ "khaki1", 228 },
{ "wheat1", 229 },
{ "cornsilk1", 230 },
{ "grey100", 231 },
{ "grey3", 232 },
{ "grey7", 233 },
{ "grey11", 234 },
{ "grey15", 235 },
{ "grey19", 236 },
{ "grey23", 237 },
{ "grey27", 238 },
{ "grey30", 239 },
{ "grey35", 240 },
{ "grey39", 241 },
{ "grey42", 242 },
{ "grey46", 243 },
{ "grey50", 244 },
{ "grey54", 245 },
{ "grey58", 246 },
{ "grey62", 247 },
{ "grey66", 248 },
{ "grey70", 249 },
{ "grey74", 250 },
{ "grey78", 251 },
{ "grey82", 252 },
{ "grey85", 253 },
{ "grey89", 254 },
{ "grey93", 255 },
};
}
}
}

View File

@ -4,7 +4,7 @@ using System.Diagnostics.CodeAnalysis;
namespace Spectre.Console.Internal
{
internal static class ColorTable
internal static partial class ColorTable
{
private static readonly Dictionary<int, string> _nameLookup;
private static readonly Dictionary<string, int> _numberLookup;
@ -12,73 +12,7 @@ namespace Spectre.Console.Internal
[SuppressMessage("Performance", "CA1810:Initialize reference type static fields inline")]
static ColorTable()
{
_numberLookup = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{
{ "black", 0 }, { "maroon", 1 }, { "green", 2 }, { "olive", 3 }, { "navy", 4 },
{ "purple", 5 }, { "teal", 6 }, { "silver", 7 }, { "grey", 8 },
{ "red", 9 }, { "lime", 10 }, { "yellow", 11 }, { "blue", 12 },
{ "fuchsia", 13 }, { "aqua", 14 }, { "white", 15 }, { "grey0", 16 },
{ "navyblue", 17 }, { "darkblue", 18 }, { "blue3", 19 }, { "blue3_1", 20 },
{ "blue1", 21 }, { "darkgreen", 22 }, { "deepskyblue4", 23 }, { "deepskyblue4_1", 24 },
{ "deepskyblue4_2", 25 }, { "dodgerblue3", 26 }, { "dodgerblue2", 27 }, { "green4", 28 },
{ "springgreen4", 29 }, { "turquoise4", 30 }, { "deepskyblue3", 31 }, { "deepskyblue3_1", 32 },
{ "dodgerblue1", 33 }, { "green3", 34 }, { "springgreen3", 35 }, { "darkcyan", 36 },
{ "lightseagreen", 37 }, { "deepskyblue2", 38 }, { "deepskyblue1", 39 }, { "green3_1", 40 },
{ "springgreen3_1", 41 }, { "springgreen2", 42 }, { "cyan3", 43 }, { "darkturquoise", 44 },
{ "turquoise2", 45 }, { "green1", 46 }, { "springgreen2_1", 47 }, { "springgreen1", 48 },
{ "mediumspringgreen", 49 }, { "cyan2", 50 }, { "cyan1", 51 }, { "darkred", 52 },
{ "deeppink4", 53 }, { "purple4", 54 }, { "purple4_1", 55 }, { "purple3", 56 },
{ "blueviolet", 57 }, { "orange4", 58 }, { "grey37", 59 }, { "mediumpurple4", 60 },
{ "slateblue3", 61 }, { "slateblue3_1", 62 }, { "royalblue1", 63 }, { "chartreuse4", 64 },
{ "darkseagreen4", 65 }, { "paleturquoise4", 66 }, { "steelblue", 67 }, { "steelblue3", 68 },
{ "cornflowerblue", 69 }, { "chartreuse3", 70 }, { "darkseagreen4_1", 71 }, { "cadetblue", 72 },
{ "cadetblue_1", 73 }, { "skyblue3", 74 }, { "steelblue1", 75 }, { "chartreuse3_1", 76 },
{ "palegreen3", 77 }, { "seagreen3", 78 }, { "aquamarine3", 79 }, { "mediumturquoise", 80 },
{ "steelblue1_1", 81 }, { "chartreuse2", 82 }, { "seagreen2", 83 }, { "seagreen1", 84 },
{ "seagreen1_1", 85 }, { "aquamarine1", 86 }, { "darkslategray2", 87 }, { "darkred_1", 88 },
{ "deeppink4_1", 89 }, { "darkmagenta", 90 }, { "darkmagenta_1", 91 }, { "darkviolet", 92 },
{ "purple_1", 93 }, { "orange4_1", 94 }, { "lightpink4", 95 }, { "plum4", 96 },
{ "mediumpurple3", 97 }, { "mediumpurple3_1", 98 }, { "slateblue1", 99 }, { "yellow4", 100 },
{ "wheat4", 101 }, { "grey53", 102 }, { "lightslategrey", 103 }, { "mediumpurple", 104 },
{ "lightslateblue", 105 }, { "yellow4_1", 106 }, { "darkolivegreen3", 107 }, { "darkseagreen", 108 },
{ "lightskyblue3", 109 }, { "lightskyblue3_1", 110 }, { "skyblue2", 111 }, { "chartreuse2_1", 112 },
{ "darkolivegreen3_1", 113 }, { "palegreen3_1", 114 }, { "darkseagreen3", 115 }, { "darkslategray3", 116 },
{ "skyblue1", 117 }, { "chartreuse1", 118 }, { "lightgreen", 119 }, { "lightgreen_1", 120 },
{ "palegreen1", 121 }, { "aquamarine1_1", 122 }, { "darkslategray1", 123 }, { "red3", 124 },
{ "deeppink4_2", 125 }, { "mediumvioletred", 126 }, { "magenta3", 127 }, { "darkviolet_1", 128 },
{ "purple_2", 129 }, { "darkorange3", 130 }, { "indianred", 131 }, { "hotpink3", 132 },
{ "mediumorchid3", 133 }, { "mediumorchid", 134 }, { "mediumpurple2", 135 }, { "darkgoldenrod", 136 },
{ "lightsalmon3", 137 }, { "rosybrown", 138 }, { "grey63", 139 }, { "mediumpurple2_1", 140 },
{ "mediumpurple1", 141 }, { "gold3", 142 }, { "darkkhaki", 143 }, { "navajowhite3", 144 },
{ "grey69", 145 }, { "lightsteelblue3", 146 }, { "lightsteelblue", 147 }, { "yellow3", 148 },
{ "darkolivegreen3_2", 149 }, { "darkseagreen3_1", 150 }, { "darkseagreen2", 151 }, { "lightcyan3", 152 },
{ "lightskyblue1", 153 }, { "greenyellow", 154 }, { "darkolivegreen2", 155 }, { "palegreen1_1", 156 },
{ "darkseagreen2_1", 157 }, { "darkseagreen1", 158 }, { "paleturquoise1", 159 }, { "red3_1", 160 },
{ "deeppink3", 161 }, { "deeppink3_1", 162 }, { "magenta3_1", 163 }, { "magenta3_2", 164 },
{ "magenta2", 165 }, { "darkorange3_1", 166 }, { "indianred_1", 167 }, { "hotpink3_1", 168 },
{ "hotpink2", 169 }, { "orchid", 170 }, { "mediumorchid1", 171 }, { "orange3", 172 },
{ "lightsalmon3_1", 173 }, { "lightpink3", 174 }, { "pink3", 175 }, { "plum3", 176 },
{ "violet", 177 }, { "gold3_1", 178 }, { "lightgoldenrod3", 179 }, { "tan", 180 },
{ "mistyrose3", 181 }, { "thistle3", 182 }, { "plum2", 183 }, { "yellow3_1", 184 },
{ "khaki3", 185 }, { "lightgoldenrod2", 186 }, { "lightyellow3", 187 }, { "grey84", 188 },
{ "lightsteelblue1", 189 }, { "yellow2", 190 }, { "darkolivegreen1", 191 }, { "darkolivegreen1_1", 192 },
{ "darkseagreen1_1", 193 }, { "honeydew2", 194 }, { "lightcyan1", 195 }, { "red1", 196 },
{ "deeppink2", 197 }, { "deeppink1", 198 }, { "deeppink1_1", 199 }, { "magenta2_1", 200 },
{ "magenta1", 201 }, { "orangered1", 202 }, { "indianred1", 203 }, { "indianred1_1", 204 },
{ "hotpink", 205 }, { "hotpink_1", 206 }, { "mediumorchid1_1", 207 }, { "darkorange", 208 },
{ "salmon1", 209 }, { "lightcoral", 210 }, { "palevioletred1", 211 }, { "orchid2", 212 },
{ "orchid1", 213 }, { "orange1", 214 }, { "sandybrown", 215 }, { "lightsalmon1", 216 },
{ "lightpink1", 217 }, { "pink1", 218 }, { "plum1", 219 }, { "gold1", 220 },
{ "lightgoldenrod2_1", 221 }, { "lightgoldenrod2_2", 222 }, { "navajowhite1", 223 }, { "mistyrose1", 224 },
{ "thistle1", 225 }, { "yellow1", 226 }, { "lightgoldenrod1", 227 }, { "khaki1", 228 },
{ "wheat1", 229 }, { "cornsilk1", 230 }, { "grey100", 231 }, { "grey3", 232 },
{ "grey7", 233 }, { "grey11", 234 }, { "grey15", 235 }, { "grey19", 236 },
{ "grey23", 237 }, { "grey27", 238 }, { "grey30", 239 }, { "grey35", 240 },
{ "grey39", 241 }, { "grey42", 242 }, { "grey46", 243 }, { "grey50", 244 },
{ "grey54", 245 }, { "grey58", 246 }, { "grey62", 247 }, { "grey66", 248 },
{ "grey70", 249 }, { "grey74", 250 }, { "grey78", 251 }, { "grey82", 252 },
};
_numberLookup = GenerateTable();
_nameLookup = new Dictionary<int, string>();
foreach (var pair in _numberLookup)
{

View File

@ -9,6 +9,9 @@
</ItemGroup>
<ItemGroup>
<Compile Update="**/ColorPalette.*.cs">
<DependentUpon>**/ColorPalette.cs</DependentUpon>
</Compile>
<Compile Update="Color.*.cs">
<DependentUpon>Color.cs</DependentUpon>
</Compile>
@ -18,6 +21,7 @@
<Compile Update="ConsoleExtensions.*.cs">
<DependentUpon>ConsoleExtensions.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>