summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-08-13 05:55:49 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2019-08-13 05:55:49 -0300
commitc4377d66f77d3a71a73f3d58ad5838c4b990126d (patch)
tree3c060f307da69f539ac34f668bf6f8c4df9fab22 /clformat/src/main/java/bjc
parentdda20b14d927ed4aba765ddacf5f38e788427d95 (diff)
Implement compilation for InflectDirective
Diffstat (limited to 'clformat/src/main/java/bjc')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java1
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java42
2 files changed, 34 insertions, 9 deletions
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
index c68e8f5..91ff30c 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -256,6 +256,7 @@ public class CLFormatter {
public void doFormatString(Iterable<Decree> cltok, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
doFormatString(cltok.iterator(), rw, tParams, isToplevel);
}
+
/**
* Fill in a partially started format string.
*
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
index bb099a2..0bdd379 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java
@@ -17,15 +17,22 @@ import bjc.utils.ioutils.format.*;
public class InflectDirective implements Directive {
@Override
public void format(FormatParameters dirParams) throws IOException {
- List<Decree> condBody = new ArrayList<>();
+ Edict edt = compile(dirParams.toCompileCTX());
+
+ edt.format(dirParams.toFormatCTX());
+ }
+
+ @Override
+ public Edict compile(CompileContext compCTX) {
+ List<Decree> body = new ArrayList<>();
int nestLevel = 1;
- Iterator<Decree> dirIter = dirParams.dirIter;
+ Iterator<Decree> dirIter = compCTX.directives;
while (dirIter.hasNext()) {
Decree decr = dirIter.next();
if (decr.isLiteral) {
- condBody.add(decr);
+ body.add(decr);
continue;
}
@@ -35,14 +42,14 @@ public class InflectDirective implements Directive {
if (dirName != null) {
if (dirName.equals("`[")) {
if (nestLevel > 0) {
- condBody.add(decr);
+ body.add(decr);
}
nestLevel += 1;
} else if (Directive.isOpening(dirName)) {
nestLevel += 1;
- condBody.add(decr);
+ body.add(decr);
} else if (dirName.equals("`]")) {
nestLevel = Math.max(0, nestLevel - 1);
@@ -52,19 +59,36 @@ public class InflectDirective implements Directive {
nestLevel = Math.max(0, nestLevel - 1);
} else {
/* Not a special directive. */
- condBody.add(decr);
+ body.add(decr);
}
}
}
- ReportWriter nrw = dirParams.rw.duplicate(new StringWriter());
+ return new InflectEdict(body, compCTX.formatter);
+ }
+}
+
+class InflectEdict implements Edict {
+ private List<Decree> body;
+
+ private CLFormatter fmt;
+
+ public InflectEdict(List<Decree> body, CLFormatter fmt) {
+ this.body = body;
+
+ this.fmt = fmt;
+ }
+
+ @Override
+ public void format(FormatContext formCTX) throws IOException {
+ ReportWriter nrw = formCTX.writer.duplicate(new StringWriter());
- dirParams.fmt.doFormatString(condBody.iterator(), nrw, dirParams.tParams, false);
+ fmt.doFormatString(body, nrw, formCTX.items, false);
String strang = nrw.toString();
strang = InflectionML.inflect(strang);
- dirParams.rw.write(strang);
+ formCTX.writer.write(strang);
}
}