From b6b360b736054005987499a5d9ebc44f9b3e6532 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Sun, 2 Dec 2018 13:54:08 +0300 Subject: [PATCH] Add before and after render methods to plugin --- .../java/ru/noties/markwon/html/HtmlPlugin.java | 15 ++++++--------- .../ru/noties/markwon/AbstractMarkwonPlugin.java | 11 +++++++++++ .../main/java/ru/noties/markwon/MarkwonImpl.java | 10 ++++++++++ .../java/ru/noties/markwon/MarkwonPlugin.java | 7 +++++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/HtmlPlugin.java b/markwon-html/src/main/java/ru/noties/markwon/html/HtmlPlugin.java index 3852c772..0ee64b5e 100644 --- a/markwon-html/src/main/java/ru/noties/markwon/html/HtmlPlugin.java +++ b/markwon-html/src/main/java/ru/noties/markwon/html/HtmlPlugin.java @@ -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; @@ -40,18 +41,14 @@ public class HtmlPlugin extends AbstractMarkwonPlugin { this.parser = parser; } + @Override + 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(Document.class, new MarkwonVisitor.NodeVisitor() { - @Override - public void visit(@NonNull MarkwonVisitor visitor, @NonNull Document document) { - - visitor.visitChildren(document); - - renderer.render(visitor.configuration(), visitor.builder(), parser); - } - }) .on(HtmlBlock.class, new MarkwonVisitor.NodeVisitor() { @Override public void visit(@NonNull MarkwonVisitor visitor, @NonNull HtmlBlock htmlBlock) { diff --git a/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java b/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java index b1671899..5cf614be 100644 --- a/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java +++ b/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java @@ -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) { diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java index 77e68b49..fe6747c7 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java @@ -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(); } diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java b/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java index 690c8f97..4a1c33b9 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java @@ -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