Ejemplo n.º 1
0
        private void RunImpl()
        {
            _console.SetTitle(Title);
            _console.WriteLine(Greeting);
            string input;

            while (true)
            {
                _console.Canceled = false;
                _console.SetTextStyle(ConsoleTextStyle.Normal);
                string prompt = (App.Status == AppStatus.WaitingMoreInput ? PromptMoreInput : Prompt);

                //Write prompt, read input, check for Ctrl-C
                _console.Write(prompt);
                input = _console.ReadLine();
                if (_console.Canceled)
                {
                    if (Confirm(Resources.MsgExitConsoleYN))
                    {
                        return;
                    }
                    else
                    {
                        continue; //from the start of the loop
                    }
                }
                //Execute
                App.ClearOutputBuffer();
                EvaluateAsync(input);
                //Evaluate(input);
                WaitForScriptComplete();

                switch (App.Status)
                {
                case AppStatus.Ready: //success
                    _console.WriteLine(App.GetOutput());
                    break;

                case  AppStatus.SyntaxError:
                    _console.WriteLine(App.GetOutput()); //write all output we have
                    _console.SetTextStyle(ConsoleTextStyle.Error);
                    foreach (var err in App.GetParserMessages())
                    {
                        _console.WriteLine(string.Empty.PadRight(prompt.Length + err.Location.Column) + "^"); //show err location
                        _console.WriteLine(err.Message);                                                      //print message
                    }
                    break;

                case AppStatus.Crash:
                case AppStatus.RuntimeError:
                    ReportException();
                    break;

                default: break;
                } //switch
            }
        }         //Run method