@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { return configuration.factory().strongEmphasis(); } }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { return configuration.factory().emphasis(); } }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { return configuration.factory().superScript(configuration.theme()); } }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { return configuration.factory().heading(configuration.theme(), level); } }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { return configuration.factory().subScript(configuration.theme()); } }
public SpannableMarkdownVisitor( @NonNull SpannableConfiguration configuration, @NonNull SpannableBuilder builder ) { this.configuration = configuration; this.builder = builder; this.htmlParser = configuration.htmlParser(); this.theme = configuration.theme(); this.factory = configuration.factory(); }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { final String destination = tag.attributes().get("href"); if (!TextUtils.isEmpty(destination)) { return configuration.factory().link( configuration.theme(), configuration.urlProcessor().process(destination), configuration.linkResolver() ); } return null; } }
@Override public void handle( @NonNull SpannableConfiguration configuration, @NonNull SpannableBuilder builder, @NonNull HtmlTag tag) { if (tag.isBlock()) { visitChildren(configuration, builder, tag.getAsBlock()); } SpannableBuilder.setSpans( builder, configuration.factory().strikethrough(), tag.start(), tag.end() ); } }
@Override public void handle( @NonNull SpannableConfiguration configuration, @NonNull SpannableBuilder builder, @NonNull HtmlTag tag) { // as parser doesn't treat U tag as an inline one, // thus doesn't allow children, we must visit them first if (tag.isBlock()) { visitChildren(configuration, builder, tag.getAsBlock()); } SpannableBuilder.setSpans( builder, configuration.factory().underline(), tag.start(), tag.end() ); } }
@Override public void handle( @NonNull SpannableConfiguration configuration, @NonNull SpannableBuilder builder, @NonNull HtmlTag tag) { if (tag.isBlock()) { visitChildren(configuration, builder, tag.getAsBlock()); } SpannableBuilder.setSpans( builder, configuration.factory().blockQuote(configuration.theme()), tag.start(), tag.end() ); } }
@Nullable @Override public Object getSpans(@NonNull SpannableConfiguration configuration, @NonNull HtmlTag tag) { final Map<String, String> attributes = tag.attributes(); final String src = attributes.get("src"); if (TextUtils.isEmpty(src)) { return null; } final String destination = configuration.urlProcessor().process(src); // todo: replacement text is link... as we are not at block level // and cannot inspect the parent of this node... (img and a are both inlines) // // but we can look and see if we are inside a LinkSpan (will have to extend TagHandler // to obtain an instance SpannableBuilder for inspection) return configuration.factory().image( configuration.theme(), destination, configuration.asyncDrawableLoader(), configuration.imageSizeResolver(), imageSizeParser.parse(tag.attributes()), false ); } }
@Override public void visit(CustomBlock customBlock) { if (!(customBlock instanceof JLatexMathBlock)) { super.visit(customBlock); return; } final String latex = ((JLatexMathBlock) customBlock).latex(); final int length = builder.length(); builder.append(latex); SpannableBuilder.setSpans( builder, configuration.factory().image( configuration.theme(), JLatexMathMedia.makeDestination(latex), configuration.asyncDrawableLoader(), configuration.imageSizeResolver(), new ImageSize(new ImageSize.Dimension(100, "%"), null), false ), length, builder.length() ); } };
assertEquals(configuration.urlProcessor(), newConfiguration.urlProcessor()); assertEquals(configuration.imageSizeResolver(), newConfiguration.imageSizeResolver()); assertEquals(configuration.factory(), newConfiguration.factory()); assertEquals(configuration.softBreakAddsNewLine(), newConfiguration.softBreakAddsNewLine()); assertEquals(configuration.htmlParser(), newConfiguration.htmlParser());