diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-16 21:12:35 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-16 21:12:35 -0300 |
| commit | 2f96f49c2d2c8679841c790e9dd7d9f1b6f3fed1 (patch) | |
| tree | 23cfb315743bbb5c1c8fa749e75aba8a54e3a2f7 /base/src/main/java/bjc/utils/ioutils/format/CLParameters.java | |
| parent | 92c56c5918a0858aad32cc9ee0fb3eee99ebd007 (diff) | |
Large update
A large update, this contains much debugging of the CL FORMAT routines,
as well as a few other minor changes.
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/CLParameters.java')
| -rw-r--r-- | base/src/main/java/bjc/utils/ioutils/format/CLParameters.java | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/base/src/main/java/bjc/utils/ioutils/format/CLParameters.java b/base/src/main/java/bjc/utils/ioutils/format/CLParameters.java index 2588446..bde7a7d 100644 --- a/base/src/main/java/bjc/utils/ioutils/format/CLParameters.java +++ b/base/src/main/java/bjc/utils/ioutils/format/CLParameters.java @@ -44,10 +44,33 @@ public class CLParameters { * * @return A set of CL parameters. */ - public static CLParameters fromDirective(String[] params, Tape<Object> dirParams) { + public static CLParameters fromDirective(String unsplit, Tape<Object> dirParams) { + List<String> lParams = new ArrayList<>(); + StringBuilder currParm = new StringBuilder(); + + char prevChar = ' '; + + for (int i = 0; i < unsplit.length(); i++) { + char c = unsplit.charAt(i); + + if (c == ',' && prevChar != '\'') { + lParams.add(currParm.toString()); + + currParm = new StringBuilder(); + } else { + currParm.append(c); + } + + prevChar = c; + } + lParams.add(currParm.toString()); + List<String> parameters = new ArrayList<>(); - for(String param : params) { + if (lParams.size() == 1 && lParams.get(0).equals("")) + return new CLParameters(parameters.toArray(new String[0])); + + for(String param : lParams) { if(param.equalsIgnoreCase("V")) { Object par = dirParams.item(); boolean succ = dirParams.right(); @@ -73,7 +96,9 @@ public class CLParameters { throw new IllegalArgumentException( "Incorrect type of parameter for V inline parameter"); } - } else if(param.equals("#")) { + } else if (param.equals("#")) { + parameters.add(Integer.toString(dirParams.size() - dirParams.position())); + } else if (param.equals("%")) { parameters.add(Integer.toString(dirParams.position())); } else { parameters.add(param); @@ -119,9 +144,14 @@ public class CLParameters { public char getChar(int idx, String paramName, char directive) { String param = params[idx]; + if (param.length() == 1) { + // Punt in the case we have a slightly malformed issue + return param.charAt(0); + } + if(!param.startsWith("'")) { throw new IllegalArgumentException( - String.format("Invalid %s %s to %c directive", paramName, param, directive)); + String.format("Invalid %s \"%s\" to %c directive", paramName, param, directive)); } return param.charAt(1); @@ -166,7 +196,7 @@ public class CLParameters { try { return Integer.parseInt(param); } catch(NumberFormatException nfex) { - String msg = String.format("Invalid %s %s to %c directive", paramName, param, directive); + String msg = String.format("Invalid %s \"%s\" to %c directive", paramName, param, directive); IllegalArgumentException iaex = new IllegalArgumentException(msg); iaex.initCause(nfex); @@ -174,4 +204,21 @@ public class CLParameters { throw iaex; } } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("["); + + for (int i = 0; i < params.length; i++) { + if (i != 0) sb.append(", "); + + sb.append("\""); + sb.append(params[i]); + sb.append("\""); + } + + sb.append("]"); + + return sb.toString(); + } } |
