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 | |
| parent | d1f095551f9a602977e6fa80e91a738192c5d08c (diff) | |
Convert CLFormatter to use ReportWriter
This is in preparation for implementing the T and < directives
Diffstat (limited to 'base/src/main')
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 & 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(); |
