Add before and after render methods to plugin

This commit is contained in:
Dimitry Ivanov 2018-12-02 13:54:08 +03:00
parent dc9a4dbf56
commit b6b360b736
4 changed files with 32 additions and 11 deletions

View File

@ -6,6 +6,7 @@ import android.support.annotation.Nullable;
import org.commonmark.node.Document;
import org.commonmark.node.HtmlBlock;
import org.commonmark.node.HtmlInline;
import org.commonmark.node.Node;
import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.MarkwonVisitor;
@ -41,17 +42,13 @@ public class HtmlPlugin extends AbstractMarkwonPlugin {
}
@Override
public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
builder
.on(Document.class, new MarkwonVisitor.NodeVisitor<Document>() {
@Override
public void visit(@NonNull MarkwonVisitor visitor, @NonNull Document document) {
visitor.visitChildren(document);
public void afterRender(@NonNull Node node, @NonNull MarkwonVisitor visitor) {
renderer.render(visitor.configuration(), visitor.builder(), parser);
}
})
@Override
public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
builder
.on(HtmlBlock.class, new MarkwonVisitor.NodeVisitor<HtmlBlock>() {
@Override
public void visit(@NonNull MarkwonVisitor visitor, @NonNull HtmlBlock htmlBlock) {

View File

@ -3,6 +3,7 @@ package ru.noties.markwon;
import android.support.annotation.NonNull;
import android.widget.TextView;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import ru.noties.markwon.image.AsyncDrawableLoader;
@ -40,6 +41,16 @@ public abstract class AbstractMarkwonPlugin implements MarkwonPlugin {
return markdown;
}
@Override
public void beforeRender(@NonNull Node node) {
}
@Override
public void afterRender(@NonNull Node node, @NonNull MarkwonVisitor visitor) {
}
@Override
public void beforeSetText(@NonNull TextView textView, @NonNull CharSequence markdown) {

View File

@ -40,7 +40,17 @@ class MarkwonImpl extends Markwon {
@NonNull
@Override
public CharSequence render(@NonNull Node node) {
for (MarkwonPlugin plugin : plugins) {
plugin.beforeRender(node);
}
node.accept(visitor);
for (MarkwonPlugin plugin : plugins) {
plugin.afterRender(node, visitor);
}
return visitor.builder().text();
}

View File

@ -3,6 +3,7 @@ package ru.noties.markwon;
import android.support.annotation.NonNull;
import android.widget.TextView;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import ru.noties.markwon.image.AsyncDrawableLoader;
@ -20,11 +21,13 @@ public interface MarkwonPlugin {
void configureVisitor(@NonNull MarkwonVisitor.Builder builder);
// html
@NonNull
String processMarkdown(@NonNull String markdown);
void beforeRender(@NonNull Node node);
void afterRender(@NonNull Node node, @NonNull MarkwonVisitor visitor);
void beforeSetText(@NonNull TextView textView, @NonNull CharSequence markdown);
// this method do not receive markdown like `beforeSetText` does because at this