Skip to content

Commit

Permalink
JLine app with and without console variables, fixes #565
Browse files Browse the repository at this point in the history
  • Loading branch information
mattirn committed Aug 30, 2020
1 parent 2b5e1ae commit 36f8ecd
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
1 change: 1 addition & 0 deletions demo/src/main/java/org/jline/demo/Graal.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public static void main(String[] args) {
parser.setEofOnUnclosedQuote(true);
parser.setEscapeChars(null);
parser.setRegexCommand("[:]{0,1}[a-zA-Z!]{1,}\\S*"); // change default regex to support shell commands
parser.setRegexVariable(null); // we do not have console variables!
Terminal terminal = TerminalBuilder.builder().build();
Thread executeThread = Thread.currentThread();
terminal.handle(Signal.INT, signal -> executeThread.interrupt());
Expand Down
34 changes: 21 additions & 13 deletions reader/src/main/java/org/jline/reader/impl/DefaultParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public enum Bracket {
ROUND, // ()
CURLY, // {}
SQUARE, // []
ANGLE; // <>
ANGLE // <>
}

private char[] quoteChars = {'\'', '"'};
Expand All @@ -39,8 +39,8 @@ public enum Bracket {

private char[] closingBrackets = null;

private String regexVariable = "[a-zA-Z_]{1,}[a-zA-Z0-9_-]*((.|\\['|\\[\\\"|\\[)[a-zA-Z0-9_-]*(|'\\]|\\\"\\]|\\])){0,1}";
private String regexCommand = "[:]{0,1}[a-zA-Z]{1,}[a-zA-Z0-9_-]*";
private String regexVariable = "[a-zA-Z_]+[a-zA-Z0-9_-]*((.|\\['|\\[\"|\\[)[a-zA-Z0-9_-]*(|']|\"]|\\]))?";
private String regexCommand = "[:]?[a-zA-Z]+[a-zA-Z0-9_-]*";
private int commandGroup = 4;

//
Expand Down Expand Up @@ -175,18 +175,24 @@ public boolean validCommandName(String name) {

@Override
public boolean validVariableName(String name) {
return name != null && name.matches(regexVariable);
return name != null && regexVariable != null && name.matches(regexVariable);
}


@Override
public String getCommand(final String line) {
String out = "";
Pattern patternCommand = Pattern.compile("^\\s*" + regexVariable + "=(" + regexCommand + ")(\\s+|$)");
Matcher matcher = patternCommand.matcher(line);
if (matcher.find()) {
out = matcher.group(commandGroup);
} else {
boolean checkCommandOnly = regexVariable == null;
if (!checkCommandOnly) {
Pattern patternCommand = Pattern.compile("^\\s*" + regexVariable + "=(" + regexCommand + ")(\\s+|$)");
Matcher matcher = patternCommand.matcher(line);
if (matcher.find()) {
out = matcher.group(commandGroup);
} else {
checkCommandOnly = true;
}
}
if (checkCommandOnly) {
out = line.trim().split("\\s+")[0];
if (!out.matches(regexCommand)) {
out = "";
Expand All @@ -198,10 +204,12 @@ public String getCommand(final String line) {
@Override
public String getVariable(final String line) {
String out = null;
Pattern patternCommand = Pattern.compile("^\\s*(" + regexVariable + ")\\s*=[^=~].*");
Matcher matcher = patternCommand.matcher(line);
if (matcher.find()) {
out = matcher.group(1);
if (regexVariable != null) {
Pattern patternCommand = Pattern.compile("^\\s*(" + regexVariable + ")\\s*=[^=~].*");
Matcher matcher = patternCommand.matcher(line);
if (matcher.find()) {
out = matcher.group(1);
}
}
return out;
}
Expand Down

0 comments on commit 36f8ecd

Please sign in to comment.