package org.jtwig.parser.parboiled.base;
import org.jtwig.parser.ParseException;
import org.jtwig.parser.parboiled.ParserContext;
import org.jtwig.util.ErrorMessageFormatter;
import org.parboiled.BaseParser;
import org.parboiled.MatcherContext;
import org.parboiled.Rule;
import org.parboiled.errors.BasicParseError;
import java.util.List;
public class BasicParser<T> extends BaseParser<T> {
final ParserContext parserContext;
public BasicParser (Class<? extends BasicParser> type, ParserContext context) {
this.parserContext = context;
this.parserContext.register(type, this);
}
public ParserContext parserContext() {
return parserContext;
}
public void addError(String message) {
MatcherContext matcherContext = (MatcherContext) getContext();
matcherContext.markError();
List parseErrors = matcherContext.getParseErrors();
parseErrors.add(new BasicParseError(matcherContext.getInputBuffer(), parseErrors.size(), message));
}
public Rule Mandatory (Rule rule, String message) {
return FirstOf(
rule,
throwException(message)
);
}
public boolean throwException(String message) {
throw new ParseException(ErrorMessageFormatter.errorMessage(parserContext.parser(PositionTrackerParser.class).currentPosition(), message));
}
}