package org.jtwig.parser.parboiled.expression;
import org.jtwig.model.expression.MapSelectionExpression;
import org.jtwig.parser.parboiled.ParserContext;
import org.jtwig.parser.parboiled.base.PositionTrackerParser;
import org.jtwig.parser.parboiled.base.SpacingParser;
import org.parboiled.Rule;
public class MapSelectionExpressionParser extends ExpressionParser<MapSelectionExpression> {
public MapSelectionExpressionParser(ParserContext context) {
super(MapSelectionExpressionParser.class, context);
}
@Override
public Rule ExpressionRule() {
BinaryOrPrimaryExpressionParser anyExpressionParser = parserContext().parser(BinaryOrPrimaryExpressionParser.class);
PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class);
SpacingParser spacingParser = parserContext().parser(SpacingParser.class);
return Sequence(
positionTrackerParser.PushPosition(),
anyExpressionParser.ExpressionRule(),
spacingParser.Spacing(),
String("["), spacingParser.Spacing(),
anyExpressionParser.ExpressionRule(),
spacingParser.Spacing(),
String("]"),
push(new MapSelectionExpression(positionTrackerParser.pop(2), anyExpressionParser.pop(1), anyExpressionParser.pop()))
);
}
}