diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b280a34..4982ffd4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog
+# 4.3.0-SNAPSHOT
+
+
# 4.2.2
* Fixed `AsyncDrawable` display when it has placeholder with empty bounds ([#189])
* Fixed `syntax-highlight` where code input is empty string ([#192])
diff --git a/gradle.properties b/gradle.properties
index 5b0fd422..a1dd08b9 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,7 +8,7 @@ android.enableJetifier=true
android.enableBuildCache=true
android.buildCacheDir=build/pre-dex-cache
-VERSION_NAME=4.2.2
+VERSION_NAME=4.3.0-SNAPSHOT
GROUP=io.noties.markwon
POM_DESCRIPTION=Markwon markdown for Android
diff --git a/sample/src/main/java/io/noties/markwon/sample/basicplugins/BasicPluginsActivity.java b/sample/src/main/java/io/noties/markwon/sample/basicplugins/BasicPluginsActivity.java
index df22cf06..7fe69cd3 100644
--- a/sample/src/main/java/io/noties/markwon/sample/basicplugins/BasicPluginsActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/basicplugins/BasicPluginsActivity.java
@@ -1,12 +1,9 @@
package io.noties.markwon.sample.basicplugins;
-import android.app.Activity;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
-import android.text.Layout;
import android.text.TextUtils;
-import android.text.style.AlignmentSpan;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;
@@ -22,56 +19,56 @@ import java.util.Collections;
import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon;
import io.noties.markwon.MarkwonConfiguration;
-import io.noties.markwon.MarkwonPlugin;
import io.noties.markwon.MarkwonSpansFactory;
import io.noties.markwon.MarkwonVisitor;
-import io.noties.markwon.RenderProps;
import io.noties.markwon.core.MarkwonTheme;
-import io.noties.markwon.html.HtmlPlugin;
-import io.noties.markwon.html.HtmlTag;
-import io.noties.markwon.html.tag.SimpleTagHandler;
import io.noties.markwon.image.ImageItem;
import io.noties.markwon.image.ImagesPlugin;
import io.noties.markwon.image.SchemeHandler;
import io.noties.markwon.image.network.NetworkSchemeHandler;
import io.noties.markwon.movement.MovementMethodPlugin;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
+import io.noties.markwon.sample.R;
-public class BasicPluginsActivity extends Activity {
+public class BasicPluginsActivity extends ActivityWithMenuOptions {
private TextView textView;
+
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("paragraphSpan", this::paragraphSpan)
+ .add("disableNode", this::disableNode)
+ .add("linkWithMovementMethod", this::linkWithMovementMethod)
+ .add("imagesPlugin", this::imagesPlugin);
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_text_view);
- textView = new TextView(this);
- setContentView(textView);
+ textView = findViewById(R.id.text_view);
- step_1();
-
- step_2();
-
- step_3();
-
- step_4();
-
- step_5();
-
- step_6();
+ paragraphSpan();
+//
+// disableNode();
+//
+// customizeTheme();
+//
+// linkWithMovementMethod();
+//
+// imagesPlugin();
}
/**
* In order to apply paragraph spans a custom plugin should be created (CorePlugin will take care
* of everything else).
- *
- * Please note that when a plugin is registered and it depends on CorePlugin, there is no
- * need to explicitly specify it. By default all plugins that extend AbstractMarkwonPlugin do declare
- * it\'s dependency on CorePlugin ({@link MarkwonPlugin#priority()}).
- *
- * Order in which plugins are specified to the builder is of little importance as long as each
- * plugin clearly states what dependencies it has
*/
- private void step_1() {
+ private void paragraphSpan() {
final String markdown = "# Hello!\n\nA paragraph?\n\nIt should be!";
@@ -91,7 +88,7 @@ public class BasicPluginsActivity extends Activity {
/**
* To disable some nodes from rendering another custom plugin can be used
*/
- private void step_2() {
+ private void disableNode() {
final String markdown = "# Heading 1\n\n## Heading 2\n\n**other** content [here](#)";
@@ -116,7 +113,7 @@ public class BasicPluginsActivity extends Activity {
/**
* To customize core theme plugin can be used again
*/
- private void step_3() {
+ private void customizeTheme() {
final String markdown = "`A code` that is rendered differently\n\n```\nHello!\n```";
@@ -145,7 +142,7 @@ public class BasicPluginsActivity extends Activity {
*
* In order to customize them a custom plugin should be used
*/
- private void step_4() {
+ private void linkWithMovementMethod() {
final String markdown = "[a link without scheme](github.com)";
@@ -178,7 +175,7 @@ public class BasicPluginsActivity extends Activity {
* images handling (parsing markdown containing images, obtain an image from network
* file system or assets). Please note that
*/
- private void step_5() {
+ private void imagesPlugin() {
final String markdown = "";
@@ -220,29 +217,29 @@ public class BasicPluginsActivity extends Activity {
markwon.setMarkdown(textView, markdown);
}
- public void step_6() {
-
- final Markwon markwon = Markwon.builder(this)
- .usePlugin(HtmlPlugin.create())
- .usePlugin(new AbstractMarkwonPlugin() {
- @Override
- public void configure(@NonNull Registry registry) {
- registry.require(HtmlPlugin.class, plugin -> plugin.addHandler(new SimpleTagHandler() {
- @Override
- public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
- return new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
- }
-
- @NonNull
- @Override
- public Collection supportedTags() {
- return Collections.singleton("center");
- }
- }));
- }
- })
- .build();
- }
+// public void step_6() {
+//
+// final Markwon markwon = Markwon.builder(this)
+// .usePlugin(HtmlPlugin.create())
+// .usePlugin(new AbstractMarkwonPlugin() {
+// @Override
+// public void configure(@NonNull Registry registry) {
+// registry.require(HtmlPlugin.class, plugin -> plugin.addHandler(new SimpleTagHandler() {
+// @Override
+// public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
+// return new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
+// }
+//
+// @NonNull
+// @Override
+// public Collection supportedTags() {
+// return Collections.singleton("center");
+// }
+// }));
+// }
+// })
+// .build();
+// }
// text lifecycle (after/before)
// rendering lifecycle (before/after)
diff --git a/sample/src/main/java/io/noties/markwon/sample/core/CoreActivity.java b/sample/src/main/java/io/noties/markwon/sample/core/CoreActivity.java
index f1a67f50..19c6d3dd 100644
--- a/sample/src/main/java/io/noties/markwon/sample/core/CoreActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/core/CoreActivity.java
@@ -1,36 +1,48 @@
package io.noties.markwon.sample.core;
-import android.app.Activity;
import android.os.Bundle;
import android.text.Spanned;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.commonmark.node.Node;
import io.noties.markwon.Markwon;
import io.noties.markwon.core.CorePlugin;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
+import io.noties.markwon.sample.R;
-public class CoreActivity extends Activity {
+public class CoreActivity extends ActivityWithMenuOptions {
private TextView textView;
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("simple", this::simple)
+ .add("toast", this::toast)
+ .add("alreadyParsed", this::alreadyParsed);
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_text_view);
- textView = new TextView(this);
- setContentView(textView);
+ textView = findViewById(R.id.text_view);
- step_1();
+// step_1();
- step_2();
+ simple();
- step_3();
-
- step_4();
+// toast();
+//
+// alreadyParsed();
}
/**
@@ -70,7 +82,7 @@ public class CoreActivity extends Activity {
/**
* To simply apply raw (non-parsed) markdown call {@link Markwon#setMarkdown(TextView, String)}
*/
- private void step_2() {
+ private void simple() {
// this is raw markdown
final String markdown = "Hello **markdown**!";
@@ -91,7 +103,7 @@ public class CoreActivity extends Activity {
* of invalidation. But if a Toast for example is created with a custom view
* ({@code new Toast(this).setView(...) }) and has access to a TextView everything should work.
*/
- private void step_3() {
+ private void toast() {
final String markdown = "*Toast* __here__!\n\n> And a quote!";
@@ -105,7 +117,7 @@ public class CoreActivity extends Activity {
/**
* To apply already parsed markdown use {@link Markwon#setParsedMarkdown(TextView, Spanned)}
*/
- private void step_4() {
+ private void alreadyParsed() {
final String markdown = "This **is** pre-parsed [markdown](#)";
diff --git a/sample/src/main/java/io/noties/markwon/sample/customextension2/CustomExtensionActivity2.java b/sample/src/main/java/io/noties/markwon/sample/customextension2/CustomExtensionActivity2.java
index cb4f178f..cd286198 100644
--- a/sample/src/main/java/io/noties/markwon/sample/customextension2/CustomExtensionActivity2.java
+++ b/sample/src/main/java/io/noties/markwon/sample/customextension2/CustomExtensionActivity2.java
@@ -1,6 +1,5 @@
package io.noties.markwon.sample.customextension2;
-import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
@@ -25,34 +24,45 @@ import io.noties.markwon.core.CorePlugin;
import io.noties.markwon.core.CoreProps;
import io.noties.markwon.inlineparser.InlineProcessor;
import io.noties.markwon.inlineparser.MarkwonInlineParser;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
import io.noties.markwon.sample.R;
-public class CustomExtensionActivity2 extends Activity {
+public class CustomExtensionActivity2 extends ActivityWithMenuOptions {
+
+ private static final String MD = "" +
+ "# Custom Extension 2\n" +
+ "\n" +
+ "This is an issue #1\n" +
+ "Done by @noties";
+
+ private TextView textView;
+
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("text_added", this::text_added)
+ .add("inline_parsing", this::inline_parsing);
+ }
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_view);
- final TextView textView = findViewById(R.id.text_view);
+ textView = findViewById(R.id.text_view);
// let's look for github special links:
// * `#1` - an issue or a pull request
// * `@user` link to a user
-
- final String md = "# Custom Extension 2\n" +
- "\n" +
- "This is an issue #1\n" +
- "Done by @noties";
-
-
// inline_parsing(textView, md);
- text_added(textView, md);
+ text_added();
}
- private void text_added(@NonNull TextView textView, @NonNull String md) {
+ private void text_added() {
final Markwon markwon = Markwon.builder(this)
.usePlugin(new AbstractMarkwonPlugin() {
@@ -64,10 +74,10 @@ public class CustomExtensionActivity2 extends Activity {
})
.build();
- markwon.setMarkdown(textView, md);
+ markwon.setMarkdown(textView, MD);
}
- private void inline_parsing(@NonNull TextView textView, @NonNull String md) {
+ private void inline_parsing() {
final InlineParserFactory inlineParserFactory = MarkwonInlineParser.factoryBuilder()
// include all current defaults (otherwise will be empty - contain only our inline-processors)
@@ -86,7 +96,7 @@ public class CustomExtensionActivity2 extends Activity {
})
.build();
- markwon.setMarkdown(textView, md);
+ markwon.setMarkdown(textView, MD);
}
private static class IssueInlineProcessor extends InlineProcessor {
diff --git a/sample/src/main/java/io/noties/markwon/sample/inlineparser/InlineParserActivity.java b/sample/src/main/java/io/noties/markwon/sample/inlineparser/InlineParserActivity.java
index 27d069eb..833a63b1 100644
--- a/sample/src/main/java/io/noties/markwon/sample/inlineparser/InlineParserActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/inlineparser/InlineParserActivity.java
@@ -1,6 +1,5 @@
package io.noties.markwon.sample.inlineparser;
-import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
@@ -26,18 +25,28 @@ import io.noties.markwon.inlineparser.BackticksInlineProcessor;
import io.noties.markwon.inlineparser.CloseBracketInlineProcessor;
import io.noties.markwon.inlineparser.MarkwonInlineParser;
import io.noties.markwon.inlineparser.OpenBracketInlineProcessor;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
import io.noties.markwon.sample.R;
-public class InlineParserActivity extends Activity {
+public class InlineParserActivity extends ActivityWithMenuOptions {
private TextView textView;
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("links_only", this::links_only)
+ .add("disable_code", this::disable_code);
+ }
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_view);
- this.textView = findViewById(R.id.text_view);
+ textView = findViewById(R.id.text_view);
// links_only();