aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java15
-rw-r--r--src/main/com/jantuomi/tunkki/repl/Repl.java16
-rw-r--r--src/main/com/jantuomi/tunkki/utils/IO.java34
3 files changed, 49 insertions, 16 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
index 4c52d46..26df094 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java
@@ -1,9 +1,12 @@
package com.jantuomi.tunkki.core.runtime.builtins.globals;
import com.jantuomi.tunkki.core.parser.datatype.Datatype;
+import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype;
import com.jantuomi.tunkki.core.parser.datatype.StringDatatype;
import com.jantuomi.tunkki.exception.types.TunkkiError;
+import com.jantuomi.tunkki.utils.IO;
+import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
@@ -24,8 +27,14 @@ public class InputBuiltinFunction extends BuiltinFunction {
Datatype param = params.get(0);
System.out.print(param.getData().toString());
}
- Scanner in = new Scanner(System.in);
- String userInput = in.nextLine();
- return new StringDatatype(userInput);
+ String in;
+ try {
+ in = IO.getInstance().readLine("");
+ return new StringDatatype(in);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return new NadaDatatype();
+ }
+
}
}
diff --git a/src/main/com/jantuomi/tunkki/repl/Repl.java b/src/main/com/jantuomi/tunkki/repl/Repl.java
index aeb620b..c6d843b 100644
--- a/src/main/com/jantuomi/tunkki/repl/Repl.java
+++ b/src/main/com/jantuomi/tunkki/repl/Repl.java
@@ -2,6 +2,7 @@ package com.jantuomi.tunkki.repl;
import com.jantuomi.tunkki.Tunkki;
import com.jantuomi.tunkki.exception.types.TunkkiError;
+import com.jantuomi.tunkki.utils.IO;
import jline.console.*;
import java.io.IOException;
@@ -21,19 +22,15 @@ public class Repl {
public void run() throws IOException, InterruptedException {
showWelcomeText();
- ConsoleReader reader = new ConsoleReader();
- reader.setBellEnabled(false);
- reader.setExpandEvents(false);
-
String line;
String command = "";
PrintWriter out = new PrintWriter(System.out);
boolean isMultilineInput = false;
while (true) {
if (isMultilineInput) {
- line = readLine(reader, "... ");
+ line = IO.getInstance().readLine("... ");
} else {
- line = readLine(reader, "tunkki> ");
+ line = IO.getInstance().readLine("tunkki> ");
}
if (line.endsWith("\\")) {
@@ -56,13 +53,6 @@ public class Repl {
}
}
- private String readLine(ConsoleReader reader, String promptMessage)
- throws IOException {
- System.out.print(promptMessage);
- String line = reader.readLine();
- return line.trim();
- }
-
private void showWelcomeText() {
System.out.println(String.format("tunkki REPL version %s", tunkki.versionString()));
System.out.println("Copyright: Jan Tuomi 2016");
diff --git a/src/main/com/jantuomi/tunkki/utils/IO.java b/src/main/com/jantuomi/tunkki/utils/IO.java
new file mode 100644
index 0000000..ec3ac2a
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/utils/IO.java
@@ -0,0 +1,34 @@
+package com.jantuomi.tunkki.utils;
+
+import jline.console.ConsoleReader;
+
+import java.io.IOException;
+
+/**
+ * Created by jan on 4.8.2016.
+ */
+public class IO {
+ private static IO instance = new IO();
+ private ConsoleReader reader;
+
+ public static IO getInstance() {
+ return instance;
+ }
+
+ private IO() {
+ try {
+ reader = new ConsoleReader();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ reader.setBellEnabled(false);
+ reader.setExpandEvents(false);
+ }
+
+ public String readLine(String promptMessage)
+ throws IOException {
+ System.out.print(promptMessage);
+ String line = reader.readLine();
+ return line.trim();
+ }
+}