Ejemplo n.º 1
0
        public void TestLineWrap()
        {
            var          testLine = "01";
            IAnsiDecoder vt100    = new AnsiDecoder();

            vt100.Encoding = Encoding.UTF8;

            DynamicScreen screen;

            // If a file has a single \n in it, it has two lines.
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes("\n"));
            Assert.AreEqual(2, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);

            // If a file has a one line that is small + a \n in it, it has two lines.
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"0\n"));
            Assert.AreEqual(2, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);

            // If a file has a one line that fits + a \n in it, it has two lines.
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"{testLine}\n"));
            Assert.AreEqual(2, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);

            // A full width line, one line
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes(testLine));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(1, screen.Lines.Count);

            // Two full width lines, two lines
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"{testLine}\n{testLine}"));
            Assert.AreEqual(2, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);

            // wrapping scenarios

            // a full width line + 1 char, two lines
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes(testLine + "!"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);

            // one full width line + one full width line + 1 char, three lines
            screen = new DynamicScreen(testLine.Length);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"{testLine}\n{testLine}!"));
            Assert.AreEqual(2, screen.NumLines);
            Assert.AreEqual(3, screen.Lines.Count);
        }
Ejemplo n.º 2
0
        public void ReadAndRenderFile(string _filename)
        {
            IAnsiDecoder vt100 = new AnsiDecoder();
            //vt100.Encoding = encodingInfo.GetEncoding (); // encodingInfo.Name, new EncoderExceptionFallback(), new DecoderReplacementFallback ("U") );
            Screen screen = new Screen(80, 160);

            vt100.Subscribe(screen);

            using (BinaryReader reader = new BinaryReader(File.Open(_filename, FileMode.Open)))
            {
                try
                {
                    int read = 0;
                    while ((read = reader.Read()) != -1)
                    {
                        vt100.Input(new byte[] { (byte)read });
                    }
                }
                catch (EndOfStreamException)
                {
                }
            }
            System.Console.Write(screen.ToString());
            Bitmap bitmap = screen.ToBitmap(new Font("Courier New", 10));

            bitmap.Save(_filename + ".png", System.Drawing.Imaging.ImageFormat.Png);
        }
Ejemplo n.º 3
0
 public AnsiTextBox() : base()
 {
     vt100            = new AnsiDecoder();
     screenS          = new ScreenStream();
     screenS.InjectTo = vt100;
     vt100.Encoding   = System.Text.Encoding.GetEncoding("ASCII");
     vt100.Subscribe(this);
 }
Ejemplo n.º 4
0
        // Example:
        // using System;
        // |    1    |  2  |        3            |  4
        // <bold>using</bold><normal> </normal><color>System</color><normal>;</normal>
        public void TestAttributeRuns()
        {
            IAnsiDecoder vt100 = new AnsiDecoder();

            vt100.Encoding = Encoding.UTF8;

            DynamicScreen screen;

            screen = new DynamicScreen(100);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes("using System;"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(1, screen.Lines.Count);
            Assert.AreEqual(4, screen.Lines[0].Runs.Count);

            Screen.Character c;
            // Test using grid based API
            c = screen[0, 0];
            Assert.AreEqual('u', c.Char);
            Assert.AreEqual(true, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[1, 0];
            Assert.AreEqual('s', c.Char);
            Assert.AreEqual(true, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[2, 0];
            Assert.AreEqual('i', c.Char);
            Assert.AreEqual(true, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[3, 0];
            Assert.AreEqual('n', c.Char);
            Assert.AreEqual(true, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[4, 0];
            Assert.AreEqual('g', c.Char);
            Assert.AreEqual(true, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[5, 0];
            Assert.AreEqual(' ', c.Char);
            Assert.AreEqual(false, c.Attributes.Bold);
            Assert.AreEqual(Color.White, c.Attributes.ForegroundColor);

            c = screen[6, 0];
            Assert.AreEqual('S', c.Char);
            Assert.AreEqual(false, c.Attributes.Bold);
            Assert.AreEqual(Color.FromArgb(85, 85, 85), c.Attributes.ForegroundColor);
            // Test using Run-based API

            var run = screen.Lines[0].Runs[0];

            Assert.AreEqual("using", screen.Lines[0].Text[run.Start..(run.Start + run.Length)]);
 protected void UnRegisterForAnsiEventsFrom(AnsiDecoder decoder)
 {
     decoder.SaveCursor         -= SaveCursor;
     decoder.RestoreCursor      -= RestoreCursor;
     decoder.MoveCursor         -= MoveCursor;
     decoder.MoveCursorTo       -= MoveCursorTo;
     decoder.MoveCursorToColumn -= MoveCursorToColumn;
     decoder.MoveCursorToBeginningOfLineBelow -= MoveCursorToBeginningOfLineBelow;
     decoder.MoveCursorToBeginningOfLineAbove -= MoveCursorToBeginningOfLineAbove;
     decoder.ClearScreen         -= ClearScreen;
     decoder.ClearLine           -= ClearLine;
     decoder.SetGraphicRendition -= SetGraphicRendition;
     decoder.ModeChanged         -= ModeChanged;
     decoder.GetSize             -= GetSize;
     decoder.GetCursorPosition   -= GetCursorPosition;
 }
 protected void RegisterForAnsiEventsFrom(AnsiDecoder decoder)
 {
     decoder.SaveCursor         += SaveCursor;
     decoder.RestoreCursor      += RestoreCursor;
     decoder.MoveCursor         += MoveCursor;
     decoder.MoveCursorTo       += MoveCursorTo;
     decoder.MoveCursorToColumn += MoveCursorToColumn;
     decoder.MoveCursorToBeginningOfLineBelow += MoveCursorToBeginningOfLineBelow;
     decoder.MoveCursorToBeginningOfLineAbove += MoveCursorToBeginningOfLineAbove;
     decoder.ClearScreen         += ClearScreen;
     decoder.ClearLine           += ClearLine;
     decoder.SetGraphicRendition += SetGraphicRendition;
     decoder.ModeChanged         += ModeChanged;
     decoder.GetSize             += GetSize;
     decoder.GetCursorPosition   += GetCursorPosition;
 }
Ejemplo n.º 7
0
        public Screen ReadAndRenderFile(string _filename, Encoding _encoding, Size _size)
        {
            IAnsiDecoder vt100 = new AnsiDecoder();

            //vt100.Encoding = Encoding.GetEncoding ( encodingInfo.Name, new EncoderExceptionFallback(), new DecoderReplacementFallback ("U") );
            vt100.Encoding = _encoding;
            Screen screen = new Screen(_size.Width, _size.Height);

            vt100.Subscribe(screen);

            using (Stream stream = File.Open(_filename, FileMode.Open))
            {
                try
                {
                    int read = 0;
                    while ((read = stream.ReadByte()) != -1)
                    {
                        vt100.Input(new byte[] { (byte)read });
                    }
                }
                catch (EndOfStreamException)
                {
                }
            }
            //System.Console.Write ( screen.ToString() );
            Bitmap bitmap = screen.ToBitmap(new Font("Courier New", 6));

            bitmap.Save("..\\build\\" + Path.GetFileNameWithoutExtension(_filename) + "_" + _encoding.EncodingName + ".png", System.Drawing.Imaging.ImageFormat.Png);

            /*
             * foreach ( Screen.Character ch in screen )
             * {
             * if ( ch.Char != 0x20 )
             * {
             * System.Console.WriteLine ( "Non-space character: {0} 0x{1:X4}", ch.Char, (int) ch.Char );
             * }
             * }
             */
            return(screen);
        }
Ejemplo n.º 8
0
        public void TestTabs()
        {
            IAnsiDecoder vt100 = new AnsiDecoder();

            vt100.Encoding = Encoding.UTF8;

            DynamicScreen screen;

            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes("\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(1, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"012\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(1, screen.Lines.Count);
            Assert.AreEqual(2, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            // \t
            // 012
            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"\t012"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            // 0\t
            // 12
            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"0\t12"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(2, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            // 01\t
            // 2
            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"01\t2"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(2, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            // 0123
            // \t
            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"0123\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(1, screen.Lines[1].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            // 0123
            // 4\t
            screen = new DynamicScreen(4);
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"01234\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(4, screen.Lines[0].Text.Length);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[1].Text.Length);

            // Odd TabSpaces
            screen           = new DynamicScreen(3);
            screen.TabSpaces = 3;
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes("\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(1, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);

            screen           = new DynamicScreen(3);
            screen.TabSpaces = 3;
            vt100.Subscribe(screen);
            vt100.Input(Encoding.UTF8.GetBytes($"023\t"));
            Assert.AreEqual(1, screen.NumLines);
            Assert.AreEqual(2, screen.Lines.Count);
            Assert.AreEqual(1, screen.Lines[0].Runs.Count);
            Assert.AreEqual(screen.TabSpaces, screen.Lines[0].Text.Length);
        }
Ejemplo n.º 9
0
        static int Main(string[] args)
        {
            string inputFilename  = null;
            string outputFilename = null;
            int    width          = 80;
            int    height         = 25;
            string fontName       = "Courier New";
            int    fontSize       = 6;
            string encoding       = "ibm437";

            for (int i = 0; i < args.Length; i++)
            {
                switch (args[i])
                {
                case "-w":
                    i++;
                    width = Int32.Parse(args[i]);
                    break;

                case "-h":
                    i++;
                    height = Int32.Parse(args[i]);
                    break;

                case "-f":
                    i++;
                    fontName = args[i];
                    break;

                case "-s":
                    i++;
                    fontSize = Int32.Parse(args[i]);
                    break;

                case "-e":
                    i++;
                    encoding = args[i];
                    break;

                default:
                    if (inputFilename == null)
                    {
                        inputFilename = args[i];
                    }
                    else if (outputFilename == null)
                    {
                        outputFilename = args[i];
                    }
                    else
                    {
                        System.Console.WriteLine("Unrecognized command line parameter ({0}): {1}", i, args[i]);
                    }
                    break;
                }
            }

            if (inputFilename == null || outputFilename == null)
            {
                System.Console.WriteLine("Syntax:");
                System.Console.WriteLine("    {0} [-w width] [-h height] [-f fontName] [-s fontSize] [-e encoding] <input.txt> <output.png>", System.Reflection.Assembly.GetCallingAssembly().GetName().Name);
                return(-1);
            }

            IAnsiDecoder vt100  = new AnsiDecoder();
            Screen       screen = new Screen(width, height);

            vt100.Encoding = Encoding.GetEncoding(encoding);
            vt100.Subscribe(screen);

            using (Stream stream = File.Open(inputFilename, FileMode.Open))
            {
                int read = 0;
                while ((read = stream.ReadByte()) != -1)
                {
                    vt100.Input(new byte[] { (byte)read });
                }
            }

            Bitmap bitmap = screen.ToBitmap(new Font(fontName, fontSize));

            bitmap.Save(outputFilename, System.Drawing.Imaging.ImageFormat.Png);
            return(0);
        }