summaryrefslogtreecommitdiff
path: root/clformat
diff options
context:
space:
mode:
Diffstat (limited to 'clformat')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java55
1 files changed, 38 insertions, 17 deletions
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
index 025e6e6..b8c0737 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java
@@ -1,39 +1,60 @@
package bjc.utils.ioutils.format.directives;
-import java.io.IOException;
-import java.util.IllegalFormatConversionException;
+import java.io.*;
+import java.util.*;
-import bjc.utils.ioutils.format.CLFormatter;
+import bjc.utils.ioutils.*;
+import bjc.utils.ioutils.format.*;
/**
* Implements the C directive.
*
- * @author student
+ * This serves to print out a single character, in the way that the '%c' printf directive does.
*
+ * @author Ben Culkin
*/
public class CharacterDirective implements Directive {
-
@Override
public void format(FormatParameters dirParams) throws IOException {
- CLFormatter.checkItem(dirParams.item, 'C');
+ Edict edt = compile(dirParams.toCompileCTX());
+
+ edt.format(dirParams.toFormatCTX());
+ }
+
+ @Override
+ public Edict compile(CompileContext compCTX) {
+ return new CharacterEdict(compCTX.decr.modifiers.colonMod);
+ }
+}
+
+class CharacterEdict implements Edict {
+ private boolean printCharName;
- if (!(dirParams.item instanceof Character)) {
- throw new IllegalFormatConversionException('C', dirParams.item.getClass());
+ public CharacterEdict(boolean printCharName) {
+ this.printCharName = printCharName;
+ }
+
+ @Override
+ public void format(FormatContext formCTX) throws IOException {
+ Object o = formCTX.items.item();
+
+ CLFormatter.checkItem(o, 'C');
+
+ if (!(o instanceof Character)) {
+ throw new IllegalFormatConversionException('C', o.getClass());
}
- char ch = (Character) dirParams.item;
+ char ch = (Character) o;
int codepoint = ch;
- if (dirParams.getMods().colonMod) {
- /*
- * Colon mod means print Unicode character name.
- */
- dirParams.rw.write(Character.getName(codepoint));
+ ReportWriter rw = formCTX.writer;
+
+ if (printCharName) {
+ rw.write(Character.getName(codepoint));
} else {
- dirParams.rw.write(ch);
+ rw.write(ch);
}
- dirParams.tParams.right();
+ formCTX.items.right();
}
-
}