From 5218fb4a3cfde1568417c5190833c4c319721b5a Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Wed, 31 Jul 2019 19:04:37 -0300 Subject: Implement compilation for FreshlineDirective --- .../format/directives/FreshlineDirective.java | 44 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'clformat/src/main/java/bjc/utils/ioutils') 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 & 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"); + } + } } -- cgit v1.2.3