From 20a3fb57ae9ee1e70a2d57169742d481eac82fe9 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sun, 31 Jul 2016 22:50:34 +0300 Subject: Implement enhanced REPL, relates to #13 Add command history and welcome message --- src/main/com/jantuomi/tunkki/repl/Repl.java | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/com/jantuomi/tunkki/repl/Repl.java (limited to 'src/main/com/jantuomi/tunkki/repl/Repl.java') diff --git a/src/main/com/jantuomi/tunkki/repl/Repl.java b/src/main/com/jantuomi/tunkki/repl/Repl.java new file mode 100644 index 0000000..817d746 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/repl/Repl.java @@ -0,0 +1,52 @@ +package com.jantuomi.tunkki.repl; + +import com.jantuomi.tunkki.Tunkki; +import com.jantuomi.tunkki.exception.TunkkiError; +import jline.console.*; + +import java.io.IOException; +import java.io.PrintWriter; + +/** + * Created by jan on 31.7.2016. + */ +public class Repl { + + private Tunkki tunkki; + + public Repl(Tunkki tunkki) { + this.tunkki = tunkki; + } + + public void run() throws IOException, InterruptedException { + showWelcomeText(); + + ConsoleReader reader = new ConsoleReader(); + reader.setBellEnabled(false); + + String line; + PrintWriter out = new PrintWriter(System.out); + + while ((line = readLine(reader, "")) != null) { + try { + tunkki.run(line); + } + catch (TunkkiError ex) { + ex.printStackTrace(); + Thread.sleep(50); + } + + out.flush(); + } + } + + private String readLine(ConsoleReader reader, String promptMessage) + throws IOException { + String line = reader.readLine(promptMessage + "\ntunkki> "); + return line.trim(); + } + + private void showWelcomeText() { + System.out.println(String.format("tunkki REPL version %s", tunkki.versionString())); + } +} -- cgit v1.3