public JinjavaInterpreterResolver(JinjavaInterpreter interpreter) { super(interpreter.getConfig().isReadOnlyResolver() ? DEFAULT_RESOLVER_READ_ONLY : DEFAULT_RESOLVER_READ_WRITE); this.interpreter = interpreter; }
public TreeParser(JinjavaInterpreter interpreter, String input) { this.scanner = Iterators.peekingIterator(new TokenScanner(input, interpreter.getConfig())); this.interpreter = interpreter; }
@Override public Object filter(Object object, JinjavaInterpreter interpreter, String... arg) { if (object instanceof String) { return md5((String) object, interpreter.getConfig().getCharset()); } return object; }
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { int defaultVal = 0; if (args.length > 0) { defaultVal = NumberUtils.toInt(args[0], 0); } if (var == null) { return defaultVal; } if (Number.class.isAssignableFrom(var.getClass())) { return ((Number) var).intValue(); } String input = var.toString().trim(); Locale locale = interpreter.getConfig().getLocale(); NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); ParsePosition pp = new ParsePosition(0); int result; try { result = numberFormat.parse(input, pp).intValue(); } catch (Exception e) { result = defaultVal; } if (pp.getErrorIndex() != -1 || pp.getIndex() != input.length()) { result = defaultVal; } return result; }
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { float defaultVal = 0; if (args.length > 0) { defaultVal = NumberUtils.toFloat(args[0], 0.0f); } if (var == null) { return defaultVal; } if (Float.class.isAssignableFrom(var.getClass())) { return var; } if (Number.class.isAssignableFrom(var.getClass())) { return ((Number) var).floatValue(); } String input = var.toString(); Locale locale = interpreter.getConfig().getLocale(); NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); ParsePosition pp = new ParsePosition(0); float result; try { result = numberFormat.parse(input, pp).floatValue(); } catch (Exception e) { result = defaultVal; } if (pp.getErrorIndex() != -1 || pp.getIndex() != input.length()) { result = defaultVal; } return result; }
private static DateTimeFormatter getFormatter(JinjavaInterpreter interpreter, FormattedDate d) { if (!StringUtils.isBlank(d.getFormat())) { try { return StrftimeFormatter.formatter(d.getFormat(), interpreter.getConfig().getLocale()); } catch (IllegalArgumentException e) { interpreter.addError(new TemplateError(ErrorType.WARNING, ErrorReason.SYNTAX_ERROR, ErrorItem.OTHER, e.getMessage(), null, interpreter.getLineNumber(), -1, null, BasicTemplateErrorCategory.UNKNOWN_DATE, ImmutableMap.of("date", d.getDate().toString(), "exception", e.getMessage(), "lineNumber", String.valueOf(interpreter.getLineNumber())))); } } return DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); }
@Override public OutputNode render(JinjavaInterpreter interpreter) { Object var = interpreter.resolveELExpression(master.getExpr(), getLineNumber()); String result = Objects.toString(var, ""); if (interpreter.getConfig().isNestedInterpretationEnabled()) { if (!StringUtils.equals(result, master.getImage()) && (StringUtils.contains(result, "{{") || StringUtils.contains(result, "{%"))) { try { result = interpreter.renderFlat(result); } catch (Exception e) { Logging.ENGINE_LOG.warn("Error rendering variable node result", e); } } } if (interpreter.getContext().isAutoEscape()) { result = EscapeFilter.escapeHtmlEntities(result); } return new RenderedOutputNode(result); }
@Override public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) { LengthLimitingStringBuilder result = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); for (Node n : tagNode.getChildren()) { result.append(renderNodeRaw(n)); } return result.toString(); }
@Override public Object doEvaluate(Map<String, Object> argMap, Map<String, Object> kwargMap, List<Object> varArgs) { JinjavaInterpreter interpreter = JinjavaInterpreter.getCurrent(); try (InterpreterScopeClosable c = interpreter.enterScope()) { for (Map.Entry<String, Object> scopeEntry : localContextScope.getScope().entrySet()) { if (scopeEntry.getValue() instanceof MacroFunction) { interpreter.getContext().addGlobalMacro((MacroFunction) scopeEntry.getValue()); } else { interpreter.getContext().put(scopeEntry.getKey(), scopeEntry.getValue()); } } // named parameters for (Map.Entry<String, Object> argEntry : argMap.entrySet()) { interpreter.getContext().put(argEntry.getKey(), argEntry.getValue()); } // parameter map interpreter.getContext().put("kwargs", kwargMap); // varargs list interpreter.getContext().put("varargs", varArgs); LengthLimitingStringBuilder result = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); for (Node node : content) { result.append(node.render(interpreter)); } return result.toString(); } }
/** * Resolve a variable from the interpreter context, returning null if not found. This method updates the template error accumulators when a variable is not found. * * @param variable * name of variable in context * @param lineNumber * current line number, for error reporting * @param startPosition * current line position, for error reporting * @return resolved value for variable */ public Object retraceVariable(String variable, int lineNumber, int startPosition) { if (StringUtils.isBlank(variable)) { return ""; } Variable var = new Variable(this, variable); String varName = var.getName(); Object obj = context.get(varName); if (obj != null) { obj = var.resolve(obj); } else if (getConfig().isFailOnUnknownTokens()) { throw new UnknownTokenException(variable, lineNumber, startPosition); } return obj; }
@Override public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) { try (InterpreterScopeClosable c = interpreter.enterScope()) { String boolFlagStr = StringUtils.trim(tagNode.getHelpers()); boolean escapeFlag = BooleanUtils.toBoolean(StringUtils.isNotBlank(boolFlagStr) ? boolFlagStr : "true"); interpreter.getContext().setAutoEscape(escapeFlag); LengthLimitingStringBuilder result = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); for (Node child : tagNode.getChildren()) { result.append(child.render(interpreter)); } return result.toString(); } }
LengthLimitingStringBuilder buff = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); while (loop.hasNext()) { Object val = interpreter.wrap(loop.next());
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { LengthLimitingStringBuilder stringBuilder = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxStringLength()); ErrorReason.OTHER, ErrorItem.FILTER, String.format("Result of %s filter has been truncated to the max String length of %d", getName(), interpreter.getConfig().getMaxStringLength()), null, interpreter.getLineNumber(),
LengthLimitingStringBuilder sb = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize());
@JinjavaDoc(value = "Only usable within blocks, will render the contents of the parent block by calling super.", snippets = { @JinjavaSnippet(desc = "This gives back the results of the parent block", code = "{% block sidebar %}\n" + " <h3>Table Of Contents</h3>\n\n" + " ...\n" + " {{ super() }}\n" + "{% endblock %}") }) public static String renderSuperBlock() { JinjavaInterpreter interpreter = JinjavaInterpreter.getCurrent(); LengthLimitingStringBuilder result = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); List<? extends Node> superBlock = interpreter.getContext().getSuperBlock(); if (superBlock != null) { for (Node n : superBlock) { result.append(n.render(interpreter)); } } return result.toString(); }
@Override public Object filter(Object objectToFilter, JinjavaInterpreter jinjavaInterpreter, String... strings) { String input = Objects.toString(objectToFilter, ""); LengthLimitingStringBuilder builder = new LengthLimitingStringBuilder(jinjavaInterpreter.getConfig().getMaxOutputSize());
private Node text(TextToken textToken) { if (interpreter.getConfig().isLstripBlocks()) { if (scanner.hasNext() && scanner.peek().getType() == TOKEN_TAG) { textToken = new TextToken(StringUtils.stripEnd(textToken.getImage(), "\t "), textToken.getLineNumber(), textToken.getStartPosition()); } } final Node lastSibling = getLastSibling(); // if last sibling was a tag and has rightTrimAfterEnd, strip whitespace if (lastSibling instanceof TagNode && lastSibling.getMaster().isRightTrimAfterEnd()) { textToken.setLeftTrim(true); } // for first TextNode child of TagNode where rightTrim is enabled, mark it for left trim if (parent instanceof TagNode && lastSibling == null && parent.getMaster().isRightTrim()) { textToken.setLeftTrim(true); } TextNode n = new TextNode(textToken); n.setParent(parent); return n; }
if (!macroFunction.isCaller()) { try { if (interpreter.getConfig().isEnableRecursiveMacroCalls()) { macroStack.pushWithoutCycleCheck(getName()); } else {
renderConfig = parentInterpreter.getConfig();