summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/ioutils/format/directives
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/directives')
-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
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 &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();