package org.jtwig.parser.parboiled.expression; import org.jtwig.model.expression.TestOperationExpression; import org.jtwig.parser.parboiled.ParserContext; import org.jtwig.parser.parboiled.base.LexicParser; import org.jtwig.parser.parboiled.base.PositionTrackerParser; import org.jtwig.parser.parboiled.base.SpacingParser; import org.jtwig.parser.parboiled.expression.test.AnyTestExpressionParser; import org.jtwig.parser.parboiled.model.Keyword; import org.parboiled.Rule; import org.parboiled.annotations.Label; public class TestOperationExpressionParser extends ExpressionParser<TestOperationExpression> { public TestOperationExpressionParser(ParserContext context) { super(TestOperationExpressionParser.class, context); } @Override @Label("Test Operation") public Rule ExpressionRule() { SpacingParser spacingParser = parserContext().parser(SpacingParser.class); SimpleExpressionParser anyExpressionParser = parserContext().parser(SimpleExpressionParser.class); AnyTestExpressionParser testExpressionParser = parserContext().parser(AnyTestExpressionParser.class); PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class); return Sequence( positionTrackerParser.PushPosition(), anyExpressionParser.ExpressionRule(), spacingParser.Spacing(), parserContext().parser(LexicParser.class).Keyword(Keyword.IS), spacingParser.Spacing(), testExpressionParser.Test(), push(new TestOperationExpression(positionTrackerParser.pop(2), anyExpressionParser.pop(1), testExpressionParser.pop())) ); } }