summaryrefslogtreecommitdiff
path: root/clformat/src/main/java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-07-26 17:38:12 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-07-26 17:38:12 -0300
commitd317469f2063e7e57f97df9381d23a94bbc43bb0 (patch)
treeeaf0adb827ed3d9265154f722355c817e8896923 /clformat/src/main/java
parent58ba68ad475074311a8921067ea04feb6f22588d (diff)
Refactor directive handling
Refactored the tokenizer to pass back tokens which have the data stored on them, significantly cutting down on the amount of parsing/reparsing of directives we are doing. Also, it makes the over-arching goal of allowing compilation easier
Diffstat (limited to 'clformat/src/main/java')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java90
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java48
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/Decree.java106
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java7
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java48
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java2
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java78
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java11
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java60
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java11
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java5
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java8
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IndentDirective.java14
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java39
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java71
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java12
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java3
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java21
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java18
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java7
20 files changed, 427 insertions, 232 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 12802cf..c68e8f5 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -230,57 +230,91 @@ public class CLFormatter {
public void doFormatString(String format, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
CLTokenizer cltok = new CLTokenizer(format);
+ doFormatString(cltok, rw, tParams, isToplevel);
+ }
+
+ /**
+ * Fill in a partially started format string.
+ *
+ * Used mostly for directives that require formatting again with a
+ * different string.
+ *
+ * @param cltok
+ * The place to get tokens from.
+ *
+ * @param rw
+ * The buffer to file output into.
+ *
+ * @param tParams
+ * The parameters to use.
+ *
+ * @param isToplevel
+ * Whether or not this is a top-level format
+ *
+ * @throws IOException If something goes wrong
+ */
+ public void doFormatString(Iterable<Decree> cltok, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
+ doFormatString(cltok.iterator(), rw, tParams, isToplevel);
+ }
+ /**
+ * Fill in a partially started format string.
+ *
+ * Used mostly for directives that require formatting again with a
+ * different string.
+ *
+ * @param cltok
+ * The place to get tokens from.
+ *
+ * @param rw
+ * The buffer to file output into.
+ *
+ * @param tParams
+ * The parameters to use.
+ *
+ * @param isToplevel
+ * Whether or not this is a top-level format
+ *
+ * @throws IOException If something goes wrong
+ */
+ public void doFormatString(Iterator<Decree> cltok, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
boolean doTail = true;
+
try {
while (cltok.hasNext()) {
- String direc = cltok.next();
+ Decree decr = cltok.next();
- if (!direc.startsWith("~")) {
- rw.write(direc);
+ if (decr.isLiteral) {
+ rw.write(decr.name);
continue;
}
- Matcher dirMatcher = CLPattern.getDirectiveMatcher(direc);
- if (!dirMatcher.find()) {
- throw new IllegalArgumentException("Unable to match directive found from tokenizer");
- }
-
- String dirName = dirMatcher.group("name");
- String dirFunc = dirMatcher.group("funcname");
- String dirMods = dirMatcher.group("modifiers");
- String dirParams = dirMatcher.group("params");
-
- if(dirMods == null) dirMods = "";
- if(dirParams == null) dirParams = "";
-
- CLParameters arrParams = CLParameters.fromDirective(dirParams);
-
- CLModifiers mods = CLModifiers.fromString(dirMods);
-
Object item = tParams.item();
- if(dirName == null && dirFunc != null) {
+ if(decr.isUserCall) {
/*
* @TODO implement user-called functions.
*/
continue;
}
- if(extraDirectives.containsKey(dirName)) {
- extraDirectives.get(dirName).format(new FormatParameters(rw, item, mods, arrParams, tParams, cltok, this));
+ if(extraDirectives.containsKey(decr.name)) {
+ FormatParameters params = new FormatParameters(rw, item, decr, tParams, cltok, this);
+
+ extraDirectives.get(decr.name).format(params);
continue;
}
- if(builtinDirectives.containsKey(dirName)) {
- builtinDirectives.get(dirName).format(new FormatParameters(rw, item, mods, arrParams, tParams, cltok, this));
+ if(builtinDirectives.containsKey(decr.name)) {
+ FormatParameters params = new FormatParameters(rw, item, decr, tParams, cltok, this);
+ builtinDirectives.get(decr.name).format(params);
continue;
}
- if(dirName == null) dirName = "<null>";
+ if(decr.name == null) decr.name = "<null>";
- switch(dirName) {
+ switch(decr.name) {
case "]":
throw new IllegalArgumentException("Found conditional-end outside of conditional.");
case ";":
@@ -325,7 +359,7 @@ public class CLFormatter {
*/
break;
default:
- String msg = String.format("Unknown format directive '%s'", dirName);
+ String msg = String.format("Unknown format directive '%s'", decr.name);
throw new IllegalArgumentException(msg);
}
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
index 8c1857f..7c76696 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
@@ -7,10 +7,10 @@ import java.util.regex.Matcher;
import bjc.utils.ioutils.SimpleProperties;
import bjc.utils.ioutils.format.directives.*;
-public class CLTokenizer implements Iterator<String> {
+public class CLTokenizer implements Iterator<Decree> {
private Matcher mat;
- private String dir;
+ private Decree dir;
public CLTokenizer(String strang) {
this.mat = CLPattern.getDirectiveMatcher(strang);
@@ -22,20 +22,20 @@ public class CLTokenizer implements Iterator<String> {
}
@Override
- public String next() {
- String tk = getNext();
- // System.out.printf("\tToken: %s\n", tk);
+ public Decree next() {
+ Decree tk = getNext();
return tk;
}
- private String getNext() {
- if (!hasNext()) return "";
+ private Decree getNext() {
+ if (!hasNext()) return null;
if (dir != null) {
- String tmp = dir;
+ Decree tmp = dir;
dir = null;
+
return tmp;
}
@@ -44,20 +44,42 @@ public class CLTokenizer implements Iterator<String> {
while (mat.find()) {
mat.appendReplacement(sb, "");
- dir = mat.group();
-
String tmp = sb.toString();
+
+ {
+ String dirName = mat.group("name");
+ String dirFunc = mat.group("funcname");
+ String dirMods = mat.group("modifiers");
+ String dirParams = mat.group("params");
+
+ if(dirMods == null) {
+ dirMods = "";
+ }
+
+ if(dirParams == null) {
+ dirParams = "";
+ }
+
+ boolean isUser = dirName == null && dirFunc != null;
+
+ dir = new Decree(dirName, isUser,
+ CLParameters.fromDirective(dirParams),
+ CLModifiers.fromString(dirMods));
+ }
+
if (tmp.equals("")) {
+ Decree dcr = dir;
+
dir = null;
- return mat.group();
+ return dcr;
}
- return sb.toString();
+ return new Decree(sb.toString());
}
mat.appendTail(sb);
- return sb.toString();
+ return new Decree(sb.toString());
}
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/Decree.java b/clformat/src/main/java/bjc/utils/ioutils/format/Decree.java
new file mode 100644
index 0000000..ce1f04d
--- /dev/null
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/Decree.java
@@ -0,0 +1,106 @@
+package bjc.utils.ioutils.format;
+
+/**
+ * A decree is the building blocks of what we need to pick and call a directive.
+ *
+ * Namely, it is the name of the directive, any modifiers attached to the
+ * directive, and any prefix parameters that are also attached to the directive.
+ *
+ * @author Ben Culkin.
+ */
+public class Decree {
+ /**
+ * The name of the directive.
+ */
+ public String name;
+
+ /**
+ * Is this directive an actual directive, or just a literal string?
+ */
+ public boolean isLiteral;
+
+ /**
+ * Is this directive a user function call?
+ */
+ public boolean isUserCall;
+
+ /**
+ * The prefix parameters for this directive.
+ */
+ public CLParameters parameters;
+
+ /**
+ * The modifiers for this directive.
+ */
+ public CLModifiers modifiers;
+
+ /**
+ * Create a new blank decree.
+ */
+ public Decree() {
+
+ }
+
+ /**
+ * Create a new literal text directive.
+ *
+ * @param txt
+ * The text of the directive.
+ */
+ public Decree(String txt) {
+ this.name = txt;
+
+ this.isLiteral = true;
+ }
+
+ /**
+ * Create a new directive.
+ *
+ * @param name
+ * The name of the directive. Whether or not it is an actual directive will
+ * be auto-determined (if it starts with a ~, it's a directive.)
+ *
+ * @param params
+ * The prefix parameters to the directive.
+ *
+ * @param mods
+ * The modifiers to the directive.
+ */
+ public Decree(String name, CLParameters params, CLModifiers mods) {
+ this.name = name;
+
+ this.parameters = params;
+
+ this.modifiers = mods;
+
+ this.isLiteral = false;
+ }
+
+ /**
+ * Create a new directive that may be a user function.
+ *
+ * @param name
+ * The name of the directive. Whether or not it is an actual directive will
+ * be auto-determined (if it starts with a ~ and is not a user function, it's a directive.)
+ *
+ * @param isUser
+ * Is this directive a user function?
+ *
+ * @param params
+ * The prefix parameters to the directive.
+ *
+ * @param mods
+ * The modifiers to the directive.
+ */
+ public Decree(String name, boolean isUser, CLParameters params, CLModifiers mods) {
+ this.name = name;
+
+ this.parameters = params;
+
+ this.modifiers = mods;
+
+ this.isUserCall = isUser;
+
+ this.isLiteral = isUser;
+ }
+}
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 d0a5d92..35119e5 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
@@ -27,7 +27,8 @@ public class AestheticDirective implements Directive {
char padchar = ' ';
- CLParameters params = dirParams.arrParams;
+ CLParameters params = dirParams.getParams();
+ CLModifiers mods = dirParams.getMods();
// We take 0, 1 or 4 parameters
switch (params.length()) {
@@ -56,7 +57,7 @@ public class AestheticDirective implements Directive {
StringBuilder work = new StringBuilder();
- if (dirParams.mods.atMod) {
+ if (mods.atMod) {
for (int i = 0; i < minpad; i++) {
work.append(padchar);
}
@@ -70,7 +71,7 @@ public class AestheticDirective implements Directive {
work.append(tmp);
- if (!dirParams.mods.atMod) {
+ if (!mods.atMod) {
for (int i = 0; i < minpad; i++) {
work.append(padchar);
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java
index 7943fb9..4bb54b4 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java
@@ -1,48 +1,44 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
-import bjc.utils.ioutils.ReportWriter;
-import bjc.utils.ioutils.format.CLPattern;
+import bjc.utils.ioutils.*;
+import bjc.utils.ioutils.format.*;
public class CaseDirective implements Directive {
private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)");
@Override
public void format(FormatParameters dirParams) throws IOException {
- StringBuilder condBody = new StringBuilder();
+ CLModifiers mods = dirParams.getMods();
+
+ List<Decree> condBody = new ArrayList<>();
int nestLevel = 1;
- Iterator<String> dirIter = dirParams.dirIter;
- while (dirParams.dirIter.hasNext()) {
- String direc = dirIter.next();
- if (!direc.startsWith("~")) {
- condBody.append(direc);
+ Iterator<Decree> dirIter = dirParams.dirIter;
+ while (dirIter.hasNext()) {
+ Decree decr = dirIter.next();
+ if (decr.isLiteral) {
+ condBody.add(decr);
continue;
}
- Matcher dirMat = CLPattern.getDirectiveMatcher(direc);
- dirMat.find();
-
- /* Process a list of clauses. */
- String dirName = dirMat.group("name");
+ String dirName = decr.name;
if (dirName != null) {
if (dirName.equals("(")) {
if (nestLevel > 0) {
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMat.group());
+ condBody.add(decr);
} else if (dirName.equals(")")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -52,22 +48,20 @@ public class CaseDirective implements Directive {
nestLevel = Math.max(0, nestLevel - 1);
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
}
}
- String frmt = condBody.toString();
-
ReportWriter nrw = dirParams.rw.duplicate(new StringWriter());
- dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false);
+ dirParams.fmt.doFormatString(condBody, nrw, dirParams.tParams, false);
String strang = nrw.toString();
- if (dirParams.mods.colonMod && dirParams.mods.atMod) {
+ if (mods.colonMod && mods.atMod) {
strang = strang.toUpperCase();
- } else if (dirParams.mods.colonMod) {
+ } else if (mods.colonMod) {
Matcher mat = wordPattern.matcher(strang);
StringBuffer sb = new StringBuffer();
@@ -84,7 +78,7 @@ public class CaseDirective implements Directive {
mat.appendTail(sb);
strang = sb.toString();
- } else if (dirParams.mods.atMod) {
+ } else if (mods.atMod) {
Matcher mat = wordPattern.matcher(strang);
StringBuffer sb = new StringBuffer();
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
index d9ea3da..025e6e6 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
@@ -24,7 +24,7 @@ public class CharacterDirective implements Directive {
char ch = (Character) dirParams.item;
int codepoint = ch;
- if (dirParams.mods.colonMod) {
+ if (dirParams.getMods().colonMod) {
/*
* Colon mod means print Unicode character name.
*/
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 d4f9484..0a400e9 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
@@ -1,14 +1,10 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.IllegalFormatConversionException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Matcher;
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
-import bjc.utils.ioutils.format.CLPattern;
-import bjc.utils.ioutils.format.EscapeException;
+import bjc.utils.ioutils.format.*;
/**
* Implements the [ directive.
@@ -19,46 +15,45 @@ import bjc.utils.ioutils.format.EscapeException;
public class ConditionalDirective implements Directive {
@Override
public void format(FormatParameters dirParams) throws IOException {
- StringBuilder condBody = new StringBuilder();
+ CLModifiers mods = dirParams.getMods();
+ CLParameters params = dirParams.getParams();
- List<String> clauses = new ArrayList<>();
+ List<Decree> condBody = new ArrayList<>();
- String defClause = null;
+ List<List<Decree>> clauses = new ArrayList<>();
+
+ List<Decree> defClause = null;
boolean isDefault = false;
int nestLevel = 1;
- Iterator<String> dirIter = dirParams.dirIter;
+ Iterator<Decree> dirIter = dirParams.dirIter;
while (dirIter.hasNext()) {
- String direc = dirIter.next();
- if (!direc.startsWith("~")) {
- condBody.append(direc);
+ Decree decr = dirIter.next();
+ if (decr.isLiteral) {
+ condBody.add(decr);
continue;
}
- Matcher dirMat = CLPattern.getDirectiveMatcher(direc);
- dirMat.find();
- /* Process a list of clauses. */
- String dirName = dirMat.group("name");
- String dirMods = dirMat.group("modifiers");
-
+ String dirName = decr.name;
if (dirName != null) {
if (dirName.equals("[")) {
if (nestLevel > 0) {
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMat.group());
+ condBody.add(decr);
} else if (dirName.equals("]")) {
nestLevel = Math.max(0, nestLevel - 1);
if (nestLevel == 0) {
/* End the conditional. */
- String clause = condBody.toString();
- condBody = new StringBuilder();
+ List<Decree> clause = condBody;
+
+ condBody = new ArrayList<>();
if (isDefault) {
defClause = clause;
@@ -68,17 +63,18 @@ public class ConditionalDirective implements Directive {
break;
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
} else if (Directive.isClosing(dirName)) {
nestLevel = Math.max(0, nestLevel - 1);
- condBody.append(dirMat.group());
+ condBody.add(decr);
} else if (dirName.equals(";")) {
if (nestLevel == 1) {
/* End the clause. */
- String clause = condBody.toString();
- condBody = new StringBuilder();
+ List<Decree> clause = condBody;
+
+ condBody = new ArrayList<>();
if (isDefault) {
defClause = clause;
@@ -88,24 +84,24 @@ public class ConditionalDirective implements Directive {
/*
* Mark the next clause as the default.
*/
- if (dirMods.contains(":")) {
+ if (decr.modifiers.colonMod) {
isDefault = true;
}
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
}
}
- if (dirParams.mods.starMod && clauses.size() > 0) defClause = clauses.get(0);
+ if (mods.starMod && clauses.size() > 0) defClause = clauses.get(0);
try {
- if (dirParams.mods.colonMod) {
+ if (mods.colonMod) {
dirParams.tParams.right();
boolean res = false;
@@ -117,14 +113,14 @@ public class ConditionalDirective implements Directive {
res = (Boolean) dirParams.item;
}
- String frmt;
+ List<Decree> frmt;
if (res)
frmt = clauses.get(1);
else
frmt = clauses.get(0);
dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false);
- } else if (dirParams.mods.atMod) {
+ } else if (mods.atMod) {
boolean res = false;
if (dirParams.item == null) {
// throw new IllegalArgumentException("No parameter provided for [ directive.");
@@ -143,10 +139,10 @@ public class ConditionalDirective implements Directive {
}
} else {
int res;
- if (dirParams.arrParams.length() >= 1) {
- dirParams.arrParams.mapIndices("choice");
+ if (params.length() >= 1) {
+ params.mapIndices("choice");
- res = dirParams.arrParams.getInt(dirParams.tParams,
+ res = params.getInt(dirParams.tParams,
"choice", "conditional choice", "[", 0);
} else {
if (dirParams.item == null) {
@@ -159,7 +155,7 @@ public class ConditionalDirective implements Directive {
dirParams.tParams.right();
}
- if (dirParams.mods.dollarMod) res -= 1;
+ if (mods.dollarMod) res -= 1;
// System.err.printf("Attempting selection of clause %d of %d (%s) (default %s)\n",
// res, clauses.size(), clauses, defClause);
@@ -172,7 +168,7 @@ public class ConditionalDirective implements Directive {
if (defClause != null) dirParams.fmt.doFormatString(defClause, dirParams.rw, dirParams.tParams, false);
} else {
- String frmt = clauses.get(res);
+ List<Decree> frmt = clauses.get(res);
// System.out.printf("Selecting clause %d of %d (params %s): %s\n", res, clauses.size(), formatParams, frmt);
dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false);
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 0820c16..f20f976 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
@@ -13,12 +13,13 @@ public class EscapeDirective implements Directive {
@Override
public void format(FormatParameters dirParams) {
Tape<Object> itemTape = dirParams.tParams;
+ CLModifiers mods = dirParams.getMods();
boolean shouldExit;
- if (dirParams.mods.dollarMod) dirParams.tParams.right();
+ if (mods.dollarMod) dirParams.tParams.right();
- CLParameters params = dirParams.arrParams;
+ CLParameters params = dirParams.getParams();
switch(params.length()) {
case 0:
shouldExit = dirParams.tParams.atEnd();
@@ -51,12 +52,12 @@ public class EscapeDirective implements Directive {
}
}
- if (dirParams.mods.dollarMod) dirParams.tParams.left();
+ if (mods.dollarMod) dirParams.tParams.left();
/* At negates it. */
- if(dirParams.mods.atMod) shouldExit = !shouldExit;
+ if(mods.atMod) shouldExit = !shouldExit;
- if(shouldExit) throw new EscapeException(dirParams.mods.colonMod);
+ if(shouldExit) throw new EscapeException(mods.colonMod);
}
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
index c5f3331..b641cde 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
@@ -1,30 +1,44 @@
package bjc.utils.ioutils.format.directives;
-import java.util.Iterator;
+import java.util.*;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.ReportWriter;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.*;
+import bjc.utils.ioutils.format.*;
public class FormatParameters {
- public ReportWriter rw;
- public Object item;
- public CLModifiers mods;
- public CLParameters arrParams;
- public Tape<Object> tParams;
- public Iterator<String> dirIter;
- public CLFormatter fmt;
-
- public FormatParameters(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams,
- Tape<Object> tParams, Iterator<String> dirIter, CLFormatter fmt) {
- this.rw = rw;
- this.item = item;
- this.mods = mods;
- this.arrParams = arrParams;
- this.tParams = tParams;
- this.dirIter = dirIter;
- this.fmt = fmt;
+ public ReportWriter rw;
+
+ public Object item;
+
+ public Decree decr;
+
+ public Tape<Object> tParams;
+
+ public Iterator<Decree> dirIter;
+
+ public CLFormatter fmt;
+
+ public FormatParameters(ReportWriter rw, Object item, Decree decr, Tape<Object> tParams,
+ Iterator<Decree> dirIter, CLFormatter fmt) {
+ this.rw = rw;
+
+ this.item = item;
+
+ this.decr = decr;
+
+ this.tParams = tParams;
+
+ this.dirIter = dirIter;
+
+ this.fmt = fmt;
+ }
+
+ public CLParameters getParams() {
+ return decr.parameters;
+ }
+
+ public CLModifiers getMods() {
+ return decr.modifiers;
}
}
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 3b54a92..ce383ee 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
@@ -2,6 +2,8 @@ package bjc.utils.ioutils.format.directives;
import java.io.*;
+import bjc.utils.ioutils.format.*;
+
/**
* Implement the &amp; directive.
* @author student
@@ -13,10 +15,11 @@ public class FreshlineDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
int nTimes = 1;
- if(dirParams.arrParams.length() >= 1) {
- dirParams.arrParams.mapIndices("count");
- nTimes = dirParams.arrParams.getInt(dirParams.tParams,
- "count", "occurance count", "&", 1);
+ CLParameters params = dirParams.getParams();
+
+ if(params.length() >= 1) {
+ params.mapIndices("count");
+ nTimes = params.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 7f4cd02..990558c 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
@@ -14,9 +14,12 @@ import bjc.utils.math.*;
*
*/
public abstract class GeneralNumberDirective implements Directive {
- protected static void handleNumberDirective(Tape<Object> itemTape, ReportWriter rw, CLModifiers mods, CLParameters params, int argidx,
+ protected static void handleNumberDirective(Tape<Object> itemTape, ReportWriter rw, Decree decr, int argidx,
long val, int radix) throws IOException {
+ CLParameters params = decr.parameters;
+ CLModifiers mods = decr.modifiers;
+
/*
* Initialize the two padding related parameters, and then fill them in from the
* directive parameters if they are present.
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 941b74d..22196fa 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
@@ -15,8 +15,10 @@ public class GotoDirective implements Directive {
public void format(FormatParameters dirParams) {
Tape<Object> itemTape = dirParams.tParams;
- CLParameters params = dirParams.arrParams;
- if (dirParams.mods.colonMod) {
+ CLParameters params = dirParams.getParams();
+ CLModifiers mods = dirParams.getMods();
+
+ if (mods.colonMod) {
int num = 1;
if (params.length() >= 1) {
params.mapIndices("numargs");
@@ -25,7 +27,7 @@ public class GotoDirective implements Directive {
}
dirParams.tParams.left(num);
- } else if (dirParams.mods.atMod) {
+ } else if (mods.atMod) {
int num = 0;
if (params.length() >= 1) {
params.mapIndices("argidx");
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 a6354f8..9226761 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
@@ -3,6 +3,7 @@ package bjc.utils.ioutils.format.directives;
import java.io.*;
import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
/**
* Implement the I directive.
@@ -14,17 +15,20 @@ public class IndentDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
Tape<Object> itemTape = dirParams.tParams;
+ CLModifiers mods = dirParams.getMods();
+ CLParameters params = dirParams.getParams();
+
// Dollar mod is indent configuration
- if (dirParams.mods.dollarMod) {
+ if (mods.dollarMod) {
return;
}
int nIndents = 1;
- if(dirParams.arrParams.length() >= 1) {
- dirParams.arrParams.mapIndices("count");
+ if(params.length() >= 1) {
+ params.mapIndices("count");
- nIndents = dirParams.arrParams.getInt(itemTape, "count", "indent count", "I", 1);
+ nIndents = params.getInt(itemTape, "count", "indent count", "I", 1);
}
boolean dedent = false;
@@ -34,7 +38,7 @@ public class IndentDirective implements Directive {
dedent = true;
}
- if (dirParams.mods.colonMod) {
+ if (mods.colonMod) {
if (dedent) dirParams.rw.dedent(nIndents);
else dirParams.rw.indent(nIndents);
} else {
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
index 5cbde64..bb099a2 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
@@ -1,14 +1,13 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.util.regex.Matcher;
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
-import bjc.inflexion.InflectionML;
+import bjc.inflexion.*;
-import bjc.utils.ioutils.ReportWriter;
-import bjc.utils.ioutils.format.CLPattern;
+import bjc.utils.ioutils.*;
+import bjc.utils.ioutils.format.*;
/**
* Inflection directive.
@@ -18,34 +17,32 @@ import bjc.utils.ioutils.format.CLPattern;
public class InflectDirective implements Directive {
@Override
public void format(FormatParameters dirParams) throws IOException {
- StringBuilder condBody = new StringBuilder();
+ List<Decree> condBody = new ArrayList<>();
int nestLevel = 1;
- Iterator<String> dirIter = dirParams.dirIter;
+ Iterator<Decree> dirIter = dirParams.dirIter;
while (dirIter.hasNext()) {
- String direc = dirIter.next();
- if (!direc.startsWith("~")) {
- condBody.append(direc);
+ Decree decr = dirIter.next();
+ if (decr.isLiteral) {
+ condBody.add(decr);
+
continue;
}
- Matcher dirMat = CLPattern.getDirectiveMatcher(direc);
-
- /* Process a list of clauses. */
- String dirName = dirMat.group("name");
+ String dirName = decr.name;
if (dirName != null) {
if (dirName.equals("`[")) {
if (nestLevel > 0) {
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMat.group());
+ condBody.add(decr);
} else if (dirName.equals("`]")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -55,16 +52,14 @@ public class InflectDirective implements Directive {
nestLevel = Math.max(0, nestLevel - 1);
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
}
}
- String frmt = condBody.toString();
-
ReportWriter nrw = dirParams.rw.duplicate(new StringWriter());
- dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false);
+ dirParams.fmt.doFormatString(condBody.iterator(), nrw, dirParams.tParams, false);
String strang = nrw.toString();
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 be5d48e..f38a7ed 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
@@ -1,12 +1,10 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.util.IllegalFormatConversionException;
-import java.util.Iterator;
-import java.util.regex.Matcher;
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
-import bjc.utils.esodata.SingleTape;
-import bjc.utils.esodata.Tape;
+import bjc.utils.esodata.*;
import bjc.utils.ioutils.format.*;
/**
@@ -21,42 +19,41 @@ public class IterationDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
CLFormatter.checkItem(dirParams.item, '{');
- StringBuilder condBody = new StringBuilder();
+ List<Decree> condBody = new ArrayList<>();
- Iterator<String> dirIter = dirParams.dirIter;
+ Iterator<Decree> dirIter = dirParams.dirIter;
while (dirIter.hasNext()) {
- String direc = dirIter.next();
- if (!direc.startsWith("~")) {
- condBody.append(direc);
+ Decree decr = dirIter.next();
+ if (decr.isLiteral) {
+ condBody.add(decr);
continue;
}
- Matcher dirMat = CLPattern.getDirectiveMatcher(direc);
- dirMat.find();
- /* Process a list of clauses. */
- String dirName = dirMat.group("name");
+ String dirName = decr.name;
if (dirName != null) {
if (dirName.equals("}")) {
break;
} else {
/* Not a special directive. */
- condBody.append(dirMat.group());
+ condBody.add(decr);
}
}
}
- String frmt = condBody.toString();
Object iter = dirParams.item;
- // System.err.printf("Iteration format \"%s\" (iter %s)\n", frmt, item);
- if (frmt.equals("")) {
+ boolean usingString = false;
+ String strang = "";
+
+ if (condBody.size() == 0) {
/* Grab an argument. */
if (!(dirParams.item instanceof String)) {
throw new IllegalFormatConversionException('{', String.class);
}
- frmt = (String) dirParams.item;
+ usingString = true;
+ strang = (String) dirParams.item;
if (!dirParams.tParams.right()) {
throw new IllegalArgumentException("Not enough parameters to '{' directive");
@@ -67,7 +64,9 @@ public class IterationDirective implements Directive {
int maxItr = Integer.MAX_VALUE;
- CLParameters params = dirParams.arrParams;
+ CLParameters params = dirParams.getParams();
+ CLModifiers mods = dirParams.getMods();
+
if (params.length() > 0) {
params.mapIndices("maxitr");
@@ -77,7 +76,7 @@ public class IterationDirective implements Directive {
int numItr = 0;
- if (dirParams.mods.atMod && dirParams.mods.colonMod) {
+ if (mods.atMod &&mods.colonMod) {
try {
do {
if (numItr > maxItr) break;
@@ -92,7 +91,11 @@ public class IterationDirective implements Directive {
Tape<Object> nParams = new SingleTape<>(nitr);
try {
- dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
+ if (usingString) {
+ dirParams.fmt.doFormatString(strang, dirParams.rw, nParams, false);
+ } else {
+ dirParams.fmt.doFormatString(condBody, dirParams.rw, nParams, false);
+ }
} catch (EscapeException eex) {
if (eex.endIteration) {
if (dirParams.tParams.atEnd()) {
@@ -107,20 +110,24 @@ public class IterationDirective implements Directive {
} catch (EscapeException eex) {
// Do nothing
}
- } else if (dirParams.mods.atMod) {
+ } else if (mods.atMod) {
try {
while (!dirParams.tParams.atEnd()) {
// System.err.printf("Iterating with format \"%s\"\n", frmt);
if (numItr > maxItr) break;
numItr += 1;
- dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false);
+ if (usingString) {
+ dirParams.fmt.doFormatString(strang, dirParams.rw, dirParams.tParams, false);
+ } else {
+ dirParams.fmt.doFormatString(condBody, dirParams.rw, dirParams.tParams, false);
+ }
}
} catch (EscapeException eex) {
if (eex.endIteration)
throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration");
}
- } else if (dirParams.mods.colonMod) {
+ } else if (mods.colonMod) {
if (!(dirParams.item instanceof Iterable<?>)) {
throw new IllegalFormatConversionException('{', dirParams.item.getClass());
}
@@ -144,7 +151,11 @@ public class IterationDirective implements Directive {
Tape<Object> nParams = new SingleTape<>(nitr);
try {
- dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
+ if (usingString) {
+ dirParams.fmt.doFormatString(strang, dirParams.rw, nParams, false);
+ } else {
+ dirParams.fmt.doFormatString(condBody, dirParams.rw, nParams, false);
+ }
} catch (EscapeException eex) {
if(eex.endIteration && !itr.hasNext()) throw eex;
}
@@ -166,7 +177,11 @@ public class IterationDirective implements Directive {
if (numItr > maxItr) break;
numItr += 1;
- dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
+ if (usingString) {
+ dirParams.fmt.doFormatString(strang, dirParams.rw, nParams, false);
+ } else {
+ dirParams.fmt.doFormatString(condBody, dirParams.rw, nParams, false);
+ }
}
} catch (EscapeException eex) {
if (eex.endIteration)
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 e603305..7a53d90 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
@@ -1,6 +1,8 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
+import java.io.*;
+
+import bjc.utils.ioutils.format.*;
/**
* Implements directives that create a literal string.
@@ -29,10 +31,12 @@ public class LiteralDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
int nTimes = 1;
- if (dirParams.arrParams.length() >= 1) {
- dirParams.arrParams.mapIndices("count");
+ CLParameters params = dirParams.getParams();
+
+ if (params.length() >= 1) {
+ params.mapIndices("count");
- nTimes = dirParams.arrParams.getInt(dirParams.tParams, "count", "occurance count", directive, 1);
+ nTimes = params.getInt(dirParams.tParams, "count", "occurance count", directive, 1);
}
for (int i = 0; i < nTimes; i++) {
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 68b5873..09acdd5 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
@@ -42,8 +42,7 @@ public class NumberDirective extends GeneralNumberDirective {
long val = ((Number) dirParams.item).longValue();
- handleNumberDirective(dirParams.tParams, dirParams.rw,
- dirParams.mods, dirParams.arrParams, argidx, val, radix);
+ handleNumberDirective(dirParams.tParams, dirParams.rw, dirParams.decr, 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 87fba8e..d3b662a 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
@@ -1,11 +1,10 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.util.IllegalFormatConversionException;
+import java.io.*;
+import java.util.*;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.math.NumberUtils;
+import bjc.utils.ioutils.format.*;
+import bjc.utils.math.*;
/**
* Generalized radix directive.
@@ -28,11 +27,13 @@ public class RadixDirective extends GeneralNumberDirective {
*/
long val = ((Number) dirParams.item).longValue();
- CLParameters params = dirParams.arrParams;
+ CLParameters params = dirParams.getParams();
+ CLModifiers mods = dirParams.getMods();
+
if (params.length() == 0) {
- if (dirParams.mods.atMod) {
- dirParams.rw.write(NumberUtils.toRoman(val, dirParams.mods.colonMod));
- } else if (dirParams.mods.colonMod) {
+ if (mods.atMod) {
+ dirParams.rw.write(NumberUtils.toRoman(val,mods.colonMod));
+ } else if (mods.colonMod) {
dirParams.rw.write(NumberUtils.toOrdinal(val));
} else {
dirParams.rw.write(NumberUtils.toCardinal(val));
@@ -46,7 +47,7 @@ public class RadixDirective extends GeneralNumberDirective {
int radix = params.getInt(dirParams.tParams, "radix", "radix", "R", 10);
handleNumberDirective(dirParams.tParams, dirParams.rw,
- dirParams.mods, params, 0, val, radix);
+ dirParams.decr, 0, val, radix);
}
dirParams.tParams.right();
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java
index c0c752c..08d5e3f 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java
@@ -1,12 +1,10 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.util.IllegalFormatConversionException;
+import java.io.*;
+import java.util.*;
-import bjc.utils.esodata.SingleTape;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.EscapeException;
+import bjc.utils.esodata.*;
+import bjc.utils.ioutils.format.*;
public class RecursiveDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
@@ -14,7 +12,9 @@ public class RecursiveDirective implements Directive {
CLFormatter.checkItem(dirParams.item, '?');
- if (dirParams.mods.atMod) {
+ CLModifiers mods = dirParams.getMods();
+
+ if (mods.atMod) {
if (!(dirParams.item instanceof String))
throw new IllegalFormatConversionException('?', dirParams.item.getClass());
@@ -22,7 +22,7 @@ public class RecursiveDirective implements Directive {
dirParams.fmt.doFormatString((String)dirParams.item, dirParams.rw, dirParams.tParams, true);
} catch (EscapeException eex) {
if (eex.endIteration)
- throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration");
+ throw new UnsupportedOperationException("Colon mod not allowed on escape marker outside of iteration");
}
} else {
if (dirParams.tParams.atEnd())
@@ -41,7 +41,7 @@ public class RecursiveDirective implements Directive {
try {
dirParams.fmt.doFormatString((String)dirParams.item, dirParams.rw, newParams, true);
} catch (EscapeException eex) {
- throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration");
+ throw new UnsupportedOperationException("Colon mod not allowed on escape marker outside of iteration");
}
}
}
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 a06e585..af8bff0 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
@@ -8,18 +8,19 @@ import bjc.utils.ioutils.format.*;
public class TabulateDirective implements Directive {
public void format(FormatParameters dirParams) throws IOException {
Tape<Object> itemTape = dirParams.tParams;
+ CLModifiers mods = dirParams.getMods();
// Support for a possible future feature
char padchar = ' ';
int currCol = dirParams.rw.getLinePos();
- if (dirParams.mods.colonMod) {
+ if (mods.colonMod) {
currCol = dirParams.rw.getIndentPos();
}
- CLParameters params = dirParams.arrParams;
- if (dirParams.mods.atMod) {
+ CLParameters params = dirParams.getParams();
+ if (mods.atMod) {
int colrel = 1, colinc = 1;
if (params.length() > 2) {