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); }
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); } } }
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); }
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); }
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); }
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()); } }
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])); }); }
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); }
public MagesCreator(IEnumerable <IModuleFileReader> readers, IInteractivity interactivity) { _readers = readers; _interactivity = interactivity; }
public ReplCore(IResolver resolver) { _interactivity = resolver.Interactivity; _engine = resolver.CreateEngine(); }
private static void WriteTask(IInteractivity interactivity, ITutorialSnippet snippet) { interactivity.Write("Your task: "); interactivity.Write(snippet.Task); interactivity.Write(Environment.NewLine); }
public ReplCore(IInteractivity interactivity, IMagesCreator creator) { _interactivity = interactivity; _engine = creator.CreateEngine(); }
public OpenFileReader(IInteractivity interactivity) { _interactivity = interactivity; }
public ReplResolver(IFileSystem fs, IInteractivity interactivity) { _fs = fs; _interactivity = interactivity; }