Add clear after markdown render action and SpannableBuilder#clear

This commit is contained in:
Dimitry Ivanov 2018-12-24 15:50:53 +03:00
parent eabe1d9994
commit c58c31d5fd
4 changed files with 24 additions and 3 deletions

View File

@ -63,10 +63,12 @@ class MarkwonImpl extends Markwon {
plugin.afterRender(node, visitor); plugin.afterRender(node, visitor);
} }
// clear render props after rending final Spanned spanned = visitor.builder().spannableStringBuilder();
renderProps.clearAll();
return visitor.builder().spannableStringBuilder(); // clear render props and builder after rending
visitor.clear();
return spanned;
} }
@NonNull @NonNull

View File

@ -88,6 +88,11 @@ public interface MarkwonVisitor extends Visitor {
*/ */
void setSpans(int start, @Nullable Object spans); void setSpans(int start, @Nullable Object spans);
/**
* Clears state of visitor (both {@link RenderProps} and {@link SpannableBuilder} will be cleared
*/
void clear();
/** /**
* Helper method to obtain and apply spans for supplied Node. Internally queries {@link SpanFactory} * Helper method to obtain and apply spans for supplied Node. Internally queries {@link SpanFactory}
* for the node (via {@link MarkwonSpansFactory#require(Node)} thus throwing an exception * for the node (via {@link MarkwonSpansFactory#require(Node)} thus throwing an exception

View File

@ -231,6 +231,12 @@ class MarkwonVisitorImpl implements MarkwonVisitor {
SpannableBuilder.setSpans(builder, spans, start, builder.length()); SpannableBuilder.setSpans(builder, spans, start, builder.length());
} }
@Override
public void clear() {
renderProps.clearAll();
builder.clear();
}
@Override @Override
public <N extends Node> void setSpansForNode(@NonNull N node, int start) { public <N extends Node> void setSpansForNode(@NonNull N node, int start) {
setSpans(start, configuration.spansFactory().require(node).getSpans(configuration, renderProps)); setSpans(start, configuration.spansFactory().require(node).getSpans(configuration, renderProps));

View File

@ -325,6 +325,14 @@ public class SpannableBuilder implements Appendable, CharSequence {
return reversed; return reversed;
} }
/**
* @since 3.0.0
*/
public void clear() {
builder.setLength(0);
spans.clear();
}
private void copySpans(final int index, @Nullable CharSequence cs) { private void copySpans(final int index, @Nullable CharSequence cs) {
// we must identify already reversed Spanned... // we must identify already reversed Spanned...