@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; } }
@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(Link link) { final int length = builder.length(); visitChildren(link); final String destination = configuration.urlProcessor().process(link.getDestination()); setSpan(length, factory.link(theme, destination, configuration.linkResolver())); }
@Override public void visit(Image image) { final int length = builder.length(); visitChildren(image); // we must check if anything _was_ added, as we need at least one char to render if (length == builder.length()) { builder.append('\uFFFC'); } final Node parent = image.getParent(); final boolean link = parent != null && parent instanceof Link; final String destination = configuration.urlProcessor().process(image.getDestination()); setSpan( length, factory.image( theme, destination, configuration.asyncDrawableLoader(), configuration.imageSizeResolver(), null, link ) ); // todo, maybe, if image is not inside a link, we should make it clickable, so // user can open it in external viewer? }
assertEquals(configuration.syntaxHighlight(), newConfiguration.syntaxHighlight()); assertEquals(configuration.linkResolver(), newConfiguration.linkResolver()); assertEquals(configuration.urlProcessor(), newConfiguration.urlProcessor()); assertEquals(configuration.imageSizeResolver(), newConfiguration.imageSizeResolver()); assertEquals(configuration.factory(), newConfiguration.factory());