public Symbol childrenAfter(int after) { Symbol result = new Symbol(SymbolType.SymbolList); for (int i = after + 1; i < children.size(); i++) result.add(children.get(i)); return result; }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol targetList = parser.parseToEnds(-1, SymbolProvider.linkTargetProvider, new SymbolType[] {SymbolType.Newline, SymbolType.Whitespace}); return new Maybe<>(current.add(targetList)); } @Override
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> tokens = parser.moveNext(new SymbolType[] {SymbolType.Text}); if (tokens.isEmpty()) return Symbol.nothing; String anchor = tokens.get(0).getContent(); if (!ScanString.isWord(anchor)) return Symbol.nothing; return new Maybe<>(current.add(tokens.get(0))); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol tag = parser.parseToIgnoreFirst(SymbolType.CloseBracket); if (!parser.isMoveNext(SymbolType.OpenBracket)) return Symbol.nothing; Symbol link = parser.parseToIgnoreFirstWithSymbols(SymbolType.CloseBracket, SymbolProvider.aliasLinkProvider); if (!parser.isMoveNext(SymbolType.CloseBracket)) return Symbol.nothing; return new Maybe<>(current.add(tag).add(link)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol tag = parser.parseToIgnoreFirst(SymbolType.CloseBracket); if (!parser.isMoveNext(SymbolType.OpenBracket)) return Symbol.nothing; Symbol link = parser.parseToIgnoreFirstWithSymbols(SymbolType.CloseBracket, SymbolProvider.aliasLinkProvider); if (!parser.isMoveNext(SymbolType.CloseBracket)) return Symbol.nothing; return new Maybe<>(current.add(tag).add(link)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { String content = current.getContent(); char beginner = content.charAt(content.length() - 1); Symbol body = parser.parseToIgnoreFirst(closeType(beginner)); if (parser.atEnd()) return Symbol.nothing; return new Maybe<>(new Symbol(SymbolType.Style, content.substring(7, content.length() - 1)).add(body)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol body = parser.parseTo(SymbolType.CloseEvaluator); if (parser.atEnd()) return Symbol.nothing; return new Maybe<>(current.add(body)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; return new Maybe<>(current.add(parser.parseToEnds(0, SymbolProvider.pathRuleProvider, new SymbolType[]{SymbolType.Newline}))); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { String literal = parser.parseLiteral(Newline); if (!parser.atEnd()) literal += "\n"; return new Maybe<>(current.add(literal)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { String content = current.getContent(); char beginner = content.charAt(content.length() - 1); Symbol body = parser.parseToIgnoreFirst(closeType(beginner)); if (parser.atEnd()) return Symbol.nothing; return new Maybe<>(new Symbol(SymbolType.Style, content.substring(7, content.length() - 1)).add(body)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol body = parser.parseTo(SymbolType.CloseEvaluator); if (parser.atEnd()) return Symbol.nothing; return new Maybe<>(current.add(body)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol content = parser.parseToWithSymbols(SymbolType.ClosePreformat, SymbolProvider.preformatProvider, 0); if (parser.atEnd()) return Symbol.nothing; return new Maybe<>(current.add(content)); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; return new Maybe<>(current.add(parser.parseToEnds(0, SymbolProvider.pathRuleProvider, new SymbolType[]{SymbolType.Newline}))); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { final Symbol body = parser.parseToEnd(SymbolType.Newline); new OptionParser(current, body).parse(); current.add(body); return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol nesting = parser.parseTo(SymbolType.CloseNesting, ParseSpecification.nestingPriority); if (!parser.getCurrent().isType(SymbolType.CloseNesting)) return Symbol.nothing; current.add(nesting); return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol nesting = parser.parseTo(SymbolType.CloseNesting, ParseSpecification.nestingPriority); if (!parser.getCurrent().isType(SymbolType.CloseNesting)) return Symbol.nothing; current.add(nesting); return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol body = parser.parseToIgnoreFirst(current.getType()); if (body.getChildren().isEmpty()) return Symbol.nothing; if (!parser.getCurrent().isType(current.getType())) return Symbol.nothing; return new Maybe<>(current.add(body)); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol body = parser.parseToIgnoreFirst(current.getType()); if (body.getChildren().isEmpty()) return Symbol.nothing; if (!parser.getCurrent().isType(current.getType())) return Symbol.nothing; return new Maybe<>(current.add(body)); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol next = parser.moveNext(1); if (!next.isType(SymbolType.Whitespace)) return Symbol.nothing; String level = current.getContent().substring(1,2); if (ScanString.isDigits(level)) current.putProperty(Level, level); current.add(parser.parseToEnd(SymbolType.Newline)); if (parser.peek().isType(SymbolType.Newline) && !parser.endsOn(SymbolType.Newline)) parser.moveNext(1); return new Maybe<>(current); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol next = parser.moveNext(1); if (!next.isType(SymbolType.Whitespace)) return Symbol.nothing; String level = current.getContent().substring(1,2); if (ScanString.isDigits(level)) current.putProperty(Level, level); current.add(parser.parseToEnd(SymbolType.Newline)); if (parser.peek().isType(SymbolType.Newline) && !parser.endsOn(SymbolType.Newline)) parser.moveNext(1); return new Maybe<>(current); } }