summaryrefslogtreecommitdiff
path: root/clformat
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-07-31 19:04:37 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-07-31 19:04:37 -0300
commit5218fb4a3cfde1568417c5190833c4c319721b5a (patch)
treed1ae9b2b4df2415aa7423d46586d3bd3b2207edf /clformat
parentc2bcc9aab256168cc612e18da7c1d7f275b18de7 (diff)
Implement compilation for FreshlineDirective
Diffstat (limited to 'clformat')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java44
1 files changed, 42 insertions, 2 deletions
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
index ce383ee..4c8cdab 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java
@@ -6,13 +6,21 @@ import bjc.utils.ioutils.format.*;
/**
* Implement the &amp; directive.
- * @author student
*
+ * This directive will print out a specified number of newlines, and will print
+ * one less if the last thing printed was a newline.
+ *
+ * @author Ben Culkin
*/
public class FreshlineDirective implements Directive {
-
@Override
public void format(FormatParameters dirParams) throws IOException {
+ Edict edt = compile(dirParams.toCompileCTX());
+
+ edt.format(dirParams.toFormatCTX());
+ }
+
+ public void formatF(FormatParameters dirParams) throws IOException {
int nTimes = 1;
CLParameters params = dirParams.getParams();
@@ -28,4 +36,36 @@ public class FreshlineDirective implements Directive {
dirParams.rw.write("\n");
}
}
+
+ @Override
+ public Edict compile(CompileContext compCTX) {
+ CLParameters params = compCTX.decr.parameters;
+
+ CLValue times = CLValue.nil();
+ if (params.length() >= 1) {
+ params.mapIndices("count");
+ times = params.resolveKey("count");
+ }
+
+ return new FreshlineEdict(times);
+ }
+}
+
+class FreshlineEdict implements Edict {
+ private CLValue times;
+
+ public FreshlineEdict(CLValue times) {
+ this.times = times;
+ }
+
+ @Override
+ public void format(FormatContext formCTX) throws IOException {
+ int nTimes = times.asInt(formCTX.items, "occurance count", "&", 1);
+
+ if (formCTX.writer.isLastCharNL()) nTimes -= 1;
+
+ for(int i = 0; i < nTimes; i++) {
+ formCTX.writer.write("\n");
+ }
+ }
}