diff options
Diffstat (limited to 'clformat/src/main/java/bjc')
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<Edict> compile(Iterable<Decree> cltok) { + return compile(cltok.iterator()); + } + public List<Edict> compile(Iterator<Decree> cltok) { List<Edict> 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<Object> itms) throws IOException { + FormatContext formCTX = new FormatContext(rw, itms); + + return format(formCTX); + } + + public String format(ReportWriter rw, Object... parms) throws IOException { Tape<Object> 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<Decree> body; + private CLString body; private Mode caseMode; private CLFormatter formatter; public CaseEdict(List<Decree> 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<Object> 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<Object> 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()); + } } |
