diff options
Diffstat (limited to 'clformat')
| -rw-r--r-- | clformat/data/clformat.sprop | 2 | ||||
| -rw-r--r-- | clformat/readme.md | 3 | ||||
| -rw-r--r-- | clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java | 31 | ||||
| -rw-r--r-- | clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java | 7 |
4 files changed, 37 insertions, 6 deletions
diff --git a/clformat/data/clformat.sprop b/clformat/data/clformat.sprop index 1d31de6..dd4847b 100644 --- a/clformat/data/clformat.sprop +++ b/clformat/data/clformat.sprop @@ -6,7 +6,7 @@ ## Has two parts ## 1) The optional set of prefix parameters ## 2) The optional modifier -## Captures three things +## Captures three or four things ## 1) The prefix parameters ## 2) The modifiers ## 3) The directive name diff --git a/clformat/readme.md b/clformat/readme.md index da0e085..ffb3f53 100644 --- a/clformat/readme.md +++ b/clformat/readme.md @@ -15,7 +15,7 @@ directive is always started with a ~, and consists of the following parts. ### Prefix parameters Prefix parameters are used to configure options for a directive. These include -things the number of columns to print a field in, or what radix to print a +things like the number of columns to print a field in, or what radix to print a number in. They are separated from each other by commas. A prefix parameter can be one of the following: @@ -102,6 +102,7 @@ implemented, as well as a short description of what that directive does | ( | Case | Perform case-manipulation on text | | \`[ | Inflection | Perform inflection on a format string | | T | Tabulate | Print something in a table-like format | +| \`D | General Decimal | Print numbers using a Java NumberFormat | The following are directives that are not valid to use outside of specific other directives diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java index 61d88bf..7d8a67a 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java @@ -1,7 +1,10 @@ package bjc.utils.ioutils.format; import java.util.*; +import java.util.function.Function; +import bjc.data.Pair; +import bjc.data.TransformIterator; import bjc.esodata.*; import bjc.utils.parserutils.TokenUtils; @@ -28,6 +31,8 @@ public class CLParameters { private Map<String, CLValue> namedParams; private Map<String, Integer> nameIndices; + private Set<String> nonNumberedParams; + /** * Create a new set of blank CL format parameters. */ @@ -69,6 +74,9 @@ public class CLParameters { this.namedParams = namedParams; this.nameIndices = new HashMap<>(); + this.nonNumberedParams = new HashSet<>(); + + nonNumberedParams.addAll(namedParams.keySet()); abbrevWords = new HashSet<>(); nameAbbrevs = new AbbrevMap2(); @@ -135,7 +143,8 @@ public class CLParameters { } nameIndices.put(opt.toUpperCase(), idx); - + nonNumberedParams.remove(opt); + if (doRefresh) refreshAbbrevs(); } @@ -175,7 +184,8 @@ public class CLParameters { */ public static CLParameters fromDirective(String unsplit) { List<String> lParams = new ArrayList<>(); - + Set<String> nonIndexParams = new HashSet<>(); + StringBuilder currParm = new StringBuilder(); char prevChar = ' '; @@ -246,12 +256,16 @@ public class CLParameters { namedParams.put(paramName.toUpperCase(), actVal); if (setIndex) parameters.add(actVal); + else nonIndexParams.add(paramName); } else { parameters.add(parseParam(param)); } } - return new CLParameters(parameters.toArray(new CLValue[0]), namedParams); + CLParameters retVal = new CLParameters(parameters.toArray(new CLValue[0]), namedParams); + retVal.nonNumberedParams = nonIndexParams; + + return retVal; } // Actually parse the value for a parameter @@ -556,4 +570,15 @@ public class CLParameters { return sb.toString(); } + + /** + * Get an iterator over all of the named parameters not bound to an index. + * + * @return The described iterator + */ + public Iterator<Pair<String, CLValue>> getNonNumberedParams() { + return new TransformIterator<>(nonNumberedParams.iterator(), (val) -> { + return Pair.pair(val, namedParams.get(val)); + }); + } } diff --git a/clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java b/clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java index 250e52c..94bc5a1 100644 --- a/clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java +++ b/clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java @@ -28,7 +28,7 @@ public class CLFormatterTest { } @Test - public void testDecimalPrinting() { + public void testNumberPrinting() { // Test decimal printing assertEquals("5", format("~D", 5)); assertEquals(" 5", format("~3D", 5)); @@ -37,6 +37,11 @@ public class CLFormatterTest { } @Test + public void testDecimalPrinting() { + assertFormat("5.5", "~`D", 5.5); + } + + @Test public void testRadixPrinting() { // Test radix printing assertEquals("1 22", format("~3,,,' ,2:R", 17)); |
