@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { int size = 0; while (isDigitInput('0', input, offset + size)) size++; return size > 0 ? new Maybe<>(size) : Maybe.noInteger; } });
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return isStartLine(input, symbols, offset) ? new Maybe<>(0) : Maybe.noInteger; } });
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return isStartLine(input, symbols, offset) ? new Maybe<>(0) : Maybe.noInteger; } });
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return isStartLine(input, symbols, offset) || isStartCell(symbols) ? new Maybe<>(0) : Maybe.noInteger; } });
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return isDigitInput('1', input, offset) ? new Maybe<>(1) : Maybe.noInteger; } });
public Matcher startLineOrCell() { matches.add(new ScanMatch() { @Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return isStartLine(input, symbols, offset) || isStartCell(symbols) ? new Maybe<>(0) : Maybe.noInteger; } }); return this; }
public Matcher whitespace() { if (firsts == null) firsts = defaultList; matches.add(new ScanMatch() { @Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { int length = input.whitespaceLength(offset); return length > 0 ? new Maybe<>(length) : Maybe.noInteger; } }); return this; }
public Matcher string(final String delimiter) { if (firsts == null) { firsts = Collections.singletonList(delimiter.charAt(0)); } matches.add(new ScanMatch() { @Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { return input.matches(delimiter, offset) ? new Maybe<>(delimiter.length()) : Maybe.noInteger; } }); return this; }
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { int length = input.whitespaceLength(offset); return length > 0 ? new Maybe<>(length) : Maybe.noInteger; } });
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { int size = 0; while (true) { char candidate = input.charAt(offset + size); if (candidate == 0) return Maybe.noInteger; if (contains(terminators, candidate)) break; size++; } return size > 0 ? new Maybe<>(size + 1) : Maybe.noInteger; }
@Override public Maybe<Integer> match(ScanString input, SymbolStream symbols, int offset) { int size = 0; while (true) { char candidate = input.charAt(offset + size); if (candidate == 0) return Maybe.noInteger; if (contains(terminators, candidate)) break; size++; } return size > 0 ? new Maybe<>(size + 1) : Maybe.noInteger; }
public Maybe<String> evaluate() { parseFormat(); selectLocale(); return !expression.isEmpty() ? evaluateAndFormat() : new Maybe<>(""); }
public Maybe<String> stringFromStart(int start) { int end = getOffset() - getCurrent().getContent().length(); return start <= end ? new Maybe<>(input.rawSubstring(start, end)) : Maybe.noString; }
@Override public Maybe<String> findVariable(String key) { String value; if (key.equals("RUNNING_PAGE_NAME")) value = page.getName(); else if (key.equals("RUNNING_PAGE_PATH")) value = page.getPageCrawler().getFullPath().parentPath().toString(); else return Maybe.noString; return new Maybe<>(value); } }
@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)); }
public Maybe<Integer> makeMatch(ScanString input, SymbolStream symbols) { int totalLength = 0; for (ScanMatch match: matches) { Maybe<Integer> matchLength = match.match(input, symbols, totalLength); if (matchLength.isNothing()) return Maybe.noInteger; totalLength += matchLength.getValue(); } return new Maybe<>(totalLength); }
@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) { if (current.getStartOffset() != 0) return Symbol.nothing; final Symbol frontMatter = parser.parseToWithSymbols(CloseFrontMatter.symbolType, SYMBOL_PROVIDER, 0); if (!parser.getCurrent().isType(CloseFrontMatter.symbolType)) return Symbol.nothing; Maybe<Symbol> yaml = processYaml(current, frontMatter); if (yaml.isNothing()) { return Symbol.nothing; } 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); } }