Update sample application
This commit is contained in:
parent
f61e0b7b20
commit
8da8a37178
@ -1,5 +1,8 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
# 4.3.0-SNAPSHOT
|
||||||
|
|
||||||
|
|
||||||
# 4.2.2
|
# 4.2.2
|
||||||
* Fixed `AsyncDrawable` display when it has placeholder with empty bounds ([#189])
|
* Fixed `AsyncDrawable` display when it has placeholder with empty bounds ([#189])
|
||||||
* Fixed `syntax-highlight` where code input is empty string ([#192])
|
* Fixed `syntax-highlight` where code input is empty string ([#192])
|
||||||
|
@ -8,7 +8,7 @@ android.enableJetifier=true
|
|||||||
android.enableBuildCache=true
|
android.enableBuildCache=true
|
||||||
android.buildCacheDir=build/pre-dex-cache
|
android.buildCacheDir=build/pre-dex-cache
|
||||||
|
|
||||||
VERSION_NAME=4.2.2
|
VERSION_NAME=4.3.0-SNAPSHOT
|
||||||
|
|
||||||
GROUP=io.noties.markwon
|
GROUP=io.noties.markwon
|
||||||
POM_DESCRIPTION=Markwon markdown for Android
|
POM_DESCRIPTION=Markwon markdown for Android
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package io.noties.markwon.sample.basicplugins;
|
package io.noties.markwon.sample.basicplugins;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Layout;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.style.AlignmentSpan;
|
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@ -22,56 +19,56 @@ import java.util.Collections;
|
|||||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import io.noties.markwon.MarkwonConfiguration;
|
import io.noties.markwon.MarkwonConfiguration;
|
||||||
import io.noties.markwon.MarkwonPlugin;
|
|
||||||
import io.noties.markwon.MarkwonSpansFactory;
|
import io.noties.markwon.MarkwonSpansFactory;
|
||||||
import io.noties.markwon.MarkwonVisitor;
|
import io.noties.markwon.MarkwonVisitor;
|
||||||
import io.noties.markwon.RenderProps;
|
|
||||||
import io.noties.markwon.core.MarkwonTheme;
|
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.ImageItem;
|
||||||
import io.noties.markwon.image.ImagesPlugin;
|
import io.noties.markwon.image.ImagesPlugin;
|
||||||
import io.noties.markwon.image.SchemeHandler;
|
import io.noties.markwon.image.SchemeHandler;
|
||||||
import io.noties.markwon.image.network.NetworkSchemeHandler;
|
import io.noties.markwon.image.network.NetworkSchemeHandler;
|
||||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
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;
|
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
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_text_view);
|
||||||
|
|
||||||
textView = new TextView(this);
|
textView = findViewById(R.id.text_view);
|
||||||
setContentView(textView);
|
|
||||||
|
|
||||||
step_1();
|
paragraphSpan();
|
||||||
|
//
|
||||||
step_2();
|
// disableNode();
|
||||||
|
//
|
||||||
step_3();
|
// customizeTheme();
|
||||||
|
//
|
||||||
step_4();
|
// linkWithMovementMethod();
|
||||||
|
//
|
||||||
step_5();
|
// imagesPlugin();
|
||||||
|
|
||||||
step_6();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In order to apply paragraph spans a custom plugin should be created (CorePlugin will take care
|
* In order to apply paragraph spans a custom plugin should be created (CorePlugin will take care
|
||||||
* of everything else).
|
* of everything else).
|
||||||
* <p>
|
|
||||||
* Please note that when a plugin is registered and it <em>depends</em> 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()}).
|
|
||||||
* <p>
|
|
||||||
* 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!";
|
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
|
* 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](#)";
|
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
|
* 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```";
|
final String markdown = "`A code` that is rendered differently\n\n```\nHello!\n```";
|
||||||
|
|
||||||
@ -145,7 +142,7 @@ public class BasicPluginsActivity extends Activity {
|
|||||||
* <p>
|
* <p>
|
||||||
* In order to customize them a custom plugin should be used
|
* 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)";
|
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
|
* images handling (parsing markdown containing images, obtain an image from network
|
||||||
* file system or assets). Please note that
|
* file system or assets). Please note that
|
||||||
*/
|
*/
|
||||||
private void step_5() {
|
private void imagesPlugin() {
|
||||||
|
|
||||||
final String markdown = "";
|
final String markdown = "";
|
||||||
|
|
||||||
@ -220,29 +217,29 @@ public class BasicPluginsActivity extends Activity {
|
|||||||
markwon.setMarkdown(textView, markdown);
|
markwon.setMarkdown(textView, markdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void step_6() {
|
// public void step_6() {
|
||||||
|
//
|
||||||
final Markwon markwon = Markwon.builder(this)
|
// final Markwon markwon = Markwon.builder(this)
|
||||||
.usePlugin(HtmlPlugin.create())
|
// .usePlugin(HtmlPlugin.create())
|
||||||
.usePlugin(new AbstractMarkwonPlugin() {
|
// .usePlugin(new AbstractMarkwonPlugin() {
|
||||||
@Override
|
// @Override
|
||||||
public void configure(@NonNull Registry registry) {
|
// public void configure(@NonNull Registry registry) {
|
||||||
registry.require(HtmlPlugin.class, plugin -> plugin.addHandler(new SimpleTagHandler() {
|
// registry.require(HtmlPlugin.class, plugin -> plugin.addHandler(new SimpleTagHandler() {
|
||||||
@Override
|
// @Override
|
||||||
public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
|
// public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps renderProps, @NonNull HtmlTag tag) {
|
||||||
return new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
|
// return new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@NonNull
|
// @NonNull
|
||||||
@Override
|
// @Override
|
||||||
public Collection<String> supportedTags() {
|
// public Collection<String> supportedTags() {
|
||||||
return Collections.singleton("center");
|
// return Collections.singleton("center");
|
||||||
}
|
// }
|
||||||
}));
|
// }));
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
.build();
|
// .build();
|
||||||
}
|
// }
|
||||||
|
|
||||||
// text lifecycle (after/before)
|
// text lifecycle (after/before)
|
||||||
// rendering lifecycle (before/after)
|
// rendering lifecycle (before/after)
|
||||||
|
@ -1,36 +1,48 @@
|
|||||||
package io.noties.markwon.sample.core;
|
package io.noties.markwon.sample.core;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.commonmark.node.Node;
|
import org.commonmark.node.Node;
|
||||||
|
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import io.noties.markwon.core.CorePlugin;
|
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;
|
private TextView textView;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public MenuOptions menuOptions() {
|
||||||
|
return MenuOptions.create()
|
||||||
|
.add("simple", this::simple)
|
||||||
|
.add("toast", this::toast)
|
||||||
|
.add("alreadyParsed", this::alreadyParsed);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_text_view);
|
||||||
|
|
||||||
textView = new TextView(this);
|
textView = findViewById(R.id.text_view);
|
||||||
setContentView(textView);
|
|
||||||
|
|
||||||
step_1();
|
// step_1();
|
||||||
|
|
||||||
step_2();
|
simple();
|
||||||
|
|
||||||
step_3();
|
// toast();
|
||||||
|
//
|
||||||
step_4();
|
// alreadyParsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,7 +82,7 @@ public class CoreActivity extends Activity {
|
|||||||
/**
|
/**
|
||||||
* To simply apply raw (non-parsed) markdown call {@link Markwon#setMarkdown(TextView, String)}
|
* To simply apply raw (non-parsed) markdown call {@link Markwon#setMarkdown(TextView, String)}
|
||||||
*/
|
*/
|
||||||
private void step_2() {
|
private void simple() {
|
||||||
|
|
||||||
// this is raw markdown
|
// this is raw markdown
|
||||||
final String markdown = "Hello **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
|
* 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 <em>should</em> work.
|
* ({@code new Toast(this).setView(...) }) and has access to a TextView everything <em>should</em> work.
|
||||||
*/
|
*/
|
||||||
private void step_3() {
|
private void toast() {
|
||||||
|
|
||||||
final String markdown = "*Toast* __here__!\n\n> And a quote!";
|
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)}
|
* 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](#)";
|
final String markdown = "This **is** pre-parsed [markdown](#)";
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package io.noties.markwon.sample.customextension2;
|
package io.noties.markwon.sample.customextension2;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@ -25,34 +24,45 @@ import io.noties.markwon.core.CorePlugin;
|
|||||||
import io.noties.markwon.core.CoreProps;
|
import io.noties.markwon.core.CoreProps;
|
||||||
import io.noties.markwon.inlineparser.InlineProcessor;
|
import io.noties.markwon.inlineparser.InlineProcessor;
|
||||||
import io.noties.markwon.inlineparser.MarkwonInlineParser;
|
import io.noties.markwon.inlineparser.MarkwonInlineParser;
|
||||||
|
import io.noties.markwon.sample.ActivityWithMenuOptions;
|
||||||
|
import io.noties.markwon.sample.MenuOptions;
|
||||||
import io.noties.markwon.sample.R;
|
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
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_text_view);
|
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:
|
// let's look for github special links:
|
||||||
// * `#1` - an issue or a pull request
|
// * `#1` - an issue or a pull request
|
||||||
// * `@user` link to a user
|
// * `@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);
|
// 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)
|
final Markwon markwon = Markwon.builder(this)
|
||||||
.usePlugin(new AbstractMarkwonPlugin() {
|
.usePlugin(new AbstractMarkwonPlugin() {
|
||||||
@ -64,10 +74,10 @@ public class CustomExtensionActivity2 extends Activity {
|
|||||||
})
|
})
|
||||||
.build();
|
.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()
|
final InlineParserFactory inlineParserFactory = MarkwonInlineParser.factoryBuilder()
|
||||||
// include all current defaults (otherwise will be empty - contain only our inline-processors)
|
// include all current defaults (otherwise will be empty - contain only our inline-processors)
|
||||||
@ -86,7 +96,7 @@ public class CustomExtensionActivity2 extends Activity {
|
|||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
markwon.setMarkdown(textView, md);
|
markwon.setMarkdown(textView, MD);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class IssueInlineProcessor extends InlineProcessor {
|
private static class IssueInlineProcessor extends InlineProcessor {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package io.noties.markwon.sample.inlineparser;
|
package io.noties.markwon.sample.inlineparser;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.TextView;
|
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.CloseBracketInlineProcessor;
|
||||||
import io.noties.markwon.inlineparser.MarkwonInlineParser;
|
import io.noties.markwon.inlineparser.MarkwonInlineParser;
|
||||||
import io.noties.markwon.inlineparser.OpenBracketInlineProcessor;
|
import io.noties.markwon.inlineparser.OpenBracketInlineProcessor;
|
||||||
|
import io.noties.markwon.sample.ActivityWithMenuOptions;
|
||||||
|
import io.noties.markwon.sample.MenuOptions;
|
||||||
import io.noties.markwon.sample.R;
|
import io.noties.markwon.sample.R;
|
||||||
|
|
||||||
public class InlineParserActivity extends Activity {
|
public class InlineParserActivity extends ActivityWithMenuOptions {
|
||||||
|
|
||||||
private TextView textView;
|
private TextView textView;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public MenuOptions menuOptions() {
|
||||||
|
return MenuOptions.create()
|
||||||
|
.add("links_only", this::links_only)
|
||||||
|
.add("disable_code", this::disable_code);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_text_view);
|
setContentView(R.layout.activity_text_view);
|
||||||
|
|
||||||
this.textView = findViewById(R.id.text_view);
|
textView = findViewById(R.id.text_view);
|
||||||
|
|
||||||
// links_only();
|
// links_only();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user