![JAR search and dependency download from the Maven repository](/logo.png)
com.mitchellbosecke.pebble.tokenParser.ForTokenParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pebble Show documentation
Show all versions of pebble Show documentation
Templating engine for Java.
/*
* This file is part of Pebble.
*
* Copyright (c) 2014 by Mitchell Bösecke
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
package com.mitchellbosecke.pebble.tokenParser;
import com.mitchellbosecke.pebble.error.ParserException;
import com.mitchellbosecke.pebble.lexer.Token;
import com.mitchellbosecke.pebble.lexer.TokenStream;
import com.mitchellbosecke.pebble.node.BodyNode;
import com.mitchellbosecke.pebble.node.ForNode;
import com.mitchellbosecke.pebble.node.RenderableNode;
import com.mitchellbosecke.pebble.node.expression.Expression;
import com.mitchellbosecke.pebble.parser.Parser;
public class ForTokenParser implements TokenParser {
@Override
public RenderableNode parse(Token token, Parser parser) {
TokenStream stream = parser.getStream();
int lineNumber = token.getLineNumber();
// skip the 'for' token
stream.next();
// get the iteration variable
String iterationVariable = parser.getExpressionParser().parseNewVariableName();
stream.expect(Token.Type.NAME, "in");
// get the iterable variable
Expression> iterable = parser.getExpressionParser().parseExpression();
stream.expect(Token.Type.EXECUTE_END);
BodyNode body = parser.subparse(tkn -> tkn.test(Token.Type.NAME, "else", "endfor"));
BodyNode elseBody = null;
if (stream.current().test(Token.Type.NAME, "else")) {
// skip the 'else' token
stream.next();
stream.expect(Token.Type.EXECUTE_END);
elseBody = parser.subparse(tkn -> tkn.test(Token.Type.NAME, "endfor"));
}
if (stream.current().getValue() == null) {
throw new ParserException(
null,
"Unexpected end of template. Pebble was looking for the \"endfor\" tag",
stream.current().getLineNumber(), stream.getFilename());
}
// skip the 'endfor' token
stream.next();
stream.expect(Token.Type.EXECUTE_END);
return new ForNode(lineNumber, iterationVariable, iterable, body, elseBody);
}
@Override
public String getTag() {
return "for";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy