From c6fa9c56ee7d339f4b7d49e528bde1b15039e359 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Thu, 1 Mar 2018 14:52:35 -0500 Subject: Fix some CL format issues --- .../java/bjc/utils/ioutils/format/CLFormatter.java | 7 ++++- .../format/directives/AestheticDirective.java | 2 +- .../format/directives/ConditionalDirective.java | 2 +- .../format/directives/FreshlineDirective.java | 2 +- .../format/directives/GeneralNumberDirective.java | 8 ++--- .../ioutils/format/directives/GotoDirective.java | 6 ++-- .../format/directives/LiteralDirective.java | 2 +- base/src/main/java/bjc/utils/math/NumberUtils.java | 6 ++-- .../bjc/utils/test/ioutils/CLFormatterTest.java | 35 ++++++++++++++++++++++ 9 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 base/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java 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("(? 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 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"); + } + +} -- cgit v1.2.3