summaryrefslogtreecommitdiff
path: root/clformat/src/main/java/bjc/utils
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2020-01-04 11:58:34 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2020-01-04 11:58:34 -0500
commit3f99fcbdb98dfd6da75ce8a8227477345b6b1d02 (patch)
tree0b3e1373fdd7cfbef87c6c90b82f32dba907ae18 /clformat/src/main/java/bjc/utils
parent91f845e3856aae95a4b41c1dd02b3b45d023e8de (diff)
More work on group decree refactor
The previous version had some places where it wasn't right. This does the rest of the ground work that it seemed needed to be done.
Diffstat (limited to 'clformat/src/main/java/bjc/utils')
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java33
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java63
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/CompileContext.java4
-rw-r--r--clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java4
4 files changed, 71 insertions, 33 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 92a7a63..df01238 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java
@@ -29,7 +29,7 @@ public class CLFormatter {
private static Map<String, Directive> builtinDirectives;
// Extra directives specific to this formatter
- private Map<String, Directive> extraDirectives;
+ private Map<String, Directive> extraDirectives;
static {
// Set up the built-in directives
@@ -253,31 +253,7 @@ public class CLFormatter {
*
* @throws IOException If something goes wrong
*/
- 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.
- *
- * Used mostly for directives that require formatting again with a
- * different string.
- *
- * @param cltok
- * The place to get tokens from.
- *
- * @param rw
- * The buffer to file output into.
- *
- * @param tParams
- * The parameters to use.
- *
- * @param isToplevel
- * Whether or not this is a top-level format
- *
- * @throws IOException If something goes wrong
- */
- public void doFormatString(Iterator<Decree> cltok, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
+ public void doFormatString(CLTokenizer cltok, ReportWriter rw, Tape<Object> tParams, boolean isToplevel) throws IOException {
boolean doTail = true;
try {
@@ -383,12 +359,11 @@ public class CLFormatter {
// Not 100% sure this is correct, but the tests are passing
if (cltok == null) return new ArrayList<>();
- Iterator<Decree> it = cltok.iterator();
-
+ CLTokenizer it = CLTokenizer.fromTokens(cltok);
return compile(it);
}
- public List<Edict> compile(Iterator<Decree> cltok) {
+ public List<Edict> compile(CLTokenizer cltok) {
List<Edict> result = new ArrayList<>();
while (cltok.hasNext()) {
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java b/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
index f19fcf8..1624692 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLTokenizer.java
@@ -7,14 +7,77 @@ import bjc.utils.ioutils.*;
import bjc.utils.ioutils.format.directives.*;
public class CLTokenizer implements Iterator<Decree> {
+ /*
+ * Internal class for a tokenizer that returns a specific set of tokens.
+ */
+ private static class SetCLTokenizer extends CLTokenizer {
+ private Iterator<Decree> body;
+
+ public SetCLTokenizer(Iterator<Decree> bod) {
+ body = bod;
+ }
+
+ public SetCLTokenizer(Iterable<Decree> bod) {
+ body = bod.iterator();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return body.hasNext();
+ }
+
+ @Override
+ public Decree next() {
+ return body.next();
+ }
+ }
+
private Matcher mat;
private Decree dir;
+ /**
+ * Empty constructor that should only be invoked if you are a subclass who overrides
+ * hasNext()/next().
+ */
+ protected CLTokenizer() {
+
+ }
+
+ /**
+ * Create a new tokenizer, tokenizing from a given string.
+ *
+ * @param strang
+ * The string to tokenize from.
+ */
public CLTokenizer(String strang) {
this.mat = CLPattern.getDirectiveMatcher(strang);
}
+ /**
+ * Create a CLTokenizer yielding a given set of decrees.
+ *
+ * @param bod
+ * The decrees to yield.
+ *
+ * @return A tokenizer yielding the given set of decrees.
+ */
+ public static CLTokenizer fromTokens(Iterator<Decree> bod) {
+ return new SetCLTokenizer(bod);
+ }
+
+ /**
+ * Create a CLTokenizer yielding a given set of decrees.
+ *
+ * @param bod
+ * The decrees to yield.
+ *
+ * @return A tokenizer yielding the given set of decrees.
+ */
+ public static CLTokenizer fromTokens(Iterable<Decree> bod) {
+ return new SetCLTokenizer(bod);
+ }
+
@Override
public boolean hasNext() {
return !mat.hitEnd();
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CompileContext.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CompileContext.java
index 1cfae14..4fa2fcd 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CompileContext.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CompileContext.java
@@ -14,7 +14,7 @@ public class CompileContext {
/**
* The stream of parsed directives.
*/
- public Iterator<Decree> directives;
+ public CLTokenizer directives;
/**
* The configured formatter instance we are using.
@@ -26,7 +26,7 @@ public class CompileContext {
*/
public Decree decr;
- public CompileContext(Iterator<Decree> dirs, CLFormatter fmt, Decree dcr) {
+ public CompileContext(CLTokenizer dirs, CLFormatter fmt, Decree dcr) {
directives = dirs;
formatter = fmt;
diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
index 7604c77..82fafbc 100644
--- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
+++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameters.java
@@ -15,12 +15,12 @@ public class FormatParameters {
public Tape<Object> tParams;
- public Iterator<Decree> dirIter;
+ public CLTokenizer dirIter;
public CLFormatter fmt;
public FormatParameters(ReportWriter rw, Object item, Decree decr, Tape<Object> tParams,
- Iterator<Decree> dirIter, CLFormatter fmt) {
+ CLTokenizer dirIter, CLFormatter fmt) {
this.rw = rw;
this.item = item;