diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-06 15:45:33 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-06 15:45:33 -0300 |
| commit | 9f5743f048fb407a0f8b993eaa66134a3effbdd9 (patch) | |
| tree | 494f318e0e4e7e199ab2471c16e3691d25250cfc /base/src/main/java/bjc/utils/ioutils/format/directives | |
| parent | d1f095551f9a602977e6fa80e91a738192c5d08c (diff) | |
Convert CLFormatter to use ReportWriter
This is in preparation for implementing the T and < directives
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/directives')
12 files changed, 71 insertions, 46 deletions
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 & 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(); |
