summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java7
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java2
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java2
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java2
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java8
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java6
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java2
-rw-r--r--base/src/main/java/bjc/utils/math/NumberUtils.java6
-rw-r--r--base/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java35
9 files changed, 56 insertions, 14 deletions
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 f3d1777..8172011 100644
--- a/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/base/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -136,7 +136,12 @@ public class CLFormatter {
String dirMods = dirMatcher.group("modifiers");
String dirParams = dirMatcher.group("params");
- CLParameters arrParams = CLParameters.fromDirective(dirParams.split("(?<!'),"), tParams);
+ if(dirMods == null) dirMods = "";
+ if(dirParams == null) dirParams = "";
+
+ String[] splitPars = dirParams.split("(?<!'),");
+ CLParameters arrParams = CLParameters.fromDirective(splitPars, tParams);
+
CLModifiers mods = CLModifiers.fromString(dirMods);
Object item = tParams.item();
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 cbba104..6c84770 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
@@ -17,7 +17,7 @@ public class AestheticDirective implements Directive {
int mincol = 0, colinc = 1, minpad = 0;
char padchar = ' ';
- if(params.length() > 1) {
+ if(params.length() >= 1) {
mincol = params.getIntDefault(0, "minimum column count", 'A', 0);
}
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 98c62cb..6ee512f 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
@@ -95,7 +95,7 @@ public class ConditionalDirective implements Directive {
}
} else {
int res;
- if(arrParams.length() > 1) {
+ if(arrParams.length() >= 1) {
res = arrParams.getInt(0, "conditional choice", '[');
} else {
if(par == null) {
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 e394a8d..8a0457a 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
@@ -14,7 +14,7 @@ public class FreshlineDirective implements Directive {
Matcher dirMatcher, CLFormatter fmt) {
int nTimes = 1;
- if(params.length() > 1) {
+ if(params.length() >= 1) {
nTimes = params.getInt(0, "occurance count", '&');
}
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 34abcab..3c825ff 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
@@ -13,10 +13,10 @@ public abstract class GeneralNumberDirective implements Directive {
*/
int mincol = 0;
char padchar = ' ';
- if(params.length() > (argidx + 2)) {
+ if(params.length() >= (argidx + 2)) {
mincol = params.getIntDefault(argidx + 1, "minimum column count", 'R', 0);
}
- if(params.length() > (argidx + 3)) {
+ if(params.length() >= (argidx + 3)) {
padchar = params.getCharDefault(argidx + 2, "padding character", 'R', ' ');
}
@@ -29,10 +29,10 @@ public abstract class GeneralNumberDirective implements Directive {
*/
int commaInterval = 0;
char commaChar = ',';
- if(params.length() > (argidx + 3)) {
+ if(params.length() >= (argidx + 3)) {
commaChar = params.getCharDefault((argidx + 3), "comma character", 'R', ' ');
}
- if(params.length() > (argidx + 4)) {
+ if(params.length() >= (argidx + 4)) {
commaInterval = params.getIntDefault((argidx + 4), "comma interval", 'R', 0);
}
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 f3da9bb..4dd24c3 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
@@ -14,14 +14,14 @@ public class GotoDirective implements Directive {
Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) {
if(mods.colonMod) {
int num = 1;
- if(params.length() > 1) {
+ if(params.length() >= 1) {
num = params.getIntDefault(0, "number of arguments backward", '*', 1);
}
formatParams.left(num);
} else if(mods.atMod) {
int num = 0;
- if(params.length() > 1) {
+ if(params.length() >= 1) {
num = params.getIntDefault(0, "argument index", '*', 0);
}
@@ -29,7 +29,7 @@ public class GotoDirective implements Directive {
formatParams.right(num);
} else {
int num = 1;
- if(params.length() > 1) {
+ if(params.length() >= 1) {
num = params.getIntDefault(0, "number of arguments forward", '*', 1);
}
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 ba00520..ea04781 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
@@ -22,7 +22,7 @@ public class LiteralDirective implements Directive {
Matcher dirMatcher, CLFormatter fmt) {
int nTimes = 1;
- if(params.length() > 1) {
+ if(params.length() >= 1) {
nTimes = params.getInt(0, "occurance count", directive);
}
diff --git a/base/src/main/java/bjc/utils/math/NumberUtils.java b/base/src/main/java/bjc/utils/math/NumberUtils.java
index 53d6017..53446ac 100644
--- a/base/src/main/java/bjc/utils/math/NumberUtils.java
+++ b/base/src/main/java/bjc/utils/math/NumberUtils.java
@@ -427,13 +427,15 @@ public class NumberUtils {
work.reverse();
/* @TODO Should we have some way to specify how to pad? */
+ StringBuilder pad = new StringBuilder();
+
if(work.length() < mincols) {
for(int i = work.length(); i < mincols; i++) {
- work.append(padchar);
+ pad.append(padchar);
}
}
- return work.toString();
+ return pad.toString() + work.toString();
}
/**
diff --git a/base/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java b/base/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java
new file mode 100644
index 0000000..ee92558
--- /dev/null
+++ b/base/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java
@@ -0,0 +1,35 @@
+package bjc.utils.test.ioutils;
+
+import static org.junit.Assert.*;
+
+import bjc.utils.ioutils.format.CLFormatter;
+
+import org.junit.Test;
+
+/**
+ * Tests for CL format strings.
+ *
+ * @author EVE
+ *
+ */
+@SuppressWarnings("javadoc")
+public class CLFormatterTest {
+ private CLFormatter fmt = new CLFormatter();
+
+ @Test
+ public void testFormatStringLiteral() {
+ assertEquals(fmt.formatString("foo"), "foo");
+ }
+
+ @Test
+ public void testFormatStringD() {
+ assertEquals(fmt.formatString("~D", 5), "5");
+ assertEquals(fmt.formatString("~3D", 5), " 5");
+ assertEquals(fmt.formatString("~3,'0D", 5), "005");
+ }
+
+ public void testFormatStringR() {
+ assertEquals(fmt.formatString("~R dog~:*~[s are~; is~] here", 3, 3 == 1), "3 dogs are here");
+ }
+
+}