summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-09-06 15:45:33 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-09-06 15:45:33 -0300
commit9f5743f048fb407a0f8b993eaa66134a3effbdd9 (patch)
tree494f318e0e4e7e199ab2471c16e3691d25250cfc /base/src/main/java/bjc
parentd1f095551f9a602977e6fa80e91a738192c5d08c (diff)
Convert CLFormatter to use ReportWriter
This is in preparation for implementing the T and < directives
Diffstat (limited to 'base/src/main/java/bjc')
-rw-r--r--base/src/main/java/bjc/utils/cli/objects/DefineCLI.java9
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java92
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java10
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java10
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java15
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java8
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java3
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java13
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java9
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java3
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java16
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java8
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java8
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java14
14 files changed, 146 insertions, 72 deletions
diff --git a/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java b/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java
index 787b91a..6ebcf39 100644
--- a/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java
+++ b/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java
@@ -3,6 +3,7 @@ package bjc.utils.cli.objects;
import bjc.utils.funcutils.StringUtils;
import bjc.utils.ioutils.format.CLFormatter;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -228,7 +229,13 @@ public class DefineCLI {
CLFormatter fmt = new CLFormatter();
- String formatted = fmt.formatString(stat.formats.get(formatName), fillIns);
+ String formatted = "";
+ try {
+ formatted = fmt.formatString(stat.formats.get(formatName), fillIns);
+ } catch (IOException ioex) {
+ LOGGER.severe(com.error("IOException formatting string: %s", ioex.getMessage()));
+ return FAIL;
+ }
stat.strings.put(bindName, formatted);
diff --git a/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java b/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
index 7e709dc..f0fd404 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -2,20 +2,12 @@ package bjc.utils.ioutils.format;
import bjc.utils.esodata.SingleTape;
import bjc.utils.esodata.Tape;
-import bjc.utils.ioutils.format.directives.AestheticDirective;
-import bjc.utils.ioutils.format.directives.CharacterDirective;
-import bjc.utils.ioutils.format.directives.ConditionalDirective;
-import bjc.utils.ioutils.format.directives.Directive;
-import bjc.utils.ioutils.format.directives.EscapeDirective;
-import bjc.utils.ioutils.format.directives.FreshlineDirective;
-import bjc.utils.ioutils.format.directives.GotoDirective;
-import bjc.utils.ioutils.format.directives.IterationDirective;
-import bjc.utils.ioutils.format.directives.LiteralDirective;
-import bjc.utils.ioutils.format.directives.NumberDirective;
-import bjc.utils.ioutils.format.directives.RadixDirective;
+import bjc.utils.ioutils.format.directives.*;
+import bjc.utils.ioutils.ReportWriter;
-import static bjc.utils.misc.PropertyDB.applyFormat;
-import static bjc.utils.misc.PropertyDB.getRegex;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
@@ -23,6 +15,8 @@ import java.util.UnknownFormatConversionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static bjc.utils.misc.PropertyDB.applyFormat;
+import static bjc.utils.misc.PropertyDB.getRegex;
/**
* An implementation of CL's FORMAT.
*
@@ -102,14 +96,14 @@ public class CLFormatter {
* The parameters for the string.
* @return The formatted string.
*/
- public String formatString(String format, Object... params) {
- StringBuffer sb = new StringBuffer();
+ public String formatString(String format, Object... params) throws IOException {
+ ReportWriter rw = new ReportWriter(new StringWriter());
/* Put the parameters where we can easily handle them. */
Tape<Object> tParams = new SingleTape<>(params);
- doFormatString(format, sb, tParams);
+ doFormatString(format, rw, tParams);
- return sb.toString();
+ return rw.toString();
}
/**
@@ -121,14 +115,49 @@ public class CLFormatter {
* The parameters for the string.
* @return The formatted string.
*/
- public String formatString(String format, Iterable<Object> params) {
- StringBuffer sb = new StringBuffer();
+ public String formatString(String format, Iterable<Object> params) throws IOException {
+ ReportWriter rw = new ReportWriter(new StringWriter());
+
+ /* Put the parameters where we can easily handle them. */
+ Tape<Object> tParams = new SingleTape<>(params);
+
+ doFormatString(format, rw, tParams);
+
+ return rw.toString();
+ }
+
+ /**
+ * Format a string in the style of CL's FORMAT.
+ *
+ * @param format
+ * The format string to use.
+ * @param params
+ * The parameters for the string.
+ */
+ public void formatString(Writer target, String format, Object... params) throws IOException {
+ ReportWriter rw = new ReportWriter(target);
/* Put the parameters where we can easily handle them. */
Tape<Object> tParams = new SingleTape<>(params);
- doFormatString(format, sb, tParams);
+ doFormatString(format, rw, tParams);
+ }
+
+ /**
+ * Format a string in the style of CL's FORMAT.
+ *
+ * @param format
+ * The format string to use.
+ * @param params
+ * The parameters for the string.
+ * @return The formatted string.
+ */
+ public void formatString(Writer target, String format, Iterable<Object> params) throws IOException {
+ ReportWriter rw = new ReportWriter(target);
- return sb.toString();
+ /* Put the parameters where we can easily handle them. */
+ Tape<Object> tParams = new SingleTape<>(params);
+
+ doFormatString(format, rw, tParams);
}
/**
@@ -144,11 +173,19 @@ public class CLFormatter {
* @param tParams
* The parameters to use.
*/
- public void doFormatString(String format, StringBuffer sb, Tape<Object> tParams) {
+ public void doFormatString(String format, ReportWriter rw, Tape<Object> tParams) throws IOException {
Matcher dirMatcher = pFormatDirective.matcher(format);
+ // We need this StringBuffer to use appendReplacement and stuff
+ // from Matcher. The fact that for some reason, StringBuffer is
+ // final prevents us from using our own dummy StringBuffer that
+ // auto-flushes to our output stream, so we have to do it
+ // ourselves.
+ StringBuffer sb = new StringBuffer();
+
while(dirMatcher.find()) {
dirMatcher.appendReplacement(sb, "");
+ rw.writeBuffer(sb);
String dirName = dirMatcher.group("name");
String dirFunc = dirMatcher.group("funcname");
@@ -172,14 +209,14 @@ public class CLFormatter {
}
if(extraDirectives.containsKey(dirName)) {
- extraDirectives.get(dirName).format(sb, item, mods, arrParams, tParams, dirMatcher,
+ extraDirectives.get(dirName).format(rw, item, mods, arrParams, tParams, dirMatcher,
this);
continue;
}
if(builtinDirectives.containsKey(dirName)) {
- builtinDirectives.get(dirName).format(sb, item, mods, arrParams, tParams, dirMatcher,
+ builtinDirectives.get(dirName).format(rw, item, mods, arrParams, tParams, dirMatcher,
this);
continue;
@@ -202,6 +239,11 @@ public class CLFormatter {
* @TODO Figure out how to implement
* tabulation/justification in a reasonable
* manner.
+ *
+ * 9/5/18
+ *
+ * We did, but the rest of the code needs to be
+ * converted to use ReportWriter instead
*/
throw new IllegalArgumentException("Layout-control directives aren't implemented yet.");
case "F":
@@ -236,6 +278,6 @@ public class CLFormatter {
}
dirMatcher.appendTail(sb);
+ rw.writeBuffer(sb);
}
-
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
index e840e86..cd0dbd1 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java
@@ -1,11 +1,14 @@
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.
@@ -16,8 +19,8 @@ import bjc.utils.ioutils.format.CLParameters;
public class AestheticDirective implements Directive {
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
CLFormatter.checkItem(item, 'A');
int mincol = 0, colinc = 1, minpad = 0;
@@ -63,7 +66,8 @@ public class AestheticDirective implements Directive {
}
}
+ rw.write(work.toString());
+
tParams.right();
}
-
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
index 18557c8..899e8e8 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
@@ -4,7 +4,9 @@ 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;
@@ -17,8 +19,8 @@ import java.util.regex.Matcher;
public class CharacterDirective implements Directive {
@Override
- public void format(StringBuffer buff, Object parm, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object parm, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
CLFormatter.checkItem(parm, 'C');
if (!(parm instanceof Character)) {
@@ -32,9 +34,9 @@ public class CharacterDirective implements Directive {
/*
* Colon mod means print Unicode character name.
*/
- buff.append(Character.getName(codepoint));
+ rw.write(Character.getName(codepoint));
} else {
- buff.append(ch);
+ rw.write(ch);
}
tParams.right();
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
index e32ce8f..837730f 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java
@@ -4,7 +4,9 @@ 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.ArrayList;
import java.util.IllegalFormatConversionException;
import java.util.List;
@@ -19,8 +21,8 @@ import java.util.regex.Matcher;
public class ConditionalDirective implements Directive {
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters arrParams,
- Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams,
+ Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) throws IOException {
StringBuffer condBody = new StringBuffer();
List<String> clauses = new ArrayList<>();
@@ -85,7 +87,7 @@ public class ConditionalDirective implements Directive {
else
frmt = clauses.get(0);
- fmt.doFormatString(frmt, sb, formatParams);
+ fmt.doFormatString(frmt, rw, formatParams);
} else if (mods.atMod) {
if (par == null) {
throw new IllegalArgumentException("No parameter provided for [ directive.");
@@ -95,7 +97,7 @@ public class ConditionalDirective implements Directive {
boolean res = (Boolean) par;
if (res) {
- fmt.doFormatString(clauses.get(0), sb, formatParams);
+ fmt.doFormatString(clauses.get(0), rw, formatParams);
} else {
formatParams.right();
}
@@ -116,11 +118,12 @@ public class ConditionalDirective implements Directive {
if (res < 0 || res > clauses.size()) {
if (defClause != null)
- fmt.doFormatString(defClause, sb, formatParams);
+ fmt.doFormatString(defClause, rw, formatParams);
} else {
- fmt.doFormatString(clauses.get(res), sb, formatParams);
+ fmt.doFormatString(clauses.get(res), rw, formatParams);
}
}
+
return;
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java b/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
index 6d558fc..ad9c34c 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java
@@ -1,11 +1,13 @@
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.
@@ -33,6 +35,6 @@ public interface Directive {
* @param fmt
* The formatter itself.
*/
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt);
-} \ No newline at end of file
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException;
+}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
index ec24405..5badff0 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java
@@ -5,6 +5,7 @@ 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;
@@ -16,7 +17,7 @@ import java.util.regex.Matcher;
public class EscapeDirective implements Directive {
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters params,
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params,
Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) {
boolean shouldExit;
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
index 542a5d1..3c02bfc 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
@@ -4,30 +4,31 @@ 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 & directive.
+ * Implement the &amp; directive.
* @author student
*
*/
public class FreshlineDirective implements Directive {
@Override
- public void format(StringBuffer buff, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
int nTimes = 1;
if(params.length() >= 1) {
nTimes = params.getInt(0, "occurance count", '&');
}
- if(buff.charAt(buff.length() - 1) == '\n') nTimes -= 1;
+ if(rw.isLastCharNL()) nTimes -= 1;
for(int i = 0; i < nTimes; i++) {
- buff.append("\n");
+ rw.write("\n");
}
}
-
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
index 31e887b..ccf01d8 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java
@@ -2,8 +2,11 @@ package bjc.utils.ioutils.format.directives;
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;
+
/**
* Implementation skeleton for number directives.
*
@@ -11,8 +14,8 @@ import bjc.utils.math.NumberUtils;
*
*/
public abstract class GeneralNumberDirective implements Directive {
- protected static void handleNumberDirective(StringBuffer buff, CLModifiers mods, CLParameters params, int argidx,
- long val, int radix) {
+ protected static void handleNumberDirective(ReportWriter rw, CLModifiers mods, CLParameters params, int argidx,
+ long val, int radix) throws IOException {
/*
* Initialize the two padding related parameters, and then fill them in from the
* directive parameters if they are present.
@@ -47,6 +50,6 @@ public abstract class GeneralNumberDirective implements Directive {
res = NumberUtils.toNormalString(val, mincol, padchar, mods.atMod, radix);
}
- buff.append(res);
+ rw.write(res);
}
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
index ff06012..7e30eab 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java
@@ -4,6 +4,7 @@ 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;
@@ -16,7 +17,7 @@ import java.util.regex.Matcher;
public class GotoDirective implements Directive {
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters params, Tape<Object> formatParams,
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> formatParams,
Matcher dirMatcher, CLFormatter fmt) {
if (mods.colonMod) {
int num = 1;
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
index f1adbb6..081d5e6 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java
@@ -5,6 +5,9 @@ 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;
@@ -18,8 +21,8 @@ import java.util.regex.Matcher;
public class IterationDirective implements Directive {
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
CLFormatter.checkItem(item, '{');
StringBuffer condBody = new StringBuffer();
@@ -82,7 +85,7 @@ public class IterationDirective implements Directive {
Iterable<Object> nitr = (Iterable<Object>) iter;
Tape<Object> nParams = new SingleTape<>(nitr);
- fmt.doFormatString(frmt, sb, nParams);
+ fmt.doFormatString(frmt, rw, nParams);
iter = tParams.right();
} while (tParams.position() < tParams.size());
@@ -92,7 +95,7 @@ public class IterationDirective implements Directive {
break;
numItr += 1;
- fmt.doFormatString(frmt, sb, tParams);
+ fmt.doFormatString(frmt, rw, tParams);
}
} else if (mods.colonMod) {
if (!(item instanceof Iterable<?>)) {
@@ -115,7 +118,7 @@ public class IterationDirective implements Directive {
Iterable<Object> nitr = (Iterable<Object>) obj;
Tape<Object> nParams = new SingleTape<>(nitr);
- fmt.doFormatString(frmt, sb, nParams);
+ fmt.doFormatString(frmt, rw, nParams);
}
} else {
if (!(item instanceof Iterable<?>)) {
@@ -132,11 +135,10 @@ public class IterationDirective implements Directive {
break;
numItr += 1;
- fmt.doFormatString(frmt, sb, nParams);
+ fmt.doFormatString(frmt, rw, nParams);
}
}
tParams.right();
}
-
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
index 5787590..d833654 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java
@@ -4,7 +4,9 @@ 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;
/**
@@ -32,8 +34,8 @@ public class LiteralDirective implements Directive {
}
@Override
- public void format(StringBuffer buff, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
int nTimes = 1;
if (params.length() >= 1) {
@@ -41,7 +43,7 @@ public class LiteralDirective implements Directive {
}
for (int i = 0; i < nTimes; i++) {
- buff.append(lit);
+ rw.write(lit);
}
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
index e49eda7..763665d 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java
@@ -1,5 +1,6 @@
package bjc.utils.ioutils.format.directives;
+import java.io.IOException;
import java.util.IllegalFormatConversionException;
import java.util.regex.Matcher;
@@ -7,6 +8,7 @@ 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.
@@ -33,8 +35,8 @@ public class NumberDirective extends GeneralNumberDirective {
private int radix;
@Override
- public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
CLFormatter.checkItem(item, 'B');
if (!(item instanceof Number)) {
@@ -43,7 +45,7 @@ public class NumberDirective extends GeneralNumberDirective {
long val = ((Number) item).longValue();
- handleNumberDirective(sb, mods, params, argidx, val, radix);
+ handleNumberDirective(rw, mods, params, argidx, val, radix);
tParams.right();
}
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
index 822962f..e8dd4b0 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java
@@ -4,8 +4,10 @@ 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;
@@ -18,8 +20,8 @@ import java.util.regex.Matcher;
public class RadixDirective extends GeneralNumberDirective {
@Override
- public void format(StringBuffer buff, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams,
- Matcher dirMatcher, CLFormatter fmt) {
+ public void format(ReportWriter rw, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) throws IOException {
CLFormatter.checkItem(arg, 'R');
if (!(arg instanceof Number)) {
@@ -33,11 +35,11 @@ public class RadixDirective extends GeneralNumberDirective {
if (params.length() == 0) {
if (mods.atMod) {
- buff.append(NumberUtils.toRoman(val, mods.colonMod));
+ rw.write(NumberUtils.toRoman(val, mods.colonMod));
} else if (mods.colonMod) {
- buff.append(NumberUtils.toOrdinal(val));
+ rw.write(NumberUtils.toOrdinal(val));
} else {
- buff.append(NumberUtils.toCardinal(val));
+ rw.write(NumberUtils.toCardinal(val));
}
} else {
if (params.length() < 1)
@@ -45,7 +47,7 @@ public class RadixDirective extends GeneralNumberDirective {
int radix = params.getInt(0, "radix", 'R');
- handleNumberDirective(buff, mods, params, 0, val, radix);
+ handleNumberDirective(rw, mods, params, 0, val, radix);
}
tParams.right();