コード例 #1
0
        public void SetStyle(AnsiStyle style)
        {
            var newControlCodes = GenerateControlCodes(_currentStyle, style);

            _currentBuffer.AddRange(newControlCodes);

            _currentStyle = style;
        }
コード例 #2
0
        private static IEnumerable <byte> GenerateControlCodes(AnsiStyle oldStyle, AnsiStyle newStyle)
        {
            var result = new List <byte>();

            //Foreground color
            if (oldStyle.ForegroundColor != newStyle.ForegroundColor)
            {
                var code = 30 + (int)newStyle.ForegroundColor;
                result.AddRange(GenerateControlCode(code));
            }

            //Background color
            if (oldStyle.BackgroundColor != newStyle.BackgroundColor)
            {
                var code = 40 + (int)newStyle.BackgroundColor;
                result.AddRange(GenerateControlCode(code));
            }

            //Blink
            if (oldStyle.Blink != newStyle.Blink)
            {
                result.AddRange(newStyle.Blink ? GenerateControlCode(5) : GenerateControlCode(25));
            }

            //Bold
            if (oldStyle.Bold != newStyle.Bold)
            {
                result.AddRange(newStyle.Bold ? GenerateControlCode(1) : GenerateControlCode(22));
            }

            //Italics
            if (oldStyle.Italics != newStyle.Italics)
            {
                result.AddRange(newStyle.Italics ? GenerateControlCode(3) : GenerateControlCode(23));
            }

            //Underline
            if (oldStyle.Underline != newStyle.Underline)
            {
                result.AddRange(newStyle.Underline ? GenerateControlCode(4) : GenerateControlCode(24));
            }

            return(result);
        }
コード例 #3
0
 public AnsiGenerator()
 {
     _currentBuffer = new List <byte>();
     _currentStyle  = new AnsiStyle();
 }