public List<Symbol> moveNext(SymbolType[] symbolTypes) { ArrayList<Symbol> tokens = new ArrayList<>(); for (SymbolType type: symbolTypes) { Symbol current = moveNext(1); if (!current.isType(type)) return new ArrayList<>(); tokens.add(current); } return tokens; }
public List<Symbol> moveNext(SymbolType[] symbolTypes) { ArrayList<Symbol> tokens = new ArrayList<>(); for (SymbolType type: symbolTypes) { Symbol current = moveNext(1); if (!current.isType(type)) return new ArrayList<>(); tokens.add(current); } return tokens; }
public boolean isMoveNext(SymbolType type) { return moveNext(1).isType(type); } public boolean endsOn(SymbolType type) { return specification.endsOn(type); }
public boolean isMoveNext(SymbolType type) { return moveNext(1).isType(type); } public boolean endsOn(SymbolType type) { return specification.endsOn(type); }
private Symbol makeListBody(Parser parser) { while (!parser.peek(new SymbolType[]{SymbolType.Whitespace}).isEmpty()) { parser.moveNext(1); } return parser.parseTo(SymbolType.Newline, 1); }
private Symbol makeListBody(Parser parser) { while (!parser.peek(new SymbolType[]{SymbolType.Whitespace}).isEmpty()) { parser.moveNext(1); } return parser.parseTo(SymbolType.Newline, 1); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Text}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (option.equals(editableOption)) { current.putProperty(editableOption, ""); parser.moveNext(2); } } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> tokens = parser.moveNext(new SymbolType[] {SymbolType.Whitespace, SymbolType.Text}); if (tokens.isEmpty()) return Symbol.nothing; String anchor = tokens.get(1).getContent(); if (!ScanString.isWord(anchor)) return Symbol.nothing; current.add(tokens.get(1)); return new Maybe<>(current); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Text}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (option.equals(editableOption)) { current.putProperty(editableOption, ""); parser.moveNext(2); } } return new Maybe<>(current); }
@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) { List<Symbol> tokens = parser.moveNext(new SymbolType[] {SymbolType.Whitespace, SymbolType.Text}); if (tokens.isEmpty()) return Symbol.nothing; String anchor = tokens.get(1).getContent(); if (!ScanString.isWord(anchor)) return Symbol.nothing; current.add(tokens.get(1)); return new Maybe<>(current); } }
@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 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); } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol next = parser.moveNext(1); if (next.isType(WikiWord.symbolType)) { return new Maybe<>(current.add(next)); } if (next.isType(Alias.symbolType)) { Maybe<Symbol> alias = next.getType().getWikiRule().parse(next, parser); if (!alias.isNothing()) return new Maybe<>(current.add(alias.getValue())); } return Symbol.nothing; } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Symbol next = parser.moveNext(1); if (next.isType(WikiWord.symbolType)) { return new Maybe<>(current.add(next)); } if (next.isType(Alias.symbolType)) { Maybe<Symbol> alias = next.getType().getWikiRule().parse(next, parser); if (!alias.isNothing()) return new Maybe<>(current.add(alias.getValue())); } return Symbol.nothing; } }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; Maybe<String> name = parser.parseToAsString(SymbolType.Whitespace); if (name.isNothing()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; Symbol next = parser.moveNext(1); Maybe<String> valueString = (next.isType(SymbolType.Text)) ? copyVariableValue(parser, next) : parseVariableValue(parser, next); if (valueString.isNothing()) return Symbol.nothing; String variableValue = valueString.getValue(); parser.getPage().putVariable(variableName, variableValue); return new Maybe<>(current.add(variableName).add(variableValue)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; Maybe<String> name = parser.parseToAsString(SymbolType.Whitespace); if (name.isNothing()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; Symbol next = parser.moveNext(1); Maybe<String> valueString = (next.isType(SymbolType.Text)) ? copyVariableValue(parser, next) : parseVariableValue(parser, next); if (valueString.isNothing()) return Symbol.nothing; String variableValue = valueString.getValue(); parser.getPage().putVariable(variableName, variableValue); return new Maybe<>(current.add(variableName).add(variableValue)); }
private Maybe<Symbol> populateList(Parser parser, Symbol list) { Symbol nextSymbol = list; while (isList(nextSymbol)) { if (indent(nextSymbol) < indent(list)) break; if (nextSymbol != list) parser.moveNext(1); if (indent(nextSymbol) > indent(list)) { Maybe<Symbol> subList = populateList(parser, nextSymbol); if (subList.isNothing()) return Symbol.nothing; list.lastChild().add(subList.getValue()); } else { Symbol body = makeListBody(parser); if (parser.atEnd()) return Symbol.nothing; list.add(body); } nextSymbol = parser.peek(); } return new Maybe<>(list); }