summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java')
-rw-r--r--base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java b/base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java
new file mode 100644
index 0000000..3742582
--- /dev/null
+++ b/base/src/main/java/bjc/utils/ioutils/format/RadixDirective.java
@@ -0,0 +1,44 @@
+package bjc.utils.ioutils.format;
+
+import bjc.utils.esodata.Tape;
+import bjc.utils.math.NumberUtils;
+
+import java.util.IllegalFormatConversionException;
+import java.util.regex.Matcher;
+
+class RadixDirective extends GeneralNumberDirective {
+
+ @Override
+ public void format(StringBuffer buff, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams,
+ Matcher dirMatcher, CLFormatter fmt) {
+ CLFormatter.checkItem(arg, 'R');
+
+ if(!(arg instanceof Number)) {
+ throw new IllegalFormatConversionException('R', arg.getClass());
+ }
+
+ /*
+ * @TODO see if this is the way we want to do this.
+ */
+ long val = ((Number) arg).longValue();
+
+ if(params.length() == 0) {
+ if(mods.atMod) {
+ buff.append(NumberUtils.toRoman(val, mods.colonMod));
+ } else if(mods.colonMod) {
+ buff.append(NumberUtils.toOrdinal(val));
+ } else {
+ buff.append(NumberUtils.toCardinal(val));
+ }
+ } else {
+ if(params.length() < 1) throw new IllegalArgumentException(
+ "R directive requires at least one parameter, the radix");
+
+ int radix = params.getInt(0, "radix", 'R');
+
+ handleNumberDirective(buff, mods, params, 0, val, radix);
+ }
+
+ tParams.right();
+ }
+}