1313import com .annimon .ownlang .parser .ast .BlockStatement ;
1414import com .annimon .ownlang .parser .ast .Statement ;
1515import com .annimon .ownlang .parser .visitors .PrintVisitor ;
16+ import com .annimon .ownlang .utils .repl .JLineConsole ;
17+ import com .annimon .ownlang .utils .repl .ReplConsole ;
18+ import com .annimon .ownlang .utils .repl .SystemConsole ;
19+ import java .io .IOException ;
1620import java .util .ArrayList ;
1721import java .util .List ;
1822import java .util .Locale ;
1923import java .util .Map ;
20- import java .util .Scanner ;
2124import java .util .stream .Collectors ;
2225
2326public final class Repl {
@@ -36,14 +39,13 @@ public static void main(String[] args) {
3639
3740 final BlockStatement history = new BlockStatement ();
3841 final StringBuilder buffer = new StringBuilder ();
39- final Scanner scanner = new Scanner ( System . in );
42+ final ReplConsole console = initReplConsole ( );
4043 while (true ) {
41- System . out . print ((buffer .length () == 0 ) ? "\n > " : " " );
44+ console . setPrompt ((buffer .length () == 0 ) ? "\n > " : " " );
4245
43- if (!scanner .hasNextLine ()) break ;
46+ final String line = console .readLine ();
47+ if (line == null || EXIT .equalsIgnoreCase (line )) break ;
4448
45- final String line = scanner .nextLine ();
46- if (EXIT .equalsIgnoreCase (line )) break ;
4749 switch (line .toLowerCase (Locale .ENGLISH )) {
4850 case RESET :
4951 buffer .setLength (0 );
@@ -84,7 +86,15 @@ public static void main(String[] args) {
8486 }
8587 buffer .setLength (0 );
8688 }
87- scanner .close ();
89+ console .close ();
90+ }
91+
92+ private static ReplConsole initReplConsole () {
93+ try {
94+ return new JLineConsole ();
95+ } catch (IOException ioe ) {
96+ return new SystemConsole ();
97+ }
8898 }
8999
90100 private static void printHelp (boolean full ) {
0 commit comments