diff options
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/directives')
15 files changed, 0 insertions, 1159 deletions
diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java deleted file mode 100644 index 9bad6d7..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/AestheticDirective.java +++ /dev/null @@ -1,74 +0,0 @@ -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. - * - * @author student - * - */ -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 { - // System.err.printf("Aesthetic directive with item \"%s\" and params: %s\n", item, tParams); - CLFormatter.checkItem(item, 'A'); - - int mincol = 0, colinc = 1, minpad = 0; - char padchar = ' '; - - if (params.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) { - 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', ' '); - } - - StringBuilder work = new StringBuilder(); - - if (mods.atMod) { - for (int i = 0; i < minpad; i++) { - work.append(padchar); - } - - for (int i = work.length(); i < mincol; i++) { - for (int k = 0; k < colinc; k++) { - work.append(padchar); - } - } - } - - work.append(item.toString()); - - if (!mods.atMod) { - for (int i = 0; i < minpad; i++) { - work.append(padchar); - } - - for (int i = work.length(); i < mincol; i++) { - for (int k = 0; k < colinc; k++) { - work.append(padchar); - } - } - } - - rw.write(work.toString()); - - tParams.right(); - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java deleted file mode 100644 index 728bb43..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/CaseDirective.java +++ /dev/null @@ -1,117 +0,0 @@ - -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.io.StringWriter; -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 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 { - StringBuffer condBody = new StringBuffer(); - - int nestLevel = 1; - - while (dirMatcher.find()) { - /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); - - if (dirName != null) { - /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); - - if (dirName.equals("(")) { - if (nestLevel > 0) { - condBody.append(dirMatcher.group()); - } - - nestLevel += 1; - } else if (Directive.isOpening(dirName)) { - nestLevel += 1; - - condBody.append(dirMatcher.group()); - } else if (dirName.equals(")")) { - nestLevel = Math.max(0, nestLevel - 1); - - /* End the iteration. */ - if (nestLevel == 0) break; - } else if (Directive.isClosing(dirName)) { - nestLevel = Math.max(0, nestLevel - 1); - } else { - /* Not a special directive. */ - condBody.append(dirMatcher.group()); - } - } - } - - String frmt = condBody.toString(); - - ReportWriter nrw = rw.duplicate(new StringWriter()); - - fmt.doFormatString(frmt, nrw, tParams, false); - - String strang = nrw.toString(); - - if (mods.colonMod && mods.atMod) { - strang = strang.toUpperCase(); - } else if (mods.colonMod) { - Matcher mat = wordPattern.matcher(strang); - - StringBuffer sb = new StringBuffer(); - while(!mat.find()) { - mat.appendReplacement(sb, ""); - - String word = mat.group(1); - - word = word.substring(0, 1).toUpperCase() + word.substring(1); - - sb.append(word); - sb.append(mat.group(2)); - } - - mat.appendTail(sb); - - strang = sb.toString(); - } else if (mods.atMod) { - Matcher mat = wordPattern.matcher(strang); - - StringBuffer sb = new StringBuffer(); - boolean doCap = true; - while(!mat.find()) { - mat.appendReplacement(sb, ""); - - String word = mat.group(1); - - if (doCap) { - doCap = false; - - word = word.substring(0, 1).toUpperCase() + word.substring(1); - } - - sb.append(word); - sb.append(mat.group(2)); - } - - mat.appendTail(sb); - - strang = sb.toString(); - - } else { - strang = strang.toLowerCase(); - } - - rw.write(strang); - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java deleted file mode 100644 index 899e8e8..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/CharacterDirective.java +++ /dev/null @@ -1,45 +0,0 @@ -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. - * - * @author student - * - */ -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'); - - if (!(parm instanceof Character)) { - throw new IllegalFormatConversionException('C', parm.getClass()); - } - - char ch = (Character) parm; - int codepoint = ch; - - if (mods.colonMod) { - /* - * Colon mod means print Unicode character name. - */ - rw.write(Character.getName(codepoint)); - } else { - rw.write(ch); - } - - tParams.right(); - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java deleted file mode 100644 index ed0b39b..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/ConditionalDirective.java +++ /dev/null @@ -1,193 +0,0 @@ -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. - * - * @author student - * - */ -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 { - StringBuffer condBody = new StringBuffer(); - - List<String> clauses = new ArrayList<>(); - - String defClause = null; - boolean isDefault = false; - - int nestLevel = 1; - - while (dirMatcher.find()) { - /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); - String dirMods = 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, ""); - - if (dirName.equals("[")) { - if (nestLevel > 0) { - condBody.append(dirMatcher.group()); - } - nestLevel += 1; - } else if (Directive.isOpening(dirName)) { - nestLevel += 1; - - condBody.append(dirMatcher.group()); - } else if (dirName.equals("]")) { - nestLevel = Math.max(0, nestLevel - 1); - - if (nestLevel == 0) { - /* End the conditional. */ - String clause = condBody.toString(); - // System.err.printf("Found clause \"%s]\"\n", clause); - condBody = new StringBuffer(); - - if (isDefault) { - defClause = clause; - } - clauses.add(clause); - - break; - } else { - /* Not a special directive. */ - condBody.append(dirMatcher.group()); - } - } else if (Directive.isClosing(dirName)) { - nestLevel = Math.max(0, nestLevel - 1); - - condBody.append(dirMatcher.group()); - } else if (dirName.equals(";")) { - if (nestLevel == 1) { - /* End the clause. */ - String clause = condBody.toString(); - // System.err.printf("Found clause \"%s;\"\n", clause); - condBody = new StringBuffer(); - - if (isDefault) { - defClause = clause; - } - clauses.add(clause); - - /* - * Mark the next clause as the default. - */ - if (dirMods.contains(":")) { - isDefault = true; - } - } else { - /* Not a special directive. */ - condBody.append(dirMatcher.group()); - } - } else { - /* Not a special directive. */ - condBody.append(dirMatcher.group()); - } - } - } - - if (mods.starMod && clauses.size() > 0) defClause = clauses.get(0); - - try { - if (mods.colonMod) { - formatParams.right(); - - boolean res = false; - if (item == null) { - //throw new IllegalArgumentException("No parameter provided for [ directive."); - } else if (!(item instanceof Boolean)) { - throw new IllegalFormatConversionException('[', item.getClass()); - } else { - res = (Boolean) item; - } - - String frmt; - if (res) - frmt = clauses.get(1); - else - frmt = clauses.get(0); - - fmt.doFormatString(frmt, rw, formatParams, false); - } else if (mods.atMod) { - boolean res = false; - if (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 { - throw new IllegalFormatConversionException('[', item.getClass()); - } - - if (res) { - fmt.doFormatString(clauses.get(0), rw, formatParams, false); - } else { - formatParams.right(); - } - } else { - int res; - if (arrParams.length() >= 1) { - res = arrParams.getInt(0, "conditional choice", '['); - } else { - if (item == null) { - throw new IllegalArgumentException("No parameter provided for [ directive."); - } else if (!(item instanceof Number)) { - throw new IllegalFormatConversionException('[', item.getClass()); - } - res = ((Number) item).intValue(); - - formatParams.right(); - } - - if (mods.dollarMod) res -= 1; - - // System.err.printf("Attempting selection of clause %d of %d (%s) (default %s)\n", - // res, clauses.size(), clauses, defClause); - if (clauses.size() == 0 || res < 0 || res >= clauses.size()) { - // System.err.printf("Selecting default clause (res %d, max %d): %s\n", res, clauses.size(), defClause); - // int clauseNo = 0; - // for (String clause : clauses) { - // System.err.printf("... clause %d: %s\n", ++clauseNo, clause); - // } - - if (defClause != null) fmt.doFormatString(defClause, rw, formatParams, 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); - } - } - } catch (EscapeException eex) { - // @NOTE 9/5/18 - // - // I am not sure if it is valid to error here. I'm not - // even sure that we need to handle this here, but I - // dunno - //if (eex.endIteration) - // throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); - throw eex; - } - - return; - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java b/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java deleted file mode 100644 index 61abfc1..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/Directive.java +++ /dev/null @@ -1,72 +0,0 @@ -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. - * - * @author EVE - * - */ -@FunctionalInterface -public interface Directive { - /** - * Execute this format directive. - * - * @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 static boolean isOpening(String str) { - return isOpening(str.charAt(0)); - } - - public static boolean isOpening(char dir) { - switch(dir) { - case '(': - case '<': - case '[': - case '{': - return true; - default: - return false; - } - } - - public static boolean isClosing(String str) { - return isClosing(str.charAt(0)); - } - - public static boolean isClosing(char dir) { - switch(dir) { - case ')': - case '>': - case ']': - case '}': - return true; - default: - return false; - } - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java deleted file mode 100644 index 74488ed..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/EscapeDirective.java +++ /dev/null @@ -1,59 +0,0 @@ -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. - * @author student - * - */ -public class EscapeDirective implements Directive { - - @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, - Tape<Object> formatParams, Matcher dirMatcher, CLFormatter fmt) { - boolean shouldExit; - - if (mods.dollarMod) formatParams.right(); - - switch(params.length()) { - case 0: - shouldExit = formatParams.atEnd(); - break; - case 1: - int num = params.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", '^'); - - 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", '^'); - - shouldExit = (low <= mid) && (mid <= high); - break; - } - - if (mods.dollarMod) formatParams.left(); - - /* At negates it. */ - if(mods.atMod) shouldExit = !shouldExit; - - if(shouldExit) throw new EscapeException(mods.colonMod); - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java deleted file mode 100644 index 3c02bfc..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/FreshlineDirective.java +++ /dev/null @@ -1,34 +0,0 @@ -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. - * @author student - * - */ -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 { - int nTimes = 1; - - if(params.length() >= 1) { - nTimes = params.getInt(0, "occurance count", '&'); - } - - if(rw.isLastCharNL()) nTimes -= 1; - - for(int i = 0; i < nTimes; i++) { - rw.write("\n"); - } - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java deleted file mode 100644 index 3eb741e..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/GeneralNumberDirective.java +++ /dev/null @@ -1,55 +0,0 @@ -package bjc.utils.ioutils.format.directives; - -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; - -/** - * Implementation skeleton for number directives. - * - * @author student - * - */ -public abstract class GeneralNumberDirective implements Directive { - protected static void handleNumberDirective(ReportWriter rw, CLModifiers mods, CLParameters params, int argidx, - long val, int radix) throws IOException { - /* - * Initialize the two padding related parameters, and then fill them in from the - * directive parameters if they are present. - */ - int mincol = 0; - char padchar = ' '; - if (params.length() >= (argidx + 2)) { - mincol = params.getIntDefault(argidx + 1, "minimum column count", 'R', 0); - } - if (params.length() >= (argidx + 3)) { - padchar = params.getCharDefault(argidx + 2, "padding character", 'R', ' '); - } - - String res; - - if (mods.colonMod) { - /* - * We're doing commas, so check if the two comma-related parameters were - * supplied. - */ - int commaInterval = 0; - char commaChar = ','; - if (params.length() >= (argidx + 4)) { - commaChar = params.getCharDefault((argidx + 3), "comma character", 'R', ','); - } - if (params.length() >= (argidx + 5)) { - commaInterval = params.getIntDefault((argidx + 4), "comma interval", 'R', 0); - } - - res = NumberUtils.toCommaString(val, mincol, padchar, commaInterval, commaChar, mods.atMod, radix); - } else { - res = NumberUtils.toNormalString(val, mincol, padchar, mods.atMod, radix); - } - - rw.write(res); - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java deleted file mode 100644 index 7e30eab..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/GotoDirective.java +++ /dev/null @@ -1,47 +0,0 @@ -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. - * - * @author student - * - */ -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) { - int num = 1; - if (params.length() >= 1) { - num = params.getIntDefault(0, "number of arguments backward", '*', 1); - } - - formatParams.left(num); - } else if (mods.atMod) { - int num = 0; - if (params.length() >= 1) { - num = params.getIntDefault(0, "argument index", '*', 0); - } - - formatParams.first(); - formatParams.right(num); - } else { - int num = 1; - if (params.length() >= 1) { - num = params.getIntDefault(0, "number of arguments forward", '*', 1); - } - - formatParams.right(num); - } - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java deleted file mode 100644 index 2ce6309..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/IterationDirective.java +++ /dev/null @@ -1,171 +0,0 @@ -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. - * - * @author student - * - */ -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, '{'); - - StringBuffer condBody = new StringBuffer(); - - while (dirMatcher.find()) { - /* Process a list of clauses. */ - String dirName = dirMatcher.group("name"); - - if (dirName != null) { - /* Append everything up to this directive. */ - dirMatcher.appendReplacement(condBody, ""); - - if (dirName.equals("}")) { - break; - } else { - /* Not a special directive. */ - condBody.append(dirMatcher.group()); - } - } - } - - String frmt = condBody.toString(); - Object iter = item; - - // System.err.printf("Iteration format \"%s\" (iter %s)\n", frmt, item); - if (frmt.equals("")) { - /* Grab an argument. */ - if (!(item instanceof String)) { - throw new IllegalFormatConversionException('{', String.class); - } - - frmt = (String) item; - - if (!tParams.right()) { - throw new IllegalArgumentException("Not enough parameters to '{' directive"); - } - - iter = tParams.item(); - } - - int maxItr = Integer.MAX_VALUE; - - if (arrParams.length() > 0) { - maxItr = arrParams.getInt(0, "maximum iterations", '{'); - } - - int numItr = 0; - - if (mods.atMod && mods.colonMod) { - try { - do { - if (numItr > maxItr) break; - numItr += 1; - - if (!(iter instanceof Iterable<?>)) { - throw new IllegalFormatConversionException('{', iter.getClass()); - } - - @SuppressWarnings("unchecked") - Iterable<Object> nitr = (Iterable<Object>) iter; - Tape<Object> nParams = new SingleTape<>(nitr); - - try { - fmt.doFormatString(frmt, rw, nParams, false); - } catch (EscapeException eex) { - if (eex.endIteration) { - if (tParams.atEnd()) { - throw eex; - } - } - } - - tParams.right(); - iter = tParams.item(); - } while (tParams.position() < tParams.size()); - } catch (EscapeException eex) { - } - } else if (mods.atMod) { - try { - while (!tParams.atEnd()) { - // System.err.printf("Iterating with format \"%s\"\n", frmt); - if (numItr > maxItr) break; - numItr += 1; - - fmt.doFormatString(frmt, rw, 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()); - } - - try { - @SuppressWarnings("unchecked") - Iterable<Object> itb = (Iterable<Object>) item; - Iterator<Object> itr = itb.iterator(); - while (itr.hasNext()) { - Object obj = itr.next(); - - if (numItr > maxItr) break; - numItr += 1; - - if (!(obj instanceof Iterable<?>)) { - throw new IllegalFormatConversionException('{', obj.getClass()); - } - - @SuppressWarnings("unchecked") - Iterable<Object> nitr = (Iterable<Object>) obj; - Tape<Object> nParams = new SingleTape<>(nitr); - - try { - fmt.doFormatString(frmt, rw, nParams, false); - } catch (EscapeException eex) { - if(eex.endIteration && !itr.hasNext()) throw eex; - } - } - } catch (EscapeException eex) { - } - } else { - if (!(item instanceof Iterable<?>)) { - throw new IllegalFormatConversionException('{', item.getClass()); - } - - try { - @SuppressWarnings("unchecked") - Iterable<Object> itr = (Iterable<Object>) item; - Tape<Object> nParams = new SingleTape<>(itr); - - while (!nParams.atEnd()) { - if (numItr > maxItr) break; - numItr += 1; - - fmt.doFormatString(frmt, rw, nParams, false); - } - } catch (EscapeException eex) { - if (eex.endIteration) - throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); - } - } - - tParams.right(); - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java deleted file mode 100644 index d833654..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/LiteralDirective.java +++ /dev/null @@ -1,51 +0,0 @@ -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. - * - * @author student - * - */ -public class LiteralDirective implements Directive { - - private char directive; - private String lit; - - /** - * Create a new literal directive. - * - * @param lit - * The string for the directive. - * @param directive - * The character for the directive. - */ - public LiteralDirective(String lit, char directive) { - this.directive = directive; - this.lit = lit; - } - - @Override - public void format(ReportWriter rw, Object item, CLModifiers mods, CLParameters params, Tape<Object> tParams, - Matcher dirMatcher, CLFormatter fmt) throws IOException { - int nTimes = 1; - - if (params.length() >= 1) { - nTimes = params.getInt(0, "occurance count", directive); - } - - for (int i = 0; i < nTimes; i++) { - rw.write(lit); - } - - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java deleted file mode 100644 index 88b3e7e..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/NumberDirective.java +++ /dev/null @@ -1,57 +0,0 @@ -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. - * - * @author student - * - */ -public class NumberDirective extends GeneralNumberDirective { - - /** - * Create a new radix based number directive. - * - * @param argidx - * The argument offset to use. - * @param radix - * The radix of the number to use. - */ - public NumberDirective(int argidx, int radix, char directive) { - this.argidx = argidx; - this.radix = radix; - - this.directive = directive; - } - - private int argidx; - private int radix; - - 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); - - if (!(item instanceof Number)) { - throw new IllegalFormatConversionException(directive, item.getClass()); - } - - long val = ((Number) item).longValue(); - - handleNumberDirective(rw, mods, params, argidx, val, radix); - - tParams.right(); - } - -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java deleted file mode 100644 index e8dd4b0..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/RadixDirective.java +++ /dev/null @@ -1,55 +0,0 @@ -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. - * - * @author student - * - */ -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'); - - if (!(arg instanceof Number)) { - throw new IllegalFormatConversionException('R', arg.getClass()); - } - - /* - * @TODO see if this is the way we want to do this. - */ - long val = ((Number) arg).longValue(); - - if (params.length() == 0) { - if (mods.atMod) { - rw.write(NumberUtils.toRoman(val, mods.colonMod)); - } else if (mods.colonMod) { - rw.write(NumberUtils.toOrdinal(val)); - } else { - rw.write(NumberUtils.toCardinal(val)); - } - } else { - if (params.length() < 1) - throw new IllegalArgumentException("R directive requires at least one parameter, the radix"); - - int radix = params.getInt(0, "radix", 'R'); - - handleNumberDirective(rw, mods, params, 0, val, radix); - } - - tParams.right(); - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java deleted file mode 100644 index 44a25ad..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/RecursiveDirective.java +++ /dev/null @@ -1,49 +0,0 @@ -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(); - - CLFormatter.checkItem(arg, '?'); - - if (mods.atMod) { - if (!(arg instanceof String)) - throw new IllegalFormatConversionException('?', arg.getClass()); - - try { - fmt.doFormatString((String)arg, rw, 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()) - throw new IllegalArgumentException("? directive requires two format parameters"); - - Object o = tParams.item(); - tParams.right(); - - if (!(o instanceof Iterable)) - throw new IllegalFormatConversionException('?', o.getClass()); - - Iterable<Object> itb = (Iterable<Object>)o; - Tape<Object> newParams = new SingleTape<>(itb); - - try { - fmt.doFormatString((String)arg, rw, newParams, true); - } catch (EscapeException eex) { - throw new UnsupportedOperationException("Colon mod not allowed on escape marker without colon mod on iteration"); - } - } - } -} diff --git a/base/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java b/base/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java deleted file mode 100644 index d9136f2..0000000 --- a/base/src/main/java/bjc/utils/ioutils/format/directives/TabulateDirective.java +++ /dev/null @@ -1,80 +0,0 @@ -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 { - // 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) { - throw new UnsupportedOperationException("Colon mod is not supported for T directive"); - } - - // Support for a possible future feature - char padchar = ' '; - - if (mods.atMod) { - int colrel = 1, colinc = 1; - - if (arrParams.length() > 2) { - colinc = arrParams.getIntDefault(1, "column increment", 'T', 1); - } - - if (arrParams.length() > 1) { - colrel = arrParams.getIntDefault(0, "relative column number", 'T', 1); - } - - for (int i = 0; i < colrel; i++) { - rw.write(padchar); - } - - int currCol = rw.getLinePos(); - - int nSpaces = 0; - - while ((currCol + nSpaces) % colinc != 0) nSpaces++; - - for (int i = 0; i < nSpaces; i++) { - rw.write(padchar); - } - } else { - int colnum = 1, colinc = 1; - - if (arrParams.length() > 2) { - colinc = arrParams.getIntDefault(1, "column increment", 'T', 1); - } - - if (arrParams.length() > 1) { - colnum = arrParams.getIntDefault(0, "column number", 'T', 1); - } - - int currCol = rw.getLinePos(); - - if (currCol < colnum) { - for (int i = currCol; i < colnum; i++) { - rw.write(padchar); - } - } else { - if (colinc == 0) return; - - int k = 0; - - while (colnum > (currCol + (k * colinc))) k++; - - for (int i = currCol; i < colnum; i++) { - rw.write(padchar); - } - } - } - } -} |
