diff options
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.java | 44 |
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(); + } +} |
