/// <summary> /// echo object fallback method /// </summary> /// <param name="obj">any object</param> /// <param name="ctx">echo evaluation context</param> public static void Echo( this object obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; // mandatory for having both : // 1. static extension methods to nicely write Echo calls from the code (eg. DataTable.Echo , object.Echo ...) // 2. Echo calls that can be remapped to others methods than the class one's (extension or owned method) if (context.EchoMap.MappedCall(obj, ctx)) { return; } // handle interfaces types : TODO: should be handlable throught EchoMap if (obj is ICollection) { ((ICollection)obj).Echo(ctx); return; } MethodInfo mi; if ((mi = obj.GetEchoMethod()) != null) { mi.InvokeEcho(obj, ctx); } else { @out.Echo(obj.ToString(), (options != null) ? options.LineBreak : false); } }
// 🚩 ------------------------------------------------------------------------------------------------- #region object type (bridges) public static void InvokeEcho( object obj, EchoEvaluationContext ctx ) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } // TODO map invoke MethodInfo mi; if ((mi = obj.GetEchoMethod()) != null) { mi.InvokeEcho(obj, ctx); } else { var str = obj == null?DumpAsText(context, obj) : obj.ToString(); @out.Echo(str, (options != null) ? options.LineBreak : false); } }
public static void Echo( this IDataObject dataObject, EchoEvaluationContext ctx) { var(@out, context, opts) = ctx; if (context.EchoMap.MappedCall(dataObject, ctx)) { return; } var options = opts as TableFormattingOptions; options ??= (TableFormattingOptions) context.ShellEnv.GetValue <TableFormattingOptions>(ShellEnvironmentVar.display_tableFormattingOptions) .InitFrom(opts); options = new TableFormattingOptions(options) { PadLastColumn = false }; var attrs = dataObject.GetAttributes(); attrs.Sort((x, y) => x.Name.CompareTo(y.Name)); object container = null; if (dataObject is DataValue dataValue && !(dataValue.Value is IDataObject)) { container = dataValue.Value; } var dt = GetVarsDataTable(context, container, attrs, options); dt.Echo(new EchoEvaluationContext(@out, context, options)); }
public static void Echo( this ReturnCode obj, EchoEvaluationContext ctx) { var(@out, context, _) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var r = ""; switch (obj) { case ReturnCode.Error: r += context.ShellEnv.Colors.BoxError; break; case ReturnCode.OK: r += context.ShellEnv.Colors.BoxOk; break; case ReturnCode.Unknown: r += context.ShellEnv.Colors.BoxUnknown; break; case ReturnCode.NotIdentified: r += context.ShellEnv.Colors.BoxNotIdentified; break; } @out.Echo(r + obj + ANSI.RSTXTA); }
public bool MappedCall( object obj, EchoEvaluationContext context ) { obj = obj ?? throw new NullReferenceException(); return(false); }
public EchoEvaluationContext( EchoEvaluationContext ctx ) { Out = ctx.Out; CommandEvaluationContext = ctx.CommandEvaluationContext; Options = ctx.Options; }
public EchoEvaluationContext( EchoEvaluationContext ctx, FormatingOptions options ) { Out = ctx.Out; CommandEvaluationContext = ctx.CommandEvaluationContext; Options = options; }
public static void Echo( this StringWrapper obj, EchoEvaluationContext ctx) { var(@out, context, _) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } @out.Echo(obj.ToString()); }
public static void Echo( this ModuleVersion obj, EchoEvaluationContext ctx) { var(@out, context, _) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } @out.Echo($"{context.ShellEnv.Colors.Integer}{obj}(rdc)"); }
public static void Echo( this Table table, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(table, ctx)) { return; } _Echo(table, @out, context, options as TableFormattingOptions); }
public static void Echo( this ColorSettings obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } ShellObject.Instance.EchoObj(obj, ctx); }
public static void Echo( this KeyValuePair <string, object> obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } @out.Echo($"{obj.Key}{context.ShellEnv.Colors.HighlightSymbol}={context.ShellEnv.Colors.Value}"); Echo(obj.Value, ctx); @out.Echo(Rdc); // TODO: check this }
public static void Echo( bool obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } @out.Echo("" + (obj ? context.ShellEnv.Colors.BooleanTrue : context.ShellEnv.Colors.BooleanFalse)); @out.Echo(obj.ToString().ToLower(), (ctx.Options != null) && ctx.Options.LineBreak); @out.Echo(Rdc); }
public static void Echo( char obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } @out.Echo($"{context.ShellEnv.Colors.Char}"); @out.Echo(obj, (ctx.Options != null) && ctx.Options.LineBreak); @out.Echo(Rdc); }
public static void Echo( this ConsoleColor obj, EchoEvaluationContext ctx) { var(@out, context, _) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var smbcol = context.ShellEnv.Colors.HighlightSymbol; var str = $" {smbcol}{GetCmd(EchoDirectives.b + "", obj.ToString().ToLower())} {context.ShellEnv.Colors.Default}"; @out.Echo(smbcol + "{"); @out.Echo(context.ShellEnv.Colors.Default + obj.ToString() + " " + context.ShellEnv.Colors.Name + str); @out.Echo(smbcol + "}"); }
// TODO: check: EchoEvaluationContext.LineBreak seems to generally never been used #region system library types public static void Echo( this Exception obj, EchoEvaluationContext ctx) { var(@out, context, _) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var m = obj.ToString(); var i = m.IndexOf(':'); var textCol = ctx.CommandEvaluationContext.ShellEnv.Colors.ExceptionText; var pfxCol = ctx.CommandEvaluationContext.ShellEnv.Colors.ExceptionName; m = (i > -1) ? pfxCol + m.Substring(0, i + 1) + ANSI.RSTXTA + " " + textCol + ANSI.SGR_Underline + m.Substring(i + 2).Replace(ANSI.CRLF, ANSI.CRLF + ANSI.SGR_UnderlineOff + textCol) : textCol + m; @out.Echo(m + ANSI.RSTXTA); }
public static void Echo( string obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } if (obj.Length == 0) { obj = QuotedString(context, obj); @out.Echo(obj, (ctx.Options != null) && ctx.Options.LineBreak, false); } else { @out.Echo(obj, (ctx.Options != null) && ctx.Options.LineBreak, (ctx.Options != null) && ctx.Options.IsRawModeEnabled); } }
public static void Echo( this Variables variables, EchoEvaluationContext ctx) { var(@out, context, opts) = ctx; if (context.EchoMap.MappedCall(variables, ctx)) { return; } var options = opts as TableFormattingOptions; options ??= (TableFormattingOptions)context.ShellEnv.GetValue <TableFormattingOptions>(ShellEnvironmentVar.display_tableFormattingOptions) .InitFrom(opts); var values = variables.GetDataValues(); values.Sort((x, y) => x.Name.CompareTo(y.Name)); var dt = GetVarsDataTable(context, null, values, options); dt.Echo(new EchoEvaluationContext(@out, context, options)); }
/// <summary> /// Echo method for any object /// </summary> /// <param name="o"></param> /// <param name="context"></param> public void EchoObj( object o, EchoEvaluationContext ctx ) { var(@out, context, options) = ctx; var smbcol = context.ShellEnv.Colors.Highlight; @out.Echo(smbcol + "{"); bool firstElement = true; foreach (var m in o.GetMemberValues()) { if (!firstElement) { @out.Echo(smbcol + ","); } else { firstElement = false; } @out.Echo( context.ShellEnv.Colors.Default + m.Item1 + smbcol + "=" + context.ShellEnv.Colors.Name /*+ Str.DumpAsText(m.Item2)*/ ); MethodInfo mi = null; var value = m.Item2; if (value != null && (mi = value.GetEchoMethod()) != null) { mi.InvokeEcho(value, new EchoEvaluationContext(@out, context, null)); @out.Echo(context.ShellEnv.Colors.Default + ""); } else { @out.Echo(DumpAsText(context, m.Item2)); } } @out.Echo(smbcol + "}"); }
public static void DumpObject( object obj, EchoEvaluationContext ctx) { var(@out, context, opts) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var options = opts as TableFormattingOptions; options ??= (TableFormattingOptions) context.ShellEnv.GetValue <TableFormattingOptions>(ShellEnvironmentVar.display_tableFormattingOptions) .InitFrom(opts); options = new TableFormattingOptions(options) { PadLastColumn = false }; var dt = GetVarsDataTable(context, obj, new List <IDataObject>(), options); dt.Echo(new EchoEvaluationContext(@out, context, options)); }
public static void Echo( this string[] obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var i = 1; var nb = obj.Length; foreach (var o in obj) { Echo(o, new EchoEvaluationContext(ctx, new FormatingOptions(ctx.Options) { LineBreak = false })); if (i < nb) { if (!ctx.Options.LineBreak && i < nb) { @out.Echo(ShellEnvironment.SystemPathSeparator); } else { @out.Echoln(); } } else if (ctx.Options.LineBreak) { @out.Echoln(); } i++; } }
public static void Echo( this ICollection obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var i = 1; var nb = obj.Count; foreach (var o in obj) { Echo(o, new EchoEvaluationContext(ctx, new FormatingOptions(ctx.Options) { LineBreak = false })); if (i < nb) { if (!ctx.Options.LineBreak) { @out.Echo(ShellEnvironment.SystemPathSeparator /*TODO: currently no way to support option change from any context (see: shell meta-options + output filters )*/); } else { @out.Echoln(); } } else if (ctx.Options.LineBreak) { @out.Echoln(); } i++; } }
// 🚩 ------------------------------------------------------------------------------------------------- #region colors types public static void Echo( this TextColor obj, EchoEvaluationContext ctx) { var(@out, context, options) = ctx; if (context.EchoMap.MappedCall(obj, ctx)) { return; } var smbcol = context.ShellEnv.Colors.HighlightSymbol; var foregroundCol = (obj.Foreground.HasValue) ? (obj.Foreground.ToString() + $" {smbcol}{GetCmd(EchoDirectives.b + "", obj.Foreground.Value.ToString().ToLower())} {context.ShellEnv.Colors.Default}") : ""; var backgroundCol = (obj.Background.HasValue) ? (obj.Background.ToString() + $" {smbcol}{GetCmd(EchoDirectives.b + "", obj.Background.Value.ToString().ToLower())} {context.ShellEnv.Colors.Default}") : ""; var twice = !string.IsNullOrWhiteSpace(foregroundCol) && !string.IsNullOrWhiteSpace(backgroundCol); if (twice) { @out.Echo(smbcol + "{"); } if (!string.IsNullOrWhiteSpace(foregroundCol)) { @out.Echo(context.ShellEnv.Colors.Default + "f" + smbcol + "=" + context.ShellEnv.Colors.Name + foregroundCol); } if (twice) { @out.Echo(smbcol + ","); } if (!string.IsNullOrWhiteSpace(backgroundCol)) { @out.Echo(context.ShellEnv.Colors.Default + "g" + smbcol + "=" + context.ShellEnv.Colors.Name + backgroundCol); } if (twice) { @out.Echo(smbcol + "}"); } }
public static void Echo( this DataObject dataObject, EchoEvaluationContext ctx ) => Echo((IDataObject)dataObject, ctx);
/// <summary> /// Echo method /// </summary> /// <param name="context"></param> public void Echo(EchoEvaluationContext context) => EchoObj(this, context);