summaryrefslogtreecommitdiff
path: root/clformat
diff options
context:
space:
mode:
Diffstat (limited to 'clformat')
-rw-r--r--clformat/data/clformat.sprop2
-rw-r--r--clformat/readme.md3
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLParameters.java31
-rw-r--r--clformat/src/test/java/bjc/utils/test/ioutils/CLFormatterTest.java7
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));