From 49cd96c4c5bbb883c0c5c10d7916ad2e93ff2df0 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Sat, 10 Feb 2018 00:00:07 -0500 Subject: Update and refactor CL formatting --- .../utils/ioutils/format/IterationDirective.java | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java (limited to 'base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java') diff --git a/base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java b/base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java new file mode 100644 index 0000000..353ff94 --- /dev/null +++ b/base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java @@ -0,0 +1,78 @@ +package bjc.utils.ioutils.format; + +import bjc.utils.esodata.Tape; + +import java.util.ArrayList; +import java.util.IllegalFormatConversionException; +import java.util.List; +import java.util.regex.Matcher; + +class IterationDirective implements Directive { + + @Override + public void format(StringBuffer sb, Object item, CLModifiers mods, CLParameters arrParams, Tape tParams, + Matcher dirMatcher, CLFormatter fmt) { + 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("}")) { + /* End the iteration. */ + break; + } + + /* Not a special directive. */ + condBody.append(dirMatcher.group()); + } + } + + String frmt = condBody.toString(); + Object iter = 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", '{'); + } + + if(mods.atMod && mods.colonMod) { + + } else if(mods.atMod) { + + } else if(mods.colonMod) { + if(!(item instanceof Iterable)) { + throw new IllegalFormatConversionException('{', item.getClass()); + } + } else { + if(!(item instanceof Iterable)) { + throw new IllegalFormatConversionException('{', item.getClass()); + } + } + + tParams.right(); + } + +} -- cgit v1.2.3