From 117546c65b44f2d6ee3040bd6109160f090508fa Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Tue, 17 Dec 2019 17:22:32 -0500 Subject: Begin switch to CLString (CaseDirective) Begin the switch to using CLString whenever we would previously re-compile a body every time. This one is a little infrastructure, and the changes to CaseDirective --- .../java/bjc/utils/ioutils/format/CLFormatter.java | 4 ++++ .../main/java/bjc/utils/ioutils/format/CLString.java | 16 +++++++++++++++- .../ioutils/format/directives/CaseDirective.java | 10 +++++----- .../ioutils/format/directives/FormatContext.java | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 6 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 3599d9e..fae3aa6 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java @@ -379,6 +379,10 @@ public class CLFormatter { return new CLString(edts); } + public List compile(Iterable cltok) { + return compile(cltok.iterator()); + } + public List compile(Iterator cltok) { List result = new ArrayList<>(); diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java index 7b533d0..d6d4317 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLString.java @@ -29,10 +29,24 @@ public class CLString { StringWriter sw = new StringWriter(); ReportWriter rw = new ReportWriter(sw); + return format(rw, parms); + } + + public String format(ReportWriter rw, Tape itms) throws IOException { + FormatContext formCTX = new FormatContext(rw, itms); + + return format(formCTX); + } + + public String format(ReportWriter rw, Object... parms) throws IOException { Tape itms = new SingleTape<>(parms); FormatContext formCTX = new FormatContext(rw, itms); + return format(formCTX); + } + + public String format(FormatContext formCTX) throws IOException { try { for (Edict edt : edicts) { edt.format(formCTX); @@ -41,6 +55,6 @@ public class CLString { // General escape exception, so stop formatting. } - return rw.toString(); + return formCTX.writer.toString(); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java index efdbb1c..a586777 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java @@ -94,14 +94,14 @@ class CaseEdict implements Edict { private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)"); - private List body; + private CLString body; private Mode caseMode; private CLFormatter formatter; public CaseEdict(List body, Mode caseMode, CLFormatter fmt) { - this.body = body; + this.body = new CLString(fmt.compile(body)); this.caseMode = caseMode; @@ -110,11 +110,11 @@ class CaseEdict implements Edict { @Override public void format(FormatContext formCTX) throws IOException { - ReportWriter nrw = formCTX.writer.duplicate(new StringWriter()); + ReportWriter nrw = formCTX.getScratchWriter(); - formatter.doFormatString(body, nrw, formCTX.items, false); + //formatter.doFormatString(body, nrw, formCTX.items, false); - String strang = nrw.toString(); + String strang = body.format(nrw, formCTX.items); switch (caseMode) { case UPPERCASE: diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatContext.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatContext.java index e17a655..1c4e57f 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatContext.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatContext.java @@ -1,5 +1,7 @@ package bjc.utils.ioutils.format.directives; +import java.io.*; + import bjc.utils.esodata.*; import bjc.utils.ioutils.*; import bjc.utils.ioutils.format.*; @@ -21,9 +23,26 @@ public class FormatContext { */ public Tape items; + /** + * Create a new format context. + * + * @param rw + * The writer to store output into. + * @param itms + * The items that shall serve as format parameters. + */ public FormatContext(ReportWriter rw, Tape itms) { writer = rw; items = itms; } + + /** + * Get a new scratch writer, with the same format settings as the current writer. + * + * @return A new writer, as described above. + */ + public ReportWriter getScratchWriter() { + return writer.duplicate(new StringWriter()); + } } -- cgit v1.2.3