diff options
| author | bjculkin <bjculkin@mix.wvu.edu> | 2018-02-10 00:00:07 -0500 |
|---|---|---|
| committer | bjculkin <bjculkin@mix.wvu.edu> | 2018-02-10 00:00:07 -0500 |
| commit | 49cd96c4c5bbb883c0c5c10d7916ad2e93ff2df0 (patch) | |
| tree | 024eeeb80dd000e7b4cf6eaed094fef54ed38388 /base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java | |
| parent | 92ec9adfcb115fe86d5ba27fcc089db027374d6a (diff) | |
Update and refactor CL formatting
Diffstat (limited to 'base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java')
| -rw-r--r-- | base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java | 78 |
1 files changed, 78 insertions, 0 deletions
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<Object> 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(); + } + +} |
