public static String generate(XNode x, Map<String, String> expressions, Map<String, String> constants, Class<?> modelType) { String body; switch (x.op) { case OP_ROOT: return "{" + join("", x.children, expressions, constants, modelType) + "}"; case OP_TEXT: return U.notEmpty(x.text) ? print(literal(x.text), constants) : ""; case OP_PRINT: return val(x.text, true, expressions); case OP_PRINT_RAW: return val(x.text, false, expressions); case OP_IF_NOT: body = join("", x.children, expressions, constants, modelType); return U.frmt("if (!$1.cond(%s)) { %s }", literal(x.text), body); case OP_IF: body = join("", x.children, expressions, constants, modelType); return U.frmt("if ($1.cond(%s)) { %s }", literal(x.text), body); case OP_INCLUDE: return U.frmt("$1.call(%s);", literal(x.text)); case OP_FOREACH: body = join("", x.children, expressions, constants, modelType); String retrId = expr(expressions, x.text); return iterList(body, retrId); default: throw Err.notExpected(); } }
public static String generate(XNode x, Map<String, String> expressions, Map<String, String> constants, Class<?> modelType) { String body; switch (x.op) { case OP_ROOT: return "{" + join("", x.children, expressions, constants, modelType) + "}"; case OP_TEXT: return U.notEmpty(x.text) ? print(literal(x.text), constants) : ""; case OP_PRINT: return val(x.text, true, expressions); case OP_PRINT_RAW: return val(x.text, false, expressions); case OP_IF_NOT: body = join("", x.children, expressions, constants, modelType); return U.frmt("if (!$1.cond(%s)) { %s }", literal(x.text), body); case OP_IF: body = join("", x.children, expressions, constants, modelType); return U.frmt("if ($1.cond(%s)) { %s }", literal(x.text), body); case OP_INCLUDE: return U.frmt("$1.call(%s);", literal(x.text)); case OP_FOREACH: body = join("", x.children, expressions, constants, modelType); String retrId = expr(expressions, x.text); return iterList(body, retrId); default: throw Err.notExpected(); } }