diff --git a/_CHANGES.md b/_CHANGES.md
index 4695759f..28856328 100644
--- a/_CHANGES.md
+++ b/_CHANGES.md
@@ -6,4 +6,6 @@
internally caches latest state and skips scheduling if drawables are already processed
* configure with registry
* removed priority
-* images-plugin moved to standalone again
\ No newline at end of file
+* images-plugin moved to standalone again
+* removed MarkwonPlugin#configureHtmlRenderer -> now part of HtmlPlugin
+* TagHandler now has `supportedTags()` method
\ No newline at end of file
diff --git a/markwon-core/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java b/markwon-core/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
index ae05550a..4fb39da0 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
@@ -49,11 +49,6 @@ public abstract class AbstractMarkwonPlugin implements MarkwonPlugin {
}
- @Override
- public void configureHtmlRenderer(@NonNull MarkwonHtmlRenderer.Builder builder) {
-
- }
-
@NonNull
@Override
public String processMarkdown(@NonNull String markdown) {
diff --git a/markwon-core/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java b/markwon-core/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
index b650ff1b..863cfe30 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
@@ -16,7 +16,6 @@ import java.util.List;
import java.util.Set;
import ru.noties.markwon.core.MarkwonTheme;
-import ru.noties.markwon.html.MarkwonHtmlRenderer;
/**
* @since 3.0.0
@@ -84,7 +83,6 @@ class MarkwonBuilderImpl implements Markwon.Builder {
final MarkwonConfiguration.Builder configurationBuilder = new MarkwonConfiguration.Builder();
final MarkwonVisitor.Builder visitorBuilder = new MarkwonVisitorImpl.BuilderImpl();
final MarkwonSpansFactory.Builder spanFactoryBuilder = new MarkwonSpansFactoryImpl.BuilderImpl();
- final MarkwonHtmlRenderer.Builder htmlRendererBuilder = MarkwonHtmlRenderer.builder();
for (MarkwonPlugin plugin : plugins) {
plugin.configureParser(parserBuilder);
@@ -92,12 +90,10 @@ class MarkwonBuilderImpl implements Markwon.Builder {
plugin.configureConfiguration(configurationBuilder);
plugin.configureVisitor(visitorBuilder);
plugin.configureSpansFactory(spanFactoryBuilder);
- plugin.configureHtmlRenderer(htmlRendererBuilder);
}
final MarkwonConfiguration configuration = configurationBuilder.build(
themeBuilder.build(),
- htmlRendererBuilder.build(),
spanFactoryBuilder.build());
final RenderProps renderProps = new RenderPropsImpl();
diff --git a/markwon-core/src/main/java/ru/noties/markwon/MarkwonConfiguration.java b/markwon-core/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
index af65fdb4..66159da4 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
@@ -122,6 +122,15 @@ public class MarkwonConfiguration {
return this;
}
+ /**
+ * @since 4.0.0-SNAPSHOT
+ */
+ @NonNull
+ public Builder htmlRenderer(@NonNull MarkwonHtmlRenderer htmlRenderer) {
+ this.htmlRenderer = htmlRenderer;
+ return this;
+ }
+
@NonNull
public Builder syntaxHighlight(@NonNull SyntaxHighlight syntaxHighlight) {
this.syntaxHighlight = syntaxHighlight;
@@ -158,11 +167,9 @@ public class MarkwonConfiguration {
@NonNull
public MarkwonConfiguration build(
@NonNull MarkwonTheme theme,
- @NonNull MarkwonHtmlRenderer htmlRenderer,
@NonNull MarkwonSpansFactory spansFactory) {
this.theme = theme;
- this.htmlRenderer = htmlRenderer;
this.spansFactory = spansFactory;
// @since 4.0.0-SNAPSHOT
@@ -170,6 +177,11 @@ public class MarkwonConfiguration {
asyncDrawableLoader = AsyncDrawableLoader.noOp();
}
+ // @since 4.0.0-SNAPSHOT
+ if (htmlRenderer == null) {
+ htmlRenderer = MarkwonHtmlRenderer.noOp();
+ }
+
if (syntaxHighlight == null) {
syntaxHighlight = new SyntaxHighlightNoOp();
}
diff --git a/markwon-core/src/main/java/ru/noties/markwon/MarkwonPlugin.java b/markwon-core/src/main/java/ru/noties/markwon/MarkwonPlugin.java
index 8bc4dc8d..fb7f1022 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/MarkwonPlugin.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/MarkwonPlugin.java
@@ -16,7 +16,7 @@ import ru.noties.markwon.html.MarkwonHtmlRenderer;
*
* @see AbstractMarkwonPlugin
* @see ru.noties.markwon.core.CorePlugin
- * @see ru.noties.markwon.image.ImagesPlugin
+ * @see ru.noties.markwon.movement.MovementMethodPlugin
* @since 3.0.0
*/
public interface MarkwonPlugin {
@@ -88,13 +88,13 @@ public interface MarkwonPlugin {
*/
void configureSpansFactory(@NonNull MarkwonSpansFactory.Builder builder);
- /**
- * Configure {@link MarkwonHtmlRenderer} to add or remove HTML {@link ru.noties.markwon.html.TagHandler}s
- *
- * @see MarkwonHtmlRenderer
- * @see MarkwonHtmlRenderer.Builder
- */
- void configureHtmlRenderer(@NonNull MarkwonHtmlRenderer.Builder builder);
+// /**
+// * Configure {@link MarkwonHtmlRenderer} to add or remove HTML {@link ru.noties.markwon.html.TagHandler}s
+// *
+// * @see MarkwonHtmlRenderer
+// * @see MarkwonHtmlRenderer.Builder
+// */
+// void configureHtmlRenderer(@NonNull MarkwonHtmlRenderer.Builder builder);
/**
* Process input markdown and return new string to be used in parsing stage further.
@@ -128,7 +128,7 @@ public interface MarkwonPlugin {
/**
* This method will be called before calling TextView#setText
.
*
- * It can be useful to prepare a TextView for markdown. For example {@link ru.noties.markwon.image.ImagesPlugin}
+ * It can be useful to prepare a TextView for markdown. For example {@code ru.noties.markwon.image.ImagesPlugin}
* uses this method to unregister previously registered {@link ru.noties.markwon.image.AsyncDrawableSpan}
* (if there are such spans in this TextView at this point). Or {@link ru.noties.markwon.core.CorePlugin}
* which measures ordered list numbers
@@ -141,7 +141,7 @@ public interface MarkwonPlugin {
/**
* This method will be called after markdown was applied.
*
- * It can be useful to trigger certain action on spans/textView. For example {@link ru.noties.markwon.image.ImagesPlugin}
+ * It can be useful to trigger certain action on spans/textView. For example {@code ru.noties.markwon.image.ImagesPlugin}
* uses this method to register {@link ru.noties.markwon.image.AsyncDrawableSpan} and start
* asynchronously loading images.
*
diff --git a/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRenderer.java b/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRenderer.java
index 93d0411d..88bf8709 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRenderer.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRenderer.java
@@ -3,8 +3,6 @@ package ru.noties.markwon.html;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import java.util.Collection;
-
import ru.noties.markwon.MarkwonVisitor;
/**
@@ -12,9 +10,12 @@ import ru.noties.markwon.MarkwonVisitor;
*/
public abstract class MarkwonHtmlRenderer {
+ /**
+ * @since 4.0.0-SNAPSHOT
+ */
@NonNull
- public static Builder builder() {
- return new MarkwonHtmlRendererImpl.BuilderImpl();
+ public static MarkwonHtmlRenderer noOp() {
+ return new MarkwonHtmlRendererNoOp();
}
public abstract void render(
@@ -24,33 +25,4 @@ public abstract class MarkwonHtmlRenderer {
@Nullable
public abstract TagHandler tagHandler(@NonNull String tagName);
-
-
- /**
- * @since 3.0.0
- */
- public interface Builder {
-
- /**
- * @param allowNonClosedTags parameter to indicate that all non-closed HTML tags should be
- * closed at the end of a document. if {@code true} all non-closed
- * tags will be force-closed at the end. Otherwise these tags will be
- * ignored and thus not rendered.
- * @return self
- */
- @NonNull
- Builder allowNonClosedTags(boolean allowNonClosedTags);
-
- @NonNull
- Builder setHandler(@NonNull String tagName, @Nullable TagHandler tagHandler);
-
- @NonNull
- Builder setHandler(@NonNull Collection tagNames, @Nullable TagHandler tagHandler);
-
- @Nullable
- TagHandler getHandler(@NonNull String tagName);
-
- @NonNull
- MarkwonHtmlRenderer build();
- }
}
diff --git a/markwon-core/src/main/java/ru/noties/markwon/html/TagHandler.java b/markwon-core/src/main/java/ru/noties/markwon/html/TagHandler.java
index 84122946..28c2c068 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/html/TagHandler.java
+++ b/markwon-core/src/main/java/ru/noties/markwon/html/TagHandler.java
@@ -2,6 +2,8 @@ package ru.noties.markwon.html;
import android.support.annotation.NonNull;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonVisitor;
public abstract class TagHandler {
@@ -12,6 +14,13 @@ public abstract class TagHandler {
@NonNull HtmlTag tag
);
+ /**
+ * @since 4.0.0-SNAPSHOT
+ */
+ @NonNull
+ public abstract Collection supportedTags();
+
+
protected static void visitChildren(
@NonNull MarkwonVisitor visitor,
@NonNull MarkwonHtmlRenderer renderer,
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 d087058e..4fa633f4 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
@@ -10,19 +10,6 @@ import org.commonmark.node.Node;
import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.MarkwonVisitor;
-import ru.noties.markwon.html.tag.BlockquoteHandler;
-import ru.noties.markwon.html.tag.EmphasisHandler;
-import ru.noties.markwon.html.tag.HeadingHandler;
-import ru.noties.markwon.html.tag.ImageHandler;
-import ru.noties.markwon.html.tag.LinkHandler;
-import ru.noties.markwon.html.tag.ListHandler;
-import ru.noties.markwon.html.tag.StrikeHandler;
-import ru.noties.markwon.html.tag.StrongEmphasisHandler;
-import ru.noties.markwon.html.tag.SubScriptHandler;
-import ru.noties.markwon.html.tag.SuperScriptHandler;
-import ru.noties.markwon.html.tag.UnderlineHandler;
-
-import static java.util.Arrays.asList;
/**
* @since 3.0.0
@@ -36,48 +23,60 @@ public class HtmlPlugin extends AbstractMarkwonPlugin {
public static final float SCRIPT_DEF_TEXT_SIZE_RATIO = .75F;
- @Override
- public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
- builder.htmlParser(MarkwonHtmlParserImpl.create());
+ private final MarkwonHtmlRendererImpl.Builder builder;
+
+ @SuppressWarnings("WeakerAccess")
+ HtmlPlugin() {
+ this.builder = new MarkwonHtmlRendererImpl.Builder();
+ }
+
+ /**
+ * @param allowNonClosedTags whether or not non-closed tags should be closed
+ * at the document end. By default `false`
+ * @since 4.0.0-SNAPSHOT
+ */
+ @NonNull
+ public HtmlPlugin allowNonClosedTags(boolean allowNonClosedTags) {
+ builder.allowNonClosedTags(allowNonClosedTags);
+ return this;
+ }
+
+ /**
+ * @since 4.0.0-SNAPSHOT
+ */
+ @NonNull
+ public HtmlPlugin addHandler(@NonNull TagHandler tagHandler) {
+ builder.addHandler(tagHandler);
+ return this;
+ }
+
+ /**
+ * @since 4.0.0-SNAPSHOT
+ */
+ @Nullable
+ public TagHandler getHandler(@NonNull String tagName) {
+ return builder.getHandler(tagName);
+ }
+
+ /**
+ * Indicate if HtmlPlugin should register default HTML tag handlers. Pass `true` to not
+ * include default handlers. By default default handlers are included. You can use
+ * {@link TagHandlerNoOp} to no-op certain default tags.
+ *
+ * @see TagHandlerNoOp
+ * @since 4.0.0-SNAPSHOT
+ */
+ @NonNull
+ public HtmlPlugin excludeDefaults(boolean excludeDefaults) {
+ builder.excludeDefaults(excludeDefaults);
+ return this;
}
@Override
- public void configureHtmlRenderer(@NonNull MarkwonHtmlRenderer.Builder builder) {
-
+ public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
builder
- .setHandler(
- "img",
- ImageHandler.create())
- .setHandler(
- "a",
- new LinkHandler())
- .setHandler(
- "blockquote",
- new BlockquoteHandler())
- .setHandler(
- "sub",
- new SubScriptHandler())
- .setHandler(
- "sup",
- new SuperScriptHandler())
- .setHandler(
- asList("b", "strong"),
- new StrongEmphasisHandler())
- .setHandler(
- asList("s", "del"),
- new StrikeHandler())
- .setHandler(
- asList("u", "ins"),
- new UnderlineHandler())
- .setHandler(
- asList("ul", "ol"),
- new ListHandler())
- .setHandler(
- asList("i", "em", "cite", "dfn"),
- new EmphasisHandler())
- .setHandler(
- asList("h1", "h2", "h3", "h4", "h5", "h6"),
- new HeadingHandler());
+ .htmlRenderer(this.builder.build())
+ .htmlParser(MarkwonHtmlParserImpl.create());
}
@Override
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlParserImpl.java b/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlParserImpl.java
index 6d715510..e0f4a9e3 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlParserImpl.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlParserImpl.java
@@ -195,7 +195,6 @@ public class MarkwonHtmlParserImpl extends MarkwonHtmlParser {
}
}
- //noinspection unchecked
action.apply(Collections.unmodifiableList((List extends Inline>) inlineTags));
inlineTags.clear();
} else {
diff --git a/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java b/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java
similarity index 58%
rename from markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java
rename to markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java
index 0f4c97e6..3699f5f5 100644
--- a/markwon-core/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/MarkwonHtmlRendererImpl.java
@@ -3,19 +3,30 @@ package ru.noties.markwon.html;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ru.noties.markwon.MarkwonVisitor;
+import ru.noties.markwon.html.tag.BlockquoteHandler;
+import ru.noties.markwon.html.tag.EmphasisHandler;
+import ru.noties.markwon.html.tag.HeadingHandler;
+import ru.noties.markwon.html.tag.ImageHandler;
+import ru.noties.markwon.html.tag.LinkHandler;
+import ru.noties.markwon.html.tag.ListHandler;
+import ru.noties.markwon.html.tag.StrikeHandler;
+import ru.noties.markwon.html.tag.StrongEmphasisHandler;
+import ru.noties.markwon.html.tag.SubScriptHandler;
+import ru.noties.markwon.html.tag.SuperScriptHandler;
+import ru.noties.markwon.html.tag.UnderlineHandler;
class MarkwonHtmlRendererImpl extends MarkwonHtmlRenderer {
private final boolean allowNonClosedTags;
private final Map tagHandlers;
+ @SuppressWarnings("WeakerAccess")
MarkwonHtmlRendererImpl(boolean allowNonClosedTags, @NonNull Map tagHandlers) {
this.allowNonClosedTags = allowNonClosedTags;
this.tagHandlers = tagHandlers;
@@ -86,58 +97,82 @@ class MarkwonHtmlRendererImpl extends MarkwonHtmlRenderer {
return tagHandlers.get(tagName);
}
- static class BuilderImpl implements Builder {
+ static class Builder {
private final Map tagHandlers = new HashMap<>(2);
private boolean allowNonClosedTags;
+ private boolean excludeDefaults;
- @NonNull
- @Override
- public Builder allowNonClosedTags(boolean allowNonClosedTags) {
+ private boolean isBuilt;
+
+ void allowNonClosedTags(boolean allowNonClosedTags) {
+ checkState();
this.allowNonClosedTags = allowNonClosedTags;
- return this;
}
- @NonNull
- @Override
- public Builder setHandler(@NonNull String tagName, @Nullable TagHandler tagHandler) {
- if (tagHandler == null) {
- tagHandlers.remove(tagName);
- } else {
- tagHandlers.put(tagName, tagHandler);
+ void addHandler(@NonNull TagHandler tagHandler) {
+ checkState();
+ for (String tag : tagHandler.supportedTags()) {
+ tagHandlers.put(tag, tagHandler);
}
- return this;
- }
-
- @NonNull
- @Override
- public Builder setHandler(@NonNull Collection tagNames, @Nullable TagHandler tagHandler) {
- if (tagHandler == null) {
- for (String tagName : tagNames) {
- tagHandlers.remove(tagName);
- }
- } else {
- for (String tagName : tagNames) {
- tagHandlers.put(tagName, tagHandler);
- }
- }
- return this;
}
@Nullable
- @Override
- public TagHandler getHandler(@NonNull String tagName) {
+ TagHandler getHandler(@NonNull String tagName) {
+ checkState();
return tagHandlers.get(tagName);
}
+ public void excludeDefaults(boolean excludeDefaults) {
+ checkState();
+ this.excludeDefaults = excludeDefaults;
+ }
+
@NonNull
- @Override
public MarkwonHtmlRenderer build() {
+
+ checkState();
+
+ isBuilt = true;
+
+ if (!excludeDefaults) {
+ // register default handlers, check if a handler is present already for specified tag
+ registerDefaultHandlers();
+ }
+
// okay, let's validate that we have at least one tagHandler registered
// if we have none -> return no-op implementation
return tagHandlers.size() > 0
? new MarkwonHtmlRendererImpl(allowNonClosedTags, Collections.unmodifiableMap(tagHandlers))
: new MarkwonHtmlRendererNoOp();
}
+
+ private void checkState() {
+ if (isBuilt) {
+ throw new IllegalStateException("Builder has been already built");
+ }
+ }
+
+ private void registerDefaultHandlers() {
+ add(ImageHandler.create());
+ add(new LinkHandler());
+ add(new BlockquoteHandler());
+ add(new SubScriptHandler());
+ add(new SuperScriptHandler());
+ add(new StrongEmphasisHandler());
+ add(new StrikeHandler());
+ add(new UnderlineHandler());
+ add(new ListHandler());
+ add(new EmphasisHandler());
+ add(new HeadingHandler());
+ }
+
+ private void add(@NonNull TagHandler tagHandler) {
+ for (String tag : tagHandler.supportedTags()) {
+ if (!tagHandlers.containsKey(tag)) {
+ tagHandlers.put(tag, tagHandler);
+ }
+ }
+ }
}
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/TagHandlerNoOp.java b/markwon-html/src/main/java/ru/noties/markwon/html/TagHandlerNoOp.java
new file mode 100644
index 00000000..c96d6867
--- /dev/null
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/TagHandlerNoOp.java
@@ -0,0 +1,43 @@
+package ru.noties.markwon.html;
+
+import android.support.annotation.NonNull;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import ru.noties.markwon.MarkwonVisitor;
+
+/**
+ * @since 4.0.0-SNAPSHOT
+ */
+public class TagHandlerNoOp extends TagHandler {
+
+ @NonNull
+ public static TagHandlerNoOp create(@NonNull String tag) {
+ return new TagHandlerNoOp(Collections.singleton(tag));
+ }
+
+ @NonNull
+ public static TagHandlerNoOp create(@NonNull String... tags) {
+ return new TagHandlerNoOp(Arrays.asList(tags));
+ }
+
+ private final Collection tags;
+
+ @SuppressWarnings("WeakerAccess")
+ TagHandlerNoOp(Collection tags) {
+ this.tags = tags;
+ }
+
+ @Override
+ public void handle(@NonNull MarkwonVisitor visitor, @NonNull MarkwonHtmlRenderer renderer, @NonNull HtmlTag tag) {
+ // no op
+ }
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return tags;
+ }
+}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/BlockquoteHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/BlockquoteHandler.java
index 930a8dda..31ed4916 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/BlockquoteHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/BlockquoteHandler.java
@@ -4,6 +4,9 @@ import android.support.annotation.NonNull;
import org.commonmark.node.BlockQuote;
+import java.util.Collection;
+import java.util.Collections;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.SpanFactory;
@@ -35,4 +38,10 @@ public class BlockquoteHandler extends TagHandler {
);
}
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Collections.singleton("blockquote");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/EmphasisHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/EmphasisHandler.java
index fe546ee0..a5e62c40 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/EmphasisHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/EmphasisHandler.java
@@ -5,6 +5,9 @@ import android.support.annotation.Nullable;
import org.commonmark.node.Emphasis;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.SpanFactory;
@@ -23,4 +26,10 @@ public class EmphasisHandler extends SimpleTagHandler {
}
return spanFactory.getSpans(configuration, renderProps);
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("i", "em", "cite", "dfn");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/HeadingHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/HeadingHandler.java
index a7de3a47..8c778f94 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/HeadingHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/HeadingHandler.java
@@ -5,6 +5,9 @@ import android.support.annotation.Nullable;
import org.commonmark.node.Heading;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.SpanFactory;
@@ -41,4 +44,10 @@ public class HeadingHandler extends SimpleTagHandler {
return factory.getSpans(configuration, renderProps);
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("h1", "h2", "h3", "h4", "h5", "h6");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/ImageHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/ImageHandler.java
index 4e7ffa54..04cbe46e 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/ImageHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/ImageHandler.java
@@ -6,6 +6,8 @@ import android.text.TextUtils;
import org.commonmark.node.Image;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import ru.noties.markwon.MarkwonConfiguration;
@@ -18,6 +20,12 @@ import ru.noties.markwon.image.ImageSize;
public class ImageHandler extends SimpleTagHandler {
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Collections.singleton("img");
+ }
+
interface ImageSizeParser {
@Nullable
ImageSize parse(@NonNull Map attributes);
@@ -30,6 +38,7 @@ public class ImageHandler extends SimpleTagHandler {
private final ImageSizeParser imageSizeParser;
+ @SuppressWarnings("WeakerAccess")
ImageHandler(@NonNull ImageSizeParser imageSizeParser) {
this.imageSizeParser = imageSizeParser;
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/LinkHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/LinkHandler.java
index 04e768e9..a1687dd8 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/LinkHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/LinkHandler.java
@@ -6,6 +6,9 @@ import android.text.TextUtils;
import org.commonmark.node.Link;
+import java.util.Collection;
+import java.util.Collections;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.SpanFactory;
@@ -30,4 +33,10 @@ public class LinkHandler extends SimpleTagHandler {
}
return null;
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Collections.singleton("a");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/ListHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/ListHandler.java
index 66f76cc0..a8f8df9d 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/ListHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/ListHandler.java
@@ -4,6 +4,9 @@ import android.support.annotation.NonNull;
import org.commonmark.node.ListItem;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.RenderProps;
@@ -65,6 +68,12 @@ public class ListHandler extends TagHandler {
}
}
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("ol", "ul");
+ }
+
private static int currentBulletListLevel(@NonNull HtmlTag.Block block) {
int level = 0;
while ((block = block.parent()) != null) {
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SimpleTagHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SimpleTagHandler.java
index d5717c20..94341b2f 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SimpleTagHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SimpleTagHandler.java
@@ -3,6 +3,8 @@ package ru.noties.markwon.html.tag;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.RenderProps;
@@ -19,6 +21,11 @@ public abstract class SimpleTagHandler extends TagHandler {
@NonNull RenderProps renderProps,
@NonNull HtmlTag tag);
+ @NonNull
+ @Override
+ public abstract Collection supportedTags();
+
+
@Override
public void handle(@NonNull MarkwonVisitor visitor, @NonNull MarkwonHtmlRenderer renderer, @NonNull HtmlTag tag) {
final Object spans = getSpans(visitor.configuration(), visitor.renderProps(), tag);
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrikeHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrikeHandler.java
index 2771501e..02dedc8a 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrikeHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrikeHandler.java
@@ -4,6 +4,9 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.style.StrikethroughSpan;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.SpanFactory;
@@ -47,6 +50,12 @@ public class StrikeHandler extends TagHandler {
);
}
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("s", "del");
+ }
+
@Nullable
private static Object getMarkdownSpans(@NonNull MarkwonVisitor visitor) {
final MarkwonConfiguration configuration = visitor.configuration();
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrongEmphasisHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrongEmphasisHandler.java
index 8e604b7f..486e43c4 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrongEmphasisHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/StrongEmphasisHandler.java
@@ -5,6 +5,9 @@ import android.support.annotation.Nullable;
import org.commonmark.node.StrongEmphasis;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.SpanFactory;
@@ -23,4 +26,10 @@ public class StrongEmphasisHandler extends SimpleTagHandler {
}
return spanFactory.getSpans(configuration, renderProps);
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("b", "strong");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SubScriptHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SubScriptHandler.java
index 5ddc5697..5c99d963 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SubScriptHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SubScriptHandler.java
@@ -3,6 +3,9 @@ package ru.noties.markwon.html.tag;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import java.util.Collection;
+import java.util.Collections;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.html.HtmlTag;
@@ -14,4 +17,10 @@ public class SubScriptHandler extends SimpleTagHandler {
public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
return new SubScriptSpan();
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Collections.singleton("sub");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SuperScriptHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SuperScriptHandler.java
index 77147c99..163a1735 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/SuperScriptHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/SuperScriptHandler.java
@@ -3,6 +3,9 @@ package ru.noties.markwon.html.tag;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import java.util.Collection;
+import java.util.Collections;
+
import ru.noties.markwon.MarkwonConfiguration;
import ru.noties.markwon.RenderProps;
import ru.noties.markwon.html.HtmlTag;
@@ -14,4 +17,10 @@ public class SuperScriptHandler extends SimpleTagHandler {
public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
return new SuperScriptSpan();
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Collections.singleton("sup");
+ }
}
diff --git a/markwon-html/src/main/java/ru/noties/markwon/html/tag/UnderlineHandler.java b/markwon-html/src/main/java/ru/noties/markwon/html/tag/UnderlineHandler.java
index eaa397a6..bc2be951 100644
--- a/markwon-html/src/main/java/ru/noties/markwon/html/tag/UnderlineHandler.java
+++ b/markwon-html/src/main/java/ru/noties/markwon/html/tag/UnderlineHandler.java
@@ -3,6 +3,9 @@ package ru.noties.markwon.html.tag;
import android.support.annotation.NonNull;
import android.text.style.UnderlineSpan;
+import java.util.Arrays;
+import java.util.Collection;
+
import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.SpannableBuilder;
import ru.noties.markwon.html.HtmlTag;
@@ -31,4 +34,10 @@ public class UnderlineHandler extends TagHandler {
tag.end()
);
}
+
+ @NonNull
+ @Override
+ public Collection supportedTags() {
+ return Arrays.asList("u", "ins");
+ }
}