diff options
Diffstat (limited to 'clformat')
| -rw-r--r-- | clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java | 1 | ||||
| -rw-r--r-- | clformat/src/main/java/bjc/utils/ioutils/format/directives/InflectDirective.java | 42 |
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); } } |
