diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java index 8e2d8791..d9b74a25 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java @@ -63,10 +63,12 @@ class MarkwonImpl extends Markwon { plugin.afterRender(node, visitor); } - // clear render props after rending - renderProps.clearAll(); + final Spanned spanned = visitor.builder().spannableStringBuilder(); - return visitor.builder().spannableStringBuilder(); + // clear render props and builder after rending + visitor.clear(); + + return spanned; } @NonNull diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java index aec63444..01f9b819 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java @@ -88,6 +88,11 @@ public interface MarkwonVisitor extends Visitor { */ 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} * for the node (via {@link MarkwonSpansFactory#require(Node)} thus throwing an exception diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java index 2616d843..4c4caff8 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java @@ -231,6 +231,12 @@ class MarkwonVisitorImpl implements MarkwonVisitor { SpannableBuilder.setSpans(builder, spans, start, builder.length()); } + @Override + public void clear() { + renderProps.clearAll(); + builder.clear(); + } + @Override public void setSpansForNode(@NonNull N node, int start) { setSpans(start, configuration.spansFactory().require(node).getSpans(configuration, renderProps)); diff --git a/markwon/src/main/java/ru/noties/markwon/SpannableBuilder.java b/markwon/src/main/java/ru/noties/markwon/SpannableBuilder.java index 556d7cc7..bd583311 100644 --- a/markwon/src/main/java/ru/noties/markwon/SpannableBuilder.java +++ b/markwon/src/main/java/ru/noties/markwon/SpannableBuilder.java @@ -325,6 +325,14 @@ public class SpannableBuilder implements Appendable, CharSequence { return reversed; } + /** + * @since 3.0.0 + */ + public void clear() { + builder.setLength(0); + spans.clear(); + } + private void copySpans(final int index, @Nullable CharSequence cs) { // we must identify already reversed Spanned...