Implement Appendable and CharSequence in SpannableBuilder

This commit is contained in:
Dimitry Ivanov 2018-08-17 17:10:51 +03:00
parent 1bad514714
commit 359fd8699d

View File

@ -14,11 +14,13 @@ import java.util.Iterator;
* is using an array to store all the information about spans. So, a span that is added first
* will be drawn first, which leads to subtle bugs (spans receive wrong `x` values when
* requested to draw itself)
* <p>
* since 2.0.0 implements Appendable and CharSequence
*
* @since 1.0.1
*/
@SuppressWarnings({"WeakerAccess", "unused"})
public class SpannableBuilder {
public class SpannableBuilder implements Appendable, CharSequence {
// do not implement CharSequence (or any of Spanned interfaces)
@ -51,12 +53,14 @@ public class SpannableBuilder {
}
@NonNull
@Override
public SpannableBuilder append(char c) {
builder.append(c);
return this;
}
@NonNull
@Override
public SpannableBuilder append(@NonNull CharSequence cs) {
copySpans(length(), cs);
@ -66,6 +70,21 @@ public class SpannableBuilder {
return this;
}
/**
* @since 2.0.0 to follow Appendable interface
*/
@NonNull
@Override
public SpannableBuilder append(CharSequence csq, int start, int end) {
final CharSequence cs = csq.subSequence(start, end);
copySpans(length(), cs);
builder.append(cs.toString());
return this;
}
@NonNull
public SpannableBuilder append(@NonNull CharSequence cs, @NonNull Object span) {
final int length = length();
@ -98,14 +117,24 @@ public class SpannableBuilder {
return this;
}
@Override
public int length() {
return builder.length();
}
@Override
public char charAt(int index) {
return builder.charAt(index);
}
/**
* @since 2.0.0 to follow CharSequence interface
*/
@Override
public CharSequence subSequence(int start, int end) {
return builder.subSequence(start, end);
}
public char lastChar() {
return builder.charAt(length() - 1);
}