Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        // 🚩 -------------------------------------------------------------------------------------------------

        #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);
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public bool MappedCall(
     object obj,
     EchoEvaluationContext context
     )
 {
     obj = obj ?? throw new NullReferenceException();
     return(false);
 }
Beispiel #6
0
 public EchoEvaluationContext(
     EchoEvaluationContext ctx
     )
 {
     Out = ctx.Out;
     CommandEvaluationContext = ctx.CommandEvaluationContext;
     Options = ctx.Options;
 }
Beispiel #7
0
 public EchoEvaluationContext(
     EchoEvaluationContext ctx,
     FormatingOptions options
     )
 {
     Out = ctx.Out;
     CommandEvaluationContext = ctx.CommandEvaluationContext;
     Options = options;
 }
Beispiel #8
0
 public static void Echo(
     this StringWrapper obj,
     EchoEvaluationContext ctx)
 {
     var(@out, context, _) = ctx;
     if (context.EchoMap.MappedCall(obj, ctx))
     {
         return;
     }
     @out.Echo(obj.ToString());
 }
Beispiel #9
0
 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)");
 }
Beispiel #10
0
 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);
 }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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 + "}");
        }
Beispiel #16
0
        // 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);
        }
Beispiel #17
0
        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);
            }
        }
Beispiel #18
0
        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));
        }
Beispiel #19
0
        /// <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 + "}");
        }
Beispiel #20
0
        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));
        }
Beispiel #21
0
        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++;
            }
        }
Beispiel #22
0
        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++;
            }
        }
Beispiel #23
0
        // 🚩 -------------------------------------------------------------------------------------------------

        #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 + "}");
            }
        }
Beispiel #24
0
 public static void Echo(
     this DataObject dataObject,
     EchoEvaluationContext ctx
     ) => Echo((IDataObject)dataObject, ctx);
Beispiel #25
0
 /// <summary>
 /// Echo method
 /// </summary>
 /// <param name="context"></param>
 public void Echo(EchoEvaluationContext context) => EchoObj(this, context);