private static String expr(Map<String, String> expressions, String expr) { expressions.put(expr, literal(expr)); return TemplateCompiler.retrieverId(expr); }
static String val(String s, boolean escape, Map<String, String> expressions) { String[] parts = s.split("\\|\\|", 2); if (parts.length == 2) { String prop = parts[0]; String orElse = literal(parts[1]); String retrId = expr(expressions, prop); return U.frmt("$1.valOr(%s, %s, %s);\n", retrId, orElse, escape); } else { String retrId = expr(expressions, s); return U.frmt("$1.val(%s, %s);\n", retrId, escape); } }
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(); } }
private static String expr(Map<String, String> expressions, String expr) { expressions.put(expr, literal(expr)); return TemplateCompiler.retrieverId(expr); }
static String val(String s, boolean escape, Map<String, String> expressions) { String[] parts = s.split("\\|\\|", 2); if (parts.length == 2) { String prop = parts[0]; String orElse = literal(parts[1]); String retrId = expr(expressions, prop); return U.frmt("$1.valOr(%s, %s, %s);\n", retrId, orElse, escape); } else { String retrId = expr(expressions, s); return U.frmt("$1.val(%s, %s);\n", retrId, escape); } }
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(); } }