summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc/utils
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2019-12-17 17:22:32 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2019-12-17 17:22:32 -0500
commit117546c65b44f2d6ee3040bd6109160f090508fa (patch)
tree8d53a4536c0916394e5c2c973ae13e3394327e92 /clformat/src/main/java/bjc/utils
parent44719c3ac6c5decf15e7a6bab5045c971a5bd689 (diff)
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
Diffstat (limited to 'clformat/src/main/java/bjc/utils')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java4
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLString.java16
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java10
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatContext.java19
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());
+ }
}