From 854fa744c7308a4adc6d47b8c31ba26862e952b6 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Thu, 13 Aug 2020 18:48:34 +0300 Subject: [PATCH] sample, add thematic break bottom margin sample --- app-sample/samples.json | 22 +++++-- .../ThematicBreakBottomMarginSample.java | 63 +++++++++++++++++++ 2 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 app-sample/src/main/java/io/noties/markwon/app/samples/ThematicBreakBottomMarginSample.java diff --git a/app-sample/samples.json b/app-sample/samples.json index d24eb2a7..6acf2056 100644 --- a/app-sample/samples.json +++ b/app-sample/samples.json @@ -1,4 +1,16 @@ [ + { + "javaClassName": "io.noties.markwon.app.samples.ThematicBreakBottomMarginSample", + "id": "20200813154415", + "title": "Thematic break bottom margin", + "description": "Do not add a new line after thematic break (with the `BlockHandler`)", + "artifacts": [ + "CORE" + ], + "tags": [ + "rendering" + ] + }, { "javaClassName": "io.noties.markwon.app.samples.RedditSpoilerSample", "id": "20200813145316", @@ -822,12 +834,13 @@ ] }, { - "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueOnTextAddedSample", + "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueInlineParsingSample", "id": "20200629162024", "title": "User mention and issue (via text)", "description": "Github-like user mention and issue rendering via `CorePlugin.OnTextAddedListener`", "artifacts": [ - "CORE" + "CORE", + "INLINE_PARSER" ], "tags": [ "parsing", @@ -836,13 +849,12 @@ ] }, { - "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueInlineParsingSample", + "javaClassName": "io.noties.markwon.app.samples.GithubUserIssueOnTextAddedSample", "id": "20200629162024", "title": "User mention and issue (via text)", "description": "Github-like user mention and issue rendering via `CorePlugin.OnTextAddedListener`", "artifacts": [ - "CORE", - "INLINE_PARSER" + "CORE" ], "tags": [ "parsing", diff --git a/app-sample/src/main/java/io/noties/markwon/app/samples/ThematicBreakBottomMarginSample.java b/app-sample/src/main/java/io/noties/markwon/app/samples/ThematicBreakBottomMarginSample.java new file mode 100644 index 00000000..64e19659 --- /dev/null +++ b/app-sample/src/main/java/io/noties/markwon/app/samples/ThematicBreakBottomMarginSample.java @@ -0,0 +1,63 @@ +package io.noties.markwon.app.samples; + +import androidx.annotation.NonNull; + +import org.commonmark.node.Node; +import org.commonmark.node.ThematicBreak; + +import io.noties.markwon.AbstractMarkwonPlugin; +import io.noties.markwon.BlockHandlerDef; +import io.noties.markwon.Markwon; +import io.noties.markwon.MarkwonVisitor; +import io.noties.markwon.app.sample.Tags; +import io.noties.markwon.app.sample.ui.MarkwonTextViewSample; +import io.noties.markwon.sample.annotations.MarkwonArtifact; +import io.noties.markwon.sample.annotations.MarkwonSampleInfo; + +@MarkwonSampleInfo( + id = "20200813154415", + title = "Thematic break bottom margin", + description = "Do not add a new line after thematic break (with the `BlockHandler`)", + artifacts = MarkwonArtifact.CORE, + tags = Tags.rendering +) +public class ThematicBreakBottomMarginSample extends MarkwonTextViewSample { + @Override + public void render() { + final String md = "" + + "# Thematic break and margin\n\n" + + "So, what if....\n\n" + + "---\n\n" + + "And **now**"; + + final Markwon markwon = Markwon.builder(context) + .usePlugin(new AbstractMarkwonPlugin() { + @Override + public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) { + builder.blockHandler(new BlockHandlerDef() { + @Override + public void blockStart(@NonNull MarkwonVisitor visitor, @NonNull Node node) { + // also can control block start + super.blockStart(visitor, node); + } + + @Override + public void blockEnd(@NonNull MarkwonVisitor visitor, @NonNull Node node) { + if (visitor.hasNext(node)) { + visitor.ensureNewLine(); + + // thematic break won't have a new line + // similarly you can control other blocks + if (!(node instanceof ThematicBreak)) { + visitor.forceNewLine(); + } + } + } + }); + } + }) + .build(); + + markwon.setMarkdown(textView, md); + } +}