summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/ioutils/format/IterationDirective.java
diff options
context:
space:
mode:
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.java78
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();
+ }
+
+}