Fixed bug where -last was not correctly handled on lists of a single element,

where said element is both -first and -last.
This commit is contained in:
Michael Bayne
2011-08-29 13:51:11 -07:00
parent 28978548c5
commit a3eb9e22e1
3 changed files with 22 additions and 18 deletions
@@ -571,13 +571,11 @@ public class Mustache
value = ((Iterable<?>)value).iterator();
}
if (value instanceof Iterator<?>) {
Template.Mode mode = null;
int index = 0;
for (Iterator<?> iter = (Iterator<?>)value; iter.hasNext(); ) {
Object elem = iter.next();
mode = (mode == null) ? Template.Mode.FIRST :
(iter.hasNext() ? Template.Mode.OTHER : Template.Mode.LAST);
executeSegs(tmpl, ctx.nest(elem, ++index, mode), out);
boolean onFirst = (index == 0), onLast = !iter.hasNext();
executeSegs(tmpl, ctx.nest(elem, ++index, onFirst, onLast), out);
}
} else if (value instanceof Boolean) {
if ((Boolean)value) {
@@ -585,12 +583,11 @@ public class Mustache
}
} else if (value.getClass().isArray()) {
for (int ii = 0, ll = Array.getLength(value); ii < ll; ii++) {
Template.Mode mode = (ii == 0) ? Template.Mode.FIRST :
((ii == ll-1) ? Template.Mode.LAST : Template.Mode.OTHER);
executeSegs(tmpl, ctx.nest(Array.get(value, ii), ii+1, mode), out);
boolean onFirst = (ii == 0), onLast = (ii == ll-1);
executeSegs(tmpl, ctx.nest(Array.get(value, ii), ii+1, onFirst, onLast), out);
}
} else {
executeSegs(tmpl, ctx.nest(value, 0, Template.Mode.OTHER), out);
executeSegs(tmpl, ctx.nest(value, 0, false, false), out);
}
}
}