@Override int toIndex(int pos) { if (pos >= input.length) return endIndex; return input[pos].index(); }
private static Token pseudoToken(int index, Object value) { return new Token(index, 0, value); } }
@Override public boolean equals(Object obj) { if (obj instanceof Token) { return equalToken((Token) obj); } return false; }
for (Token token : tokens) { if (freshLine) { int indentation = token.index() - lfIndex; if (Objects.equals(token.value(), lf)) { if (Objects.equals(token.value(), lf)) { freshLine = true; lfIndex = token.index() + token.length(); int endIndex = lastToken.index() + lastToken.length(); Token outdentToken = pseudoToken(endIndex, outdent); for (int i = 0; i < indentations.size() - 1; i++) {
/** * A {@link Parser} that succeeds only if the {@link Token} objects in the {@link List} are * adjacent. */ public static Parser<Token> adjacent(Parser<List<Token>> parser, final Parser<?> otherwise) { return parser.next(tokens -> { if (tokens.isEmpty()) return Parsers.always(); int offset = tokens.get(0).index(); for (Token token : tokens) { if (token.index() != offset) { return otherwise; } offset += token.length(); } return Parsers.always(); }).atomic().source().token(); }
@Override public Object map(Token tok) { return tok.value(); } @Override public String toString() {
@Override String getInputName(int pos) { if (pos >= input.length) return EOF; return input[pos].toString(); } }
@Override public Token map(Token token) { return (value == token.value()) ? token : null; } @Override public String toString() {
private void newLine( Token token, Stack<Integer> indentations, int indentation, List<Token> result) { for (;;) { if (indentations.isEmpty()) { indentations.add(indentation); return; } int previousIndentation = indentations.peek(); if (previousIndentation < indentation) { // indent indentations.push(indentation); result.add(pseudoToken(token.index(), indent)); return; } else if (previousIndentation > indentation) { // outdent indentations.pop(); if (indentations.isEmpty()) { return; } result.add(pseudoToken(token.index(), outdent)); continue; } return; } }
@Override boolean apply(ParseContext ctxt) { int begin = ctxt.getIndex(); if (!Parser.this.apply(ctxt)) { return false; } int len = ctxt.getIndex() - begin; Token token = new Token(begin, len, ctxt.result); ctxt.result = token; return true; } @Override public String toString() {
@Override public String map(final Token token) { final Object val = token.value(); if (val instanceof Fragment) { Fragment c = (Fragment) val; if (!Objects.in(c.tag(), tags)) return null; return c.text(); } else return null; } @Override public String toString() {