diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2018-09-17 09:53:13 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2018-09-17 09:53:13 -0400 |
| commit | 4082b703847edcc77b01eaf40c613a59f94a5b34 (patch) | |
| tree | 421b14e9094163158981a03cee39dff063421055 /clformat/src | |
| parent | e78ed99a2cd1d8cb67952568a67c44c05f9396e3 (diff) | |
Introduce parameter object
Changes directives to take a single parameter object, so that parameters
can be added/removed easier
Diffstat (limited to 'clformat/src')
17 files changed, 236 insertions, 306 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 997f737..0a15c1f 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/CLFormatter.java @@ -235,8 +235,7 @@ public class CLFormatter { } if(extraDirectives.containsKey(dirName)) { - extraDirectives.get(dirName).format(rw, item, mods, arrParams, tParams, dirMatcher, - this); + extraDirectives.get(dirName).format(new FormatParameter(rw, item, mods, arrParams, tParams, dirMatcher, this)); continue; } @@ -244,8 +243,7 @@ public class CLFormatter { if(builtinDirectives.containsKey(dirName)) { // System.err.printf("Executing directive %s (%s) (%d to %d) from string %s\n", dirName, dirMatcher.group(), dirMatcher.start(), dirMatcher.end(), format); - builtinDirectives.get(dirName).format(rw, - item, mods, arrParams, tParams, dirMatcher, this); + builtinDirectives.get(dirName).format(new FormatParameter(rw, item, mods, arrParams, tParams, dirMatcher, this)); continue; } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java index 9bad6d7..59fa58c 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java @@ -2,13 +2,7 @@ package bjc.utils.ioutils.format.directives; import java.io.IOException; -import java.util.regex.Matcher; - -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; /** * Implementation of the A directive. @@ -19,29 +13,28 @@ import bjc.utils.ioutils.ReportWriter; public class AestheticDirective implements Directive { @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { // System.err.printf("Aesthetic directive with item \"%s\" and params: %s\n", item, tParams); - CLFormatter.checkItem(item, 'A'); + CLFormatter.checkItem(dirParams.item, 'A'); int mincol = 0, colinc = 1, minpad = 0; char padchar = ' '; - if (params.length() == 0) { + if (dirParams.arrParams.length() == 0) { // Zero parameters, use all defaults - } else if (params.length() == 1) { - mincol = params.getIntDefault(0, "minimum column count", 'A', 0); - } else if (params.length() < 4) { + } else if (dirParams.arrParams.length() == 1) { + mincol = dirParams.arrParams.getIntDefault(0, "minimum column count", 'A', 0); + } else if (dirParams.arrParams.length() < 4) { throw new IllegalArgumentException("Must provide either zero, one or four arguments to A directive"); } else { - colinc = params.getIntDefault(1, "padding increment", 'A', 1); - minpad = params.getIntDefault(2, "minimum amount of padding", 'A', 0); - padchar = params.getCharDefault(3, "padding character", 'A', ' '); + colinc = dirParams.arrParams.getIntDefault(1, "padding increment", 'A', 1); + minpad = dirParams.arrParams.getIntDefault(2, "minimum amount of padding", 'A', 0); + padchar = dirParams.arrParams.getCharDefault(3, "padding character", 'A', ' '); } StringBuilder work = new StringBuilder(); - if (mods.atMod) { + if (dirParams.mods.atMod) { for (int i = 0; i < minpad; i++) { work.append(padchar); } @@ -53,9 +46,9 @@ public class AestheticDirective implements Directive { } } - work.append(item.toString()); + work.append(dirParams.item.toString()); - if (!mods.atMod) { + if (!dirParams.mods.atMod) { for (int i = 0; i < minpad; i++) { work.append(padchar); } @@ -67,8 +60,8 @@ public class AestheticDirective implements Directive { } } - rw.write(work.toString()); + dirParams.rw.write(work.toString()); - tParams.right(); + dirParams.tParams.right(); } } 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 6e80b1d..0a5ebff 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 @@ -1,6 +1,5 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.*; import bjc.utils.ioutils.ReportWriter; @@ -17,30 +16,29 @@ public class CaseDirective implements Directive { private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)"); @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { StringBuffer condBody = new StringBuffer(); int nestLevel = 1; - while (dirMatcher.find()) { + while (dirParams.dirMatcher.find()) { /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); + String dirName = dirParams.dirMatcher.group("name"); if (dirName != null) { /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); + dirParams.dirMatcher.appendReplacement(condBody, ""); if (dirName.equals("(")) { if (nestLevel > 0) { - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } nestLevel += 1; } else if (Directive.isOpening(dirName)) { nestLevel += 1; - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } else if (dirName.equals(")")) { nestLevel = Math.max(0, nestLevel - 1); @@ -50,22 +48,22 @@ public class CaseDirective implements Directive { nestLevel = Math.max(0, nestLevel - 1); } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } } String frmt = condBody.toString(); - ReportWriter nrw = rw.duplicate(new StringWriter()); + ReportWriter nrw = dirParams.rw.duplicate(new StringWriter()); - fmt.doFormatString(frmt, nrw, tParams, false); + dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false); String strang = nrw.toString(); - if (mods.colonMod && mods.atMod) { + if (dirParams.mods.colonMod && dirParams.mods.atMod) { strang = strang.toUpperCase(); - } else if (mods.colonMod) { + } else if (dirParams.mods.colonMod) { Matcher mat = wordPattern.matcher(strang); StringBuffer sb = new StringBuffer(); @@ -83,7 +81,7 @@ public class CaseDirective implements Directive { mat.appendTail(sb); strang = sb.toString(); - } else if (mods.atMod) { + } else if (dirParams.mods.atMod) { Matcher mat = wordPattern.matcher(strang); StringBuffer sb = new StringBuffer(); @@ -111,6 +109,6 @@ public class CaseDirective implements Directive { strang = strang.toLowerCase(); } - rw.write(strang); + dirParams.rw.write(strang); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java index 899e8e8..685fa1c 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java @@ -1,14 +1,9 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; import java.io.IOException; import java.util.IllegalFormatConversionException; -import java.util.regex.Matcher; /** * Implements the C directive. @@ -19,27 +14,26 @@ import java.util.regex.Matcher; public class CharacterDirective implements Directive { @Override - public void format(ReportWriter rw, Object parm, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - CLFormatter.checkItem(parm, 'C'); + public void format(FormatParameter dirParams) throws IOException { + CLFormatter.checkItem(dirParams.item, 'C'); - if (!(parm instanceof Character)) { - throw new IllegalFormatConversionException('C', parm.getClass()); + if (!(dirParams.item instanceof Character)) { + throw new IllegalFormatConversionException('C', dirParams.item.getClass()); } - char ch = (Character) parm; + char ch = (Character) dirParams.item; int codepoint = ch; - if (mods.colonMod) { + if (dirParams.mods.colonMod) { /* * Colon mod means print Unicode character name. */ - rw.write(Character.getName(codepoint)); + dirParams.rw.write(Character.getName(codepoint)); } else { - rw.write(ch); + dirParams.rw.write(ch); } - tParams.right(); + dirParams.tParams.right(); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java index ed0b39b..e1f3c42 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java @@ -1,15 +1,12 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.*; -import bjc.utils.ioutils.ReportWriter; import java.io.IOException; import java.util.ArrayList; import java.util.IllegalFormatConversionException; import java.util.List; import java.util.logging.Logger; -import java.util.regex.Matcher; /** * Implements the [ directive. @@ -21,8 +18,7 @@ public class ConditionalDirective implements Directive { private static Logger LOG = Logger.getLogger(ConditionalDirective.class.getName()); @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, - Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { StringBuffer condBody = new StringBuffer(); List<String> clauses = new ArrayList<>(); @@ -32,25 +28,25 @@ public class ConditionalDirective implements Directive { int nestLevel = 1; - while (dirMatcher.find()) { + while (dirParams.dirMatcher.find()) { /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); - String dirMods = dirMatcher.group("modifiers"); + String dirName = dirParams.dirMatcher.group("name"); + String dirMods = dirParams.dirMatcher.group("modifiers"); //System.err.printf("Found conditional directive %s with %s mods and level %d\n", dirName, dirMods, nestLevel); if (dirName != null) { /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); + dirParams.dirMatcher.appendReplacement(condBody, ""); if (dirName.equals("[")) { if (nestLevel > 0) { - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } nestLevel += 1; } else if (Directive.isOpening(dirName)) { nestLevel += 1; - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } else if (dirName.equals("]")) { nestLevel = Math.max(0, nestLevel - 1); @@ -68,12 +64,12 @@ public class ConditionalDirective implements Directive { break; } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } else if (Directive.isClosing(dirName)) { nestLevel = Math.max(0, nestLevel - 1); - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } else if (dirName.equals(";")) { if (nestLevel == 1) { /* End the clause. */ @@ -94,28 +90,28 @@ public class ConditionalDirective implements Directive { } } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } } - if (mods.starMod && clauses.size() > 0) defClause = clauses.get(0); + if (dirParams.mods.starMod && clauses.size() > 0) defClause = clauses.get(0); try { - if (mods.colonMod) { - formatParams.right(); + if (dirParams.mods.colonMod) { + dirParams.tParams.right(); boolean res = false; - if (item == null) { + if (dirParams.item == null) { //throw new IllegalArgumentException("No parameter provided for [ directive."); - } else if (!(item instanceof Boolean)) { - throw new IllegalFormatConversionException('[', item.getClass()); + } else if (!(dirParams.item instanceof Boolean)) { + throw new IllegalFormatConversionException('[', dirParams.item.getClass()); } else { - res = (Boolean) item; + res = (Boolean) dirParams.item; } String frmt; @@ -124,40 +120,40 @@ public class ConditionalDirective implements Directive { else frmt = clauses.get(0); - fmt.doFormatString(frmt, rw, formatParams, false); - } else if (mods.atMod) { + dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false); + } else if (dirParams.mods.atMod) { boolean res = false; - if (item == null) { + if (dirParams.item == null) { // throw new IllegalArgumentException("No parameter provided for [ directive."); - } else if (item instanceof Integer) { - if ((Integer)item != 0) res = true; - } else if (item instanceof Boolean) { - res = (Boolean) item; + } else if (dirParams.item instanceof Integer) { + if ((Integer)dirParams.item != 0) res = true; + } else if (dirParams.item instanceof Boolean) { + res = (Boolean) dirParams.item; } else { - throw new IllegalFormatConversionException('[', item.getClass()); + throw new IllegalFormatConversionException('[', dirParams.item.getClass()); } if (res) { - fmt.doFormatString(clauses.get(0), rw, formatParams, false); + dirParams.fmt.doFormatString(clauses.get(0), dirParams.rw, dirParams.tParams, false); } else { - formatParams.right(); + dirParams.tParams.right(); } } else { int res; - if (arrParams.length() >= 1) { - res = arrParams.getInt(0, "conditional choice", '['); + if (dirParams.arrParams.length() >= 1) { + res = dirParams.arrParams.getInt(0, "conditional choice", '['); } else { - if (item == null) { + if (dirParams.item == null) { throw new IllegalArgumentException("No parameter provided for [ directive."); - } else if (!(item instanceof Number)) { - throw new IllegalFormatConversionException('[', item.getClass()); + } else if (!(dirParams.item instanceof Number)) { + throw new IllegalFormatConversionException('[', dirParams.item.getClass()); } - res = ((Number) item).intValue(); + res = ((Number) dirParams.item).intValue(); - formatParams.right(); + dirParams.tParams.right(); } - if (mods.dollarMod) res -= 1; + if (dirParams.mods.dollarMod) res -= 1; // System.err.printf("Attempting selection of clause %d of %d (%s) (default %s)\n", // res, clauses.size(), clauses, defClause); @@ -168,12 +164,12 @@ public class ConditionalDirective implements Directive { // System.err.printf("... clause %d: %s\n", ++clauseNo, clause); // } - if (defClause != null) fmt.doFormatString(defClause, rw, formatParams, false); + if (defClause != null) dirParams.fmt.doFormatString(defClause, dirParams.rw, dirParams.tParams, false); } else { String frmt = clauses.get(res); // System.out.printf("Selecting clause %d of %d (params %s): %s\n", res, clauses.size(), formatParams, frmt); - fmt.doFormatString(frmt, rw, formatParams, false); + dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false); } } } catch (EscapeException eex) { diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java index 2e644ae..641d76d 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/Directive.java @@ -1,13 +1,6 @@ package bjc.utils.ioutils.format.directives; import java.io.IOException; -import java.util.regex.Matcher; - -import bjc.utils.esodata.Tape; -import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; /** * A CL format directive. @@ -19,24 +12,11 @@ import bjc.utils.ioutils.ReportWriter; public interface Directive { /** * Execute this format directive. - * + * @param dirParams TODO * @param sb * The buffer the string is being output to. - * @param item - * The current parameter being passed - * @param mods - * The directive modifiers - * @param arrParams - * The prefix parameters to the directive - * @param tParams - * All of the provided format parameters - * @param dirMatcher - * The matcher for format directives - * @param fmt - * The formatter itself. */ - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException; + public void format(FormatParameter dirParams) throws IOException; public static boolean isOpening(String str) { switch(str) { diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java index 74488ed..a9d6e4f 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java @@ -1,13 +1,6 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; -import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; import bjc.utils.ioutils.format.EscapeException; -import bjc.utils.ioutils.ReportWriter; - -import java.util.regex.Matcher; /** * Implementation for the ^ directive. @@ -17,43 +10,42 @@ import java.util.regex.Matcher; public class EscapeDirective implements Directive { @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, - Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) { + public void format(FormatParameter dirParams) { boolean shouldExit; - if (mods.dollarMod) formatParams.right(); + if (dirParams.mods.dollarMod) dirParams.tParams.right(); - switch(params.length()) { + switch(dirParams.arrParams.length()) { case 0: - shouldExit = formatParams.atEnd(); + shouldExit = dirParams.tParams.atEnd(); break; case 1: - int num = params.getInt(0, "condition count", '^'); + int num = dirParams.arrParams.getInt(0, "condition count", '^'); shouldExit = num == 0; break; case 2: - int left = params.getInt(0, "left-hand condition", '^'); - int right = params.getInt(1, "right-hand condition", '^'); + int left = dirParams.arrParams.getInt(0, "left-hand condition", '^'); + int right = dirParams.arrParams.getInt(1, "right-hand condition", '^'); shouldExit = left == right; break; case 3: default: - int low = params.getInt(0, "lower-bound condition", '^'); - int mid = params.getInt(1, "interval condition", '^'); - int high = params.getInt(2, "upper-bound condition", '^'); + int low = dirParams.arrParams.getInt(0, "lower-bound condition", '^'); + int mid = dirParams.arrParams.getInt(1, "interval condition", '^'); + int high = dirParams.arrParams.getInt(2, "upper-bound condition", '^'); shouldExit = (low <= mid) && (mid <= high); break; } - if (mods.dollarMod) formatParams.left(); + if (dirParams.mods.dollarMod) dirParams.tParams.left(); /* At negates it. */ - if(mods.atMod) shouldExit = !shouldExit; + if(dirParams.mods.atMod) shouldExit = !shouldExit; - if(shouldExit) throw new EscapeException(mods.colonMod); + if(shouldExit) throw new EscapeException(dirParams.mods.colonMod); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java new file mode 100644 index 0000000..35882a4 --- /dev/null +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FormatParameter.java @@ -0,0 +1,30 @@ +package bjc.utils.ioutils.format.directives; + +import java.util.regex.Matcher; + +import bjc.utils.esodata.Tape; +import bjc.utils.ioutils.ReportWriter; +import bjc.utils.ioutils.format.CLFormatter; +import bjc.utils.ioutils.format.CLModifiers; +import bjc.utils.ioutils.format.CLParameters; + +public class FormatParameter { + public ReportWriter rw; + public Object item; + public CLModifiers mods; + public CLParameters arrParams; + public Tape<Object> tParams; + public Matcher dirMatcher; + public CLFormatter fmt; + + public FormatParameter(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, + Tape<Object> tParams, Matcher dirMatcher, CLFormatter fmt) { + this.rw = rw; + this.item = item; + this.mods = mods; + this.arrParams = arrParams; + this.tParams = tParams; + this.dirMatcher = dirMatcher; + this.fmt = fmt; + } +}
\ No newline at end of file diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java index 3c02bfc..b0561cf 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java @@ -1,13 +1,6 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; -import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; - import java.io.IOException; -import java.util.regex.Matcher; /** * Implement the & directive. @@ -17,18 +10,17 @@ import java.util.regex.Matcher; public class FreshlineDirective implements Directive { @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { int nTimes = 1; - if(params.length() >= 1) { - nTimes = params.getInt(0, "occurance count", '&'); + if(dirParams.arrParams.length() >= 1) { + nTimes = dirParams.arrParams.getInt(0, "occurance count", '&'); } - if(rw.isLastCharNL()) nTimes -= 1; + if(dirParams.rw.isLastCharNL()) nTimes -= 1; for(int i = 0; i < nTimes; i++) { - rw.write("\n"); + dirParams.rw.write("\n"); } } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java index 7e30eab..a64591f 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java @@ -1,13 +1,5 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; -import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; - -import java.util.regex.Matcher; - /** * Implement the * directive. * @@ -17,30 +9,29 @@ import java.util.regex.Matcher; public class GotoDirective implements Directive { @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> formatParams, - Matcher dirMatcher, CLFormatter fmt) { - if (mods.colonMod) { + public void format(FormatParameter dirParams) { + if (dirParams.mods.colonMod) { int num = 1; - if (params.length() >= 1) { - num = params.getIntDefault(0, "number of arguments backward", '*', 1); + if (dirParams.arrParams.length() >= 1) { + num = dirParams.arrParams.getIntDefault(0, "number of arguments backward", '*', 1); } - formatParams.left(num); - } else if (mods.atMod) { + dirParams.tParams.left(num); + } else if (dirParams.mods.atMod) { int num = 0; - if (params.length() >= 1) { - num = params.getIntDefault(0, "argument index", '*', 0); + if (dirParams.arrParams.length() >= 1) { + num = dirParams.arrParams.getIntDefault(0, "argument index", '*', 0); } - formatParams.first(); - formatParams.right(num); + dirParams.tParams.first(); + dirParams.tParams.right(num); } else { int num = 1; - if (params.length() >= 1) { - num = params.getIntDefault(0, "number of arguments forward", '*', 1); + if (dirParams.arrParams.length() >= 1) { + num = dirParams.arrParams.getIntDefault(0, "number of arguments forward", '*', 1); } - formatParams.right(num); + dirParams.tParams.right(num); } } 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 aa75f76..e76b2f7 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 @@ -1,8 +1,6 @@ package bjc.utils.ioutils.format.directives; import bjc.inflexion.InflectionML; - -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.*; import bjc.utils.ioutils.ReportWriter; @@ -12,37 +10,35 @@ import java.util.ArrayList; import java.util.IllegalFormatConversionException; import java.util.List; import java.util.logging.Logger; -import java.util.regex.Matcher; import java.util.regex.Pattern; public class InflectDirective implements Directive { private static final Pattern wordPattern = Pattern.compile("(\\w+)(\\b*)"); @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { StringBuffer condBody = new StringBuffer(); int nestLevel = 1; - while (dirMatcher.find()) { + while (dirParams.dirMatcher.find()) { /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); + String dirName = dirParams.dirMatcher.group("name"); if (dirName != null) { /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); + dirParams.dirMatcher.appendReplacement(condBody, ""); if (dirName.equals("`[")) { if (nestLevel > 0) { - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } nestLevel += 1; } else if (Directive.isOpening(dirName)) { nestLevel += 1; - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } else if (dirName.equals("`]")) { nestLevel = Math.max(0, nestLevel - 1); @@ -52,21 +48,21 @@ public class InflectDirective implements Directive { nestLevel = Math.max(0, nestLevel - 1); } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } } String frmt = condBody.toString(); - ReportWriter nrw = rw.duplicate(new StringWriter()); + ReportWriter nrw = dirParams.rw.duplicate(new StringWriter()); - fmt.doFormatString(frmt, nrw, tParams, false); + dirParams.fmt.doFormatString(frmt, nrw, dirParams.tParams, false); String strang = nrw.toString(); strang = InflectionML.inflect(strang); - rw.write(strang); + dirParams.rw.write(strang); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java index 2ce6309..10f1608 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java @@ -3,14 +3,12 @@ package bjc.utils.ioutils.format.directives; import bjc.utils.esodata.SingleTape; import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.*; -import bjc.utils.ioutils.ReportWriter; import java.io.IOException; import java.util.Iterator; import java.util.IllegalFormatConversionException; -import java.util.regex.Matcher; /** * Implements the { directive. @@ -21,57 +19,56 @@ import java.util.regex.Matcher; public class IterationDirective implements Directive { @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - CLFormatter.checkItem(item, '{'); + public void format(FormatParameter dirParams) throws IOException { + CLFormatter.checkItem(dirParams.item, '{'); StringBuffer condBody = new StringBuffer(); - while (dirMatcher.find()) { + while (dirParams.dirMatcher.find()) { /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); + String dirName = dirParams.dirMatcher.group("name"); if (dirName != null) { /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); + dirParams.dirMatcher.appendReplacement(condBody, ""); if (dirName.equals("}")) { break; } else { /* Not a special directive. */ - condBody.append(dirMatcher.group()); + condBody.append(dirParams.dirMatcher.group()); } } } String frmt = condBody.toString(); - Object iter = item; + Object iter = dirParams.item; // System.err.printf("Iteration format \"%s\" (iter %s)\n", frmt, item); if (frmt.equals("")) { /* Grab an argument. */ - if (!(item instanceof String)) { + if (!(dirParams.item instanceof String)) { throw new IllegalFormatConversionException('{', String.class); } - frmt = (String) item; + frmt = (String) dirParams.item; - if (!tParams.right()) { + if (!dirParams.tParams.right()) { throw new IllegalArgumentException("Not enough parameters to '{' directive"); } - iter = tParams.item(); + iter = dirParams.tParams.item(); } int maxItr = Integer.MAX_VALUE; - if (arrParams.length() > 0) { - maxItr = arrParams.getInt(0, "maximum iterations", '{'); + if (dirParams.arrParams.length() > 0) { + maxItr = dirParams.arrParams.getInt(0, "maximum iterations", '{'); } int numItr = 0; - if (mods.atMod && mods.colonMod) { + if (dirParams.mods.atMod && dirParams.mods.colonMod) { try { do { if (numItr > maxItr) break; @@ -86,41 +83,41 @@ public class IterationDirective implements Directive { Tape<Object> nParams = new SingleTape<>(nitr); try { - fmt.doFormatString(frmt, rw, nParams, false); + dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false); } catch (EscapeException eex) { if (eex.endIteration) { - if (tParams.atEnd()) { + if (dirParams.tParams.atEnd()) { throw eex; } } } - tParams.right(); - iter = tParams.item(); - } while (tParams.position() < tParams.size()); + dirParams.tParams.right(); + iter = dirParams.tParams.item(); + } while (dirParams.tParams.position() < dirParams.tParams.size()); } catch (EscapeException eex) { } - } else if (mods.atMod) { + } else if (dirParams.mods.atMod) { try { - while (!tParams.atEnd()) { + while (!dirParams.tParams.atEnd()) { // System.err.printf("Iterating with format \"%s\"\n", frmt); if (numItr > maxItr) break; numItr += 1; - fmt.doFormatString(frmt, rw, tParams, false); + dirParams.fmt.doFormatString(frmt, dirParams.rw, dirParams.tParams, false); } } catch (EscapeException eex) { if (eex.endIteration) throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); } - } else if (mods.colonMod) { - if (!(item instanceof Iterable<?>)) { - throw new IllegalFormatConversionException('{', item.getClass()); + } else if (dirParams.mods.colonMod) { + if (!(dirParams.item instanceof Iterable<?>)) { + throw new IllegalFormatConversionException('{', dirParams.item.getClass()); } try { @SuppressWarnings("unchecked") - Iterable<Object> itb = (Iterable<Object>) item; + Iterable<Object> itb = (Iterable<Object>) dirParams.item; Iterator<Object> itr = itb.iterator(); while (itr.hasNext()) { Object obj = itr.next(); @@ -137,7 +134,7 @@ public class IterationDirective implements Directive { Tape<Object> nParams = new SingleTape<>(nitr); try { - fmt.doFormatString(frmt, rw, nParams, false); + dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false); } catch (EscapeException eex) { if(eex.endIteration && !itr.hasNext()) throw eex; } @@ -145,20 +142,20 @@ public class IterationDirective implements Directive { } catch (EscapeException eex) { } } else { - if (!(item instanceof Iterable<?>)) { - throw new IllegalFormatConversionException('{', item.getClass()); + if (!(dirParams.item instanceof Iterable<?>)) { + throw new IllegalFormatConversionException('{', dirParams.item.getClass()); } try { @SuppressWarnings("unchecked") - Iterable<Object> itr = (Iterable<Object>) item; + Iterable<Object> itr = (Iterable<Object>) dirParams.item; Tape<Object> nParams = new SingleTape<>(itr); while (!nParams.atEnd()) { if (numItr > maxItr) break; numItr += 1; - fmt.doFormatString(frmt, rw, nParams, false); + dirParams.fmt.doFormatString(frmt, dirParams.rw, nParams, false); } } catch (EscapeException eex) { if (eex.endIteration) @@ -166,6 +163,6 @@ public class IterationDirective implements Directive { } } - tParams.right(); + dirParams.tParams.right(); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java index d833654..5ca454e 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java @@ -1,13 +1,6 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; -import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; - import java.io.IOException; -import java.util.regex.Matcher; /** * Implements directives that create a literal string. @@ -34,16 +27,15 @@ public class LiteralDirective implements Directive { } @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { int nTimes = 1; - if (params.length() >= 1) { - nTimes = params.getInt(0, "occurance count", directive); + if (dirParams.arrParams.length() >= 1) { + nTimes = dirParams.arrParams.getInt(0, "occurance count", directive); } for (int i = 0; i < nTimes; i++) { - rw.write(lit); + dirParams.rw.write(lit); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java index 88b3e7e..da55271 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java @@ -2,13 +2,8 @@ package bjc.utils.ioutils.format.directives; import java.io.IOException; import java.util.IllegalFormatConversionException; -import java.util.regex.Matcher; -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; /** * Implements radix based numbers. @@ -39,19 +34,18 @@ public class NumberDirective extends GeneralNumberDirective { private char directive; @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - CLFormatter.checkItem(item, directive); + public void format(FormatParameter dirParams) throws IOException { + CLFormatter.checkItem(dirParams.item, directive); - if (!(item instanceof Number)) { - throw new IllegalFormatConversionException(directive, item.getClass()); + if (!(dirParams.item instanceof Number)) { + throw new IllegalFormatConversionException(directive, dirParams.item.getClass()); } - long val = ((Number) item).longValue(); + long val = ((Number) dirParams.item).longValue(); - handleNumberDirective(rw, mods, params, argidx, val, radix); + handleNumberDirective(dirParams.rw, dirParams.mods, dirParams.arrParams, argidx, val, radix); - tParams.right(); + dirParams.tParams.right(); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java index e8dd4b0..a5b1a84 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java @@ -1,15 +1,10 @@ package bjc.utils.ioutils.format.directives; -import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.CLFormatter; -import bjc.utils.ioutils.format.CLModifiers; -import bjc.utils.ioutils.format.CLParameters; -import bjc.utils.ioutils.ReportWriter; import bjc.utils.math.NumberUtils; import java.io.IOException; import java.util.IllegalFormatConversionException; -import java.util.regex.Matcher; /** * Generalized radix directive. @@ -20,36 +15,35 @@ import java.util.regex.Matcher; public class RadixDirective extends GeneralNumberDirective { @Override - public void format(ReportWriter rw, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - CLFormatter.checkItem(arg, 'R'); + public void format(FormatParameter dirParams) throws IOException { + CLFormatter.checkItem(dirParams.item, 'R'); - if (!(arg instanceof Number)) { - throw new IllegalFormatConversionException('R', arg.getClass()); + if (!(dirParams.item instanceof Number)) { + throw new IllegalFormatConversionException('R', dirParams.item.getClass()); } /* * @TODO see if this is the way we want to do this. */ - long val = ((Number) arg).longValue(); + long val = ((Number) dirParams.item).longValue(); - if (params.length() == 0) { - if (mods.atMod) { - rw.write(NumberUtils.toRoman(val, mods.colonMod)); - } else if (mods.colonMod) { - rw.write(NumberUtils.toOrdinal(val)); + if (dirParams.arrParams.length() == 0) { + if (dirParams.mods.atMod) { + dirParams.rw.write(NumberUtils.toRoman(val, dirParams.mods.colonMod)); + } else if (dirParams.mods.colonMod) { + dirParams.rw.write(NumberUtils.toOrdinal(val)); } else { - rw.write(NumberUtils.toCardinal(val)); + dirParams.rw.write(NumberUtils.toCardinal(val)); } } else { - if (params.length() < 1) + if (dirParams.arrParams.length() < 1) throw new IllegalArgumentException("R directive requires at least one parameter, the radix"); - int radix = params.getInt(0, "radix", 'R'); + int radix = dirParams.arrParams.getInt(0, "radix", 'R'); - handleNumberDirective(rw, mods, params, 0, val, radix); + handleNumberDirective(dirParams.rw, dirParams.mods, dirParams.arrParams, 0, val, radix); } - tParams.right(); + dirParams.tParams.right(); } } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java index 44a25ad..33f57e1 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java @@ -3,35 +3,33 @@ package bjc.utils.ioutils.format.directives; import bjc.utils.esodata.SingleTape; import bjc.utils.esodata.Tape; import bjc.utils.ioutils.format.*; -import bjc.utils.ioutils.ReportWriter; + import java.util.IllegalFormatConversionException; import java.io.IOException; -import java.util.regex.Matcher; public class RecursiveDirective implements Directive { - public void format(ReportWriter rw, Object arg, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - tParams.right(); + public void format(FormatParameter dirParams) throws IOException { + dirParams.tParams.right(); - CLFormatter.checkItem(arg, '?'); + CLFormatter.checkItem(dirParams.item, '?'); - if (mods.atMod) { - if (!(arg instanceof String)) - throw new IllegalFormatConversionException('?', arg.getClass()); + if (dirParams.mods.atMod) { + if (!(dirParams.item instanceof String)) + throw new IllegalFormatConversionException('?', dirParams.item.getClass()); try { - fmt.doFormatString((String)arg, rw, tParams, true); + dirParams.fmt.doFormatString((String)dirParams.item, dirParams.rw, dirParams.tParams, true); } catch (EscapeException eex) { if (eex.endIteration) throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); } } else { - if (tParams.atEnd()) + if (dirParams.tParams.atEnd()) throw new IllegalArgumentException("? directive requires two format parameters"); - Object o = tParams.item(); - tParams.right(); + Object o = dirParams.tParams.item(); + dirParams.tParams.right(); if (!(o instanceof Iterable)) throw new IllegalFormatConversionException('?', o.getClass()); @@ -40,7 +38,7 @@ public class RecursiveDirective implements Directive { Tape<Object> newParams = new SingleTape<>(itb); try { - fmt.doFormatString((String)arg, rw, newParams, true); + dirParams.fmt.doFormatString((String)dirParams.item, dirParams.rw, newParams, true); } catch (EscapeException eex) { throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); } diff --git a/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java b/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java index d9136f2..b3204e0 100644 --- a/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java +++ b/clformat/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java @@ -1,68 +1,63 @@ package bjc.utils.ioutils.format.directives; import java.io.IOException; -import java.util.regex.Matcher; -import bjc.utils.esodata.Tape; - -import bjc.utils.ioutils.ReportWriter; import bjc.utils.ioutils.format.*; public class TabulateDirective implements Directive { - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters arrParams, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { + public void format(FormatParameter dirParams) throws IOException { // Unsupported feature. // // I can't really make out what this is supposed to do from the // documentation, but I suspect that it depends on font glyph // size, not character positions - if (mods.colonMod) { + if (dirParams.mods.colonMod) { throw new UnsupportedOperationException("Colon mod is not supported for T directive"); } // Support for a possible future feature char padchar = ' '; - if (mods.atMod) { + if (dirParams.mods.atMod) { int colrel = 1, colinc = 1; - if (arrParams.length() > 2) { - colinc = arrParams.getIntDefault(1, "column increment", 'T', 1); + if (dirParams.arrParams.length() > 2) { + colinc = dirParams.arrParams.getIntDefault(1, "column increment", 'T', 1); } - if (arrParams.length() > 1) { - colrel = arrParams.getIntDefault(0, "relative column number", 'T', 1); + if (dirParams.arrParams.length() > 1) { + colrel = dirParams.arrParams.getIntDefault(0, "relative column number", 'T', 1); } for (int i = 0; i < colrel; i++) { - rw.write(padchar); + dirParams.rw.write(padchar); } - int currCol = rw.getLinePos(); + int currCol = dirParams.rw.getLinePos(); int nSpaces = 0; while ((currCol + nSpaces) % colinc != 0) nSpaces++; for (int i = 0; i < nSpaces; i++) { - rw.write(padchar); + dirParams.rw.write(padchar); } } else { int colnum = 1, colinc = 1; - if (arrParams.length() > 2) { - colinc = arrParams.getIntDefault(1, "column increment", 'T', 1); + if (dirParams.arrParams.length() > 2) { + colinc = dirParams.arrParams.getIntDefault(1, "column increment", 'T', 1); } - if (arrParams.length() > 1) { - colnum = arrParams.getIntDefault(0, "column number", 'T', 1); + if (dirParams.arrParams.length() > 1) { + colnum = dirParams.arrParams.getIntDefault(0, "column number", 'T', 1); } - int currCol = rw.getLinePos(); + int currCol = dirParams.rw.getLinePos(); if (currCol < colnum) { for (int i = currCol; i < colnum; i++) { - rw.write(padchar); + dirParams.rw.write(padchar); } } else { if (colinc == 0) return; @@ -72,7 +67,7 @@ public class TabulateDirective implements Directive { while (colnum > (currCol + (k * colinc))) k++; for (int i = currCol; i < colnum; i++) { - rw.write(padchar); + dirParams.rw.write(padchar); } } } |
