Example #1
0
        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());
        }