public static void Display(this IInteractivity interactivity, ParseError error, String source)
        {
            var start = error.Start.Index - 1;
            var end   = error.End.Index - 1;
            var lines = source.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            source = String.Join(" ", lines).Replace('\t', ' ');

            if (end == start)
            {
                end++;
            }

            var range   = 48;
            var middle  = (end + start) / 2;
            var ss      = Math.Min(source.Length, Math.Max(middle - range / 2, 0));
            var se      = Math.Min(Math.Max(0, middle + range / 2), source.Length);
            var snippet = source.Substring(ss, se - ss);

            interactivity.Error(snippet);
            interactivity.Error(Environment.NewLine);
            interactivity.Error(new String(' ', Math.Max(0, start - ss)));
            interactivity.Error(new String('^', Math.Max(0, end - start)));
            interactivity.Error(Environment.NewLine);
            interactivity.Display(error);
        }
        public static void Display(this IInteractivity interactivity, ParseError error)
        {
            var message = error.Code.GetMessage();
            var hint    = String.Format("Line {1}, Column {2}: {0}", message, error.Start.Row, error.Start.Column);

            interactivity.Error(hint);
        }
Пример #3
0
        public void RunAll(IInteractivity interactivity, IDictionary <String, Object> scope, Action <String> evaluate)
        {
            var snippets = GetAllTutorials();

            interactivity.Write(Environment.NewLine);

            for (var i = 0; i < snippets.Count; i++)
            {
                var snippet = snippets[i];
                WriteTitle(interactivity, i, snippet);
                WriteExample(interactivity, evaluate, snippet);
                WriteTask(interactivity, snippet);
                var success = TryToLearn(interactivity, scope, evaluate, snippet);

                if (success)
                {
                    interactivity.Write("Great!");
                    interactivity.Write(Environment.NewLine);
                }
                else
                {
                    WriteSolution(interactivity, evaluate, snippet);
                }
            }
        }
Пример #4
0
        public static void Integrate(Engine engine, IInteractivity interactivity)
        {
            var console = new ConsoleFunctions(interactivity);
            var help    = new HelpFunctions(engine.Globals, engine.Scope);

            engine.SetFunction("spawn", new Function(args =>
            {
                var id = engine.Globals["spawn"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <Function>(args, f => Helpers.Spawn(f, args.Skip(1).ToArray())));
            }));
            engine.SetFunction("sleep", new Function(args =>
            {
                var id = engine.Globals["sleep"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <Double>(args, time => Helpers.Sleep(time)));
            }));
            engine.SetFunction("il", new Function(args =>
            {
                var id = engine.Globals["il"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <String>(args, source => Helpers.ShowIl(engine, source)));
            }));
            engine.SetFunction("ast", new Function(args =>
            {
                var id = engine.Globals["ast"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <String>(args, source => Helpers.ShowAst(engine, source)));
            }));
            engine.SetFunction("tokens", new Function(args =>
            {
                var id = engine.Globals["tokens"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <String>(args, source => Helpers.ShowTokens(engine, source)));
            }));
            engine.SetConstant("process", new ProcessObject());
            engine.SetConstant("measure", new Function(args =>
            {
                var id = engine.Globals["measure"] as Function;
                return(Curry.MinOne(id, args) ??
                       If.Is <Function>(args, f => Helpers.Measure(f)));
            }));
            engine.SetFunction("help", new Function(args =>
            {
                return(args.Length == 0 ? help.GetAllTopics() :
                       If.Is <String>(args, topic => help.GetTopic(topic)));
            }));
            engine.SetFunction("exit", new Function(args =>
            {
                Environment.Exit(0);
                return(null);
            }));
            engine.SetConstant("console", new Dictionary <String, Object>
            {
                { "read", console.Read },
                { "write", console.Write },
                { "writeln", console.WriteLine }
            });
        }
        public static String GetLine(this IInteractivity interactivity, String prompt, AutoCompleteHandler handler)
        {
            interactivity.AutoComplete += handler;
            var line = interactivity.GetLine(prompt);

            interactivity.AutoComplete -= handler;
            return(line);
        }
Пример #6
0
 private static void WriteExample(IInteractivity interactivity, Action <String> evaluate, ITutorialSnippet snippet)
 {
     interactivity.Write("Example:");
     interactivity.Write(Environment.NewLine);
     interactivity.Write("SWM> ");
     interactivity.Write(snippet.ExampleCommand);
     interactivity.Write(Environment.NewLine);
     evaluate.Invoke(snippet.ExampleCommand);
 }
Пример #7
0
 private static void WriteSolution(IInteractivity interactivity, Action <String> evaluate, ITutorialSnippet snippet)
 {
     interactivity.Write("Solution:");
     interactivity.Write(Environment.NewLine);
     interactivity.Write("SWM> ");
     interactivity.Write(snippet.Solution);
     interactivity.Write(Environment.NewLine);
     evaluate.Invoke(snippet.Solution);
     interactivity.Write(Environment.NewLine);
 }
Пример #8
0
        private static void WriteTitle(IInteractivity interactivity, Int32 index, ITutorialSnippet snippet)
        {
            var nr = index + 1;

            interactivity.Write("#" + nr + " " + snippet.Title);
            interactivity.Write(Environment.NewLine);
            interactivity.Write(Environment.NewLine);
            interactivity.Write(snippet.Description);
            interactivity.Write(Environment.NewLine);
            interactivity.Write(Environment.NewLine);
        }
        public static Object Run(this IInteractivity interactivity, Engine engine, String source)
        {
            var parser     = engine.Parser;
            var scope      = engine.Scope;
            var statements = parser.ParseStatements(source);
            var operations = statements.MakeRunnable();
            var context    = new ExecutionContext(operations, scope);

            using (interactivity.HandleCancellation(TriggerStop(context)))
            {
                context.Execute();
                return(context.Pop());
            }
        }
Пример #10
0
 public ConsoleFunctions(IInteractivity interactivity)
 {
     _interactivity = interactivity;
     Read           = new Function(args =>
     {
         return(PerformRead());
     });
     Write = new Function(args =>
     {
         return(Curry.MinOne(Write, args) ?? PerformWrite(args[0]));
     });
     WriteLine = new Function(args =>
     {
         return(PerformWriteLine(args.Length == 0 ? String.Empty : args[0]));
     });
 }
Пример #11
0
        private static Boolean TryToLearn(IInteractivity interactivity, IDictionary <String, Object> scope, Action <String> evaluate, ITutorialSnippet snippet)
        {
            var hints   = snippet.Hints.GetEnumerator();
            var success = true;

            do
            {
                if (!success)
                {
                    interactivity.Info(hints.Current);
                    interactivity.Write(Environment.NewLine);
                }

                var input = interactivity.ReadLine();
                evaluate.Invoke(input);
                success = snippet.Check(scope);
            }while (!success && hints.MoveNext());
            return(success);
        }
Пример #12
0
 public MagesCreator(IEnumerable <IModuleFileReader> readers, IInteractivity interactivity)
 {
     _readers       = readers;
     _interactivity = interactivity;
 }
Пример #13
0
 public ReplCore(IResolver resolver)
 {
     _interactivity = resolver.Interactivity;
     _engine        = resolver.CreateEngine();
 }
Пример #14
0
 private static void WriteTask(IInteractivity interactivity, ITutorialSnippet snippet)
 {
     interactivity.Write("Your task: ");
     interactivity.Write(snippet.Task);
     interactivity.Write(Environment.NewLine);
 }
Пример #15
0
 public ReplCore(IInteractivity interactivity, IMagesCreator creator)
 {
     _interactivity = interactivity;
     _engine        = creator.CreateEngine();
 }
Пример #16
0
 public OpenFileReader(IInteractivity interactivity)
 {
     _interactivity = interactivity;
 }
Пример #17
0
 public ReplResolver(IFileSystem fs, IInteractivity interactivity)
 {
     _fs            = fs;
     _interactivity = interactivity;
 }