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());
        }
Example #2
0
        protected override void ProcessSingleArgument(TemplateContext context, ref int index, object arg, KalkVector <byte> vector)
        {
            int value;

            switch (arg)
            {
            case string rgbStr:
                try
                {
                    if (!KalkColorRgb.TryGetKnownColor(rgbStr, out value))
                    {
                        value = int.Parse(rgbStr.TrimStart('#'), System.Globalization.NumberStyles.HexNumber);
                    }
                }
                catch
                {
                    throw new ScriptArgumentException(0, $"Expecting a known color (e.g `AliceBlue`) or an hexadecimal rgb string (e.g #FF80C2) instead of `{rgbStr}`. Type `colors` for listing known colors.");
                }
                break;

            default:
                if (arg is IList)
                {
                    base.ProcessSingleArgument(context, ref index, arg, vector);
                    return;
                }
                value = context.ToObject <int>(context.CurrentSpan, arg);
                break;
            }

            vector[index++] = (byte)((value >> 16) & 0xFF);
            vector[index++] = (byte)((value >> 8) & 0xFF);
            vector[index++] = (byte)(value & 0xFF);

            if (Dimension == 4)
            {
                vector[index++] = (byte)((value >> 24) & 0xFF);
            }
        }
Example #3
0
 public KalkColorRgb(KalkColorRgb values) : base(values)
 {
     this[3] = 0xFF;
 }