Search in sources :

Example 1 with HtmlPlugin

use of io.noties.markwon.html.HtmlPlugin in project PocketHub by pockethub.

the class MarkwonUtils method createMarkwon.

public static Markwon createMarkwon(Context context, String baseUrl) {
    final Prism4j prism4j = new Prism4j(new GrammarLocatorDef());
    return Markwon.builder(context).usePlugin(StrikethroughPlugin.create()).usePlugin(TaskListPlugin.create(context)).usePlugin(HtmlPlugin.create()).usePlugin(new AbstractMarkwonPlugin() {

        @Override
        public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
            builder.on(FencedCodeBlock.class, (visitor, fencedCodeBlock) -> {
                // We actually won't be applying code spans here, as our custom view will
                // draw background and apply mono typeface
                // 
                // NB the `trim` operation on literal (as code will have a new line at the end)
                final CharSequence code = visitor.configuration().syntaxHighlight().highlight(fencedCodeBlock.getInfo(), fencedCodeBlock.getLiteral().trim());
                visitor.builder().append(code);
            });
        }

        @Override
        public void configureParser(@NonNull Parser.Builder builder) {
            super.configureParser(builder);
            builder.postProcessor(new PostProcessor() {

                @Override
                public Node process(Node node) {
                    Visitor t = new AbstractVisitor() {

                        @Override
                        public void visit(HtmlBlock htmlBlock) {
                            String literal = htmlBlock.getLiteral();
                            if (literal.startsWith("<!--")) {
                                htmlBlock.unlink();
                            } else {
                                super.visit(htmlBlock);
                            }
                        }
                    };
                    node.accept(t);
                    return node;
                }
            });
        }
    }).usePlugin(GlideImagesPlugin.create(new GifAwareGlideStore(context))).usePlugin(new SpanLinkPlugin(baseUrl)).usePlugin(new AbstractMarkwonPlugin() {

        @Override
        public void configure(@NonNull Registry registry) {
            registry.require(HtmlPlugin.class, htmlPlugin -> htmlPlugin.addHandler(new AlignHandler()));
        }
    }).usePlugin(TableEntryPlugin.create(TablePlugin.create(context))).usePlugin(SyntaxHighlightPlugin.create(prism4j, Prism4jThemeDefault.create())).usePlugin(new AsyncDrawableSchedulerPlugin()).build();
}
Also used : HtmlBlock(org.commonmark.node.HtmlBlock) Context(android.content.Context) StrikethroughPlugin(io.noties.markwon.ext.strikethrough.StrikethroughPlugin) MarkwonVisitor(io.noties.markwon.MarkwonVisitor) NonNull(androidx.annotation.NonNull) Prism4jThemeDefault(io.noties.markwon.syntax.Prism4jThemeDefault) Markwon(io.noties.markwon.Markwon) SyntaxHighlightPlugin(io.noties.markwon.syntax.SyntaxHighlightPlugin) Prism4j(io.noties.prism4j.Prism4j) Visitor(org.commonmark.node.Visitor) TableEntryPlugin(io.noties.markwon.recycler.table.TableEntryPlugin) TaskListPlugin(io.noties.markwon.ext.tasklist.TaskListPlugin) FencedCodeBlock(org.commonmark.node.FencedCodeBlock) Parser(org.commonmark.parser.Parser) TablePlugin(io.noties.markwon.ext.tables.TablePlugin) AbstractMarkwonPlugin(io.noties.markwon.AbstractMarkwonPlugin) PrismBundle(io.noties.prism4j.annotations.PrismBundle) Node(org.commonmark.node.Node) HtmlPlugin(io.noties.markwon.html.HtmlPlugin) AbstractVisitor(org.commonmark.node.AbstractVisitor) PostProcessor(org.commonmark.parser.PostProcessor) GlideImagesPlugin(io.noties.markwon.image.glide.GlideImagesPlugin) AbstractVisitor(org.commonmark.node.AbstractVisitor) MarkwonVisitor(io.noties.markwon.MarkwonVisitor) Visitor(org.commonmark.node.Visitor) AbstractVisitor(org.commonmark.node.AbstractVisitor) Node(org.commonmark.node.Node) HtmlPlugin(io.noties.markwon.html.HtmlPlugin) HtmlBlock(org.commonmark.node.HtmlBlock) Prism4j(io.noties.prism4j.Prism4j) NonNull(androidx.annotation.NonNull) AbstractMarkwonPlugin(io.noties.markwon.AbstractMarkwonPlugin) PostProcessor(org.commonmark.parser.PostProcessor)

Aggregations

Context (android.content.Context)1 NonNull (androidx.annotation.NonNull)1 AbstractMarkwonPlugin (io.noties.markwon.AbstractMarkwonPlugin)1 Markwon (io.noties.markwon.Markwon)1 MarkwonVisitor (io.noties.markwon.MarkwonVisitor)1 StrikethroughPlugin (io.noties.markwon.ext.strikethrough.StrikethroughPlugin)1 TablePlugin (io.noties.markwon.ext.tables.TablePlugin)1 TaskListPlugin (io.noties.markwon.ext.tasklist.TaskListPlugin)1 HtmlPlugin (io.noties.markwon.html.HtmlPlugin)1 GlideImagesPlugin (io.noties.markwon.image.glide.GlideImagesPlugin)1 TableEntryPlugin (io.noties.markwon.recycler.table.TableEntryPlugin)1 Prism4jThemeDefault (io.noties.markwon.syntax.Prism4jThemeDefault)1 SyntaxHighlightPlugin (io.noties.markwon.syntax.SyntaxHighlightPlugin)1 Prism4j (io.noties.prism4j.Prism4j)1 PrismBundle (io.noties.prism4j.annotations.PrismBundle)1 AbstractVisitor (org.commonmark.node.AbstractVisitor)1 FencedCodeBlock (org.commonmark.node.FencedCodeBlock)1 HtmlBlock (org.commonmark.node.HtmlBlock)1 Node (org.commonmark.node.Node)1 Visitor (org.commonmark.node.Visitor)1