@NonNull public SpannableBuilder setSpan(@NonNull Object span, int start, int end) { return setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }
@NonNull public SpannableBuilder setSpan(@NonNull Object span, int start) { return setSpan(span, start, length()); }
@NonNull public SpannableBuilder append(@NonNull CharSequence cs, @NonNull Object span) { final int length = length(); append(cs); setSpan(span, length); return this; }
/** * @since 2.0.0 */ public static void setSpans(@NonNull SpannableBuilder builder, @Nullable Object spans, int start, int end) { if (spans != null) { // setting a span for an invalid position can lead to silent fail (no exception, // but execution is stopped) if (!isPositionValid(builder.length(), start, end)) { return; } if (spans.getClass().isArray()) { for (Object o : ((Object[]) spans)) { builder.setSpan(o, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } else { builder.setSpan(spans, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } }
@NonNull public SpannableBuilder append(@NonNull CharSequence cs, @NonNull Object span, int flags) { final int length = length(); append(cs); setSpan(span, length, length(), flags); return this; }
private boolean visitIconNode(@NonNull CustomNode customNode) { if (customNode instanceof IconNode) { final IconNode node = (IconNode) customNode; final String name = node.name(); final String color = node.color(); final String size = node.size(); if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(color) && !TextUtils.isEmpty(size)) { final int length = builder.length(); builder.append(name); builder.setSpan(iconSpanProvider.provide(name, color, size), length); builder.append(' '); return true; } } return false; } }
private static void append(@NonNull SpannableBuilder builder, @NonNull String text, @NonNull Object span) { final int start = builder.length(); builder.append(text); builder.setSpan(span, start, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }
@Test public void get_spans_out_of_range() { // let's test that if span.start >= range.start -> it will be less than range.end // if span.end <= end -> it will be greater than range.start for (int i = 0; i < 10; i++) { builder.append(String.valueOf(i)); builder.setSpan("" + i + "-" + (i + 1), i, i + 1); } assertEquals(10, getSpans(0, 10).size()); // so // 0-1 // 1-2 // 2-3 // etc //noinspection ArraysAsListWithZeroOrOneArgument assertEquals( "0-1", Arrays.asList("0-1"), getSpans(0, 1) ); assertEquals( "1-5", Arrays.asList("1-2", "2-3", "3-4", "4-5"), getSpans(1, 5) ); }
builder.setSpan("" + start + "-" + end, start, end);