summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc/utils/ioutils/format
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2019-07-28 16:42:54 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2019-07-28 16:42:54 -0400
commitce9dd1b8cea2b8f9752a0254607defc942779d37 (patch)
tree5a1972842e91e3f845a2dc38936567509a183b2a /clformat/src/main/java/bjc/utils/ioutils/format
parent7fa2b073420340e968d4afbfbe349fd4cfb30e05 (diff)
Implement compilation for CharacterDirective
Diffstat (limited to 'clformat/src/main/java/bjc/utils/ioutils/format')
-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();
}
-
}