Ejemplo n.º 1
0
        private void AppendText(string text, OutputEntryKind kind, InteractiveWindowColor color)
        {
            var newProps = new OutputEntryProperties(kind, color);

            if (_outputEntries.Count == 0 || _outputEntries[_outputEntries.Count - 1].Properties != newProps)
            {
                _outputEntries.Add(new OutputEntry(newProps));
            }
            var buffer = _outputEntries[_outputEntries.Count - 1].Buffer;

            buffer.Append(text);
        }
Ejemplo n.º 2
0
 public OutputEntryProperties(OutputEntryKind kind, ConsoleColor color) {
     Kind = kind;
     Color = color;
 }
Ejemplo n.º 3
0
 private void AppendText(string text, OutputEntryKind kind, ConsoleColor color) {
     var newProps = new OutputEntryProperties(kind, color);
     if (_outputEntries.Count == 0 || _outputEntries[_outputEntries.Count - 1].Properties != newProps) {
         _outputEntries.Add(new OutputEntry(newProps));
     }
     var buffer = _outputEntries[_outputEntries.Count - 1].Buffer;
     buffer.Append(text);
 }
Ejemplo n.º 4
0
        private void AppendEscapedText(string text, bool isError, int escape)
        {
            OutputEntryKind        kind  = isError ? OutputEntryKind.StdErr : OutputEntryKind.StdOut;
            InteractiveWindowColor color = isError ? _errColor : _outColor;

            // http://en.wikipedia.org/wiki/ANSI_escape_code
            // process any ansi color sequences...

            int        start = 0;
            List <int> codes = new List <int>();

            do
            {
                if (escape != start)
                {
                    // add unescaped text
                    AppendText(text.Substring(start, escape - start), kind, color);
                }

                // process the escape sequence
                if (escape < text.Length - 1 && text[escape + 1] == '[')
                {
                    // We have the Control Sequence Introducer (CSI) - ESC [

                    codes.Clear();
                    int?value = 0;

                    for (int i = escape + 2; i < text.Length; i++)
                    { // skip esc + [
                        if (text[i] >= '0' && text[i] <= '9')
                        {
                            // continue parsing the integer...
                            if (value == null)
                            {
                                value = 0;
                            }
                            value = 10 * value.Value + (text[i] - '0');
                        }
                        else if (text[i] == ';')
                        {
                            if (value != null)
                            {
                                codes.Add(value.Value);
                                value = null;
                            }
                            else
                            {
                                // CSI ; - invalid or CSI ### ;;, both invalid
                                break;
                            }
                        }
                        else if (text[i] == 'm')
                        {
                            if (value != null)
                            {
                                codes.Add(value.Value);
                            }

                            // parsed a valid code
                            start = i + 1;
                            if (codes.Count == 0)
                            {
                                // reset
                                color = isError ? _errColor : _outColor;
                            }
                            else
                            {
                                for (int j = 0; j < codes.Count; j++)
                                {
                                    switch (codes[j])
                                    {
                                    case 0: color = InteractiveWindowColor.White; break;

                                    case 1:     // bright/bold
                                        color |= InteractiveWindowColor.DarkGray;
                                        break;

                                    case 2:     // faint

                                    case 3:     // italic
                                    case 4:     // single underline
                                        break;

                                    case 5:     // blink slow
                                    case 6:     // blink fast
                                        break;

                                    case 7:     // negative
                                    case 8:     // conceal
                                    case 9:     // crossed out
                                    case 10:    // primary font
                                    case 11:    // 11-19, n-th alternate font
                                        break;

                                    case 21:     // bright/bold off
                                    case 22:     // normal intensity
                                        color &= ~InteractiveWindowColor.DarkGray;
                                        break;

                                    case 24:     // underline off
                                        break;

                                    case 25:     // blink off
                                        break;

                                    case 27:     // image - postive
                                    case 28:     // reveal
                                    case 29:     // not crossed out
                                    case 30: color = InteractiveWindowColor.Black | (color & InteractiveWindowColor.DarkGray); break;

                                    case 31: color = InteractiveWindowColor.DarkRed | (color & InteractiveWindowColor.DarkGray); break;

                                    case 32: color = InteractiveWindowColor.DarkGreen | (color & InteractiveWindowColor.DarkGray); break;

                                    case 33: color = InteractiveWindowColor.DarkYellow | (color & InteractiveWindowColor.DarkGray); break;

                                    case 34: color = InteractiveWindowColor.DarkBlue | (color & InteractiveWindowColor.DarkGray); break;

                                    case 35: color = InteractiveWindowColor.DarkMagenta | (color & InteractiveWindowColor.DarkGray); break;

                                    case 36: color = InteractiveWindowColor.DarkCyan | (color & InteractiveWindowColor.DarkGray); break;

                                    case 37: color = InteractiveWindowColor.Gray | (color & InteractiveWindowColor.DarkGray); break;

                                    case 38:     // xterm 286 background color
                                    case 39:     // default text color
                                        color = _outColor;
                                        break;

                                    case 40:     // background colors
                                    case 41:
                                    case 42:
                                    case 43:
                                    case 44:
                                    case 45:
                                    case 46:
                                    case 47: break;

                                    case 90: color = InteractiveWindowColor.DarkGray; break;

                                    case 91: color = InteractiveWindowColor.Red; break;

                                    case 92: color = InteractiveWindowColor.Green; break;

                                    case 93: color = InteractiveWindowColor.Yellow; break;

                                    case 94: color = InteractiveWindowColor.Blue; break;

                                    case 95: color = InteractiveWindowColor.Magenta; break;

                                    case 96: color = InteractiveWindowColor.Cyan; break;

                                    case 97: color = InteractiveWindowColor.White; break;
                                    }
                                }
                            }
                            break;
                        }
                        else
                        {
                            // unknown char, invalid escape
                            break;
                        }
                    }

                    escape = text.IndexOf('\x1b', escape + 1);
                }// else not an escape sequence, process as text
            } while (escape != -1);

            if (start != text.Length)
            {
                AppendText(text.Substring(start), kind, color);
            }
        }
Ejemplo n.º 5
0
 public OutputEntryProperties(OutputEntryKind kind, InteractiveWindowColor color)
 {
     Kind  = kind;
     Color = color;
 }
Ejemplo n.º 6
0
 public OutputEntryProperties(OutputEntryKind kind, ConsoleColor color)
 {
     Kind  = kind;
     Color = color;
 }