red

1

true

false

odd

true

2

,


green

2

false

true

even

false

2

;

Template Source
@extends(main)
@args List<String> list

@for(String s: list) {
<hr/>
<div class="info span11">
<p>
    <label>item</label>
    <span>@s</span>
</p>
<p>
    <label>index</label>
    <span>@s_index</span>
</p>
<p>
    <label>isFirst</label>
    <span>@s_isFirst</span>
</p>
<p>
    <label>isLast</label>
    <span>@s_isLast</span>
</p>
<p>
    <label>parity</label>
    <span>@s_parity</span>
</p>
<p>
    <label>isOdd</label>
    <span>@s_isOdd</span>
</p>
<p>
    <label>size</label>
    <span>@s_size</span>
</p>
<p>
    <label>separator</label>
    <span>@s_sep</span>
</p>
<p>
    <label>customized separator</label>
    <span>@s_utils.preSep(";")</span>
</p>
</div>
}

@include(tmpl_src)

    <style type="text/css">
        .info {
            padding: 10px 50px;
            position: relative;
        }
        .info p {
            display: block;
            position: relative;
            float: left;
            width: 200px;
            margin-left: 20px;
            border: 1px solid #666;
            padding: 2px;
        }
        .info p label, .info p span{
            display: block;
            position: relative;
            float: left;
            width: 80px;
        }
        .info p label {
            background: #666;
            color: white;
            margin: 0;
            margin-right: 10px;
            text-align: right;
            padding-right: 5px;
        }
    </style>

Java Source (Rythm Generated)
import play.templates.JavaExtensions;
import controllers.*;
import models.*;
import java.util.*;
import java.io.*;

public class app_rythm_Demo_loopUtils_html__R_T_C__ extends app_rythm_main_html__R_T_C__ {//<extended_resource_key>/app/rythm/main.html</extended_resource_key>

	@Override public java.lang.String getName() {
		return "Demo.loopUtils";
	}

	@Override protected void setup() {
		if (list == null) {list=(List<String>)_get("list");}
		if (flash == null) {flash=(play.mvc.Scope.Flash)_get("flash");}
		if (error_index == null) {error_index=(Integer)_get("error_index");}
		if (error == null) {error=(play.data.validation.Error)_get("error");}
		if (params == null) {params=(play.mvc.Scope.Params)_get("params");}
		if (lang == null) {lang=(java.lang.String)_get("lang");}
		if (messages == null) {messages=(play.i18n.Messages)_get("messages");}
		if (error_isFirst == null) {error_isFirst=(Boolean)_get("error_isFirst");}
		if (errors == null) {errors=(java.util.List<play.data.validation.Error>)_get("errors");}
		if (error_isLast == null) {error_isLast=(Boolean)_get("error_isLast");}
		if (session == null) {session=(play.mvc.Scope.Session)_get("session");}
		if (request == null) {request=(play.mvc.Http.Request)_get("request");}
		if (_rythmPlugin == null) {_rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)_get("_rythmPlugin");}
		if (_response_encoding == null) {_response_encoding=(java.lang.String)_get("_response_encoding");}
		if (_renderArgs == null) {_renderArgs=(play.mvc.Scope.RenderArgs)_get("_renderArgs");}
		if (_rythm == null) {_rythm=(com.greenlaw110.rythm.RythmEngine)_get("_rythm");}
		if (error_parity == null) {error_parity=(java.lang.String)_get("error_parity");}
		if (_play == null) {_play=(play.Play)_get("_play");}
	}

	protected List<String> list=null;
	protected play.mvc.Scope.Flash flash=null;
	protected Integer error_index=0;
	protected play.data.validation.Error error=null;
	protected play.mvc.Scope.Params params=null;
	protected java.lang.String lang=null;
	protected play.i18n.Messages messages=null;
	protected Boolean error_isFirst=false;
	protected java.util.List<play.data.validation.Error> errors=null;
	protected Boolean error_isLast=false;
	protected play.mvc.Scope.Session session=null;
	protected play.mvc.Http.Request request=null;
	protected com.greenlaw110.rythm.play.RythmPlugin _rythmPlugin=null;
	protected java.lang.String _response_encoding=null;
	protected play.mvc.Scope.RenderArgs _renderArgs=null;
	protected com.greenlaw110.rythm.RythmEngine _rythm=null;
	protected java.lang.String error_parity=null;
	protected play.Play _play=null;

	@SuppressWarnings("unchecked") public void setRenderArgs(java.util.Map<String, Object> args) {
		if (null != args && args.containsKey("list")) this.list=(List<String>)args.get("list");
		if (null != args && args.containsKey("flash")) this.flash=(play.mvc.Scope.Flash)args.get("flash");
		if (null != args && args.containsKey("error_index")) this.error_index=(Integer)args.get("error_index");
		if (null != args && args.containsKey("error")) this.error=(play.data.validation.Error)args.get("error");
		if (null != args && args.containsKey("params")) this.params=(play.mvc.Scope.Params)args.get("params");
		if (null != args && args.containsKey("lang")) this.lang=(java.lang.String)args.get("lang");
		if (null != args && args.containsKey("messages")) this.messages=(play.i18n.Messages)args.get("messages");
		if (null != args && args.containsKey("error_isFirst")) this.error_isFirst=(Boolean)args.get("error_isFirst");
		if (null != args && args.containsKey("errors")) this.errors=(java.util.List<play.data.validation.Error>)args.get("errors");
		if (null != args && args.containsKey("error_isLast")) this.error_isLast=(Boolean)args.get("error_isLast");
		if (null != args && args.containsKey("session")) this.session=(play.mvc.Scope.Session)args.get("session");
		if (null != args && args.containsKey("request")) this.request=(play.mvc.Http.Request)args.get("request");
		if (null != args && args.containsKey("_rythmPlugin")) this._rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)args.get("_rythmPlugin");
		if (null != args && args.containsKey("_response_encoding")) this._response_encoding=(java.lang.String)args.get("_response_encoding");
		if (null != args && args.containsKey("_renderArgs")) this._renderArgs=(play.mvc.Scope.RenderArgs)args.get("_renderArgs");
		if (null != args && args.containsKey("_rythm")) this._rythm=(com.greenlaw110.rythm.RythmEngine)args.get("_rythm");
		if (null != args && args.containsKey("error_parity")) this.error_parity=(java.lang.String)args.get("error_parity");
		if (null != args && args.containsKey("_play")) this._play=(play.Play)args.get("_play");
		super.setRenderArgs(args);
	}

	@SuppressWarnings("unchecked") public void setRenderArgs(Object... args) {
		int _p = 0, l = args.length;
		if (_p < l) { Object v = args[_p++]; boolean isString = ("java.lang.String".equals("List<String>") || "String".equals("List<String>")); list = (List<String>)(isString ? (null == v ? "" : v.toString()) : v); }
	}

	@SuppressWarnings("unchecked") @Override public void setRenderArg(String name, Object arg) {
		if ("list".equals(name)) this.list=(List<String>)arg;
		if ("flash".equals(name)) this.flash=(play.mvc.Scope.Flash)arg;
		if ("error_index".equals(name)) this.error_index=(Integer)arg;
		if ("error".equals(name)) this.error=(play.data.validation.Error)arg;
		if ("params".equals(name)) this.params=(play.mvc.Scope.Params)arg;
		if ("lang".equals(name)) this.lang=(java.lang.String)arg;
		if ("messages".equals(name)) this.messages=(play.i18n.Messages)arg;
		if ("error_isFirst".equals(name)) this.error_isFirst=(Boolean)arg;
		if ("errors".equals(name)) this.errors=(java.util.List<play.data.validation.Error>)arg;
		if ("error_isLast".equals(name)) this.error_isLast=(Boolean)arg;
		if ("session".equals(name)) this.session=(play.mvc.Scope.Session)arg;
		if ("request".equals(name)) this.request=(play.mvc.Http.Request)arg;
		if ("_rythmPlugin".equals(name)) this._rythmPlugin=(com.greenlaw110.rythm.play.RythmPlugin)arg;
		if ("_response_encoding".equals(name)) this._response_encoding=(java.lang.String)arg;
		if ("_renderArgs".equals(name)) this._renderArgs=(play.mvc.Scope.RenderArgs)arg;
		if ("_rythm".equals(name)) this._rythm=(com.greenlaw110.rythm.RythmEngine)arg;
		if ("error_parity".equals(name)) this.error_parity=(java.lang.String)arg;
		if ("_play".equals(name)) this._play=(play.Play)arg;
		super.setRenderArg(name, arg);
	}

	@SuppressWarnings("unchecked") public void setRenderArg(int pos, Object arg) {
		int _p = 0;
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("List<String>") || "String".equals("List<String>")); list = (List<String>)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Flash") || "String".equals("play.mvc.Scope.Flash")); flash = (play.mvc.Scope.Flash)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Integer") || "String".equals("Integer")); error_index = (Integer)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.data.validation.Error") || "String".equals("play.data.validation.Error")); error = (play.data.validation.Error)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Params") || "String".equals("play.mvc.Scope.Params")); params = (play.mvc.Scope.Params)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); lang = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.i18n.Messages") || "String".equals("play.i18n.Messages")); messages = (play.i18n.Messages)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Boolean") || "String".equals("Boolean")); error_isFirst = (Boolean)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.util.List<play.data.validation.Error>") || "String".equals("java.util.List<play.data.validation.Error>")); errors = (java.util.List<play.data.validation.Error>)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("Boolean") || "String".equals("Boolean")); error_isLast = (Boolean)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.Session") || "String".equals("play.mvc.Scope.Session")); session = (play.mvc.Scope.Session)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Http.Request") || "String".equals("play.mvc.Http.Request")); request = (play.mvc.Http.Request)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("com.greenlaw110.rythm.play.RythmPlugin") || "String".equals("com.greenlaw110.rythm.play.RythmPlugin")); _rythmPlugin = (com.greenlaw110.rythm.play.RythmPlugin)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); _response_encoding = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.mvc.Scope.RenderArgs") || "String".equals("play.mvc.Scope.RenderArgs")); _renderArgs = (play.mvc.Scope.RenderArgs)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("com.greenlaw110.rythm.RythmEngine") || "String".equals("com.greenlaw110.rythm.RythmEngine")); _rythm = (com.greenlaw110.rythm.RythmEngine)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("java.lang.String") || "String".equals("java.lang.String")); error_parity = (java.lang.String)(isString ? (null == v ? "" : v.toString()) : v); }
		if (_p++ == pos) { Object v = arg; boolean isString = ("java.lang.String".equals("play.Play") || "String".equals("play.Play")); _play = (play.Play)(isString ? (null == v ? "" : v.toString()) : v); }
		if(0 == pos) setRenderArg("arg", arg);
	}



    protected String _msg(String key, Object ... params) {return play.i18n.Messages.get(key, params);}
    protected String _url(String action, Object... params) {return _url(false, action, params);}
   protected String _url(boolean isAbsolute, String action, Object... params) {
       com.greenlaw110.rythm.internal.compiler.TemplateClass tc = getTemplateClass(true);
       boolean escapeXML = (!tc.isStringTemplate() && tc.templateResource.getKey().toString().endsWith(".xml"));
       return new com.greenlaw110.rythm.play.utils.ActionBridge(isAbsolute, escapeXML).invokeMethod(action, params).toString();
   }


	@Override public com.greenlaw110.rythm.utils.TextBuilder build(){
		out().ensureCapacity(1497);
com.greenlaw110.rythm.runtime.Each.INSTANCE.render(list, new com.greenlaw110.rythm.runtime.Each.Looper<String>(app_rythm_Demo_loopUtils_html__R_T_C__.this,647){ //line: 4
	public boolean render(final String  s, final int  s_size, final int  s_index, final boolean  s_isOdd, final String  s_parity, final boolean  s_isFirst, final boolean  s_isLast, final String  s_sep, final com.greenlaw110.rythm.runtime.Each.IBody.LoopUtils  s_utils) {  //line: 4
p("<hr/>\n<div class=\"info span11\">\n<p>\n    <label>item</label>\n    <span>"); //line: 9

try{pe(s);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 9
p("</span>\n</p>\n<p>\n    <label>index</label>\n    <span>"); //line: 13

try{pe(s_index);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 13
p("</span>\n</p>\n<p>\n    <label>isFirst</label>\n    <span>"); //line: 17

try{pe(s_isFirst);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 17
p("</span>\n</p>\n<p>\n    <label>isLast</label>\n    <span>"); //line: 21

try{pe(s_isLast);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 21
p("</span>\n</p>\n<p>\n    <label>parity</label>\n    <span>"); //line: 25

try{pe(s_parity);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 25
p("</span>\n</p>\n<p>\n    <label>isOdd</label>\n    <span>"); //line: 29

try{pe(s_isOdd);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 29
p("</span>\n</p>\n<p>\n    <label>size</label>\n    <span>"); //line: 33

try{pe(s_size);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 33
p("</span>\n</p>\n<p>\n    <label>separator</label>\n    <span>"); //line: 37

try{pe(s_sep);} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 37
p("</span>\n</p>\n<p>\n    <label>customized separator</label>\n    <span>"); //line: 41

try{pe(s_utils.preSep(";"));} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 41
p("</span>\n</p>\n</div>\n"); //line: 44

	 return true;
	}}); //line: 44
p("\n\n"); //line: 46
 //line: 3

_startSection("tmpl_src");

try{pe((getTemplateClass(false).getTemplateSource()));} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 4
p("\n"); //line: 5

_endSection(); //line: 5
p("\n\n"); //line: 7

_startSection("java_src");

try{pe((getTemplateClass(false).javaSource));} catch (RuntimeException e) {handleTemplateExecutionException(e);}  //line: 8
p("\n"); //line: 9

_endSection(); //line: 9
 //line: 48
p("<style type=\"text/css\">\n        .info "); //line: 49
p("{"); //line: 49
p("\n            padding: 10px 50px;\n            position: relative;\n        "); //line: 52

p('}');
 //line: 52
p("\n        .info p "); //line: 53
p("{"); //line: 53
p("\n            display: block;\n            position: relative;\n            float: left;\n            width: 200px;\n            margin-left: 20px;\n            border: 1px solid "); //line: 59
p("#"); //line: 59
p("666;\n            padding: 2px;\n        "); //line: 61

p('}');
 //line: 61
p("\n        .info p label, .info p span"); //line: 62
p("{"); //line: 62
p("\n            display: block;\n            position: relative;\n            float: left;\n            width: 80px;\n        "); //line: 67

p('}');
 //line: 67
p("\n        .info p label "); //line: 68
p("{"); //line: 68
p("\n            background: "); //line: 69
p("#"); //line: 69
p("666;\n            color: white;\n            margin: 0;\n            margin-right: 10px;\n            text-align: right;\n            padding-right: 5px;\n        "); //line: 75

p('}');
 //line: 75
p("\n    </style>\n"); //line: 77

		return this;
	}

}