public override string ToString(string format, IFormatProvider formatProvider) { var engine = formatProvider as KalkEngine; var builder = new StringBuilder(); builder.Append(TypeName); builder.Append('('); var length = this is KalkColorRgb ? 3 : 4; for (int i = 0; i < length; i++) { if (i > 0) { builder.Append(", "); } builder.Append(engine != null ? engine.ObjectToString(this[i]) : this[i].ToString(null, formatProvider)); } builder.Append(')'); bool isAligned = format == "aligned"; // rgb(240, 248, 255) // rgb(255, 255, 255, 255) if (isAligned) { if (length == 3) { builder.Append(' ', "rgb(255, 255, 255)".Length - builder.Length); } else if (length == 4) { builder.Append(' ', "rgb(255, 255, 255, 255)".Length - builder.Length); } } builder.Append(" ## "); for (int i = 0; i < length; i++) { builder.Append($"{this[i]:X2}"); } if (engine != null && engine.IsOutputSupportHighlighting) { builder.Append(" "); builder.Append(ConsoleStyle.BackgroundRgb(this[0], this[1], this[2])); builder.Append(" "); builder.Append(ConsoleStyle.Reset); } // Add known color name if (KalkColorRgb.TryGetKnownColor(rgb, out var colorName)) { builder.Append(isAligned ? $" {colorName,-20}" : $" {colorName}"); } builder.Append(" ##"); return(builder.ToString()); }