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()); }
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); } }
public KalkColorRgb(KalkColorRgb values) : base(values) { this[3] = 0xFF; }