package jscl.text; import javax.annotation.Nonnull; import javax.annotation.Nullable; import jscl.NumeralBase; import jscl.math.Generic; import jscl.text.msg.Messages; import static jscl.text.ParserUtils.makeParseException; import static jscl.text.ParserUtils.skipWhitespaces; public class Digits implements Parser<String> { @Nonnull private final NumeralBase nb; public Digits(@Nonnull NumeralBase nb) { this.nb = nb; } // returns digit public String parse(@Nonnull Parameters p, @Nullable Generic previousSumElement) throws ParseException { int pos0 = p.position.intValue(); skipWhitespaces(p); final StringBuilder result; if (p.position.intValue() < p.expression.length() && nb.getAcceptableCharacters().contains(p.expression.charAt(p.position.intValue()))) { result = new StringBuilder(2); result.append(p.expression.charAt(p.position.intValue())); p.position.increment(); } else { throw makeParseException(p, pos0, Messages.msg_9); } while (p.position.intValue() < p.expression.length() && nb.getAcceptableCharacters().contains(p.expression.charAt(p.position.intValue()))) { result.append(p.expression.charAt(p.position.intValue())); p.position.increment(); } return result.toString(); } }