@Override protected void consume(CharSequence token, MarkdownOutput output) { output.append(token); } }
@Override public void consume(CharSequence token, MarkdownOutput output) { if (!pendingBlockConstruction) { output.append("<blockquote>"); pendingBlockConstruction = true; } output.append(token.subSequence(searchIndexOfFirstCharacter(token), token.length())); output.append("<br/>"); }
@Override public boolean consume(CodeReader code, MarkdownOutput output) { try { if (code.getColumnPosition() == 0 && quotedLineElement.consume(code, output)) { while (endOfLine.consume(code, output) && quotedLineElement.consume(code, output)) { // consume input } output.append("</blockquote>"); return true; } return false; } finally { pendingBlockConstruction = false; } }
private Markdown() { dispatcher = ChannelDispatcher.builder() .addChannel(new HtmlLinkChannel()) .addChannel(new HtmlUrlChannel()) .addChannel(new HtmlEndOfLineChannel()) .addChannel(new HtmlEmphasisChannel()) .addChannel(new HtmlListChannel()) .addChannel(new HtmlBlockquoteChannel()) .addChannel(new HtmlHeadingChannel()) .addChannel(new HtmlCodeChannel()) .addChannel(new HtmlMultilineCodeChannel()) .addChannel(new IdentifierAndNumberChannel()) .addChannel(new BlackholeChannel()) .build(); }
@Test public void shouldDecorateUnorderedList() { assertThat(Markdown.convertToHtml(" * one\r* two\r\n* three\n * \n *five")) .isEqualTo("<ul><li>one</li>\r<li>two</li>\r\n<li>three</li>\n<li> </li>\n</ul> *five"); assertThat(Markdown.convertToHtml(" * one\r* two")).isEqualTo("<ul><li>one</li>\r<li>two</li></ul>"); assertThat(Markdown.convertToHtml("* \r*")).isEqualTo("<ul><li> </li>\r</ul>*"); }
@Override public boolean consume(CodeReader code, MarkdownOutput output) { try { ListElementChannel currentChannel = null; if (code.getColumnPosition() == 0) { if (orderedListElement.consume(code, output)) { currentChannel = orderedListElement; } else if (unorderedListElement.consume(code, output)) { currentChannel = unorderedListElement; } if (currentChannel != null) { while (endOfLine.consume(code, output) && currentChannel.consume(code, output)) { // consume input } output.append("</" + currentChannel.listElement + ">"); return true; } } return false; } finally { pendingListConstruction = false; } }
@Override protected void consume(CharSequence token, MarkdownOutput output) { if (!pendingListConstruction) { output.append("<" + listElement + ">"); pendingListConstruction = true; } output.append("<li>"); output.append(token.subSequence(searchIndexOfFirstCharacter(token), token.length())); output.append("</li>"); }
private String convert(String input) { CodeReader reader = new CodeReader(input); MarkdownOutput output = new MarkdownOutput(); dispatcher.consume(reader, output); return output.toString(); }
@Test public void shouldDecorateCode() { assertThat(Markdown.convertToHtml("This is a ``line of code``")).isEqualTo("This is a <code>line of code</code>"); assertThat(Markdown.convertToHtml("This is not a ``line of code")).isEqualTo("This is not a ``line of code"); }
@Override public void consume(CharSequence token, MarkdownOutput output) { output.append(token); } }
@Test public void shouldDecorateUrl() { assertThat(Markdown.convertToHtml("http://google.com")) .isEqualTo("<a href=\"http://google.com\" target=\"_blank\">http://google.com</a>"); }
@Override protected void consume(CharSequence token, MarkdownOutput output) { output.append(token); } }
@Test public void shouldDecorateMixedOrderedAndUnorderedList() { assertThat(Markdown.convertToHtml(" 1. one\r* two\r\n1. three\n * \n 1.five")) .isEqualTo("<ol><li>one</li>\r</ol><ul><li>two</li>\r\n</ul><ol><li>three</li>\n</ol><ul><li> </li>\n</ul> 1.five"); }
@Override protected void consume(CharSequence token, MarkdownOutput output) { output.append("<br/>"); } }
@Override protected void consume(CharSequence token, MarkdownOutput output) { regexpMatcher.reset(token); regexpMatcher.matches(); output.append("<pre"); String language = regexpMatcher.group(1); if (language != null) { output.append(" lang=\""); output.append(language); output.append("\""); } output.append("><code>"); output.append(regexpMatcher.group(2)); output.append("</code></pre>"); } }
@Override protected void consume(CharSequence token, MarkdownOutput output) { Matcher matcher = LINK_PATTERN.matcher(token); // Initialize match groups matcher.matches(); String content = matcher.group(1); String url = matcher.group(2); output.append("<a href=\""); output.append(url); output.append("\" target=\"_blank\">"); output.append(content); output.append("</a>"); } }
@Override public boolean consume(CodeReader code, MarkdownOutput output) { output.append((char)code.pop()); return true; } }