summaryrefslogtreecommitdiff
path: root/clformat/src
diff options
context:
space:
mode:
Diffstat (limited to 'clformat/src')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java6
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java35
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java28
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java24
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java80
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java24
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java34
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java30
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java18
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java35
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java24
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java67
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java16
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java20
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java36
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java26
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java39
17 files changed, 236 insertions, 306 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 997f737..0a15c1f 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -235,8 +235,7 @@ public class CLFormatter {
}
if(extraDirectives.containsKey(dirName)) {
- extraDirectives.get(dirName).format(rw, item, mods, arrParams, tParams, dirMatcher,
- this);
+ extraDirectives.get(dirName).format(new FormatParameter(rw, item, mods, arrParams, tParams, dirMatcher, this));
continue;
}
@@ -244,8 +243,7 @@ public class CLFormatter {
if(builtinDirectives.containsKey(dirName)) {
// System.err.printf("Executing directive %s (%s) (%d to %d) from string %s\n", dirName, dirMatcher.group(), dirMatcher.start(), dirMatcher.end(), format);
- builtinDirectives.get(dirName).format(rw,
- item, mods, arrParams, tParams, dirMatcher, this);
+ builtinDirectives.get(dirName).format(new FormatParameter(rw, item, mods, arrParams, tParams, dirMatcher, this));
continue;
}
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 9bad6d7..59fa58c 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
@@ -2,13 +2,7 @@ package bjc.utils.ioutils.format.directives;
import java.io.IOException;
-import java.util.regex.Matcher;
-
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
/**
* Implementation of the A directive.
@@ -19,29 +13,28 @@ import bjc.utils.ioutils.ReportWriter;
public class AestheticDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
// System.err.printf("Aesthetic directive with item \"%s\" and params: %s\n", item, tParams);
- CLFormatter.checkItem(item, 'A');
+ CLFormatter.checkItem(dirParams.item, 'A');
int mincol = 0, colinc = 1, minpad = 0;
char padchar = ' ';
- if (params.length() == 0) {
+ if (dirParams.arrParams.length() == 0) {
// Zero parameters, use all defaults
- } else if (params.length() == 1) {
- mincol = params.getIntDefault(0, "minimum column count", 'A', 0);
- } else if (params.length() < 4) {
+ } else if (dirParams.arrParams.length() == 1) {
+ mincol = dirParams.arrParams.getIntDefault(0, "minimum column count", 'A', 0);
+ } else if (dirParams.arrParams.length() < 4) {
throw new IllegalArgumentException("Must provide either zero, one or four arguments to A directive");
} else {
- colinc = params.getIntDefault(1, "padding increment", 'A', 1);
- minpad = params.getIntDefault(2, "minimum amount of padding", 'A', 0);
- padchar = params.getCharDefault(3, "padding character", 'A', ' ');
+ colinc = dirParams.arrParams.getIntDefault(1, "padding increment", 'A', 1);
+ minpad = dirParams.arrParams.getIntDefault(2, "minimum amount of padding", 'A', 0);
+ padchar = dirParams.arrParams.getCharDefault(3, "padding character", 'A', ' ');
}
StringBuilder work = new StringBuilder();
- if (mods.atMod) {
+ if (dirParams.mods.atMod) {
for (int i = 0; i < minpad; i++) {
work.append(padchar);
}
@@ -53,9 +46,9 @@ public class AestheticDirective implements Directive {
}
}
- work.append(item.toString());
+ work.append(dirParams.item.toString());
- if (!mods.atMod) {
+ if (!dirParams.mods.atMod) {
for (int i = 0; i < minpad; i++) {
work.append(padchar);
}
@@ -67,8 +60,8 @@ public class AestheticDirective implements Directive {
}
}
- rw.write(work.toString());
+ dirParams.rw.write(work.toString());
- tParams.right();
+ dirParams.tParams.right();
}
}
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 6e80b1d..0a5ebff 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,6 +1,5 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.*;
import bjc.utils.ioutils.ReportWriter;
@@ -17,30 +16,29 @@ public class CaseDirective implements Directive {
private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)");
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
StringBuffer condBody = new StringBuffer();
int nestLevel = 1;
- while (dirMatcher.find()) {
+ while (dirParams.dirMatcher.find()) {
/* Process a list of clauses. */
- String dirName = dirMatcher.group("name");
+ String dirName = dirParams.dirMatcher.group("name");
if (dirName != null) {
/* Append everything up to this directive. */
- dirMatcher.appendReplacement(condBody, "");
+ dirParams.dirMatcher.appendReplacement(condBody, "");
if (dirName.equals("(")) {
if (nestLevel > 0) {
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
} else if (dirName.equals(")")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -50,22 +48,22 @@ public class CaseDirective implements Directive {
nestLevel = Math.max(0, nestLevel - 1);
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
}
}
String frmt = condBody.toString();
- ReportWriter nrw = rw.duplicate(new StringWriter());
+ ReportWriter nrw = dirParams.rw.duplicate(new StringWriter());
- fmt.doFormatString(frmt, nrw, tParams, false);
+ dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false);
String strang = nrw.toString();
- if (mods.colonMod && mods.atMod) {
+ if (dirParams.mods.colonMod && dirParams.mods.atMod) {
strang = strang.toUpperCase();
- } else if (mods.colonMod) {
+ } else if (dirParams.mods.colonMod) {
Matcher mat = wordPattern.matcher(strang);
StringBuffer sb = new StringBuffer();
@@ -83,7 +81,7 @@ public class CaseDirective implements Directive {
mat.appendTail(sb);
strang = sb.toString();
- } else if (mods.atMod) {
+ } else if (dirParams.mods.atMod) {
Matcher mat = wordPattern.matcher(strang);
StringBuffer sb = new StringBuffer();
@@ -111,6 +109,6 @@ public class CaseDirective implements Directive {
strang = strang.toLowerCase();
}
- rw.write(strang);
+ dirParams.rw.write(strang);
}
}
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 899e8e8..685fa1c 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
@@ -1,14 +1,9 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
import java.io.IOException;
import java.util.IllegalFormatConversionException;
-import java.util.regex.Matcher;
/**
* Implements the C directive.
@@ -19,27 +14,26 @@ import java.util.regex.Matcher;
public class CharacterDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object parm, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
- CLFormatter.checkItem(parm, 'C');
+ public void format(FormatParameter dirParams) throws IOException {
+ CLFormatter.checkItem(dirParams.item, 'C');
- if (!(parm instanceof Character)) {
- throw new IllegalFormatConversionException('C', parm.getClass());
+ if (!(dirParams.item instanceof Character)) {
+ throw new IllegalFormatConversionException('C', dirParams.item.getClass());
}
- char ch = (Character) parm;
+ char ch = (Character) dirParams.item;
int codepoint = ch;
- if (mods.colonMod) {
+ if (dirParams.mods.colonMod) {
/*
* Colon mod means print Unicode character name.
*/
- rw.write(Character.getName(codepoint));
+ dirParams.rw.write(Character.getName(codepoint));
} else {
- rw.write(ch);
+ dirParams.rw.write(ch);
}
- tParams.right();
+ dirParams.tParams.right();
}
}
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 ed0b39b..e1f3c42 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,15 +1,12 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.*;
-import bjc.utils.ioutils.ReportWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.IllegalFormatConversionException;
import java.util.List;
import java.util.logging.Logger;
-import java.util.regex.Matcher;
/**
* Implements the [ directive.
@@ -21,8 +18,7 @@ public class ConditionalDirective implements Directive {
private static Logger LOG = Logger.getLogger(ConditionalDirective.class.getName());
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams,
- Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
StringBuffer condBody = new StringBuffer();
List<String> clauses = new ArrayList<>();
@@ -32,25 +28,25 @@ public class ConditionalDirective implements Directive {
int nestLevel = 1;
- while (dirMatcher.find()) {
+ while (dirParams.dirMatcher.find()) {
/* Process a list of clauses. */
- String dirName = dirMatcher.group("name");
- String dirMods = dirMatcher.group("modifiers");
+ String dirName = dirParams.dirMatcher.group("name");
+ String dirMods = dirParams.dirMatcher.group("modifiers");
//System.err.printf("Found conditional directive %s with %s mods and level %d\n", dirName, dirMods, nestLevel);
if (dirName != null) {
/* Append everything up to this directive. */
- dirMatcher.appendReplacement(condBody, "");
+ dirParams.dirMatcher.appendReplacement(condBody, "");
if (dirName.equals("[")) {
if (nestLevel > 0) {
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
} else if (dirName.equals("]")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -68,12 +64,12 @@ public class ConditionalDirective implements Directive {
break;
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
} else if (Directive.isClosing(dirName)) {
nestLevel = Math.max(0, nestLevel - 1);
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
} else if (dirName.equals(";")) {
if (nestLevel == 1) {
/* End the clause. */
@@ -94,28 +90,28 @@ public class ConditionalDirective implements Directive {
}
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
}
}
- if (mods.starMod && clauses.size() > 0) defClause = clauses.get(0);
+ if (dirParams.mods.starMod && clauses.size() > 0) defClause = clauses.get(0);
try {
- if (mods.colonMod) {
- formatParams.right();
+ if (dirParams.mods.colonMod) {
+ dirParams.tParams.right();
boolean res = false;
- if (item == null) {
+ if (dirParams.item == null) {
//throw new IllegalArgumentException("No parameter provided for [ directive.");
- } else if (!(item instanceof Boolean)) {
- throw new IllegalFormatConversionException('[', item.getClass());
+ } else if (!(dirParams.item instanceof Boolean)) {
+ throw new IllegalFormatConversionException('[', dirParams.item.getClass());
} else {
- res = (Boolean) item;
+ res = (Boolean) dirParams.item;
}
String frmt;
@@ -124,40 +120,40 @@ public class ConditionalDirective implements Directive {
else
frmt = clauses.get(0);
- fmt.doFormatString(frmt, rw, formatParams, false);
- } else if (mods.atMod) {
+ dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false);
+ } else if (dirParams.mods.atMod) {
boolean res = false;
- if (item == null) {
+ if (dirParams.item == null) {
// throw new IllegalArgumentException("No parameter provided for [ directive.");
- } else if (item instanceof Integer) {
- if ((Integer)item != 0) res = true;
- } else if (item instanceof Boolean) {
- res = (Boolean) item;
+ } else if (dirParams.item instanceof Integer) {
+ if ((Integer)dirParams.item != 0) res = true;
+ } else if (dirParams.item instanceof Boolean) {
+ res = (Boolean) dirParams.item;
} else {
- throw new IllegalFormatConversionException('[', item.getClass());
+ throw new IllegalFormatConversionException('[', dirParams.item.getClass());
}
if (res) {
- fmt.doFormatString(clauses.get(0), rw, formatParams, false);
+ dirParams.fmt.doFormatString(clauses.get(0), dirParams.rw, dirParams.tParams, false);
} else {
- formatParams.right();
+ dirParams.tParams.right();
}
} else {
int res;
- if (arrParams.length() >= 1) {
- res = arrParams.getInt(0, "conditional choice", '[');
+ if (dirParams.arrParams.length() >= 1) {
+ res = dirParams.arrParams.getInt(0, "conditional choice", '[');
} else {
- if (item == null) {
+ if (dirParams.item == null) {
throw new IllegalArgumentException("No parameter provided for [ directive.");
- } else if (!(item instanceof Number)) {
- throw new IllegalFormatConversionException('[', item.getClass());
+ } else if (!(dirParams.item instanceof Number)) {
+ throw new IllegalFormatConversionException('[', dirParams.item.getClass());
}
- res = ((Number) item).intValue();
+ res = ((Number) dirParams.item).intValue();
- formatParams.right();
+ dirParams.tParams.right();
}
- if (mods.dollarMod) res -= 1;
+ if (dirParams.mods.dollarMod) res -= 1;
// System.err.printf("Attempting selection of clause %d of %d (%s) (default %s)\n",
// res, clauses.size(), clauses, defClause);
@@ -168,12 +164,12 @@ public class ConditionalDirective implements Directive {
// System.err.printf("... clause %d: %s\n", ++clauseNo, clause);
// }
- if (defClause != null) fmt.doFormatString(defClause, rw, formatParams, false);
+ if (defClause != null) dirParams.fmt.doFormatString(defClause, dirParams.rw, dirParams.tParams, false);
} else {
String frmt = clauses.get(res);
// System.out.printf("Selecting clause %d of %d (params %s): %s\n", res, clauses.size(), formatParams, frmt);
- fmt.doFormatString(frmt, rw, formatParams, false);
+ dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false);
}
}
} catch (EscapeException eex) {
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 2e644ae..641d76d 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
@@ -1,13 +1,6 @@
package bjc.utils.ioutils.format.directives;
import java.io.IOException;
-import java.util.regex.Matcher;
-
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
/**
* A CL format directive.
@@ -19,24 +12,11 @@ import bjc.utils.ioutils.ReportWriter;
public interface Directive {
/**
* Execute this format directive.
- *
+ * @param dirParams TODO
* @param sb
* The buffer the string is being output to.
- * @param item
- * The current parameter being passed
- * @param mods
- * The directive modifiers
- * @param arrParams
- * The prefix parameters to the directive
- * @param tParams
- * All of the provided format parameters
- * @param dirMatcher
- * The matcher for format directives
- * @param fmt
- * The formatter itself.
*/
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException;
+ public void format(FormatParameter dirParams) throws IOException;
public static boolean isOpening(String str) {
switch(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 74488ed..a9d6e4f 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,13 +1,6 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
import bjc.utils.ioutils.format.EscapeException;
-import bjc.utils.ioutils.ReportWriter;
-
-import java.util.regex.Matcher;
/**
* Implementation for the ^ directive.
@@ -17,43 +10,42 @@ import java.util.regex.Matcher;
public class EscapeDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params,
- Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) {
+ public void format(FormatParameter dirParams) {
boolean shouldExit;
- if (mods.dollarMod) formatParams.right();
+ if (dirParams.mods.dollarMod) dirParams.tParams.right();
- switch(params.length()) {
+ switch(dirParams.arrParams.length()) {
case 0:
- shouldExit = formatParams.atEnd();
+ shouldExit = dirParams.tParams.atEnd();
break;
case 1:
- int num = params.getInt(0, "condition count", '^');
+ int num = dirParams.arrParams.getInt(0, "condition count", '^');
shouldExit = num == 0;
break;
case 2:
- int left = params.getInt(0, "left-hand condition", '^');
- int right = params.getInt(1, "right-hand condition", '^');
+ int left = dirParams.arrParams.getInt(0, "left-hand condition", '^');
+ int right = dirParams.arrParams.getInt(1, "right-hand condition", '^');
shouldExit = left == right;
break;
case 3:
default:
- int low = params.getInt(0, "lower-bound condition", '^');
- int mid = params.getInt(1, "interval condition", '^');
- int high = params.getInt(2, "upper-bound condition", '^');
+ int low = dirParams.arrParams.getInt(0, "lower-bound condition", '^');
+ int mid = dirParams.arrParams.getInt(1, "interval condition", '^');
+ int high = dirParams.arrParams.getInt(2, "upper-bound condition", '^');
shouldExit = (low <= mid) && (mid <= high);
break;
}
- if (mods.dollarMod) formatParams.left();
+ if (dirParams.mods.dollarMod) dirParams.tParams.left();
/* At negates it. */
- if(mods.atMod) shouldExit = !shouldExit;
+ if(dirParams.mods.atMod) shouldExit = !shouldExit;
- if(shouldExit) throw new EscapeException(mods.colonMod);
+ if(shouldExit) throw new EscapeException(dirParams.mods.colonMod);
}
}
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java
new file mode 100644
index 0000000..35882a4
--- /dev/null
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java
@@ -0,0 +1,30 @@
+package bjc.utils.ioutils.format.directives;
+
+import java.util.regex.Matcher;
+
+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;
+
+public class FormatParameter {
+ public ReportWriter rw;
+ public Object item;
+ public CLModifiers mods;
+ public CLParameters arrParams;
+ public Tape<Object> tParams;
+ public Matcher dirMatcher;
+ public CLFormatter fmt;
+
+ public FormatParameter(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams,
+ Tape<Object> tParams, Matcher dirMatcher, CLFormatter fmt) {
+ this.rw = rw;
+ this.item = item;
+ this.mods = mods;
+ this.arrParams = arrParams;
+ this.tParams = tParams;
+ this.dirMatcher = dirMatcher;
+ this.fmt = fmt;
+ }
+} \ No newline at end of file
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 3c02bfc..b0561cf 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,13 +1,6 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
-
import java.io.IOException;
-import java.util.regex.Matcher;
/**
* Implement the &amp; directive.
@@ -17,18 +10,17 @@ import java.util.regex.Matcher;
public class FreshlineDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
int nTimes = 1;
- if(params.length() >= 1) {
- nTimes = params.getInt(0, "occurance count", '&');
+ if(dirParams.arrParams.length() >= 1) {
+ nTimes = dirParams.arrParams.getInt(0, "occurance count", '&');
}
- if(rw.isLastCharNL()) nTimes -= 1;
+ if(dirParams.rw.isLastCharNL()) nTimes -= 1;
for(int i = 0; i < nTimes; i++) {
- rw.write("\n");
+ dirParams.rw.write("\n");
}
}
}
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 7e30eab..a64591f 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,13 +1,5 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
-
-import java.util.regex.Matcher;
-
/**
* Implement the * directive.
*
@@ -17,30 +9,29 @@ import java.util.regex.Matcher;
public class GotoDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> formatParams,
- Matcher dirMatcher, CLFormatter fmt) {
- if (mods.colonMod) {
+ public void format(FormatParameter dirParams) {
+ if (dirParams.mods.colonMod) {
int num = 1;
- if (params.length() >= 1) {
- num = params.getIntDefault(0, "number of arguments backward", '*', 1);
+ if (dirParams.arrParams.length() >= 1) {
+ num = dirParams.arrParams.getIntDefault(0, "number of arguments backward", '*', 1);
}
- formatParams.left(num);
- } else if (mods.atMod) {
+ dirParams.tParams.left(num);
+ } else if (dirParams.mods.atMod) {
int num = 0;
- if (params.length() >= 1) {
- num = params.getIntDefault(0, "argument index", '*', 0);
+ if (dirParams.arrParams.length() >= 1) {
+ num = dirParams.arrParams.getIntDefault(0, "argument index", '*', 0);
}
- formatParams.first();
- formatParams.right(num);
+ dirParams.tParams.first();
+ dirParams.tParams.right(num);
} else {
int num = 1;
- if (params.length() >= 1) {
- num = params.getIntDefault(0, "number of arguments forward", '*', 1);
+ if (dirParams.arrParams.length() >= 1) {
+ num = dirParams.arrParams.getIntDefault(0, "number of arguments forward", '*', 1);
}
- formatParams.right(num);
+ dirParams.tParams.right(num);
}
}
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 aa75f76..e76b2f7 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,8 +1,6 @@
package bjc.utils.ioutils.format.directives;
import bjc.inflexion.InflectionML;
-
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.*;
import bjc.utils.ioutils.ReportWriter;
@@ -12,37 +10,35 @@ import java.util.ArrayList;
import java.util.IllegalFormatConversionException;
import java.util.List;
import java.util.logging.Logger;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class InflectDirective implements Directive {
private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)");
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
StringBuffer condBody = new StringBuffer();
int nestLevel = 1;
- while (dirMatcher.find()) {
+ while (dirParams.dirMatcher.find()) {
/* Process a list of clauses. */
- String dirName = dirMatcher.group("name");
+ String dirName = dirParams.dirMatcher.group("name");
if (dirName != null) {
/* Append everything up to this directive. */
- dirMatcher.appendReplacement(condBody, "");
+ dirParams.dirMatcher.appendReplacement(condBody, "");
if (dirName.equals("`[")) {
if (nestLevel > 0) {
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
} else if (dirName.equals("`]")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -52,21 +48,21 @@ public class InflectDirective implements Directive {
nestLevel = Math.max(0, nestLevel - 1);
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
}
}
String frmt = condBody.toString();
- ReportWriter nrw = rw.duplicate(new StringWriter());
+ ReportWriter nrw = dirParams.rw.duplicate(new StringWriter());
- fmt.doFormatString(frmt, nrw, tParams, false);
+ dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false);
String strang = nrw.toString();
strang = InflectionML.inflect(strang);
- rw.write(strang);
+ dirParams.rw.write(strang);
}
}
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 2ce6309..10f1608 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
@@ -3,14 +3,12 @@ package bjc.utils.ioutils.format.directives;
import bjc.utils.esodata.SingleTape;
import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.*;
-import bjc.utils.ioutils.ReportWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.IllegalFormatConversionException;
-import java.util.regex.Matcher;
/**
* Implements the { directive.
@@ -21,57 +19,56 @@ import java.util.regex.Matcher;
public class IterationDirective implements Directive {
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
- CLFormatter.checkItem(item, '{');
+ public void format(FormatParameter dirParams) throws IOException {
+ CLFormatter.checkItem(dirParams.item, '{');
StringBuffer condBody = new StringBuffer();
- while (dirMatcher.find()) {
+ while (dirParams.dirMatcher.find()) {
/* Process a list of clauses. */
- String dirName = dirMatcher.group("name");
+ String dirName = dirParams.dirMatcher.group("name");
if (dirName != null) {
/* Append everything up to this directive. */
- dirMatcher.appendReplacement(condBody, "");
+ dirParams.dirMatcher.appendReplacement(condBody, "");
if (dirName.equals("}")) {
break;
} else {
/* Not a special directive. */
- condBody.append(dirMatcher.group());
+ condBody.append(dirParams.dirMatcher.group());
}
}
}
String frmt = condBody.toString();
- Object iter = item;
+ Object iter = dirParams.item;
// System.err.printf("Iteration format \"%s\" (iter %s)\n", frmt, item);
if (frmt.equals("")) {
/* Grab an argument. */
- if (!(item instanceof String)) {
+ if (!(dirParams.item instanceof String)) {
throw new IllegalFormatConversionException('{', String.class);
}
- frmt = (String) item;
+ frmt = (String) dirParams.item;
- if (!tParams.right()) {
+ if (!dirParams.tParams.right()) {
throw new IllegalArgumentException("Not enough parameters to '{' directive");
}
- iter = tParams.item();
+ iter = dirParams.tParams.item();
}
int maxItr = Integer.MAX_VALUE;
- if (arrParams.length() > 0) {
- maxItr = arrParams.getInt(0, "maximum iterations", '{');
+ if (dirParams.arrParams.length() > 0) {
+ maxItr = dirParams.arrParams.getInt(0, "maximum iterations", '{');
}
int numItr = 0;
- if (mods.atMod && mods.colonMod) {
+ if (dirParams.mods.atMod && dirParams.mods.colonMod) {
try {
do {
if (numItr > maxItr) break;
@@ -86,41 +83,41 @@ public class IterationDirective implements Directive {
Tape<Object> nParams = new SingleTape<>(nitr);
try {
- fmt.doFormatString(frmt, rw, nParams, false);
+ dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
} catch (EscapeException eex) {
if (eex.endIteration) {
- if (tParams.atEnd()) {
+ if (dirParams.tParams.atEnd()) {
throw eex;
}
}
}
- tParams.right();
- iter = tParams.item();
- } while (tParams.position() < tParams.size());
+ dirParams.tParams.right();
+ iter = dirParams.tParams.item();
+ } while (dirParams.tParams.position() < dirParams.tParams.size());
} catch (EscapeException eex) {
}
- } else if (mods.atMod) {
+ } else if (dirParams.mods.atMod) {
try {
- while (!tParams.atEnd()) {
+ while (!dirParams.tParams.atEnd()) {
// System.err.printf("Iterating with format \"%s\"\n", frmt);
if (numItr > maxItr) break;
numItr += 1;
- fmt.doFormatString(frmt, rw, tParams, false);
+ dirParams.fmt.doFormatString(frmt, 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 (mods.colonMod) {
- if (!(item instanceof Iterable<?>)) {
- throw new IllegalFormatConversionException('{', item.getClass());
+ } else if (dirParams.mods.colonMod) {
+ if (!(dirParams.item instanceof Iterable<?>)) {
+ throw new IllegalFormatConversionException('{', dirParams.item.getClass());
}
try {
@SuppressWarnings("unchecked")
- Iterable<Object> itb = (Iterable<Object>) item;
+ Iterable<Object> itb = (Iterable<Object>) dirParams.item;
Iterator<Object> itr = itb.iterator();
while (itr.hasNext()) {
Object obj = itr.next();
@@ -137,7 +134,7 @@ public class IterationDirective implements Directive {
Tape<Object> nParams = new SingleTape<>(nitr);
try {
- fmt.doFormatString(frmt, rw, nParams, false);
+ dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
} catch (EscapeException eex) {
if(eex.endIteration && !itr.hasNext()) throw eex;
}
@@ -145,20 +142,20 @@ public class IterationDirective implements Directive {
} catch (EscapeException eex) {
}
} else {
- if (!(item instanceof Iterable<?>)) {
- throw new IllegalFormatConversionException('{', item.getClass());
+ if (!(dirParams.item instanceof Iterable<?>)) {
+ throw new IllegalFormatConversionException('{', dirParams.item.getClass());
}
try {
@SuppressWarnings("unchecked")
- Iterable<Object> itr = (Iterable<Object>) item;
+ Iterable<Object> itr = (Iterable<Object>) dirParams.item;
Tape<Object> nParams = new SingleTape<>(itr);
while (!nParams.atEnd()) {
if (numItr > maxItr) break;
numItr += 1;
- fmt.doFormatString(frmt, rw, nParams, false);
+ dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false);
}
} catch (EscapeException eex) {
if (eex.endIteration)
@@ -166,6 +163,6 @@ public class IterationDirective implements Directive {
}
}
- tParams.right();
+ dirParams.tParams.right();
}
}
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 d833654..5ca454e 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,13 +1,6 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
-
import java.io.IOException;
-import java.util.regex.Matcher;
/**
* Implements directives that create a literal string.
@@ -34,16 +27,15 @@ public class LiteralDirective implements Directive {
}
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
int nTimes = 1;
- if (params.length() >= 1) {
- nTimes = params.getInt(0, "occurance count", directive);
+ if (dirParams.arrParams.length() >= 1) {
+ nTimes = dirParams.arrParams.getInt(0, "occurance count", directive);
}
for (int i = 0; i < nTimes; i++) {
- rw.write(lit);
+ dirParams.rw.write(lit);
}
}
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 88b3e7e..da55271 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
@@ -2,13 +2,8 @@ package bjc.utils.ioutils.format.directives;
import java.io.IOException;
import java.util.IllegalFormatConversionException;
-import java.util.regex.Matcher;
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
/**
* Implements radix based numbers.
@@ -39,19 +34,18 @@ public class NumberDirective extends GeneralNumberDirective {
private char directive;
@Override
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
- CLFormatter.checkItem(item, directive);
+ public void format(FormatParameter dirParams) throws IOException {
+ CLFormatter.checkItem(dirParams.item, directive);
- if (!(item instanceof Number)) {
- throw new IllegalFormatConversionException(directive, item.getClass());
+ if (!(dirParams.item instanceof Number)) {
+ throw new IllegalFormatConversionException(directive, dirParams.item.getClass());
}
- long val = ((Number) item).longValue();
+ long val = ((Number) dirParams.item).longValue();
- handleNumberDirective(rw, mods, params, argidx, val, radix);
+ handleNumberDirective(dirParams.rw, dirParams.mods, dirParams.arrParams, argidx, val, radix);
- tParams.right();
+ 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 e8dd4b0..a5b1a84 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,15 +1,10 @@
package bjc.utils.ioutils.format.directives;
-import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.CLFormatter;
-import bjc.utils.ioutils.format.CLModifiers;
-import bjc.utils.ioutils.format.CLParameters;
-import bjc.utils.ioutils.ReportWriter;
import bjc.utils.math.NumberUtils;
import java.io.IOException;
import java.util.IllegalFormatConversionException;
-import java.util.regex.Matcher;
/**
* Generalized radix directive.
@@ -20,36 +15,35 @@ import java.util.regex.Matcher;
public class RadixDirective extends GeneralNumberDirective {
@Override
- public void format(ReportWriter rw, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
- CLFormatter.checkItem(arg, 'R');
+ public void format(FormatParameter dirParams) throws IOException {
+ CLFormatter.checkItem(dirParams.item, 'R');
- if (!(arg instanceof Number)) {
- throw new IllegalFormatConversionException('R', arg.getClass());
+ if (!(dirParams.item instanceof Number)) {
+ throw new IllegalFormatConversionException('R', dirParams.item.getClass());
}
/*
* @TODO see if this is the way we want to do this.
*/
- long val = ((Number) arg).longValue();
+ long val = ((Number) dirParams.item).longValue();
- if (params.length() == 0) {
- if (mods.atMod) {
- rw.write(NumberUtils.toRoman(val, mods.colonMod));
- } else if (mods.colonMod) {
- rw.write(NumberUtils.toOrdinal(val));
+ if (dirParams.arrParams.length() == 0) {
+ if (dirParams.mods.atMod) {
+ dirParams.rw.write(NumberUtils.toRoman(val, dirParams.mods.colonMod));
+ } else if (dirParams.mods.colonMod) {
+ dirParams.rw.write(NumberUtils.toOrdinal(val));
} else {
- rw.write(NumberUtils.toCardinal(val));
+ dirParams.rw.write(NumberUtils.toCardinal(val));
}
} else {
- if (params.length() < 1)
+ if (dirParams.arrParams.length() < 1)
throw new IllegalArgumentException("R directive requires at least one parameter, the radix");
- int radix = params.getInt(0, "radix", 'R');
+ int radix = dirParams.arrParams.getInt(0, "radix", 'R');
- handleNumberDirective(rw, mods, params, 0, val, radix);
+ handleNumberDirective(dirParams.rw, dirParams.mods, dirParams.arrParams, 0, val, radix);
}
- tParams.right();
+ 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 44a25ad..33f57e1 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
@@ -3,35 +3,33 @@ package bjc.utils.ioutils.format.directives;
import bjc.utils.esodata.SingleTape;
import bjc.utils.esodata.Tape;
import bjc.utils.ioutils.format.*;
-import bjc.utils.ioutils.ReportWriter;
+
import java.util.IllegalFormatConversionException;
import java.io.IOException;
-import java.util.regex.Matcher;
public class RecursiveDirective implements Directive {
- public void format(ReportWriter rw, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
- tParams.right();
+ public void format(FormatParameter dirParams) throws IOException {
+ dirParams.tParams.right();
- CLFormatter.checkItem(arg, '?');
+ CLFormatter.checkItem(dirParams.item, '?');
- if (mods.atMod) {
- if (!(arg instanceof String))
- throw new IllegalFormatConversionException('?', arg.getClass());
+ if (dirParams.mods.atMod) {
+ if (!(dirParams.item instanceof String))
+ throw new IllegalFormatConversionException('?', dirParams.item.getClass());
try {
- fmt.doFormatString((String)arg, rw, tParams, true);
+ 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");
}
} else {
- if (tParams.atEnd())
+ if (dirParams.tParams.atEnd())
throw new IllegalArgumentException("? directive requires two format parameters");
- Object o = tParams.item();
- tParams.right();
+ Object o = dirParams.tParams.item();
+ dirParams.tParams.right();
if (!(o instanceof Iterable))
throw new IllegalFormatConversionException('?', o.getClass());
@@ -40,7 +38,7 @@ public class RecursiveDirective implements Directive {
Tape<Object> newParams = new SingleTape<>(itb);
try {
- fmt.doFormatString((String)arg, rw, newParams, true);
+ 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");
}
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 d9136f2..b3204e0 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,68 +1,63 @@
package bjc.utils.ioutils.format.directives;
import java.io.IOException;
-import java.util.regex.Matcher;
-import bjc.utils.esodata.Tape;
-
-import bjc.utils.ioutils.ReportWriter;
import bjc.utils.ioutils.format.*;
public class TabulateDirective implements Directive {
- public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) throws IOException {
+ public void format(FormatParameter dirParams) throws IOException {
// Unsupported feature.
//
// I can't really make out what this is supposed to do from the
// documentation, but I suspect that it depends on font glyph
// size, not character positions
- if (mods.colonMod) {
+ if (dirParams.mods.colonMod) {
throw new UnsupportedOperationException("Colon mod is not supported for T directive");
}
// Support for a possible future feature
char padchar = ' ';
- if (mods.atMod) {
+ if (dirParams.mods.atMod) {
int colrel = 1, colinc = 1;
- if (arrParams.length() > 2) {
- colinc = arrParams.getIntDefault(1, "column increment", 'T', 1);
+ if (dirParams.arrParams.length() > 2) {
+ colinc = dirParams.arrParams.getIntDefault(1, "column increment", 'T', 1);
}
- if (arrParams.length() > 1) {
- colrel = arrParams.getIntDefault(0, "relative column number", 'T', 1);
+ if (dirParams.arrParams.length() > 1) {
+ colrel = dirParams.arrParams.getIntDefault(0, "relative column number", 'T', 1);
}
for (int i = 0; i < colrel; i++) {
- rw.write(padchar);
+ dirParams.rw.write(padchar);
}
- int currCol = rw.getLinePos();
+ int currCol = dirParams.rw.getLinePos();
int nSpaces = 0;
while ((currCol + nSpaces) % colinc != 0) nSpaces++;
for (int i = 0; i < nSpaces; i++) {
- rw.write(padchar);
+ dirParams.rw.write(padchar);
}
} else {
int colnum = 1, colinc = 1;
- if (arrParams.length() > 2) {
- colinc = arrParams.getIntDefault(1, "column increment", 'T', 1);
+ if (dirParams.arrParams.length() > 2) {
+ colinc = dirParams.arrParams.getIntDefault(1, "column increment", 'T', 1);
}
- if (arrParams.length() > 1) {
- colnum = arrParams.getIntDefault(0, "column number", 'T', 1);
+ if (dirParams.arrParams.length() > 1) {
+ colnum = dirParams.arrParams.getIntDefault(0, "column number", 'T', 1);
}
- int currCol = rw.getLinePos();
+ int currCol = dirParams.rw.getLinePos();
if (currCol < colnum) {
for (int i = currCol; i < colnum; i++) {
- rw.write(padchar);
+ dirParams.rw.write(padchar);
}
} else {
if (colinc == 0) return;
@@ -72,7 +67,7 @@ public class TabulateDirective implements Directive {
while (colnum > (currCol + (k * colinc))) k++;
for (int i = currCol; i < colnum; i++) {
- rw.write(padchar);
+ dirParams.rw.write(padchar);
}
}
}