public Symbol parseToIgnoreFirst(SymbolType type) { return parseToIgnoreFirst(new SymbolType[] {type}); }
@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)); }
public Symbol parseToIgnoreFirst(SymbolType type) { return parseToIgnoreFirst(new SymbolType[] {type}); }
@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) { 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.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) { while (true) { Symbol row = new Symbol(SymbolType.SymbolList); current.add(row); for (int i = 0; i < 2; i++) { Symbol cell = parser.parseToIgnoreFirst(terminators); if (parser.atEnd() || cell.getChildren().isEmpty()) return Symbol.nothing; row.add(cell); } if (parser.getCurrent().isType(SymbolType.CloseBrace)) break; } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { while (true) { Symbol row = new Symbol(SymbolType.SymbolList); current.add(row); for (int i = 0; i < 2; i++) { Symbol cell = parser.parseToIgnoreFirst(terminators); if (parser.atEnd() || cell.getChildren().isEmpty()) return Symbol.nothing; row.add(cell); } if (parser.getCurrent().isType(SymbolType.CloseBrace)) break; } 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)); }
@Override public String toTarget(Translator translator, Symbol symbol) { if (symbol.childAt(0).childAt(0).isType(WikiWord.symbolType)) return translator.translate(symbol.childAt(0)); String linkBody = translator.translate(symbol.childAt(0)); String linkReferenceString = HtmlUtil.unescapeHTML(translator.translate(symbol.childAt(1))); ParsingPage parsingPage = ((HtmlTranslator)translator).getParsingPage(); Symbol linkReference = Parser.make(parsingPage, linkReferenceString).parseToIgnoreFirst(Comment.symbolType); if (linkReference.childAt(0).isType(WikiWord.symbolType) || (linkReference.getChildren().size() == 1 && PathParser.isWikiPath(linkReference.childAt(0).getContent()))) { return new WikiWordBuilder(translator.getPage(), linkReference.childAt(0).getContent(), linkBody) .buildLink(translator.translate(linkReference.childrenAfter(0)), linkBody); } HtmlTag alias = new HtmlTag("a", linkBody); if (linkReference.childAt(0).isType(Link.symbolType)) { alias.addAttribute("href", linkReferenceString.startsWith("http://files/") ? linkReferenceString.substring(7) : linkReferenceString); } else { alias.addAttribute("href", translator.translate(linkReference)); } return alias.htmlInline(); } }
@Override public String toTarget(Translator translator, Symbol symbol) { if (symbol.childAt(0).childAt(0).isType(WikiWord.symbolType)) return translator.translate(symbol.childAt(0)); String linkBody = translator.translate(symbol.childAt(0)); String linkReferenceString = HtmlUtil.unescapeHTML(translator.translate(symbol.childAt(1))); ParsingPage parsingPage = ((HtmlTranslator)translator).getParsingPage(); Symbol linkReference = Parser.make(parsingPage, linkReferenceString).parseToIgnoreFirst(Comment.symbolType); if (linkReference.childAt(0).isType(WikiWord.symbolType) || (linkReference.getChildren().size() == 1 && PathParser.isWikiPath(linkReference.childAt(0).getContent()))) { return new WikiWordBuilder(translator.getPage(), linkReference.childAt(0).getContent(), linkBody) .buildLink(translator.translate(linkReference.childrenAfter(0)), linkBody); } HtmlTag alias = new HtmlTag("a", linkBody); if (linkReference.childAt(0).isType(Link.symbolType)) { alias.addAttribute("href", linkReferenceString.startsWith("http://files/") ? linkReferenceString.substring(7) : linkReferenceString); } else { alias.addAttribute("href", translator.translate(linkReference)); } return alias.htmlInline(); } }