diff options
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java index 863bce5..9d69704 100644 --- a/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangConsole.java @@ -1,11 +1,14 @@ package bjc.dicelang.v2; +import java.io.IOException; import java.util.List; import java.util.LinkedList; -import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; +import jline.ConsoleReader; +import jline.Terminal; + import static bjc.dicelang.v2.Errors.ErrorKey.*; public class DiceLangConsole { @@ -13,20 +16,35 @@ public class DiceLangConsole { private DiceLangEngine eng; + private ConsoleReader read; + public DiceLangConsole(String[] args) { // @TODO do something with the args commandNumber = 0; eng = new DiceLangEngine(); + + Terminal.setupTerminal(); } public void run() { + try { + read = new ConsoleReader(); + } catch(IOException ioex) { + System.out.println("ERROR: Console init failed"); + return; + } + System.out.println("dice-lang v0.2"); - Scanner scn = new Scanner(System.in); + String comm = null; - System.out.printf("(%d) dice-lang> ", commandNumber); - String comm = scn.nextLine(); + try { + comm = read.readLine(String.format("(%d) dice-lang> ", commandNumber)); + } catch (IOException ioex) { + System.out.println("ERROR: I/O failed"); + return; + } while(!comm.equals("quit") && !comm.equals("exit")) { if(comm.startsWith("pragma")) { @@ -45,11 +63,13 @@ public class DiceLangConsole { commandNumber += 1; } - System.out.printf("(%d) dice-lang> ", commandNumber); - comm = scn.nextLine(); + try { + comm = read.readLine(String.format("(%d) dice-lang> ", commandNumber)); + } catch (IOException ioex) { + System.out.println("ERROR: I/O failed"); + return; + } } - - scn.close(); } private boolean handlePragma(String pragma) { @@ -73,6 +93,9 @@ public class DiceLangConsole { case "prefix": System.out.println("\tPrefix mode is now " + eng.togglePrefix()); break; + case "stepeval": + System.out.println("\tStepeval mode is now" + eng.toggleStepEval()); + break; case "define": return defineMode(pragma.substring(7)); case "help": @@ -99,6 +122,9 @@ public class DiceLangConsole { case "prefix": System.out.println("\tToggle prefix mode. (Reverse token order instead of shunting)"); break; + case "stepeval": + System.out.println("\tToggle stepeval mode. (Print out evaluation progress)"); + break; case "define": System.out.println("\tAdd a macro rewrite directive."); System.out.println("\tdefine <priority> <type> <recursion> <guard> <circular> <patterns>..."); |
