summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc
diff options
context:
space:
mode:
Diffstat (limited to 'clformat/src/main/java/bjc')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java2
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java116
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLValue.java110
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java18
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java3
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java12
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java18
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java5
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java22
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java11
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java10
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java3
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java28
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java4
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java5
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java15
16 files changed, 267 insertions, 115 deletions
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
index ef04cf8..12802cf 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -253,7 +253,7 @@ public class CLFormatter {
if(dirMods == null) dirMods = "";
if(dirParams == null) dirParams = "";
- CLParameters arrParams = CLParameters.fromDirective(dirParams, tParams);
+ CLParameters arrParams = CLParameters.fromDirective(dirParams);
CLModifiers mods = CLModifiers.fromString(dirMods);
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java
index 779ce9d..b89a706 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java
@@ -22,12 +22,12 @@ public class CLParameters {
private static String RX_TRUE = "(?i)y(?:es)?|t(?:rue)?(?i)";
private static String RX_FALSE = "(?i)no?|f(?:alse)?(?i)";
- private String[] params;
+ private CLValue[] params;
private Set<String> abbrevWords;
private AbbrevMap nameAbbrevs;
- private Map<String, String> namedParams;
+ private Map<String, CLValue> namedParams;
private Map<String, Integer> nameIndices;
/**
@@ -36,15 +36,15 @@ public class CLParameters {
* @param params
* The CL format parameters to use.
*/
- public CLParameters(String[] params) {
+ public CLParameters(CLValue[] params) {
this(params, new HashMap<>());
}
- public CLParameters(Map<String, String> namedParams) {
- this(new String[0], namedParams);
+ public CLParameters(Map<String, CLValue> namedParams) {
+ this(new CLValue[0], namedParams);
}
- public CLParameters(String[] params, Map<String, String> namedParams) {
+ public CLParameters(CLValue[] params, Map<String, CLValue> namedParams) {
this.params = params;
this.namedParams = namedParams;
@@ -109,11 +109,12 @@ public class CLParameters {
if (doRefresh) refreshAbbrevs();
}
- public String getByIndex(int idx) {
- if (idx < 0 || idx >= params.length) return "Out of Bounds";
+ public CLValue getByIndex(int idx) {
+ if (idx < 0 || idx >= params.length) return null;
return params[idx];
}
+
/**
* Get the length of the parameter list.
*
@@ -136,8 +137,9 @@ public class CLParameters {
*
* @return A set of CL parameters.
*/
- public static CLParameters fromDirective(String unsplit, Tape<Object> dirParams) {
- List<String> lParams = new ArrayList<>();
+ public static CLParameters fromDirective(String unsplit) {
+ List<String> lParams = new ArrayList<>();
+
StringBuilder currParm = new StringBuilder();
char prevChar = ' ';
@@ -168,13 +170,13 @@ public class CLParameters {
// Add last parameter
lParams.add(currParm.toString());
- List<String> parameters = new ArrayList<>();
+ List<CLValue> parameters = new ArrayList<>();
// Special case empty blocks, so that we don't confuse people
if (lParams.size() == 1 && lParams.get(0).equals(""))
- return new CLParameters(parameters.toArray(new String[0]));
+ return new CLParameters(parameters.toArray(new CLValue[0]));
- Map<String, String> namedParams = new HashMap<>();
+ Map<String, CLValue> namedParams = new HashMap<>();
for(String param : lParams) {
if (param.startsWith("#") && !param.equals("#")) {
@@ -198,62 +200,52 @@ public class CLParameters {
String paramName = param.substring(0, nameIdx);
String paramVal = param.substring(nameIdx + 1);
- String actVal = parseParam(paramVal, dirParams);
+ CLValue actVal = parseParam(paramVal);
namedParams.put(paramName.toUpperCase(), actVal);
if (setIndex) parameters.add(actVal);
} else {
- parameters.add(parseParam(param, dirParams));
+ parameters.add(parseParam(param));
}
-
- //currParamNo += 1;
}
- return new CLParameters(parameters.toArray(new String[0]), namedParams);
+ return new CLParameters(parameters.toArray(new CLValue[0]), namedParams);
}
- private static String parseParam(String param, Tape<Object> dirParams) {
- if(param.equalsIgnoreCase("V")) {
- // Read parameter from items
- Object par = dirParams.item();
- boolean succ = dirParams.right();
-
- if(!succ) {
- throw new IllegalStateException("Couldn't advance tape for parameter");
- } else if(par == null) {
- throw new IllegalArgumentException(
- "Expected a format parameter for V inline parameter");
- }
-
- if(par instanceof Number) {
- int val = ((Number) par).intValue();
-
- return Integer.toString(val);
- } else if(par instanceof Character) {
- char ch = ((Character) par);
+ private static CLValue parseParam(String param) {
+ String val = param;
- return Character.toString(ch);
- } else if (par instanceof String) {
- return (String)par;
- } else {
- throw new IllegalArgumentException(
- "Incorrect type of parameter for V inline parameter");
- }
- } else if (param.equals("#")) {
- return (Integer.toString(dirParams.size() - dirParams.position()));
- } else if (param.equals("%")) {
- return Integer.toString(dirParams.position());
- } else if (param.startsWith("\"")) {
+ if (param.startsWith("\"")) {
String dquote = param.substring(1, param.length() - 1);
- return TokenUtils.descapeString(dquote);
+ val = TokenUtils.descapeString(dquote);
}
- return param;
+ return CLValue.parse(val);
}
- private String resolveKey(String key) {
+ /**
+ * Get the corresponding value for a key.
+ *
+ * @param key
+ * The name of the parameter to look up.
+ *
+ * @return The value for that key, or null if none exists.
+ */
+ public CLValue resolveKey(int key) {
+ return resolveKey(Integer.toString(key));
+ }
+
+ /**
+ * Get the corresponding value for a key.
+ *
+ * @param key
+ * The name of the parameter to look up.
+ *
+ * @return The value for that key, or null if none exists.
+ */
+ public CLValue resolveKey(String key) {
String ucKey = key.toUpperCase();
if (!abbrevWords.contains(ucKey)) refreshAbbrev(ucKey);
@@ -286,16 +278,16 @@ public class CLParameters {
// @NOTE 9/22/18
//
// Consider whether we should throw an exception here.
- if (idx < 0 || idx >= params.length) return "";
+ if (idx < 0 || idx >= params.length) return null;
return params[idx];
}
- return "";
+ return null;
}
- public boolean getBoolean(String key, String paramName, String directive, boolean def) {
- String bol = resolveKey(key);
+ public boolean getBoolean(Tape<Object> params, String key, String paramName, String directive, boolean def) {
+ String bol = resolveKey(key).getValue(params);
if(!bol.equals("")) {
if (bol.matches(RX_TRUE)) return true;
@@ -309,8 +301,8 @@ public class CLParameters {
return def;
}
- public String getString(String key, String paramName, String directive, String def) {
- String vl = resolveKey(key);
+ public String getString(Tape<Object> params, String key, String paramName, String directive, String def) {
+ String vl = resolveKey(key).getValue(params);
// @NOTE 9/19/17
//
@@ -321,8 +313,8 @@ public class CLParameters {
return def;
}
- public char getChar(String key, String paramName, String directive, char def) {
- String param = resolveKey(key);
+ public char getChar(Tape<Object> params, String key, String paramName, String directive, char def) {
+ String param = resolveKey(key).getValue(params);
if (!param.equals("")) {
if (param.length() == 1) {
@@ -342,8 +334,8 @@ public class CLParameters {
return def;
}
- public int getInt(String key, String paramName, String directive, int def) {
- String param = resolveKey(key);
+ public int getInt(Tape<Object> params, String key, String paramName, String directive, int def) {
+ String param = resolveKey(key).getValue(params);
if (!param.equals("")) {
try {
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLValue.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLValue.java
new file mode 100644
index 0000000..50aa681
--- /dev/null
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLValue.java
@@ -0,0 +1,110 @@
+package bjc.utils.ioutils.format;
+
+import bjc.utils.esodata.*;
+
+/**
+ * Represents a parameter value to an edict that may have a dynamic value
+ * obtained from the format arguments.
+ *
+ * @author Ben Culkin
+ */
+public interface CLValue {
+ /**
+ * Create a CLValue from a string.
+ *
+ * @param val
+ * The string to create the value from.
+ */
+ public static CLValue parse(String val) {
+ if (val.equalsIgnoreCase("V")) {
+ return new VValue();
+ }
+
+ switch (val) {
+ case "V":
+ case "v":
+ return new VValue();
+ case "#":
+ return new HashValue();
+ case "%":
+ return new PercValue();
+ default:
+ return new LiteralValue(val);
+ }
+ }
+
+ /**
+ * Get the value of the parameter.
+ *
+ * @param params
+ * The parameters passed to the directive.
+ */
+ public String getValue(Tape<Object> params);
+}
+
+class PercValue implements CLValue {
+ public String getValue(Tape<Object> params) {
+ return Integer.toString(params.position());
+ }
+}
+
+class HashValue implements CLValue {
+ public String getValue(Tape<Object> params) {
+ return (Integer.toString(params.size() - params.position()));
+ }
+}
+
+class VValue implements CLValue {
+ public String getValue(Tape<Object> params) {
+ // Read parameter from items
+ Object par = params.item();
+ boolean succ = params.right();
+
+ if(!succ) {
+ throw new IllegalStateException("Couldn't advance tape for parameter");
+ } else if(par == null) {
+ throw new IllegalArgumentException(
+ "Expected a format parameter for V inline parameter");
+ }
+
+ if(par instanceof Number) {
+ int val = ((Number) par).intValue();
+
+ return Integer.toString(val);
+ } else if(par instanceof Character) {
+ char ch = ((Character) par);
+
+ return Character.toString(ch);
+ } else if (par instanceof String) {
+ return (String) par;
+ } else {
+ String msg = "Incorrect type of parameter for V inline parameter";
+
+ throw new IllegalArgumentException(msg);
+ }
+ }
+}
+
+class LiteralValue implements CLValue {
+ private String val;
+
+ /**
+ * Create a new CLValue.
+ *
+ * @param vul
+ * The value of the parameter.
+ */
+ public LiteralValue(String vul) {
+ val = vul;
+ }
+
+ /**
+ * Get the value of the parameter.
+ *
+ * @param params
+ * The parameters passed to the directive.
+ */
+ public String getValue(Tape<Object> params) {
+ return val;
+ }
+}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
index 513b7aa..d0a5d92 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
@@ -1,9 +1,9 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLParameters;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
/**
* Implementation of the A directive.
@@ -15,6 +15,8 @@ public class AestheticDirective implements Directive {
@Override
public void format(FormatParameters dirParams) throws IOException {
+ Tape<Object> itemTape = dirParams.tParams;
+
// Check that we have an item
CLFormatter.checkItem(dirParams.item, 'A');
@@ -35,16 +37,16 @@ public class AestheticDirective implements Directive {
case 1:
params.mapIndices("mincol");
- mincol = params.getInt("mincol", "minimum column count", "A", 0);
+ mincol = params.getInt(itemTape, "mincol", "minimum column count", "A", 0);
break;
case 4:
params.mapIndices("mincol", "colinc", "minpad", "padchar");
- mincol = params.getInt("mincol", "minimum column count", "A", 0);
- colinc = params.getInt("colinc", "padding increment", "A", 1);
- minpad = params.getInt("minpad", "minimum amount of padding", "A", 0);
+ mincol = params.getInt(itemTape, "mincol", "minimum column count", "A", 0);
+ colinc = params.getInt(itemTape, "colinc", "padding increment", "A", 1);
+ minpad = params.getInt(itemTape, "minpad", "minimum amount of padding", "A", 0);
- padchar = params.getChar("padchar", "padding character", "A", ' ');
+ padchar = params.getChar(itemTape, "padchar", "padding character", "A", ' ');
break;
default:
throw new IllegalArgumentException("Must provide either zero, one or four arguments to A directive");
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
index 55660ec..d4f9484 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
@@ -146,7 +146,8 @@ public class ConditionalDirective implements Directive {
if (dirParams.arrParams.length() >= 1) {
dirParams.arrParams.mapIndices("choice");
- res = dirParams.arrParams.getInt("choice", "conditional choice", "[", 0);
+ res = dirParams.arrParams.getInt(dirParams.tParams,
+ "choice", "conditional choice", "[", 0);
} else {
if (dirParams.item == null) {
throw new IllegalArgumentException("No parameter provided for [ directive.");
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
index c9d0ca1..0813b23 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
@@ -19,6 +19,18 @@ public interface Directive {
public void format(FormatParameters dirParams) throws IOException;
/**
+ * Compile this directive.
+ *
+ * @param compCTX
+ * The state necessary to compile this directive.
+ *
+ * @return A compiled form of this directive.
+ */
+ public default Edict compile(CompileContext compCTX) {
+ throw new IllegalArgumentException("This directive does not support compilation yet");
+ }
+
+ /**
* Check if a particular directive is an opening directive.
*
* @param str
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
index 233367f..0820c16 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
@@ -1,7 +1,7 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.format.EscapeException;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
/**
* Implementation for the ^ directive.
@@ -12,6 +12,8 @@ public class EscapeDirective implements Directive {
@Override
public void format(FormatParameters dirParams) {
+ Tape<Object> itemTape = dirParams.tParams;
+
boolean shouldExit;
if (dirParams.mods.dollarMod) dirParams.tParams.right();
@@ -23,15 +25,15 @@ public class EscapeDirective implements Directive {
break;
case 1: {
params.mapIndices("count");
- int num = params.getInt("count", "condition count", "^", 0);
+ int num = params.getInt(itemTape, "count", "condition count", "^", 0);
shouldExit = num == 0;
break;
}
case 2: {
params.mapIndices("lhand", "rhand");
- int left = params.getInt("lhand", "left-hand condition", "^", 0);
- int right = params.getInt("rhand", "right-hand condition", "^", 0);
+ int left = params.getInt(itemTape, "lhand", "left-hand condition", "^", 0);
+ int right = params.getInt(itemTape, "rhand", "right-hand condition", "^", 0);
shouldExit = left == right;
break;
@@ -40,9 +42,9 @@ public class EscapeDirective implements Directive {
default: {
params.mapIndices("lower", "ival", "upper");
- int low = params.getInt("lower", "lower-bound condition", "^", 0);
- int mid = params.getInt("ival", "interval condition", "^", 0);
- int high = params.getInt("upper", "upper-bound condition", "^", 0);
+ int low = params.getInt(itemTape, "lower", "lower-bound condition", "^", 0);
+ int mid = params.getInt(itemTape, "ival", "interval condition", "^", 0);
+ int high = params.getInt(itemTape, "upper", "upper-bound condition", "^", 0);
shouldExit = (low <= mid) && (mid <= high);
break;
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
index 710c3f5..3b54a92 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
@@ -1,6 +1,6 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
/**
* Implement the &amp; directive.
@@ -15,7 +15,8 @@ public class FreshlineDirective implements Directive {
if(dirParams.arrParams.length() >= 1) {
dirParams.arrParams.mapIndices("count");
- nTimes = dirParams.arrParams.getInt("count", "occurance count", "&", 1);
+ nTimes = dirParams.arrParams.getInt(dirParams.tParams,
+ "count", "occurance count", "&", 1);
}
if(dirParams.rw.isLastCharNL()) nTimes -= 1;
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
index 1d0ecdc..7f4cd02 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
@@ -1,11 +1,11 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
-import bjc.utils.ioutils.ReportWriter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.math.NumberUtils;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.*;
+import bjc.utils.ioutils.format.*;
+import bjc.utils.math.*;
/**
* Implementation skeleton for number directives.
@@ -14,7 +14,7 @@ import bjc.utils.math.NumberUtils;
*
*/
public abstract class GeneralNumberDirective implements Directive {
- protected static void handleNumberDirective(ReportWriter rw, CLModifiers mods, CLParameters params, int argidx,
+ protected static void handleNumberDirective(Tape<Object> itemTape, ReportWriter rw, CLModifiers mods, CLParameters params, int argidx,
long val, int radix) throws IOException {
/*
@@ -25,12 +25,12 @@ public abstract class GeneralNumberDirective implements Directive {
char padchar = ' ';
if (params.length() >= (argidx + 2)) {
params.mapIndex("mincol", argidx + 1);
- mincol = params.getInt("mincol", "minimum column count", "R", 0);
+ mincol = params.getInt(itemTape, "mincol", "minimum column count", "R", 0);
}
if (params.length() >= (argidx + 3)) {
params.mapIndex("padchar", argidx + 2);
- padchar = params.getChar("padchar", "padding character", "R", ' ');
+ padchar = params.getChar(itemTape, "padchar", "padding character", "R", ' ');
}
String res;
@@ -43,15 +43,13 @@ public abstract class GeneralNumberDirective implements Directive {
int commaInterval = 0;
char commaChar = ',';
- // System.err.printf("Comma params (idx %d, len %d): char \"%s\", int \"%s\"\n", argidx, params.length(), params.getRaw(argidx + 3), params.getRaw(argidx + 4));
-
if (params.length() >= (argidx + 4)) {
params.mapIndex("cchar", argidx + 3);
- commaChar = params.getChar("cchar", "comma character", "R", ',');
+ commaChar = params.getChar(itemTape, "cchar", "comma character", "R", ',');
}
if (params.length() >= (argidx + 5)) {
params.mapIndex("cinterval", argidx + 4);
- commaInterval = params.getInt("cinterval", "comma interval", "R", 0);
+ commaInterval = params.getInt(itemTape, "cinterval", "comma interval", "R", 0);
}
res = NumberUtils.toCommaString(val, mincol, padchar, commaInterval, commaChar, mods.atMod, radix);
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
index 5c457b0..941b74d 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
@@ -1,6 +1,7 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.ioutils.format.CLParameters;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
/**
* Implement the * directive.
@@ -12,13 +13,15 @@ public class GotoDirective implements Directive {
@Override
public void format(FormatParameters dirParams) {
+ Tape<Object> itemTape = dirParams.tParams;
+
CLParameters params = dirParams.arrParams;
if (dirParams.mods.colonMod) {
int num = 1;
if (params.length() >= 1) {
params.mapIndices("numargs");
- num = params.getInt("numargs", "number of arguments backward", "*", 1);
+ num = params.getInt(itemTape, "numargs", "number of arguments backward", "*", 1);
}
dirParams.tParams.left(num);
@@ -27,7 +30,7 @@ public class GotoDirective implements Directive {
if (params.length() >= 1) {
params.mapIndices("argidx");
- num = params.getInt("argidx", "argument index", "*", 0);
+ num = params.getInt(itemTape, "argidx", "argument index", "*", 0);
}
dirParams.tParams.first();
@@ -37,7 +40,7 @@ public class GotoDirective implements Directive {
if (params.length() >= 1) {
params.mapIndices("numargs");
- num = params.getInt("numargs", "number of arguments forward", "*", 1);
+ num = params.getInt(itemTape, "numargs", "number of arguments forward", "*", 1);
}
dirParams.tParams.right(num);
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java
index 21e5535..a6354f8 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java
@@ -1,6 +1,8 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
+
+import bjc.utils.esodata.*;
/**
* Implement the I directive.
@@ -8,12 +10,12 @@ import java.io.IOException;
*
*/
public class IndentDirective implements Directive {
-
@Override
public void format(FormatParameters dirParams) throws IOException {
+ Tape<Object> itemTape = dirParams.tParams;
+
// Dollar mod is indent configuration
if (dirParams.mods.dollarMod) {
-
return;
}
@@ -22,7 +24,7 @@ public class IndentDirective implements Directive {
if(dirParams.arrParams.length() >= 1) {
dirParams.arrParams.mapIndices("count");
- nIndents = dirParams.arrParams.getInt("count", "indent count", "I", 1);
+ nIndents = dirParams.arrParams.getInt(itemTape, "count", "indent count", "I", 1);
}
boolean dedent = false;
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
index b4d7c33..be5d48e 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
@@ -71,7 +71,8 @@ public class IterationDirective implements Directive {
if (params.length() > 0) {
params.mapIndices("maxitr");
- maxItr = params.getInt("maxitr", "maximum iterations", "{", Integer.MAX_VALUE);
+ maxItr = params.getInt(dirParams.tParams, "maxitr",
+ "maximum iterations", "{", Integer.MAX_VALUE);
}
int numItr = 0;
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
index 1e71777..e603305 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
@@ -9,7 +9,6 @@ import java.io.IOException;
*
*/
public class LiteralDirective implements Directive {
-
private String directive;
private String lit;
@@ -33,7 +32,7 @@ public class LiteralDirective implements Directive {
if (dirParams.arrParams.length() >= 1) {
dirParams.arrParams.mapIndices("count");
- nTimes = dirParams.arrParams.getInt("count", "occurance count", directive, 1);
+ nTimes = dirParams.arrParams.getInt(dirParams.tParams, "count", "occurance count", directive, 1);
}
for (int i = 0; i < nTimes; i++) {
@@ -42,4 +41,29 @@ public class LiteralDirective implements Directive {
}
+ @Override
+ public Edict compile(CompileContext compCTX) {
+ int nTimes = 1;
+
+ LiteralEdict edict = new LiteralEdict(lit, nTimes);
+
+ return edict;
+ }
+}
+
+/*
+ * Compiled version of the directive.
+ */
+class LiteralEdict implements Edict {
+ private String lit;
+ private int nTimes;
+
+ public LiteralEdict(String lit, int nTimes) {
+
+ }
+
+ @Override
+ public void format(FormatContext formCTX) {
+
+ }
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
index 338cd61..68b5873 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
@@ -12,7 +12,6 @@ import bjc.utils.ioutils.format.CLFormatter;
*
*/
public class NumberDirective extends GeneralNumberDirective {
-
/**
* Create a new radix based number directive.
*
@@ -43,7 +42,8 @@ public class NumberDirective extends GeneralNumberDirective {
long val = ((Number) dirParams.item).longValue();
- handleNumberDirective(dirParams.rw, dirParams.mods, dirParams.arrParams, argidx, val, radix);
+ handleNumberDirective(dirParams.tParams, dirParams.rw,
+ dirParams.mods, dirParams.arrParams, argidx, val, radix);
dirParams.tParams.right();
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
index 4696c60..87fba8e 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
@@ -43,9 +43,10 @@ public class RadixDirective extends GeneralNumberDirective {
params.mapIndex("radix", 0);
- int radix = params.getInt("radix", "radix", "R", 10);
+ int radix = params.getInt(dirParams.tParams, "radix", "radix", "R", 10);
- handleNumberDirective(dirParams.rw, dirParams.mods, params, 0, val, radix);
+ handleNumberDirective(dirParams.tParams, dirParams.rw,
+ dirParams.mods, params, 0, val, radix);
}
dirParams.tParams.right();
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java
index d0bd55b..a06e585 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java
@@ -1,11 +1,14 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
-import bjc.utils.ioutils.format.CLParameters;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
public class TabulateDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
+ Tape<Object> itemTape = dirParams.tParams;
+
// Support for a possible future feature
char padchar = ' ';
@@ -22,13 +25,13 @@ public class TabulateDirective implements Directive {
if (params.length() > 2) {
params.mapIndex("colinc", 1);
- colinc = params.getInt("colinc", "column increment", "T", 1);
+ colinc = params.getInt(itemTape, "colinc", "column increment", "T", 1);
}
if (params.length() > 1) {
params.mapIndices("colrel");
- colrel = params.getInt("colrel", "relative column number", "T", 1);
+ colrel = params.getInt(itemTape, "colrel", "relative column number", "T", 1);
}
for (int i = 0; i < colrel; i++) {
@@ -48,13 +51,13 @@ public class TabulateDirective implements Directive {
if (params.length() > 2) {
params.mapIndex("colinc", 1);
- colinc = params.getInt("colinc", "column increment", "T", 1);
+ colinc = params.getInt(itemTape, "colinc", "column increment", "T", 1);
}
if (params.length() > 1) {
params.mapIndices("colnum");
- colnum = params.getInt("colnum", "column number", "T", 1);
+ colnum = params.getInt(itemTape, "colnum", "column number", "T", 1);
}
if (currCol < colnum) {