示例#1
0
 public void ParseEmptyString()
 {
     Assert.AreEqual(ConsoleString.Empty, new ConsoleString());
     Assert.AreEqual(ConsoleString.Empty, ConsoleString.Parse(string.Empty, true));
     Assert.AreEqual(ConsoleString.Empty, ConsoleString.Parse(string.Empty, false));
     Assert.AreEqual(ConsoleString.Empty, new ConsoleString(new[] { new ConsoleStringSegment(string.Empty) }));
 }
示例#2
0
 public void ParseStringFlatten()
 {
     Assert.AreEqual(ConsoleString.Parse("test1test2"), new ConsoleString(new[] { new ConsoleStringSegment("test1"), new ConsoleStringSegment("test2") }));
     Assert.AreEqual(ConsoleString.Parse("[red:test1test2]"), ConsoleString.Parse("[red:test1][red:test2]"));
     Assert.AreEqual(ConsoleString.Parse("[blue:test1][red:test2]test3"), ConsoleString.Parse("[blue:test1][red:test2]test3"));
     Assert.AreEqual(ConsoleString.Parse("[blue:test1][red:test2test3]test4"), ConsoleString.Parse("[blue:test1][red:test2][red:test3]test4"));
 }
示例#3
0
        private ConsoleString UpdateAssistiveText()
        {
            List <CommandLineAction> candidates;

            if (tb.Value.Length > 0)
            {
                var command = tb.Value.Split(" ".ToConsoleString()).FirstOrDefault();
                command    = command ?? ConsoleString.Empty;
                candidates = def.Actions.Where(a => a.DefaultAlias.StartsWith(command.StringValue, StringComparison.OrdinalIgnoreCase)).ToList();

                if (candidates.Count == 0)
                {
                    return($"\nNo actions start with {tb.Value.ToString()}".ToRed());
                }
            }
            else
            {
                candidates = def.Actions;
            }

            List <ConsoleCharacter> buffer = new List <ConsoleCharacter>();

            buffer.AddRange("\n".ToConsoleString());
            foreach (var candidate in candidates)
            {
                buffer.AddRange(candidate.DefaultAlias.ToLower().ToCyan());
                buffer.AddRange(" - ".ToGray());
                buffer.AddRange(ConsoleString.Parse(candidate.Description));
                buffer.AddRange("\n".ToConsoleString());

                if (candidates.Count == 1)
                {
                    foreach (var arg in candidate.Arguments)
                    {
                        buffer.AddRange("    -".ToConsoleString() + arg.DefaultAlias.ToWhite());
                        buffer.AddRange(arg.IsRequired ? " * ".ToRed() : " - ".ToConsoleString());

                        if (string.IsNullOrEmpty(arg.Description) == false)
                        {
                            buffer.AddRange(ConsoleString.Parse(arg.Description));
                        }

                        buffer.AddRange("\n".ToConsoleString());

                        if (arg.IsEnum)
                        {
                            foreach (var enumString in arg.EnumValuesAndDescriptions)
                            {
                                buffer.AddRange(("     " + enumString + "\n").ToConsoleString());
                            }
                        }
                    }
                }

                buffer.AddRange("\n".ToConsoleString());
            }
            return(new ConsoleString(buffer));
        }
示例#4
0
        public void TestConsoleStringEncodingBasic()
        {
            var inputString = "A".ToRed() + "BC".ToWhite(bg: ConsoleColor.Red) + "DE".ToBlue() + "FG".ToConsoleString();

            var serialized = inputString.Serialize();
            var readBack = ConsoleString.Parse(serialized);
            Assert.AreEqual(inputString, readBack);

            var serializedImplicitDefaults = inputString.Serialize(true);
            var readBackImplicitDefaults = ConsoleString.Parse(serialized);
            Assert.AreEqual(inputString, readBackImplicitDefaults);
        }
示例#5
0
        public void TestConsoleStringEncodingEdgeCases()
        {
            var parsed = ConsoleString.Parse("[B=Blue][Red]Adam");
            Assert.AreEqual(new ConsoleString("Adam", ConsoleColor.Red, ConsoleColor.Blue), parsed);
            parsed = ConsoleString.Parse("[  B   =   Blue ][ Red ]Adam");
            Assert.AreEqual(new ConsoleString("Adam", ConsoleColor.Red, ConsoleColor.Blue), parsed);

            parsed = ConsoleString.Parse(@"\[Adam\]");
            Assert.AreEqual(new ConsoleString("[Adam]"), parsed);
            parsed = ConsoleString.Parse(@"\[Adam]");
            Assert.AreEqual(new ConsoleString("[Adam]"), parsed);

            var original = "[Adam]";
            var s = original.ToConsoleString().Serialize();
            var back = ConsoleString.Parse(s);
            Assert.AreEqual(original, back.StringValue);
        }
示例#6
0
 public void GetIndex()
 {
     Assert.AreEqual(ConsoleString.Parse("t"), ConsoleString.Parse("test1")[0]);
     Assert.AreEqual(ConsoleString.Parse("e"), ConsoleString.Parse("test1")[1]);
     Assert.AreEqual(ConsoleString.Parse("1"), ConsoleString.Parse("test1")[^ 1]);
示例#7
0
 public void ParseNoColor()
 {
     Assert.AreEqual(ConsoleString.Empty, ConsoleString.Parse("[:]"));
     Assert.AreEqual(ConsoleString.Parse("test1"), ConsoleString.Parse("[:test1]"));
     Assert.AreEqual(ConsoleString.Parse("test1"), ConsoleString.Parse("[ :test1]"));
 }
示例#8
0
 /// <summary>
 /// Determines whether the specified string includes coloring syntax.
 /// </summary>
 /// <param name="input">The string that should be examined.</param>
 /// <returns><c>true</c>, if <paramref name="input"/> contains any "[Color:Text]" strings; otherwise, <c>false</c>.</returns>
 public static bool HasColors(string input)
 {
     return(ConsoleString.Parse(input, false).HasColors);
 }
示例#9
0
 /// <summary>
 /// Removes color-coding information from a string.
 /// The string "[Color:Text]" will print Text to the console using the default color as the foreground color.
 /// </summary>
 /// <param name="input">The string from which color information should be removed.</param>
 /// <returns>A new string, without any color information.</returns>
 public static string ClearColors(string input)
 {
     return(ConsoleString.Parse(input, true).ClearColors().Content);
 }
示例#10
0
        private void InitCommandBar()
        {
            var divider = ConsoleString.Parse("[B=White] ");

            buttonStack = commandBar.Add(new StackPanel()
            {
                X = 1, Margin = 1, Height = 1, Orientation = Orientation.Horizontal, AutoSize = true
            }).CenterVertically();

            var newCommand = buttonStack.Add(new Button()
            {
                Text = "New".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.N, ConsoleModifiers.Alt)
            });

            newCommand.Pressed.SubscribeForLifetime(NewCommandImpl, newCommand);

            var openCommand = buttonStack.Add(new Button()
            {
                Text = "Open".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.O, ConsoleModifiers.Alt)
            });

            openCommand.Pressed.SubscribeForLifetime(OpenCommandImpl, openCommand);

            var saveCommand = buttonStack.Add(new Button()
            {
                Text = "Save".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.S, ConsoleModifiers.Alt)
            });

            saveCommand.Pressed.SubscribeForLifetime(SaveCommandImpl, saveCommand);

            var saveAsCommand = buttonStack.Add(new Button()
            {
                Text = "Save as".ToWhite()
            });

            saveAsCommand.Pressed.SubscribeForLifetime(SaveAsCommandImpl, saveAsCommand);

            var undoCommand = buttonStack.Add(new Button()
            {
                Text = "Undo".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.Z, ConsoleModifiers.Alt)
            });

            undoCommand.Pressed.SubscribeForLifetime(UndoCommandImpl, undoCommand);

            var redoCommand = buttonStack.Add(new Button()
            {
                Text = "Redo".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.Y, ConsoleModifiers.Alt)
            });

            redoCommand.Pressed.SubscribeForLifetime(RedoCommandImpl, redoCommand);

            buttonStack.Add(new Label()
            {
                Text = divider
            });

            var frameUpCommand = buttonStack.Add(new Button()
            {
                Text = "Previous Frame".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.PageUp)
            });

            frameUpCommand.Pressed.SubscribeForLifetime(FrameUpCommandImpl, frameUpCommand);

            var frameDownCommand = buttonStack.Add(new Button()
            {
                Text = "Next Frame".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.PageDown)
            });

            frameDownCommand.Pressed.SubscribeForLifetime(FrameDownCommandImpl, frameDownCommand);

            var duplicateCommand = buttonStack.Add(new Button()
            {
                Text = "Duplicate Frame".ToWhite(), Shortcut = new KeyboardShortcut(ConsoleKey.D, ConsoleModifiers.Alt)
            });

            duplicateCommand.Pressed.SubscribeForLifetime(DuplicateFrameCommandImpl, frameUpCommand);

            buttonStack.Add(new Label()
            {
                Text = divider
            });

            foreach (var editorButton in editor.CreateStandardButtons())
            {
                buttonStack.Add(editorButton);
            }
        }
示例#11
0
 protected virtual ConsoleString Parse(string content) => ConsoleString.Parse(content);