private void setSpan(int start, @Nullable Object span) { SpannableBuilder.setSpans(builder, span, start, builder.length()); }
@Override public void handle(@NonNull SpannableConfiguration configuration, @NonNull SpannableBuilder builder, @NonNull HtmlTag tag) { final Object spans = getSpans(configuration, tag); if (spans != null) { SpannableBuilder.setSpans(builder, spans, 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().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() ); } }
@Test public void set_spans_array_of_arrays() { // if array of arrays is supplied -> it won't be expanded to single elements builder.append('0'); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); final Object[] spans = { new Object[]{ new Object(), new Object() }, new Object[]{ new Object(), new Object(), new Object() } }; setSpans(builder, spans, 0, 1); final List<SpannableBuilder.Span> actual = builder.getSpans(0, builder.length()); assertEquals(2, actual.size()); for (int i = 0, length = spans.length; i < length; i++) { assertEquals(spans[i], actual.get(i).what); } }
); SpannableBuilder.setSpans(builder, spans, child.start(), child.end());
@Test public void set_spans_position_invalid() { // if supplied position is invalid, no spans should be added builder.append('0'); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); setSpans(builder, new Object(), -1, -1); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); }
@Test public void set_spans_single() { // single span as `spans` argument correctly added builder.append('0'); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); final Object span = new Object(); setSpans(builder, span, 0, 1); final List<SpannableBuilder.Span> spans = builder.getSpans(0, builder.length()); assertEquals(1, spans.size()); assertEquals(span, spans.get(0).what); }
@Test public void set_spans_array_detected() { // if supplied `spans` argument is an array -> it should be expanded builder.append('0'); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); final Object[] spans = { new Object(), new Object(), new Object() }; setSpans(builder, spans, 0, 1); final List<SpannableBuilder.Span> actual = builder.getSpans(0, builder.length()); assertEquals(spans.length, actual.size()); for (int i = 0, length = spans.length; i < length; i++) { assertEquals(spans[i], actual.get(i).what); } }
@Test public void set_spans_null() { // if `spans` argument is null, then nothing will be added builder.append('0'); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); setSpans(builder, null, 0, builder.length()); assertTrue(builder.getSpans(0, builder.length()).isEmpty()); }
@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() ); } };