public void NewlineIsExtractedAsAnInstruction()
 {
     var data = Environment.NewLine + "simple test" + Environment.NewLine + "string";
     var colourControlItems = ColourControlSplitter.Split(data).Select(t => t.ToString());
     var newLineControlItem = new ColourControlItem(instructions: new [] {new ColourControlItem.ControlInstruction(ColourControlItem.ControlCode.NewLine)});
     var expected = new []
     {
         newLineControlItem.ToString(),
         new ColourControlItem("simple test").ToString(),
         newLineControlItem.ToString(),
         new ColourControlItem("string").ToString(),
     };
     Assert.That(colourControlItems, Is.EqualTo(expected));
 }
Ejemplo n.º 2
0
        private void ProcessItem(ColourControlItem colourControlItem)
        {
            if (colourControlItem.Text != null)
                WriteText(colourControlItem);
            else
            {
                foreach (var instruction in colourControlItem.Instructions)
                {
                    switch (instruction.Code)
                    {
                        case ColourControlItem.ControlCode.SetBackground:
                            _consoleOutInterface.Background = instruction.Arg;
                            break;

                        case ColourControlItem.ControlCode.SetForeground:
                            _consoleOutInterface.Foreground = instruction.Arg;
                            break;

                        case ColourControlItem.ControlCode.NewLine:
                            if (!_lastWriteWasPassiveNewLine)
                                _consoleOutInterface.NewLine();
                            else
                                _lastWriteWasPassiveNewLine = false;
                            break;

                        case ColourControlItem.ControlCode.Push:
                            _colourStack.Push(new ColourState(_consoleOutInterface.Foreground, _consoleOutInterface.Background));
                            break;

                        case ColourControlItem.ControlCode.Pop:
                            var popped = _colourStack.Pop();
                            _consoleOutInterface.Foreground = popped.ForegroundColour;
                            _consoleOutInterface.Background = popped.BackgroundColour;
                            break;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void WriteTextWithPrefix(ColourControlItem colourControlItem)
        {
            var text = colourControlItem.Text;
            var remaining = text.Length;
            var textPos = 0;
            do
            {
                if (_consoleOutInterface.CursorLeft == 0)
                {
                    var currentFG = _consoleOutInterface.Foreground;
                    var currentBG = _consoleOutInterface.Background;
                    _consoleOutInterface.Foreground = _prefixForeground;
                    _consoleOutInterface.Background = _prefixBackground;
                    _consoleOutInterface.Write(PrefixText);
                    _consoleOutInterface.Foreground = currentFG;
                    _consoleOutInterface.Background = currentBG;
                }

                var available = _consoleOutInterface.BufferWidth - _consoleOutInterface.CursorLeft;
                var section = remaining > available ? text.Substring(textPos, available) : text.Substring(textPos);

                _consoleOutInterface.Write(section);
                textPos += section.Length;
                remaining -= section.Length;
            } while (remaining > 0);
        }
Ejemplo n.º 4
0
        private void WriteText(ColourControlItem colourControlItem)
        {
            var currentLine = _consoleOutInterface.CursorTop;
            if (PrefixText != null)
                WriteTextWithPrefix(colourControlItem);
            else
                _consoleOutInterface.Write(colourControlItem.Text);

            _lastWriteWasPassiveNewLine = (colourControlItem.Text.Length > 0 &&
                                           _consoleOutInterface.CursorLeft == 0);
        }
Ejemplo n.º 5
0
            private void ProcessColourControlItem(ColourControlItem colourControlItem)
            {
                if (colourControlItem.PrefixAffinity && string.IsNullOrEmpty(colourControlItem.Text))
                {
                    _cachedPrefixInstructions.AddRange(colourControlItem.Instructions);

                    StoreCurrentIfPresent();
                    return;
                }

                if (!string.IsNullOrEmpty(colourControlItem.Text))
                {
                    StoreCurrentIfPresent();

                    var splitWords = SplitWords(colourControlItem.Text, _tabLength);
                    if (splitWords.Any())
                    {
                        splitWords.First().AddPrefixInstructions(_cachedPrefixInstructions);
                        _cachedPrefixInstructions.Clear();
                    }

                    if (splitWords.Length > 1)
                        Words.AddRange(splitWords.Take(splitWords.Length - 1));

                    _current = splitWords[splitWords.Length - 1];
                }
                else if (InstructionIsNewLineOnly(colourControlItem))
                {
                    StoreCurrentIfPresent();
                    _current = new SplitWord(0, 0, string.Empty);
                    _current.AddPrefixInstructions(_cachedPrefixInstructions);
                    _current.AddSuffixInstructions(colourControlItem.Instructions);
                    _cachedPrefixInstructions.Clear();
                }
                else
                    AddSuffixInstructionsToCurrent(colourControlItem.Instructions);
            }
Ejemplo n.º 6
0
 private bool InstructionIsNewLineOnly(ColourControlItem item)
 {
     return item.Instructions.All(i => i.Code == ColourControlItem.ControlCode.NewLine);
 }