public Symbol peek() { return peek(1).get(0); }
public Symbol peek() { return peek(1).get(0); }
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> 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> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.DateFormatOption}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (isDateFormatOption(option)) { current.putProperty(Today.Format, option); parser.moveNext(2); } } else { lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.OpenParenthesis}); if (!lookAhead.isEmpty()) { parser.moveNext(2); Maybe<String> format = parser.parseToAsString(SymbolType.CloseParenthesis); if (format.isNothing()) return Symbol.nothing; current.putProperty(Format, format.getValue()); } } lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Delta}); if (!lookAhead.isEmpty()) { String increment = lookAhead.get(1).getContent(); current.putProperty(Increment, increment); parser.moveNext(2); } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.DateFormatOption}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (isDateFormatOption(option)) { current.putProperty(Today.Format, option); parser.moveNext(2); } } else { lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.OpenParenthesis}); if (!lookAhead.isEmpty()) { parser.moveNext(2); Maybe<String> format = parser.parseToAsString(SymbolType.CloseParenthesis); if (format.isNothing()) return Symbol.nothing; current.putProperty(Format, format.getValue()); } } lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Delta}); if (!lookAhead.isEmpty()) { String increment = lookAhead.get(1).getContent(); current.putProperty(Increment, increment); parser.moveNext(2); } 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(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) { String state = ""; Symbol next = parser.moveNext(1); if (next.getContent().equals(">")) { state = CLOSED; next = parser.moveNext(1); } else if (next.getContent().equals("<")) { state = INVISIBLE; next = parser.moveNext(1); } if (!next.isType(SymbolType.Whitespace)) return Symbol.nothing; Symbol titleText = parser.parseToIgnoreFirst(SymbolType.Newline); if (parser.atEnd()) return Symbol.nothing; Symbol bodyText = parser.parseTo(SymbolType.CloseCollapsible); if (parser.atEnd()) return Symbol.nothing; // Remove trailing newline so we do not introduce excessive whitespace in the page. if (parser.peek().isType(SymbolType.Newline)) { parser.moveNext(1); } return new Maybe<>(current .putProperty(STATE, state) .add(titleText) .add(bodyText)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { String state = ""; Symbol next = parser.moveNext(1); if (next.getContent().equals(">")) { state = CLOSED; next = parser.moveNext(1); } else if (next.getContent().equals("<")) { state = INVISIBLE; next = parser.moveNext(1); } if (!next.isType(SymbolType.Whitespace)) return Symbol.nothing; Symbol titleText = parser.parseToIgnoreFirst(SymbolType.Newline); if (parser.atEnd()) return Symbol.nothing; Symbol bodyText = parser.parseTo(SymbolType.CloseCollapsible); if (parser.atEnd()) return Symbol.nothing; // Remove trailing newline so we do not introduce excessive whitespace in the page. if (parser.peek().isType(SymbolType.Newline)) { parser.moveNext(1); } return new Maybe<>(current .putProperty(STATE, state) .add(titleText) .add(bodyText)); }
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); }
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); }