@NonNull public static HtmlEmptyTagReplacement create() { return new HtmlEmptyTagReplacement(); }
@NonNull public static MarkwonHtmlParserImpl create() { return create(HtmlEmptyTagReplacement.create()); }
protected <T extends Appendable & CharSequence> void appendEmptyTagReplacement( @NonNull T output, @NonNull HtmlTagImpl tag) { final String replacement = emptyTagReplacement.replace(tag); if (replacement != null) { appendQuietly(output, replacement); } } }
); final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement() { @Nullable @Override
protected <T extends Appendable & CharSequence> void processInlineTagStart( @NonNull T output, @NonNull Token.StartTag startTag) { final String name = startTag.normalName; final HtmlTagImpl.InlineImpl inline = new HtmlTagImpl.InlineImpl(name, output.length(), extractAttributes(startTag)); ensureNewLineIfPreviousWasBlock(output); if (isVoidTag(name) || startTag.selfClosing) { final String replacement = emptyTagReplacement.replace(inline); if (replacement != null && replacement.length() > 0) { appendQuietly(output, replacement); } // the thing is: we will keep this inline tag in the list, // but in case of void-tag that has no replacement, there will be no // possibility to set a span (requires at least one char) inline.closeAt(output.length()); } inlineTags.add(inline); }
@Before public void before() { replacement = HtmlEmptyTagReplacement.create(); }
final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement() { @Nullable @Override
final String replacement = emptyTagReplacement.replace(block); if (replacement != null && replacement.length() > 0) {
); final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement() { @Override public String replace(@NonNull HtmlTag tag) {
@Test public void imageReplacementAlt() { final HtmlTag.Inline img = new InlineImpl( "img", -1, Collections.singletonMap("alt", "alternative27") ); assertEquals("alternative27", replacement.replace(img)); }
@Test public void multipleFragmentsContinuation() { final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement()); final StringBuilder output = new StringBuilder(); impl.processFragment(output, "<i>"); output.append("italic "); impl.processFragment(output, "</i>"); final CaptureInlineTagsAction action = new CaptureInlineTagsAction(); impl.flushInlineTags(output.length(), action); assertTrue(action.called); final List<HtmlTag.Inline> inlines = action.tags; assertEquals(inlines.toString(), 1, inlines.size()); final HtmlTag.Inline inline = inlines.get(0); assertEquals("i", inline.name()); assertEquals(0, inline.start()); assertEquals(output.length(), inline.end()); assertEquals("italic ", output.toString()); }
@Test public void imageReplacementNoAlt() { final HtmlTag.Inline img = new InlineImpl("img", -1, Collections.<String, String>emptyMap()); assertEquals("\uFFFC", replacement.replace(img)); }
); final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement() { @Nullable @Override
@Test public void brAddsNewLine() { final HtmlTag.Inline br = new InlineImpl( "br", -1, Collections.<String, String>emptyMap() ); assertEquals("\n", replacement.replace(br)); } }
@Test public void blockVoidTags() { final MarkwonHtmlParserImpl impl = MarkwonHtmlParserImpl.create(new HtmlEmptyTagReplacement() { @Nullable @Override