package org.jtwig.parser.parboiled.expression; import org.jtwig.model.expression.ComprehensionListExpression; import org.jtwig.parser.parboiled.ParserContext; import org.jtwig.parser.parboiled.base.PositionTrackerParser; import org.jtwig.parser.parboiled.base.SpacingParser; import org.parboiled.Rule; import org.parboiled.annotations.Label; public class ComprehensionListExpressionParser extends ExpressionParser<ComprehensionListExpression> { public ComprehensionListExpressionParser(ParserContext context) { super(ComprehensionListExpressionParser.class, context); } @Override @Label("Comprehension List") public Rule ExpressionRule() { PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class); SpacingParser spacingParser = parserContext().parser(SpacingParser.class); AnyExpressionParser parser = parserContext().parser(AnyExpressionParser.class); return Sequence( positionTrackerParser.PushPosition(), String("["), spacingParser.Spacing(), parser.ExpressionRule(), spacingParser.Spacing(), String(".."), spacingParser.Spacing(), parser.ExpressionRule(), spacingParser.Spacing(), Mandatory(String("]"), "Expecting end bracket"), push(new ComprehensionListExpression(positionTrackerParser.pop(2), parser.pop(1), parser.pop())) ); } }